From efd00488f8feb9407f97c630ff2be010aa144ebc Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 10 Mar 2024 21:43:15 -0400 Subject: [PATCH 01/94] working on multiproduct --- docs/globals.inc | 1 + src/stockpyl/datasets/stockpyl_instances.json | 8423 ++++++++++++++++- src/stockpyl/helpers.py | 81 +- src/stockpyl/instances.py | 5 + src/stockpyl/policy.py | 56 +- src/stockpyl/sim.py | 1646 ++-- src/stockpyl/supply_chain_network.py | 2346 ++--- src/stockpyl/supply_chain_node.py | 3191 ++++--- src/stockpyl/supply_chain_product.py | 514 + .../multi_product_instance.json | 1 + tests/old_test_demand_source.py | 486 - tests/settings.py | 2 +- tests/test_helpers.py | 199 +- tests/test_ss.py | 1 - tests/test_supply_chain_node.py | 244 + tests/test_supply_chain_product.py | 383 + 16 files changed, 13675 insertions(+), 3904 deletions(-) create mode 100644 src/stockpyl/supply_chain_product.py create mode 100644 tests/additional_files/multi_product_instance.json delete mode 100644 tests/old_test_demand_source.py create mode 100644 tests/test_supply_chain_product.py diff --git a/docs/globals.inc b/docs/globals.inc index 5182c3d..92c5e44 100644 --- a/docs/globals.inc +++ b/docs/globals.inc @@ -30,6 +30,7 @@ .. |class_network| replace:: :class:`~stockpyl.supply_chain_network.SupplyChainNetwork` .. |class_node| replace:: :class:`~stockpyl.supply_chain_node.SupplyChainNode` +.. |class_product| replace:: :class:`~stockpyl.supply_chain_node.SupplyChainProduct` .. |class_state_vars| replace:: :class:`~stockpyl.supply_chain_network.NodeStateVars` .. |class_demand_source| replace:: :class:`~stockpyl.demand_source.DemandSource` .. |class_disruption_process| replace:: :class:`~stockpyl.disruption_process.DisruptionProcess` diff --git a/src/stockpyl/datasets/stockpyl_instances.json b/src/stockpyl/datasets/stockpyl_instances.json index ed697aa..9048386 100644 --- a/src/stockpyl/datasets/stockpyl_instances.json +++ b/src/stockpyl/datasets/stockpyl_instances.json @@ -1 +1,8422 @@ -{"_id": "", "instances": [{"name": "example_3_1", "description": "Example 3.1 (EOQ)", "data": {"fixed_cost": 8, "holding_cost": 0.225, "demand_rate": 1300}, "type": "dict"}, {"name": "problem_3_1", "description": "Problem 3.1 (EOQ)", "data": {"fixed_cost": 2250, "holding_cost": 275, "demand_rate": 182500}, "type": "dict"}, {"name": "example_3_8", "description": "Example 3.8 (EOQB)", "data": {"fixed_cost": 8, "holding_cost": 0.225, "stockout_cost": 5, "demand_rate": 1300}, "type": "dict"}, {"name": "problem_3_2b", "description": "Problem 3.2(b) (EOQB)", "data": {"fixed_cost": 40, "holding_cost": 40.05, "stockout_cost": 60, "demand_rate": 2080}, "type": "dict"}, {"name": "problem_3_22", "description": "Problem 3.22 (EPQ)", "data": {"fixed_cost": 4, "holding_cost": 0.08, "demand_rate": 80, "production_rate": 110}, "type": "dict"}, {"name": "example_3_9", "description": "Example 3.9 (Wagner-Whitin)", "data": {"num_periods": 4, "holding_cost": 2, "fixed_cost": 500, "demand": [90, 120, 80, 70]}, "type": "dict"}, {"name": "problem_3_27", "description": "Problem 3.27 (Wagner-Whitin)", "data": {"num_periods": 4, "holding_cost": 0.8, "fixed_cost": 120, "demand": [150, 100, 80, 200]}, "type": "dict"}, {"name": "problem_3_29", "description": "Problem 3.29 (Wagner-Whitin)", "data": {"num_periods": 5, "holding_cost": 0.1, "fixed_cost": 100, "demand": [730, 580, 445, 650, 880]}, "type": "dict"}, {"name": "scmo_ww_hw_c", "description": "SCMO (Wagner-Whitin with nonstationary purchase cost)", "data": {"num_periods": 5, "holding_cost": 0.1, "fixed_cost": 100, "demand": [400, 500, 500, 1100, 900], "purchase_cost": [3, 1, 4, 6, 6]}, "type": "dict"}, {"name": "scmo_jrp_ex", "description": "SCMO (JRP example)", "data": {"shared_fixed_cost": 600, "individual_fixed_costs": [120, 840, 300], "holding_costs": [160, 20, 50], "demand_rates": [1, 1, 1]}, "type": "dict"}, {"name": "spp_jrp", "description": "Numerical JRP example on p. 428 of Silver, Pyke, and Peterson (1998)", "data": {"shared_fixed_cost": 40, "individual_fixed_costs": [15, 15, 15, 15], "holding_costs": [0.24, 0.24, 0.24, 0.24], "demand_rates": [86000, 12500, 1400, 3000]}, "type": "dict"}, {"name": "silver_jrp", "description": "Numerical JRP example in Silver (1976)", "data": {"shared_fixed_cost": 10, "individual_fixed_costs": [1.87, 5.27, 7.94, 8.19, 8.87], "holding_costs": [0.2, 0.2, 0.2, 0.2, 0.2], "demand_rates": [1736, 656, 558, 170, 142]}, "type": "dict"}, {"name": "scmo_jrp_hw_1", "description": "SCMO (JRP problem 1)", "data": {"shared_fixed_cost": 20000, "individual_fixed_costs": [36000, 46000, 34000, 38000], "holding_costs": [1000, 900, 1200, 1000], "demand_rates": [1780, 445, 920, 175]}, "type": "dict"}, {"name": "scmo_jrp_hw_2", "description": "SCMO (JRP problem 2)", "data": {"shared_fixed_cost": 1500, "individual_fixed_costs": [4000, 1000, 2000], "holding_costs": [300, 200, 200], "demand_rates": [9100, 83200, 20800]}, "type": "dict"}, {"name": "scmo_jrp_hw_3", "description": "SCMO (JRP problem 3)", "data": {"shared_fixed_cost": 180, "individual_fixed_costs": [60, 100, 180, 115, 135], "holding_costs": [5.32, 3.9200000000000004, 4.760000000000001, 3.9200000000000004, 3.3600000000000003], "demand_rates": [6200, 1300, 400, 4400, 1800]}, "type": "dict"}, {"name": "example_4_1", "description": "Example 4.1 (newsvendor)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "example_4_1_network", "description": "Example 4.1 (newsvendor) (as SupplyChainNetwork object)", "data": {"nodes": [{"index": 0, "name": null, "network": null, "_predecessors": [null], "_successors": [null], "local_holding_cost": 0.18, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0.7, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 50, "standard_deviation": 8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "base_stock_level": 56.6, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_4_2", "description": "Example 4.2 (newsvendor explicit)", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "example_4_3", "description": "Example 4.3 (newsvendor) (= Example 4.1)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "problem_4_1", "description": "Problem 4.1 (newsvendor)", "data": {"holding_cost": 43, "stockout_cost": 79, "demand_mean": 900, "demand_sd": 60}, "type": "dict"}, {"name": "problem_4_3b", "description": "Problem 4.3(b) (newsvendor explicit)", "data": {"revenue": 7, "purchase_cost": 2.5, "salvage_value": 1.5, "demand_mean": 50, "demand_sd": 10}, "type": "dict"}, {"name": "example_4_4", "description": "Example 4.4 (base-stock optimization)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8, "lead_time": 4}, "type": "dict"}, {"name": "example_4_7", "description": "Example 4.7 ((s,S) with Poisson demand)", "data": {"holding_cost": 1, "stockout_cost": 4, "fixed_cost": 5, "demand_mean": 6}, "type": "dict"}, {"name": "problem_4_7b", "description": "Problem 4.7(b) (newsvendor with discrete demand)", "data": {"holding_cost": 500000, "stockout_cost": 1000000, "demand_pmf": {"1": 0.25, "2": 0.05, "3": 0.1, "4": 0.2, "5": 0.15, "6": 0.1, "7": 0.1, "8": 0.05}}, "type": "dict"}, {"name": "problem_4_8a", "description": "Problem 4.8(a) (newsvendor with Poisson demand)", "data": {"holding_cost": 200, "stockout_cost": 270, "demand_mean": 18}, "type": "dict"}, {"name": "problem_4_8b", "description": "Problem 4.8(b) (newsvendor with lognormal demand)", "data": {"holding_cost": 1, "stockout_cost": 0.1765, "mu": 6, "sigma": 0.3}, "type": "dict"}, {"name": "problem_4_31", "description": "Problem 4.31 ((s,S) with Poisson demand)", "data": {"holding_cost": 40, "stockout_cost": 125, "fixed_cost": 150, "demand_mean": 4}, "type": "dict"}, {"name": "example_4_8", "description": "Example 4.8 ((s,S))", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "fixed_cost": 2.5, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "problem_4_32", "description": "Problem 4.32 ((s,S))", "data": {"holding_cost": 2, "stockout_cost": 36, "fixed_cost": 60, "demand_mean": 190, "demand_sd": 48}, "type": "dict"}, {"name": "problem_4_29", "description": "Problem 4.29 (finite-horizon)", "data": {"num_periods": 10, "holding_cost": 1, "stockout_cost": 25, "terminal_holding_cost": 1, "terminal_stockout_cost": 25, "purchase_cost": 1, "fixed_cost": 0, "demand_mean": 18, "demand_sd": 3, "discount_factor": 0.98, "initial_inventory_level": 0}, "type": "dict"}, {"name": "problem_4_30", "description": "Problem 4.30 (finite-horizon)", "data": {"num_periods": 10, "holding_cost": 1, "stockout_cost": 25, "terminal_holding_cost": 1, "terminal_stockout_cost": 25, "purchase_cost": 1, "fixed_cost": 40, "demand_mean": 18, "demand_sd": 3, "discount_factor": 0.98, "initial_inventory_level": 0}, "type": "dict"}, {"name": "example_5_1", "description": "Example 5.1 ((r,Q))", "data": {"holding_cost": 0.225, "stockout_cost": 7.5, "fixed_cost": 8, "demand_mean": 1300, "demand_sd": 150, "lead_time": 0.08333333333333333}, "type": "dict"}, {"name": "problem_5_1", "description": "Problem 5.1 ((r,Q))", "data": {"holding_cost": 3.1, "stockout_cost": 45, "fixed_cost": 50, "demand_mean": 800, "demand_sd": 40, "lead_time": 0.010958904109589041}, "type": "dict"}, {"name": "problem_5_2", "description": "Problem 5.2 ((r,Q) with Poisson demand)", "data": {"holding_cost": 4, "stockout_cost": 28, "fixed_cost": 4, "demand_mean": 12, "lead_time": 0.5}, "type": "dict"}, {"name": "problem_5_3", "description": "Problem 5.3 ((r,Q))", "data": {"holding_cost": 0.21428571428571427, "stockout_cost": 40, "fixed_cost": 85, "demand_mean": 192, "demand_sd": 17.4, "lead_time": 3}, "type": "dict"}, {"name": "example_5_8", "description": "Example 5.8 ((r,Q) with Poisson demand))", "data": {"holding_cost": 20, "stockout_cost": 150, "fixed_cost": 100, "demand_mean": 1.5, "lead_time": 2}, "type": "dict"}, {"name": "example_6_1", "description": "Example 6.1 (serial SSM)", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_1", "description": "Problem 6.1 (serial SSM)", "data": {"nodes": [{"index": 2, "name": null, "network": null, "_predecessors": [null], "_successors": [1], "local_holding_cost": 1, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 94, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 2, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 15, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 100, "standard_deviation": 15, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 100, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2a", "description": "Problem 6.2(a) (serial SSM)", "data": {"nodes": [{"index": 5, "name": null, "network": null, "_predecessors": [null], "_successors": [4], "local_holding_cost": 7, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [5], "_successors": [3], "local_holding_cost": 5, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": "N", "mean": 64, "standard_deviation": 8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2b", "description": "Problem 6.2(a) (serial SSM with Poisson demand)", "data": {"nodes": [{"index": 5, "name": null, "network": null, "_predecessors": [null], "_successors": [4], "local_holding_cost": 7, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [5], "_successors": [3], "local_holding_cost": 5, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": "P", "mean": 64, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2a_adj", "description": "Problem 6.2(a) (serial SSM), adjusted for periodic review", "data": {"nodes": [{"index": 5, "name": null, "network": null, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 32.0, "standard_deviation": 5.65685424949238, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2b_adj", "description": "Problem 6.2(b) (serial SSM with Poisson demand), adjusted for periodic review", "data": {"nodes": [{"index": 5, "name": null, "network": null, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_16", "description": "Problem 6.16 (serial SSM)", "data": {"nodes": [{"index": 2, "name": null, "network": null, "_predecessors": [null], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": 20, "initial_orders": 20, "initial_shipments": 20, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 57.7257, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 8, "order_lead_time": null, "demand_source": {"type": "N", "mean": 20, "standard_deviation": 4, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": 20, "initial_orders": 20, "initial_shipments": 20, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 171.1912, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_1", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 1", "data": {"nodes": [{"index": 4, "name": null, "network": null, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 9, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_9", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 9", "data": {"nodes": [{"index": 4, "name": null, "network": null, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 9, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_17", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 17", "data": {"nodes": [{"index": 4, "name": null, "network": null, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 99, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_25", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 25", "data": {"nodes": [{"index": 4, "name": null, "network": null, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 99, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "assembly_3_stage", "description": "3-stage assembly system (2 warehouses, 1 retailer)", "data": {"nodes": [{"index": 1, "name": null, "network": null, "_predecessors": [null], "_successors": [0], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": 13, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 13, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "_predecessors": [1, 2], "_successors": [null], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": true}, "initial_inventory_level": 7, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "base_stock_level": 7, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [null], "_successors": [0], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": 11, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 11, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rosling_figure_1", "description": "Assembly system from Figure 1 in Rosling (1989)", "data": {"nodes": [{"index": 1, "name": null, "network": null, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 7, "name": null, "network": null, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1a", "description": "Distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"index": 0, "name": null, "network": null, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": 0.3333333333333333, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [0], "_successors": [3, 4], "local_holding_cost": 0.6666666666666666, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [0], "_successors": [5, 6], "local_holding_cost": 0.6666666666666666, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [1], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [1], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 6, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1b", "description": "Distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"index": 0, "name": null, "network": null, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [0], "_successors": [3, 4, 5, 6, 7], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [0], "_successors": [8, 9, 10], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 6, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 7, "name": null, "network": null, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 7, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 8, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 8, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 9, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 9, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 10, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 10, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1c", "description": "Distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"index": 0, "name": null, "network": null, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [0], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [0], "_successors": [3, 4, 5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_6_3", "description": "Example 6.3 (serial GSM)", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": 0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 1, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": 0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 0, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 1, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_7", "description": "Problem 6.7 (serial GSM)", "data": {"nodes": [{"index": 3, "name": "Forming", "network": null, "_predecessors": [], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 1, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": "Firing", "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": "Glazing", "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 4, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 45, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 0, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_8", "description": "Problem 6.8 (serial GSM)", "data": {"nodes": [{"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4.56, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 10, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 5.73, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 15.8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.93, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 15, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "_predecessors": [6], "_successors": [4], "local_holding_cost": 2.47, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 8, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "_predecessors": [7], "_successors": [5], "local_holding_cost": 2.37, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 7, "name": null, "network": null, "_predecessors": [8], "_successors": [6], "local_holding_cost": 1.15, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 9, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 8, "name": null, "network": null, "_predecessors": [9], "_successors": [7], "local_holding_cost": 1.1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 9, "name": null, "network": null, "_predecessors": [10], "_successors": [8], "local_holding_cost": 0.98, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 10, "name": null, "network": null, "_predecessors": [null], "_successors": [9], "local_holding_cost": 0.87, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 5, "external_inbound_cst": 7, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_9", "description": "Problem 6.9 (tree GSM)", "data": {"nodes": [{"index": 1, "name": null, "network": null, "_predecessors": [3], "_successors": [null], "local_holding_cost": 0.12054794520547946, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 22.0, "standard_deviation": 4.1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 7, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [null], "local_holding_cost": 0.07671232876712329, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 15.3, "standard_deviation": 6.2, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 7, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [4, 5], "_successors": [1, 2], "local_holding_cost": 0.049315068493150684, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 21, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [], "_successors": [3], "local_holding_cost": 0.0027397260273972603, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "_predecessors": [6], "_successors": [3], "local_holding_cost": 0.010958904109589041, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 8, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.00410958904109589, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_6_5", "description": "Example 6.5 (tree GSM)", "data": {"nodes": [{"index": 1, "name": null, "network": null, "_predecessors": [null], "_successors": [3], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 2, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [1], "_successors": [2, 4], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [null], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 0, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [3], "_successors": [null], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 1, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "figure_6_12", "description": "Figure 6.12 (tree GSM)", "data": {"nodes": [{"index": 1, "name": null, "network": null, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [1], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_predecessors": [1], "_successors": [5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "_predecessors": [3, 4], "_successors": [6, 7], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_predecessors": [null], "_successors": [5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "_predecessors": [5], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 7, "name": null, "network": null, "_predecessors": [5], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "figure_6_14", "description": "Figure 6.14 (tree GSM)", "data": {"nodes": [{"index": 1, "name": "Raw_Material", "network": null, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": "Process_Wafers", "network": null, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": "Package_Test_Wafers", "network": null, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": "Imager_Base", "network": null, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": "Imager_Assembly", "network": null, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 7, "name": "Camera", "network": null, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 8, "name": "Circuit_Board", "network": null, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 9, "name": "Other_Parts", "network": null, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 10, "name": "Build_Test_Pack", "network": null, "_predecessors": [7, 6, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_9_1", "description": "Example 9.1 (EOQD)", "data": {"holding_cost": 0.225, "stockout_cost": 5, "fixed_cost": 8, "demand_rate": 1300, "disruption_rate": 1.5, "recovery_rate": 14}, "type": "dict"}, {"name": "problem_9_8", "description": "Problem 9.8 (EOQD)", "data": {"holding_cost": 4, "stockout_cost": 22, "fixed_cost": 35, "demand_rate": 30, "disruption_rate": 1, "recovery_rate": 12}, "type": "dict"}, {"name": "example_9_3", "description": "Example 9.3 (base-stock with disruptions)", "data": {"holding_cost": 0.25, "stockout_cost": 3, "demand": 2000, "disruption_prob": 0.04, "recovery_prob": 0.25}, "type": "dict"}, {"name": "example_9_4", "description": "Example 9.4 (EOQ with additive yield uncertainty)", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": -15000, "yield_sd": 9000}, "type": "dict"}, {"name": "example_9_5", "description": "Example 9.5 (EOQ with multiplicative yield uncertainty)", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}, {"name": "problem_9_4a", "description": "Problem 9.4(a) (EOQ with additive yield uncertainty)", "data": {"holding_cost": 275, "fixed_cost": 2250, "demand_rate": 182500, "yield_mean": -50.0, "yield_sd": 0.02}, "type": "dict"}, {"name": "problem_9_4b", "description": "Problem 9.4(b) (EOQ with multiplicative yield uncertainty)", "data": {"holding_cost": 275, "fixed_cost": 2250, "demand_rate": 182500, "yield_mean": 0.9, "yield_sd": 0.05773502691896258}, "type": "dict"}, {"name": "example_9_6", "description": "Example 9.6 (newsvendor with additive yield uncertainty)", "data": {"holding_cost": 15000000, "stockout_cost": 75000000, "demand": 1.5, "yield_lo": -0.5, "yield_hi": 0.5}, "type": "dict"}, {"name": "problem_9_5", "description": "Problem 9.5 (newsvendor with additive yield uncertainty)", "data": {"holding_cost": 150, "stockout_cost": 1200, "demand": 25, "yield_lo": -5, "yield_hi": 0}, "type": "dict"}], "last_updated": "2022-08-20 21:06:36.134676"} \ No newline at end of file +{ + "_id": "", + "instances": [ + { + "name": "example_3_1", + "description": "Example 3.1 (EOQ)", + "data": { + "fixed_cost": 8, + "holding_cost": 0.225, + "demand_rate": 1300 + }, + "type": "dict" + }, + { + "name": "problem_3_1", + "description": "Problem 3.1 (EOQ)", + "data": { + "fixed_cost": 2250, + "holding_cost": 275, + "demand_rate": 182500 + }, + "type": "dict" + }, + { + "name": "example_3_8", + "description": "Example 3.8 (EOQB)", + "data": { + "fixed_cost": 8, + "holding_cost": 0.225, + "stockout_cost": 5, + "demand_rate": 1300 + }, + "type": "dict" + }, + { + "name": "problem_3_2b", + "description": "Problem 3.2(b) (EOQB)", + "data": { + "fixed_cost": 40, + "holding_cost": 40.05, + "stockout_cost": 60, + "demand_rate": 2080 + }, + "type": "dict" + }, + { + "name": "problem_3_22", + "description": "Problem 3.22 (EPQ)", + "data": { + "fixed_cost": 4, + "holding_cost": 0.08, + "demand_rate": 80, + "production_rate": 110 + }, + "type": "dict" + }, + { + "name": "example_3_9", + "description": "Example 3.9 (Wagner-Whitin)", + "data": { + "num_periods": 4, + "holding_cost": 2, + "fixed_cost": 500, + "demand": [ + 90, + 120, + 80, + 70 + ] + }, + "type": "dict" + }, + { + "name": "problem_3_27", + "description": "Problem 3.27 (Wagner-Whitin)", + "data": { + "num_periods": 4, + "holding_cost": 0.8, + "fixed_cost": 120, + "demand": [ + 150, + 100, + 80, + 200 + ] + }, + "type": "dict" + }, + { + "name": "problem_3_29", + "description": "Problem 3.29 (Wagner-Whitin)", + "data": { + "num_periods": 5, + "holding_cost": 0.1, + "fixed_cost": 100, + "demand": [ + 730, + 580, + 445, + 650, + 880 + ] + }, + "type": "dict" + }, + { + "name": "scmo_ww_hw_c", + "description": "SCMO (Wagner-Whitin with nonstationary purchase cost)", + "data": { + "num_periods": 5, + "holding_cost": 0.1, + "fixed_cost": 100, + "demand": [ + 400, + 500, + 500, + 1100, + 900 + ], + "purchase_cost": [ + 3, + 1, + 4, + 6, + 6 + ] + }, + "type": "dict" + }, + { + "name": "scmo_jrp_ex", + "description": "SCMO (JRP example)", + "data": { + "shared_fixed_cost": 600, + "individual_fixed_costs": [ + 120, + 840, + 300 + ], + "holding_costs": [ + 160, + 20, + 50 + ], + "demand_rates": [ + 1, + 1, + 1 + ] + }, + "type": "dict" + }, + { + "name": "spp_jrp", + "description": "Numerical JRP example on p. 428 of Silver, Pyke, and Peterson (1998)", + "data": { + "shared_fixed_cost": 40, + "individual_fixed_costs": [ + 15, + 15, + 15, + 15 + ], + "holding_costs": [ + 0.24, + 0.24, + 0.24, + 0.24 + ], + "demand_rates": [ + 86000, + 12500, + 1400, + 3000 + ] + }, + "type": "dict" + }, + { + "name": "silver_jrp", + "description": "Numerical JRP example in Silver (1976)", + "data": { + "shared_fixed_cost": 10, + "individual_fixed_costs": [ + 1.87, + 5.27, + 7.94, + 8.19, + 8.87 + ], + "holding_costs": [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + "demand_rates": [ + 1736, + 656, + 558, + 170, + 142 + ] + }, + "type": "dict" + }, + { + "name": "scmo_jrp_hw_1", + "description": "SCMO (JRP problem 1)", + "data": { + "shared_fixed_cost": 20000, + "individual_fixed_costs": [ + 36000, + 46000, + 34000, + 38000 + ], + "holding_costs": [ + 1000, + 900, + 1200, + 1000 + ], + "demand_rates": [ + 1780, + 445, + 920, + 175 + ] + }, + "type": "dict" + }, + { + "name": "scmo_jrp_hw_2", + "description": "SCMO (JRP problem 2)", + "data": { + "shared_fixed_cost": 1500, + "individual_fixed_costs": [ + 4000, + 1000, + 2000 + ], + "holding_costs": [ + 300, + 200, + 200 + ], + "demand_rates": [ + 9100, + 83200, + 20800 + ] + }, + "type": "dict" + }, + { + "name": "scmo_jrp_hw_3", + "description": "SCMO (JRP problem 3)", + "data": { + "shared_fixed_cost": 180, + "individual_fixed_costs": [ + 60, + 100, + 180, + 115, + 135 + ], + "holding_costs": [ + 5.32, + 3.9200000000000004, + 4.760000000000001, + 3.9200000000000004, + 3.3600000000000003 + ], + "demand_rates": [ + 6200, + 1300, + 400, + 4400, + 1800 + ] + }, + "type": "dict" + }, + { + "name": "example_4_1", + "description": "Example 4.1 (newsvendor)", + "data": { + "holding_cost": 0.18, + "stockout_cost": 0.7, + "demand_mean": 50, + "demand_sd": 8 + }, + "type": "dict" + }, + { + "name": "example_4_1_network", + "description": "Example 4.1 (newsvendor) (as SupplyChainNetwork object)", + "data": { + "nodes": [ + { + "index": 0, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + null + ], + "local_holding_cost": 0.18, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0.7, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 50, + "standard_deviation": 8, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "base_stock_level": 56.6, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "example_4_2", + "description": "Example 4.2 (newsvendor explicit)", + "data": { + "revenue": 1, + "purchase_cost": 0.3, + "salvage_value": 0.12, + "demand_mean": 50, + "demand_sd": 8 + }, + "type": "dict" + }, + { + "name": "example_4_3", + "description": "Example 4.3 (newsvendor) (= Example 4.1)", + "data": { + "holding_cost": 0.18, + "stockout_cost": 0.7, + "demand_mean": 50, + "demand_sd": 8 + }, + "type": "dict" + }, + { + "name": "problem_4_1", + "description": "Problem 4.1 (newsvendor)", + "data": { + "holding_cost": 43, + "stockout_cost": 79, + "demand_mean": 900, + "demand_sd": 60 + }, + "type": "dict" + }, + { + "name": "problem_4_3b", + "description": "Problem 4.3(b) (newsvendor explicit)", + "data": { + "revenue": 7, + "purchase_cost": 2.5, + "salvage_value": 1.5, + "demand_mean": 50, + "demand_sd": 10 + }, + "type": "dict" + }, + { + "name": "example_4_4", + "description": "Example 4.4 (base-stock optimization)", + "data": { + "holding_cost": 0.18, + "stockout_cost": 0.7, + "demand_mean": 50, + "demand_sd": 8, + "lead_time": 4 + }, + "type": "dict" + }, + { + "name": "example_4_7", + "description": "Example 4.7 ((s,S) with Poisson demand)", + "data": { + "holding_cost": 1, + "stockout_cost": 4, + "fixed_cost": 5, + "demand_mean": 6 + }, + "type": "dict" + }, + { + "name": "problem_4_7b", + "description": "Problem 4.7(b) (newsvendor with discrete demand)", + "data": { + "holding_cost": 500000, + "stockout_cost": 1000000, + "demand_pmf": { + "1": 0.25, + "2": 0.05, + "3": 0.1, + "4": 0.2, + "5": 0.15, + "6": 0.1, + "7": 0.1, + "8": 0.05 + } + }, + "type": "dict" + }, + { + "name": "problem_4_8a", + "description": "Problem 4.8(a) (newsvendor with Poisson demand)", + "data": { + "holding_cost": 200, + "stockout_cost": 270, + "demand_mean": 18 + }, + "type": "dict" + }, + { + "name": "problem_4_8b", + "description": "Problem 4.8(b) (newsvendor with lognormal demand)", + "data": { + "holding_cost": 1, + "stockout_cost": 0.1765, + "mu": 6, + "sigma": 0.3 + }, + "type": "dict" + }, + { + "name": "problem_4_31", + "description": "Problem 4.31 ((s,S) with Poisson demand)", + "data": { + "holding_cost": 40, + "stockout_cost": 125, + "fixed_cost": 150, + "demand_mean": 4 + }, + "type": "dict" + }, + { + "name": "example_4_8", + "description": "Example 4.8 ((s,S))", + "data": { + "holding_cost": 0.18, + "stockout_cost": 0.7, + "fixed_cost": 2.5, + "demand_mean": 50, + "demand_sd": 8 + }, + "type": "dict" + }, + { + "name": "problem_4_32", + "description": "Problem 4.32 ((s,S))", + "data": { + "holding_cost": 2, + "stockout_cost": 36, + "fixed_cost": 60, + "demand_mean": 190, + "demand_sd": 48 + }, + "type": "dict" + }, + { + "name": "problem_4_29", + "description": "Problem 4.29 (finite-horizon)", + "data": { + "num_periods": 10, + "holding_cost": 1, + "stockout_cost": 25, + "terminal_holding_cost": 1, + "terminal_stockout_cost": 25, + "purchase_cost": 1, + "fixed_cost": 0, + "demand_mean": 18, + "demand_sd": 3, + "discount_factor": 0.98, + "initial_inventory_level": 0 + }, + "type": "dict" + }, + { + "name": "problem_4_30", + "description": "Problem 4.30 (finite-horizon)", + "data": { + "num_periods": 10, + "holding_cost": 1, + "stockout_cost": 25, + "terminal_holding_cost": 1, + "terminal_stockout_cost": 25, + "purchase_cost": 1, + "fixed_cost": 40, + "demand_mean": 18, + "demand_sd": 3, + "discount_factor": 0.98, + "initial_inventory_level": 0 + }, + "type": "dict" + }, + { + "name": "example_5_1", + "description": "Example 5.1 ((r,Q))", + "data": { + "holding_cost": 0.225, + "stockout_cost": 7.5, + "fixed_cost": 8, + "demand_mean": 1300, + "demand_sd": 150, + "lead_time": 0.08333333333333333 + }, + "type": "dict" + }, + { + "name": "problem_5_1", + "description": "Problem 5.1 ((r,Q))", + "data": { + "holding_cost": 3.1, + "stockout_cost": 45, + "fixed_cost": 50, + "demand_mean": 800, + "demand_sd": 40, + "lead_time": 0.010958904109589041 + }, + "type": "dict" + }, + { + "name": "problem_5_2", + "description": "Problem 5.2 ((r,Q) with Poisson demand)", + "data": { + "holding_cost": 4, + "stockout_cost": 28, + "fixed_cost": 4, + "demand_mean": 12, + "lead_time": 0.5 + }, + "type": "dict" + }, + { + "name": "problem_5_3", + "description": "Problem 5.3 ((r,Q))", + "data": { + "holding_cost": 0.21428571428571427, + "stockout_cost": 40, + "fixed_cost": 85, + "demand_mean": 192, + "demand_sd": 17.4, + "lead_time": 3 + }, + "type": "dict" + }, + { + "name": "example_5_8", + "description": "Example 5.8 ((r,Q) with Poisson demand))", + "data": { + "holding_cost": 20, + "stockout_cost": 150, + "fixed_cost": 100, + "demand_mean": 1.5, + "lead_time": 2 + }, + "type": "dict" + }, + { + "name": "example_6_1", + "description": "Example 6.1 (serial SSM)", + "data": { + "nodes": [ + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_1", + "description": "Problem 6.1 (serial SSM)", + "data": { + "nodes": [ + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 1 + ], + "local_holding_cost": 1, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 94, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 2, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 15, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 100, + "standard_deviation": 15, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 100, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_2a", + "description": "Problem 6.2(a) (serial SSM)", + "data": { + "nodes": [ + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": 7, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "base_stock_level": 32.93, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 5, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": 33.3, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 3, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": 35.14, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 33.87, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 24, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 64, + "standard_deviation": 8, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 40.59, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_2b", + "description": "Problem 6.2(a) (serial SSM with Poisson demand)", + "data": { + "nodes": [ + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": 7, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "base_stock_level": 32.93, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 5, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": 33.3, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 3, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": 35.14, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 33.87, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 24, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 64, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 40.59, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_2a_adj", + "description": "Problem 6.2(a) (serial SSM), adjusted for periodic review", + "data": { + "nodes": [ + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": 3.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "base_stock_level": 32.93, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 2.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": 33.3, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 1.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": 35.14, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 1.0, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 33.87, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 0.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 12.0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 32.0, + "standard_deviation": 5.65685424949238, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 40.59, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_2b_adj", + "description": "Problem 6.2(b) (serial SSM with Poisson demand), adjusted for periodic review", + "data": { + "nodes": [ + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": 3.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "base_stock_level": 32.93, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 2.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": 33.3, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 1.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": 35.14, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 1.0, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 33.87, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 0.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 12.0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 32.0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 40.59, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_16", + "description": "Problem 6.16 (serial SSM)", + "data": { + "nodes": [ + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 1 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 3, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": 20, + "initial_orders": 20, + "initial_shipments": 20, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 57.7257, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 24, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 8, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 20, + "standard_deviation": 4, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": 20, + "initial_orders": 20, + "initial_shipments": 20, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 171.1912, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_1", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 1", + "data": { + "nodes": [ + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 9, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_9", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 9", + "data": { + "nodes": [ + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 9, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_17", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 17", + "data": { + "nodes": [ + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 99, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_25", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 25", + "data": { + "nodes": [ + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 99, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "assembly_3_stage", + "description": "3-stage assembly system (2 warehouses, 1 retailer)", + "data": { + "nodes": [ + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 0 + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": 13, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 13, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 0, + "name": null, + "network": null, + "_predecessors": [ + 1, + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": true + }, + "initial_inventory_level": 7, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "base_stock_level": 7, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 0 + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": 11, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 11, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rosling_figure_1", + "description": "Assembly system from Figure 1 in Rosling (1989)", + "data": { + "nodes": [ + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2, + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "UD", + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": 0, + "hi": 10, + "round_to_int": null + }, + "initial_inventory_level": 8, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 1, + "base_stock_level": 8, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 5 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": 8, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 2, + "base_stock_level": 24, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 3, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": 24, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 3, + "base_stock_level": 40, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + 6, + 7 + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": 16, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 4, + "base_stock_level": 76, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 4, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": 32, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 5, + "base_stock_level": 62, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 6, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": 8, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 6, + "base_stock_level": 84, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 7, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": 16, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 7, + "base_stock_level": 92, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rong_atan_snyder_figure_1a", + "description": "Distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)", + "data": { + "nodes": [ + { + "index": 0, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": 0.3333333333333333, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 0 + ], + "_successors": [ + 3, + 4 + ], + "local_holding_cost": 0.6666666666666666, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 0 + ], + "_successors": [ + 5, + 6 + ], + "local_holding_cost": 0.6666666666666666, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 6, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 6, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rong_atan_snyder_figure_1b", + "description": "Distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)", + "data": { + "nodes": [ + { + "index": 0, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 0 + ], + "_successors": [ + 3, + 4, + 5, + 6, + 7 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 0 + ], + "_successors": [ + 8, + 9, + 10 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 6, + "name": null, + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 6, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 7, + "name": null, + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 7, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 8, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 8, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 9, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 9, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 10, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 10, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rong_atan_snyder_figure_1c", + "description": "Distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)", + "data": { + "nodes": [ + { + "index": 0, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 0 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 0 + ], + "_successors": [ + 3, + 4, + 5 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "example_6_3", + "description": "Example 6.3 (serial GSM)", + "data": { + "nodes": [ + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": 0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 1, + "external_inbound_cst": 1, + "external_outbound_cst": null, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": 0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 0, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": 1, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_7", + "description": "Problem 6.7 (serial GSM)", + "data": { + "nodes": [ + { + "index": 3, + "name": "Forming", + "network": null, + "_predecessors": [], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 1, + "external_inbound_cst": 1, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": "Firing", + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 3, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": "Glazing", + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 4, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 45, + "standard_deviation": 10, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": 0, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_8", + "description": "Problem 6.8 (serial GSM)", + "data": { + "nodes": [ + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4.56, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 10, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 5.73, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 15.8, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 5, + "external_inbound_cst": null, + "external_outbound_cst": 3, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 3.04, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 2.93, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 15, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + 6 + ], + "_successors": [ + 4 + ], + "local_holding_cost": 2.47, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 8, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 6, + "name": null, + "network": null, + "_predecessors": [ + 7 + ], + "_successors": [ + 5 + ], + "local_holding_cost": 2.37, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 5, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 7, + "name": null, + "network": null, + "_predecessors": [ + 8 + ], + "_successors": [ + 6 + ], + "local_holding_cost": 1.15, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 7, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 9, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 8, + "name": null, + "network": null, + "_predecessors": [ + 9 + ], + "_successors": [ + 7 + ], + "local_holding_cost": 1.1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 8, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 5, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 9, + "name": null, + "network": null, + "_predecessors": [ + 10 + ], + "_successors": [ + 8 + ], + "local_holding_cost": 0.98, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 9, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 10, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 9 + ], + "local_holding_cost": 0.87, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 10, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 5, + "external_inbound_cst": 7, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_9", + "description": "Problem 6.9 (tree GSM)", + "data": { + "nodes": [ + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": 0.12054794520547946, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 22.0, + "standard_deviation": 4.1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 7, + "external_inbound_cst": null, + "external_outbound_cst": 3, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": 0.07671232876712329, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 15.3, + "standard_deviation": 6.2, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 7, + "external_inbound_cst": null, + "external_outbound_cst": 3, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 4, + 5 + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": 0.049315068493150684, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 21, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [], + "_successors": [ + 3 + ], + "local_holding_cost": 0.0027397260273972603, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 3, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + 6 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 0.010958904109589041, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 8, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 6, + "name": null, + "network": null, + "_predecessors": [], + "_successors": [ + 5 + ], + "local_holding_cost": 0.00410958904109589, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "example_6_5", + "description": "Example 6.5 (tree GSM)", + "data": { + "nodes": [ + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 2, + "external_inbound_cst": 1, + "external_outbound_cst": null, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [ + 2, + 4 + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": 3, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": 0, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": 3, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": 1, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "figure_6_12", + "description": "Figure 6.12 (tree GSM)", + "data": { + "nodes": [ + { + "index": 1, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 2, + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [ + 5 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 5, + "name": null, + "network": null, + "_predecessors": [ + 3, + 4 + ], + "_successors": [ + 6, + 7 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": null, + "network": null, + "_predecessors": [ + null + ], + "_successors": [ + 5 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 6, + "name": null, + "network": null, + "_predecessors": [ + 5 + ], + "_successors": [], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 7, + "name": null, + "network": null, + "_predecessors": [ + 5 + ], + "_successors": [], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 7, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "figure_6_14", + "description": "Figure 6.14 (tree GSM)", + "data": { + "nodes": [ + { + "index": 1, + "name": "Raw_Material", + "network": null, + "_predecessors": [], + "_successors": [ + 2 + ], + "local_holding_cost": 0.01, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": "Process_Wafers", + "network": null, + "_predecessors": [ + 1 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 0.03, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 3, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": "Package_Test_Wafers", + "network": null, + "_predecessors": [ + 2 + ], + "_successors": [ + 5 + ], + "local_holding_cost": 0.04, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 4, + "name": "Imager_Base", + "network": null, + "_predecessors": [], + "_successors": [ + 5 + ], + "local_holding_cost": 0.06, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 4, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 5, + "name": "Imager_Assembly", + "network": null, + "_predecessors": [ + 3, + 4 + ], + "_successors": [ + 6 + ], + "local_holding_cost": 0.12, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 6, + "name": "Ship_to_Final_Assembly", + "network": null, + "_predecessors": [ + 5 + ], + "_successors": [ + 10 + ], + "local_holding_cost": 0.13, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 3, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 7, + "name": "Camera", + "network": null, + "_predecessors": [], + "_successors": [ + 10 + ], + "local_holding_cost": 0.2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 7, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 6, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 8, + "name": "Circuit_Board", + "network": null, + "_predecessors": [], + "_successors": [ + 10 + ], + "local_holding_cost": 0.08, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 8, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 4, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 9, + "name": "Other_Parts", + "network": null, + "_predecessors": [], + "_successors": [ + 10 + ], + "local_holding_cost": 0.04, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 9, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 3, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 10, + "name": "Build_Test_Pack", + "network": null, + "_predecessors": [ + 7, + 6, + 8, + 9 + ], + "_successors": [ + null + ], + "local_holding_cost": 0.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 10, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 10, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": 2, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "example_9_1", + "description": "Example 9.1 (EOQD)", + "data": { + "holding_cost": 0.225, + "stockout_cost": 5, + "fixed_cost": 8, + "demand_rate": 1300, + "disruption_rate": 1.5, + "recovery_rate": 14 + }, + "type": "dict" + }, + { + "name": "problem_9_8", + "description": "Problem 9.8 (EOQD)", + "data": { + "holding_cost": 4, + "stockout_cost": 22, + "fixed_cost": 35, + "demand_rate": 30, + "disruption_rate": 1, + "recovery_rate": 12 + }, + "type": "dict" + }, + { + "name": "example_9_3", + "description": "Example 9.3 (base-stock with disruptions)", + "data": { + "holding_cost": 0.25, + "stockout_cost": 3, + "demand": 2000, + "disruption_prob": 0.04, + "recovery_prob": 0.25 + }, + "type": "dict" + }, + { + "name": "example_9_4", + "description": "Example 9.4 (EOQ with additive yield uncertainty)", + "data": { + "holding_cost": 0.06, + "fixed_cost": 18500, + "demand_rate": 75000, + "yield_mean": -15000, + "yield_sd": 9000 + }, + "type": "dict" + }, + { + "name": "example_9_5", + "description": "Example 9.5 (EOQ with multiplicative yield uncertainty)", + "data": { + "holding_cost": 0.06, + "fixed_cost": 18500, + "demand_rate": 75000, + "yield_mean": 0.8333333333333334, + "yield_sd": 0.14085904245475275 + }, + "type": "dict" + }, + { + "name": "problem_9_4a", + "description": "Problem 9.4(a) (EOQ with additive yield uncertainty)", + "data": { + "holding_cost": 275, + "fixed_cost": 2250, + "demand_rate": 182500, + "yield_mean": -50.0, + "yield_sd": 0.02 + }, + "type": "dict" + }, + { + "name": "problem_9_4b", + "description": "Problem 9.4(b) (EOQ with multiplicative yield uncertainty)", + "data": { + "holding_cost": 275, + "fixed_cost": 2250, + "demand_rate": 182500, + "yield_mean": 0.9, + "yield_sd": 0.05773502691896258 + }, + "type": "dict" + }, + { + "name": "example_9_6", + "description": "Example 9.6 (newsvendor with additive yield uncertainty)", + "data": { + "holding_cost": 15000000, + "stockout_cost": 75000000, + "demand": 1.5, + "yield_lo": -0.5, + "yield_hi": 0.5 + }, + "type": "dict" + }, + { + "name": "problem_9_5", + "description": "Problem 9.5 (newsvendor with additive yield uncertainty)", + "data": { + "holding_cost": 150, + "stockout_cost": 1200, + "demand": 25, + "yield_lo": -5, + "yield_hi": 0 + }, + "type": "dict" + } + ], + "last_updated": "2022-08-20 21:06:36.134676" +} \ No newline at end of file diff --git a/src/stockpyl/helpers.py b/src/stockpyl/helpers.py index f79b611..ee7c24d 100644 --- a/src/stockpyl/helpers.py +++ b/src/stockpyl/helpers.py @@ -150,9 +150,26 @@ def is_list(x): return isinstance(x, list) +def is_dict(x): + """Determine whether x is a dict. + + Parameters + ---------- + x : any + Object to test for dict-ness. + + Returns + ------- + bool + ``True`` if ``x`` is a dict, ``False`` otherwise. + + """ + return isinstance(x, dict) + + def is_integer(x): - """Determine whether ``x`` is an integer. Return ``False`` if ``x`` is not a float, - or is a non-integer float, or is an int. + """Determine whether ``x`` is an integer. Return ``True`` if ``x`` is an int, + or a float that evaluates to an integer, ``False`` otherwise. Parameters ---------- @@ -179,6 +196,31 @@ def is_integer(x): return False +def is_numeric_string(s): + """Determine whether ``s`` is a string that represents a number. + + Parameters + ---------- + s : str + String to check for integrality. + + Returns + ------- + bool + ``True`` if ``s`` represents a number, ``False`` otherwise. + + """ + if not isinstance(s, str): + return False + else: + # https://stackoverflow.com/q/354038/3453768 + try: + float(s) + return True + except ValueError: + return False + + def is_discrete_distribution(distribution): """Check whether the given distribution object is discrete. @@ -748,6 +790,41 @@ def change_dict_key(dict_to_change, old_key, new_key): dict_to_change[new_key] = dict_to_change.pop(old_key) +def replace_dict_numeric_string_keys(dict_to_change): + """Replace any key in ``dict_to_change`` that is a string representing an integer. + Return a new dict. + Works recursively to replace numeric-string keys in any values in ``dict_to_change``, etc. + + Parameters + ---------- + dict_to_change : dict + The dict. + + Returns + ------- + dict + The new dict. + """ + new_dict = {} + for old_key, v in dict_to_change.items(): + + # If v is a dict, call this function recursively on it. + if is_dict(v): + v = replace_dict_numeric_string_keys(v) + + # Determine new key, if any. + if is_numeric_string(old_key): + # Change key. + new_key = float(old_key) + if is_integer(new_key): + new_key = int(old_key) + else: + new_key = old_key + # Add item to dict. + new_dict[new_key] = v + + + ### STATS FUNCTIONS ### def convolve_many(arrays): diff --git a/src/stockpyl/instances.py b/src/stockpyl/instances.py index 62f886d..d6592ff 100644 --- a/src/stockpyl/instances.py +++ b/src/stockpyl/instances.py @@ -75,6 +75,11 @@ def load_instance(instance_name, filepath=None, ignore_state_vars=True): If the JSON file does not exist or the instance cannot be found in the JSON file. """ + +# TODO: convert 'null' to None + + + # Determine filepath. if filepath is None: filepath = _stockpyl_instances_json_path() diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index 362e3d2..29c9b99 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -70,6 +70,9 @@ class Policy(object): node : |class_node| The node the policy refers to. + product : |class_product|, optional + The product the policy refers to. The product must be handled by ``node``. Set to ``None`` + for single-product models. base_stock_level : float, optional The base-stock level used by the policy, if applicable. Required if ``type`` == 'BS', 'EBS', or 'BEBS'. @@ -103,6 +106,7 @@ def __init__(self, **kwargs): _DEFAULT_VALUES = { '_type': None, '_node': None, + '_product': None, '_base_stock_level': None, '_order_quantity': None, '_reorder_point': None, @@ -173,6 +177,14 @@ def node(self): @node.setter def node(self, value): self._node = value + + @property + def product(self): + return self._product + + @product.setter + def product(self, value): + self._product = value @property def base_stock_level(self): @@ -276,8 +288,8 @@ def validate_parameters(self): # CONVERTING TO/FROM DICTS def to_dict(self): - """Convert the |class_policy| object to a dict. The ``node`` attribute is set - to the index of the node (if any), rather than to the object. + """Convert the |class_policy| object to a dict. The ``node`` and ``product`` attributes are set + to the indices of the node and product (if any), rather than to the objects. Returns ------- @@ -292,6 +304,9 @@ def to_dict(self): if attr == '_node': # Use index only. pol_dict['node'] = None if self.node is None else self.node.index + elif attr == '_product': + # Use index only. + pol_dict['product'] = None if self.product is None else self.product.index else: # Remove leading '_' to get property names. prop = attr[1:] if attr[0] == '_' else attr @@ -302,9 +317,10 @@ def to_dict(self): @classmethod def from_dict(cls, the_dict): """Return a new |class_policy| object with attributes copied from the - values in ``the_dict``. The ``node`` attribute is set to the index of the node, - like it is in the dict, but should be converted to a node object if this - function is called recursively from a |class_node|'s ``from_dict()`` method. + values in ``the_dict``. The ``node`` and ``product'' attributes are set to the indices + of the node and product, like they are in the dict, but should be converted to |class_node| + and |class_product| objects if this function is called recursively from a |class_node|'s + ``from_dict()`` method. Parameters ---------- @@ -316,11 +332,9 @@ def from_dict(cls, the_dict): Policy The object converted from the dict. """ - if the_dict is None: - pol = cls() - else: - # Build empty Policy. - pol = cls() + # Build empty Policy. + pol = cls() + if the_dict is not None: # Fill attributes. for attr in cls._DEFAULT_VALUES.keys(): # Remove leading '_' to get property names. @@ -335,18 +349,19 @@ def from_dict(cls, the_dict): # ORDER QUANTITY METHODS - def get_order_quantity(self, predecessor_index=None, inventory_position=None, + def get_order_quantity(self, predecessor_index=None, predecessor_product_index=None, inventory_position=None, echelon_inventory_position_adjusted=None): """Calculate order quantity using the policy type specified in ``type``. If ``type`` is ``None``, return ``None``. The method obtains the necessary state variables (typically inventory position, - and sometimes others) from ``self.node.network``. + and sometimes others) from ``self.node.network``. The order quantity is set using the + bill of materials structure for the node/product. If ``inventory_position`` (and ``echelon_inventory_position_adjusted``, for balanced echelon base-stock policies) are provided, they will override the values indicated by the node's current state variables. This allows the - policy to be queried for an order quantity even if no node or network are + policy to be queried for an order quantity even if no node/product or network are provided or have no state variables objects. If ``inventory_position`` and ``echelon_inventory_position_adjusted`` are omitted (which is the typical use case), the current state variables will be used. @@ -357,6 +372,11 @@ def get_order_quantity(self, predecessor_index=None, inventory_position=None, The predecessor for which the order quantity should be calculated. Use ``None`` for external supplier, or if node has only one predecessor (including external supplier). + predecessor_product_index : int, optional + The product at the predecessor for which the order quantity should be calculated. + Use ``None`` if the predecessor is the external supplier. If the predecessor + has only one product, ``predecessor_product_index`` can be set to ``None`` or to the + index of that product. inventory_position : float, optional Inventory position immediately before order is placed (after demand is subtracted). If provided, the policy will use this IP instead of the IP indicated by the @@ -374,8 +394,8 @@ def get_order_quantity(self, predecessor_index=None, inventory_position=None, Raises ------ AttributeError - If the policy's ``node`` attribute is ``None`` and ``inventory_position`` or other required - state variables are ``None``. + If the policy's ``node`` attribute (or ``product`` attribute, if ``node`` is multi-product) + is ``None`` and ``inventory_position`` or other required state variables are ``None``. """ if self.type is None: return None @@ -389,8 +409,12 @@ def get_order_quantity(self, predecessor_index=None, inventory_position=None, IP = None else: # Make sure node attribute is set or inventory_position is provided. - if self.node is None and inventory_position is None: + # TODO: adjust error message for multi-product? + if self.node is None: raise AttributeError("You must either provide inventory_position or set the node attribute of the Policy object to the node that it refers to. (Usually this should be done when you first create the Policy object.)") + if self.node.is_multproduct and self.product is None: + raise AttributeError("You must either provide inventory_position or set the product attribute of the Policy object to the product that it refers to (since the node is multi-product). (Usually this shoudl be done when you first creat the Policy object.)") +# TODO: stopped here # Calculate total demand (inbound orders), including successor nodes and # external demand. diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 5aaa796..307bf4a 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -50,235 +50,235 @@ # SIMULATION def simulation(network, num_periods, rand_seed=None, progress_bar=True, consistency_checks='W'): - """Perform the simulation for ``num_periods`` periods. Fills performance - measures directly into ``network``. - - If ``initial_inventory_level`` is ``None`` for any node, its initial inventory level is set - to its base-stock level (or similar for other inventory policy types). - - Parameters - ---------- - network : |class_network| - The multi-echelon inventory network. - num_periods : int - Number of periods to simulate. - rand_seed : int, optional - Random number generator seed. - progress_bar : bool, optional - Display a progress bar? - consistency_checks : str, optional - String indicating whether to run consistency checks (backorder calculations) and what to do - if check fails. Currently supported strings are: - - * 'N': No consistency checks - * 'W': Issue warning if check fails but do not dump instance and simulation data to file (default) - * 'WF': Issue warning if check fails and dump instance and simulation data to file - * 'E': Raise exception if check fails but do not dump instance and simulation data to file - * 'EF': Raise exception if check fails and dump instance and simulation data to file - - Returns - ------- - float - Total cost over all nodes and periods. - - Raises - ------ - ValueError - If network contains a directed cycle. - """ - - # Initialize the simulation: - # * Check validity of the network - # * Initialize state and decision variables at each node - # * Set the numpy PRNG seed - # * Set network.period to None - # NOTE: State variables are indexed up to num_periods+extra_periods; the - # additional slots are to allow calculations past the last period. - initialize(network=network, num_periods=num_periods, rand_seed=rand_seed) - - # Initialize progress bar. (If not requested, then this will disable it.) - pbar = tqdm(total=num_periods, disable=not progress_bar) - - # MAIN LOOP - - for _ in range(num_periods): - # Update progress bar. - pbar.update() - - # Execute one time period: - # * Update disruption states - # * Generate demands and orders - # * Generate shipments - # * Update costs, pipelines, etc. - # * Increment ``network.period`` by 1 - step(network=network, consistency_checks=consistency_checks) - - # Close progress bar. - pbar.close() - - # Close down simulation: - # * Calculate the total cost over all nodes and periods. - total_cost = close(network=network) - - # Return total cost. - return total_cost + """Perform the simulation for ``num_periods`` periods. Fills performance + measures directly into ``network``. + + If ``initial_inventory_level`` is ``None`` for any node, its initial inventory level is set + to its base-stock level (or similar for other inventory policy types). + + Parameters + ---------- + network : |class_network| + The multi-echelon inventory network. + num_periods : int + Number of periods to simulate. + rand_seed : int, optional + Random number generator seed. + progress_bar : bool, optional + Display a progress bar? + consistency_checks : str, optional + String indicating whether to run consistency checks (backorder calculations) and what to do + if check fails. Currently supported strings are: + + * 'N': No consistency checks + * 'W': Issue warning if check fails but do not dump instance and simulation data to file (default) + * 'WF': Issue warning if check fails and dump instance and simulation data to file + * 'E': Raise exception if check fails but do not dump instance and simulation data to file + * 'EF': Raise exception if check fails and dump instance and simulation data to file + + Returns + ------- + float + Total cost over all nodes and periods. + + Raises + ------ + ValueError + If network contains a directed cycle. + """ + + # Initialize the simulation: + # * Check validity of the network + # * Initialize state and decision variables at each node + # * Set the numpy PRNG seed + # * Set network.period to None + # NOTE: State variables are indexed up to num_periods+extra_periods; the + # additional slots are to allow calculations past the last period. + initialize(network=network, num_periods=num_periods, rand_seed=rand_seed) + + # Initialize progress bar. (If not requested, then this will disable it.) + pbar = tqdm(total=num_periods, disable=not progress_bar) + + # MAIN LOOP + + for _ in range(num_periods): + # Update progress bar. + pbar.update() + + # Execute one time period: + # * Update disruption states + # * Generate demands and orders + # * Generate shipments + # * Update costs, pipelines, etc. + # * Increment ``network.period`` by 1 + step(network=network, consistency_checks=consistency_checks) + + # Close progress bar. + pbar.close() + + # Close down simulation: + # * Calculate the total cost over all nodes and periods. + total_cost = close(network=network) + + # Return total cost. + return total_cost def initialize(network, num_periods, rand_seed=None): - """Initialize the simulation: + """Initialize the simulation: - * Check validity of the network - * Initialize state and decision variables at each node - * Set the numpy PRNG seed - * Set network.period to None (will be set to 0 in first call to :func:`stockpyl.sim.step`) + * Check validity of the network + * Initialize state and decision variables at each node + * Set the numpy PRNG seed + * Set network.period to None (will be set to 0 in first call to :func:`stockpyl.sim.step`) - .. note:: Calling :func:`~stockpyl.sim.initialize` function, then :func:`stockpyl.sim.step` function once per - period, then :func:`~stockpyl.sim.close` function is equivalent to calling - :func:`~stockpyl.sim.simulate` function (aside from progress bar, which :func:`~stockpyl.sim.simulate` - displays but the individual functions do not). + .. note:: Calling :func:`~stockpyl.sim.initialize` function, then :func:`stockpyl.sim.step` function once per + period, then :func:`~stockpyl.sim.close` function is equivalent to calling + :func:`~stockpyl.sim.simulate` function (aside from progress bar, which :func:`~stockpyl.sim.simulate` + displays but the individual functions do not). - Parameters - ---------- - network : |class_network| - The multi-echelon inventory network. - num_periods : int - Number of periods to simulate. - rand_seed : int, optional - Random number generator seed. + Parameters + ---------- + network : |class_network| + The multi-echelon inventory network. + num_periods : int + Number of periods to simulate. + rand_seed : int, optional + Random number generator seed. - Raises - ------ - ValueError - If network contains a directed cycle. - """ + Raises + ------ + ValueError + If network contains a directed cycle. + """ - # CONSTANTS + # CONSTANTS - # Number of extra periods to allow for calculations past the last period. - extra_periods = int(round(np.max([n.order_lead_time or 0 for n in network.nodes]) \ - + np.max([n.shipment_lead_time or 0 for n in network.nodes]))) + 2 + # Number of extra periods to allow for calculations past the last period. + extra_periods = int(round(np.max([n.order_lead_time or 0 for n in network.nodes]) \ + + np.max([n.shipment_lead_time or 0 for n in network.nodes]))) + 2 - # INITIALIZATION + # INITIALIZATION - # Check that the network doesn't contain a directed cycle. - if network.has_directed_cycle(): - raise ValueError("network may not contain a directed cycle") + # Check that the network doesn't contain a directed cycle. + if network.has_directed_cycle(): + raise ValueError("network may not contain a directed cycle") - # Initialize state and decision variables at each node. + # Initialize state and decision variables at each node. - # NOTE: State variables are indexed up to num_periods+extra_periods; the - # additional slots are to allow calculations past the last period. + # NOTE: State variables are indexed up to num_periods+extra_periods; the + # additional slots are to allow calculations past the last period. - for n in network.nodes: - # Initialize state variable objects for state-variable history list. - n.state_vars = [NodeStateVars(n, t) for t in range(num_periods + extra_periods)] + for n in network.nodes: + # Initialize state variable objects for state-variable history list. + n.state_vars = [NodeStateVars(n, t) for t in range(num_periods + extra_periods)] - # Initialize random number generator. - np.random.seed(rand_seed) + # Initialize random number generator. + np.random.seed(rand_seed) - # Initialize state variables. - _initialize_state_vars(network) + # Initialize state variables. + _initialize_state_vars(network) - # Set network.period to None (will be set to 0 in first call to step()). - network.period = None + # Set network.period to None (will be set to 0 in first call to step()). + network.period = None def step(network, order_quantity_override=None, consistency_checks='W'): - """Execute one time period of the simulation: + """Execute one time period of the simulation: - * Increment ``network.period`` by 1 - * Update disruption states - * Generate demands and orders - * Generate shipments - * Update costs, pipelines, etc. + * Increment ``network.period`` by 1 + * Update disruption states + * Generate demands and orders + * Generate shipments + * Update costs, pipelines, etc. - .. note:: Calling :func:`~stockpyl.sim.initialize` function, then :func:`stockpyl.sim.step` function once per - period, then :func:`~stockpyl.sim.close` function is equivalent to calling - :func:`~stockpyl.sim.simulate` function (aside from progress bar, which :func:`~stockpyl.sim.simulate` - displays but the individual functions do not). + .. note:: Calling :func:`~stockpyl.sim.initialize` function, then :func:`stockpyl.sim.step` function once per + period, then :func:`~stockpyl.sim.close` function is equivalent to calling + :func:`~stockpyl.sim.simulate` function (aside from progress bar, which :func:`~stockpyl.sim.simulate` + displays but the individual functions do not). - Parameters - ---------- - network : |class_network| - The multi-echelon inventory network. - consistency_checks : str, optional - String indicating whether to run consistency checks (backorder calculations) and what to do - if check fails. See docstring for :func:`~stockpyl.sim.simulation` for list of currently supported strings. - order_quantity_override : dict, optional - Dictionary indicating an order quantity (or ``None``) for each node in network (specified as |class_node| objects). - If provided, these order quantity will override the order quantities that would otherwise be calculated for - the nodes. If ``order_quantity_override`` is provided but its value is ``None`` for a given - node, an order quantity will be calculated for that node as usual. (This option is mostly used - when running the simulation from outside the package, e.g., in a reinforcement learning environment; - it is analogous to setting the action for the current time period.) - """ + Parameters + ---------- + network : |class_network| + The multi-echelon inventory network. + consistency_checks : str, optional + String indicating whether to run consistency checks (backorder calculations) and what to do + if check fails. See docstring for :func:`~stockpyl.sim.simulation` for list of currently supported strings. + order_quantity_override : dict, optional + Dictionary indicating an order quantity (or ``None``) for each node in network (specified as |class_node| objects). + If provided, these order quantity will override the order quantities that would otherwise be calculated for + the nodes. If ``order_quantity_override`` is provided but its value is ``None`` for a given + node, an order quantity will be calculated for that node as usual. (This option is mostly used + when running the simulation from outside the package, e.g., in a reinforcement learning environment; + it is analogous to setting the action for the current time period.) + """ - # Update period counter for network. - if network.period is None: - network.period = 0 - else: - network.period += 1 + # Update period counter for network. + if network.period is None: + network.period = 0 + else: + network.period += 1 - # Get shortcut to current period. - t = network.period + # Get shortcut to current period. + t = network.period - # UPDATE DISRUPTION STATES + # UPDATE DISRUPTION STATES - _update_disruption_states(network, t) + _update_disruption_states(network, t) - # GENERATE DEMANDS AND ORDERS + # GENERATE DEMANDS AND ORDERS - # Initialize visited dict. - visited = {n.index: False for n in network.nodes} + # Initialize visited dict. + visited = {n.index: False for n in network.nodes} - # Generate demands and place orders. Use depth-first search, starting - # at nodes with no successors, and propagating orders upstream. - for n in network.source_nodes: - _generate_downstream_orders(n.index, network, t, visited, order_quantity_override=order_quantity_override) + # Generate demands and place orders. Use depth-first search, starting + # at nodes with no successors, and propagating orders upstream. + for n in network.source_nodes: + _generate_downstream_orders(n.index, network, t, visited, order_quantity_override=order_quantity_override) - # GENERATE SHIPMENTS + # GENERATE SHIPMENTS - # Reset visited dict. - visited = {n.index: False for n in network.nodes} + # Reset visited dict. + visited = {n.index: False for n in network.nodes} - # Generate shipments. Use depth-first search, starting at nodes with - # no predecessors, and propagating shipments downstream. - for n in network.source_nodes: - _generate_downstream_shipments(n.index, network, t, visited, consistency_checks=consistency_checks) + # Generate shipments. Use depth-first search, starting at nodes with + # no predecessors, and propagating shipments downstream. + for n in network.source_nodes: + _generate_downstream_shipments(n.index, network, t, visited, consistency_checks=consistency_checks) - # UPDATE COSTS, PIPELINES, ETC. + # UPDATE COSTS, PIPELINES, ETC. - # Set initial values for period t+1 state variables. - _initialize_next_period_state_vars(network, t) + # Set initial values for period t+1 state variables. + _initialize_next_period_state_vars(network, t) - # Calculate costs. - _calculate_period_costs(network, t) + # Calculate costs. + _calculate_period_costs(network, t) def close(network): - """Close down the simulation: + """Close down the simulation: - * Calculate and return the total cost over all nodes and periods. + * Calculate and return the total cost over all nodes and periods. - .. note:: Calling :func:`~stockpyl.sim.initialize` function, then :func:`stockpyl.sim.step` function once per - period, then :func:`~stockpyl.sim.close` function is equivalent to calling - :func:`~stockpyl.sim.simulate` function (aside from progress bar, which :func:`~stockpyl.sim.simulate` - displays but the individual functions do not). + .. note:: Calling :func:`~stockpyl.sim.initialize` function, then :func:`stockpyl.sim.step` function once per + period, then :func:`~stockpyl.sim.close` function is equivalent to calling + :func:`~stockpyl.sim.simulate` function (aside from progress bar, which :func:`~stockpyl.sim.simulate` + displays but the individual functions do not). - Parameters - ---------- - network : |class_network| - The multi-echelon inventory network. + Parameters + ---------- + network : |class_network| + The multi-echelon inventory network. - Returns - ------- - float - Total cost over all nodes and periods. - """ + Returns + ------- + float + Total cost over all nodes and periods. + """ - # Return total cost. - return float(np.sum([n.state_vars[t].total_cost_incurred for n in network.nodes - for t in range(len(n.state_vars))])) + # Return total cost. + return float(np.sum([n.state_vars[t].total_cost_incurred for n in network.nodes + for t in range(len(n.state_vars))])) # ------------------- @@ -286,633 +286,633 @@ def close(network): # HELPER FUNCTIONS def _update_disruption_states(network, period): - """Update disruption states for all nodes in network. - Record disruption states in ``state_vars``. + """Update disruption states for all nodes in network. + Record disruption states in ``state_vars``. - Parameters - ---------- - network : |class_network| - The multi-echelon inventory network. - period : int - Time period. - """ + Parameters + ---------- + network : |class_network| + The multi-echelon inventory network. + period : int + Time period. + """ - for n in network.nodes: - # Is there a disruption process object at this node? - if n.disruption_process is not None: - n.disruption_process.update_disruption_state(period) + for n in network.nodes: + # Is there a disruption process object at this node? + if n.disruption_process is not None: + n.disruption_process.update_disruption_state(period) - # Record disruption state in state_vars. - n.state_vars_current.disrupted = n.disrupted + # Record disruption state in state_vars. + n.state_vars_current.disrupted = n.disrupted def _generate_downstream_orders(node_index, network, period, visited, order_quantity_override=None): - """Generate demands and orders for all downstream nodes using depth-first-search. - Ignore nodes for which visited=True. - - If node is currently disrupted and disruption type = 'OP' (order-pausing), order quantity - is forced to 0. - - Parameters - ---------- - node_index : int - Index of starting node for depth-first search. - network : |class_network| - The multi-echelon inventory network. - period : int - Time period. - visited : dict - Dictionary indicating whether each node in network has already been - visited by the depth-first search. - order_quantity_override : dict, optional - Dictionary indicating an order quantity (or ``None``) for each node in network (specified as |class_node| objects). - If provided, these order quantity will override the order quantities that would otherwise be calculated for - the nodes. If ``order_quantity_override`` is provided but its value is ``None`` for a given - node, an order quantity will be calculated for that node as usual. (This option is mostly used - when running the simulation from outside the package, e.g., in a reinforcement learning environment.) - - """ - # Did we already visit this node? - if visited[node_index]: - # We shouldn't even be here. - return - - # Mark node as visited. - visited[node_index] = True - - # Get the node. - node = network.get_node_from_index(node_index) - - # Does node have external demand? - if node.demand_source is not None and node.demand_source.type is not None: - # Generate demand and fill it in inbound_order_pipeline. - node.state_vars_current.inbound_order_pipeline[None][0] = \ - node.demand_source.generate_demand(period) - - # Call generate_downstream_orders() for all non-visited successors. - for s in node.successors(): - if not visited[s.index]: - _generate_downstream_orders(s.index, network, period, visited, - order_quantity_override=order_quantity_override) - - # Receive inbound orders. - _receive_inbound_orders(node) - - # Get lead times (for convenience). - order_lead_time = node.order_lead_time or 0 - shipment_lead_time = node.shipment_lead_time or 0 - - # Place orders to all predecessors. - for p in node.predecessors(include_external=True): - if p is not None: - # Was an override order quantity provided? - if order_quantity_override is not None and node in order_quantity_override \ - and order_quantity_override[node] is not None: - order_quantity = order_quantity_override[node] - # Is there an order-pausing disruption? - elif node.disrupted and node.disruption_process.disruption_type == 'OP': - order_quantity = 0 - else: - # Calculate order quantity. - if node.inventory_policy is None: - raise AttributeError( - f"The inventory_policy attribute for {node.index} is None. You must provide a Policy object in order for the simulation to set order quantities.") - - # Apply node's order capacity if there is one (NEW - 11/9/23): - if node.order_capacity is None: - order_capac = 1.0e300 - else: - order_capac = node.order_capacity - order_quantity = min(order_capac, node.inventory_policy.get_order_quantity(predecessor_index=p.index)) - - # Place order in predecessor's order pipeline. - p.state_vars_current.inbound_order_pipeline[node_index][order_lead_time] = order_quantity - p_index = p.index - else: - # Was an override order quantity provided? - if order_quantity_override is not None and node in order_quantity_override \ - and order_quantity_override[node] is not None: - order_quantity = order_quantity_override[node] - # Is there an order-pausing disruption? - elif node.disrupted and node.disruption_process.disruption_type == 'OP': - order_quantity = 0 - else: - # Calculate order quantity. - if node.order_capacity is None: - order_capac = 1.0e300 - else: - order_capac = node.order_capacity - order_quantity = min(order_capac, node.inventory_policy.get_order_quantity(predecessor_index=None)) - - # Place order to external supplier. - # (For now, this just means adding to inbound shipment pipeline.) - node.state_vars_current.inbound_shipment_pipeline[None][ - (order_lead_time or 0) + (shipment_lead_time or 0)] += \ - order_quantity - p_index = None - - if order_quantity is None: - order_quantity = None - - # Record order quantity. - node.state_vars_current.order_quantity[p_index] = order_quantity - # Add order to on_order_by_predecessor. - node.state_vars_current.on_order_by_predecessor[p_index] += order_quantity + """Generate demands and orders for all downstream nodes using depth-first-search. + Ignore nodes for which visited=True. + + If node is currently disrupted and disruption type = 'OP' (order-pausing), order quantity + is forced to 0. + + Parameters + ---------- + node_index : int + Index of starting node for depth-first search. + network : |class_network| + The multi-echelon inventory network. + period : int + Time period. + visited : dict + Dictionary indicating whether each node in network has already been + visited by the depth-first search. + order_quantity_override : dict, optional + Dictionary indicating an order quantity (or ``None``) for each node in network (specified as |class_node| objects). + If provided, these order quantity will override the order quantities that would otherwise be calculated for + the nodes. If ``order_quantity_override`` is provided but its value is ``None`` for a given + node, an order quantity will be calculated for that node as usual. (This option is mostly used + when running the simulation from outside the package, e.g., in a reinforcement learning environment.) + + """ + # Did we already visit this node? + if visited[node_index]: + # We shouldn't even be here. + return + + # Mark node as visited. + visited[node_index] = True + + # Get the node. + node = network.get_node_from_index(node_index) + + # Does node have external demand? + if node.demand_source is not None and node.demand_source.type is not None: + # Generate demand and fill it in inbound_order_pipeline. + node.state_vars_current.inbound_order_pipeline[None][0] = \ + node.demand_source.generate_demand(period) + + # Call generate_downstream_orders() for all non-visited successors. + for s in node.successors(): + if not visited[s.index]: + _generate_downstream_orders(s.index, network, period, visited, + order_quantity_override=order_quantity_override) + + # Receive inbound orders. + _receive_inbound_orders(node) + + # Get lead times (for convenience). + order_lead_time = node.order_lead_time or 0 + shipment_lead_time = node.shipment_lead_time or 0 + + # Place orders to all predecessors. + for p in node.predecessors(include_external=True): + if p is not None: + # Was an override order quantity provided? + if order_quantity_override is not None and node in order_quantity_override \ + and order_quantity_override[node] is not None: + order_quantity = order_quantity_override[node] + # Is there an order-pausing disruption? + elif node.disrupted and node.disruption_process.disruption_type == 'OP': + order_quantity = 0 + else: + # Calculate order quantity. + if node.inventory_policy is None: + raise AttributeError( + f"The inventory_policy attribute for {node.index} is None. You must provide a Policy object in order for the simulation to set order quantities.") + + # Apply node's order capacity if there is one (NEW - 11/9/23): + if node.order_capacity is None: + order_capac = 1.0e300 + else: + order_capac = node.order_capacity + order_quantity = min(order_capac, node.inventory_policy.get_order_quantity(predecessor_index=p.index)) + + # Place order in predecessor's order pipeline. + p.state_vars_current.inbound_order_pipeline[node_index][order_lead_time] = order_quantity + p_index = p.index + else: + # Was an override order quantity provided? + if order_quantity_override is not None and node in order_quantity_override \ + and order_quantity_override[node] is not None: + order_quantity = order_quantity_override[node] + # Is there an order-pausing disruption? + elif node.disrupted and node.disruption_process.disruption_type == 'OP': + order_quantity = 0 + else: + # Calculate order quantity. + if node.order_capacity is None: + order_capac = 1.0e300 + else: + order_capac = node.order_capacity + order_quantity = min(order_capac, node.inventory_policy.get_order_quantity(predecessor_index=None)) + + # Place order to external supplier. + # (For now, this just means adding to inbound shipment pipeline.) + node.state_vars_current.inbound_shipment_pipeline[None][ + (order_lead_time or 0) + (shipment_lead_time or 0)] += \ + order_quantity + p_index = None + + if order_quantity is None: + order_quantity = None + + # Record order quantity. + node.state_vars_current.order_quantity[p_index] = order_quantity + # Add order to on_order_by_predecessor. + node.state_vars_current.on_order_by_predecessor[p_index] += order_quantity def _generate_downstream_shipments(node_index, network, period, visited, consistency_checks='W'): - """Generate shipments to all downstream nodes using depth-first-search. - Ignore nodes for which visited=True. - - If downstream node is currently disrupted and its disruption type = 'SP' (shipment-pausing), - no items are shipped to that node. Those items are placed in disrupted-items inventory. - They are not included in either the node's IL or its BOs, but they are charged a holding - cost as though they were included in IL. - - Parameters - ---------- - node_index : int - Index of starting node for depth-first search. - network : |class_network| - The multi-echelon inventory network. - period : int - Time period. - visited : dict - Dictionary indicating whether each node in network has already been - visited by the depth-first search. - consistency_checks : str, optional - String indicating whether to run consistency checks (backorder calculations) and what to do - if check fails. For currently supported strings, see docstring for simulation(). - - """ - # Did we already visit this node? - if visited[node_index]: - # We shouldn't even be here. - return - - # Mark node as visited. - visited[node_index] = True - - # Shortcuts. - node = network.get_node_from_index(node_index) - - # Remember starting IL. - starting_inventory_level = node.state_vars_current.inventory_level - - # Receive inbound shipments. (Set inbound_shipment, remove from shipment - # pipeline, update OO.) - _receive_inbound_shipments(node) - - # Convert raw materials to finished goods. - new_finished_goods = _raw_materials_to_finished_goods(node) - - # Process outbound shipments. - _process_outbound_shipments(node, starting_inventory_level, new_finished_goods, - consistency_checks=consistency_checks) - - # Calculate fill rate (cumulative in periods 0,...,t). - _calculate_fill_rate(node, period) - - # Propagate shipment downstream (i.e., add to successors' inbound_shipment_pipeline). - _propagate_shipment_downstream(node) - - # Call generate_downstream_shipments() for all non-visited successors. - for s in list(node.successors()): - if not visited[s.index]: - _generate_downstream_shipments(s.index, network, period, visited, consistency_checks=consistency_checks) + """Generate shipments to all downstream nodes using depth-first-search. + Ignore nodes for which visited=True. + + If downstream node is currently disrupted and its disruption type = 'SP' (shipment-pausing), + no items are shipped to that node. Those items are placed in disrupted-items inventory. + They are not included in either the node's IL or its BOs, but they are charged a holding + cost as though they were included in IL. + + Parameters + ---------- + node_index : int + Index of starting node for depth-first search. + network : |class_network| + The multi-echelon inventory network. + period : int + Time period. + visited : dict + Dictionary indicating whether each node in network has already been + visited by the depth-first search. + consistency_checks : str, optional + String indicating whether to run consistency checks (backorder calculations) and what to do + if check fails. For currently supported strings, see docstring for simulation(). + + """ + # Did we already visit this node? + if visited[node_index]: + # We shouldn't even be here. + return + + # Mark node as visited. + visited[node_index] = True + + # Shortcuts. + node = network.get_node_from_index(node_index) + + # Remember starting IL. + starting_inventory_level = node.state_vars_current.inventory_level + + # Receive inbound shipments. (Set inbound_shipment, remove from shipment + # pipeline, update OO.) + _receive_inbound_shipments(node) + + # Convert raw materials to finished goods. + new_finished_goods = _raw_materials_to_finished_goods(node) + + # Process outbound shipments. + _process_outbound_shipments(node, starting_inventory_level, new_finished_goods, + consistency_checks=consistency_checks) + + # Calculate fill rate (cumulative in periods 0,...,t). + _calculate_fill_rate(node, period) + + # Propagate shipment downstream (i.e., add to successors' inbound_shipment_pipeline). + _propagate_shipment_downstream(node) + + # Call generate_downstream_shipments() for all non-visited successors. + for s in list(node.successors()): + if not visited[s.index]: + _generate_downstream_shipments(s.index, network, period, visited, consistency_checks=consistency_checks) def _initialize_state_vars(network): - """Initialize the state variables for each node: - - * inventory_level = to initial_inventory_level (or base-stock level, etc., if initial_inventory_level is None) - * inbound_shipment_pipeline = initial_shipments - * on_order = initial_shipments * shipment_lead_time + initial_orders * order_lead_time - * inbound_order_pipeline = initial_orders - - Parameters - ---------- - network : |class_network| - The multi-echelon inventory network. - """ - - # Initialize inventory levels and other quantities. - for n in network.nodes: - # Initialize inventory_level to initial_inventory_level (or to BS level, etc., if None). - if n.initial_inventory_level is not None: - init_IL = n.initial_inventory_level - else: - init_IL = n.inventory_policy.get_order_quantity(inventory_position=0) - n.state_vars[0].inventory_level = init_IL - - # Initialize inbound shipment pipeline and on-order quantities. - for p_index in n.predecessor_indices(include_external=True): - for l in range(n.shipment_lead_time or 0): - n.state_vars[0].inbound_shipment_pipeline[p_index][l] = n.initial_shipments or 0 - n.state_vars[0].on_order_by_predecessor[p_index] = \ - (n.initial_shipments or 0) * (n.shipment_lead_time or 0) + (n.initial_orders or 0) * ( - n.order_lead_time or 0) - - # Initialize inbound order pipeline. (Exclude external demand.) - for s in n.successors(): - for l in range(s.order_lead_time or 0): - n.state_vars[0].inbound_order_pipeline[s.index][l] = s.initial_orders or 0 - - # Initialize raw material inventory. - for p in n.predecessor_indices(include_external=True): - n.state_vars[0].raw_material_inventory[p_index] = 0 + """Initialize the state variables for each node: + + * inventory_level = to initial_inventory_level (or base-stock level, etc., if initial_inventory_level is None) + * inbound_shipment_pipeline = initial_shipments + * on_order = initial_shipments * shipment_lead_time + initial_orders * order_lead_time + * inbound_order_pipeline = initial_orders + + Parameters + ---------- + network : |class_network| + The multi-echelon inventory network. + """ + + # Initialize inventory levels and other quantities. + for n in network.nodes: + # Initialize inventory_level to initial_inventory_level (or to BS level, etc., if None). + if n.initial_inventory_level is not None: + init_IL = n.initial_inventory_level + else: + init_IL = n.inventory_policy.get_order_quantity(inventory_position=0) + n.state_vars[0].inventory_level = init_IL + + # Initialize inbound shipment pipeline and on-order quantities. + for p_index in n.predecessor_indices(include_external=True): + for l in range(n.shipment_lead_time or 0): + n.state_vars[0].inbound_shipment_pipeline[p_index][l] = n.initial_shipments or 0 + n.state_vars[0].on_order_by_predecessor[p_index] = \ + (n.initial_shipments or 0) * (n.shipment_lead_time or 0) + (n.initial_orders or 0) * ( + n.order_lead_time or 0) + + # Initialize inbound order pipeline. (Exclude external demand.) + for s in n.successors(): + for l in range(s.order_lead_time or 0): + n.state_vars[0].inbound_order_pipeline[s.index][l] = s.initial_orders or 0 + + # Initialize raw material inventory. + for p in n.predecessor_indices(include_external=True): + n.state_vars[0].raw_material_inventory[p_index] = 0 def _receive_inbound_orders(node): - """Receive inbound orders: - - * Set inbound order from pipeline. - * Remove inbound order from pipeline. - * Update cumulative demand. - - Parameters - ---------- - node : |class_node| - The supply chain node. - """ - for s_index in node.successor_indices(include_external=True): - # Set inbound_order from pipeline. - node.state_vars_current.inbound_order[s_index] = \ - node.state_vars_current.inbound_order_pipeline[s_index][0] - # Remove order from pipeline. - node.state_vars_current.inbound_order_pipeline[s_index][0] = 0 - # Update demand_cumul. - node.state_vars_current.demand_cumul += node.state_vars_current.inbound_order[s_index] + """Receive inbound orders: + + * Set inbound order from pipeline. + * Remove inbound order from pipeline. + * Update cumulative demand. + + Parameters + ---------- + node : |class_node| + The supply chain node. + """ + for s_index in node.successor_indices(include_external=True): + # Set inbound_order from pipeline. + node.state_vars_current.inbound_order[s_index] = \ + node.state_vars_current.inbound_order_pipeline[s_index][0] + # Remove order from pipeline. + node.state_vars_current.inbound_order_pipeline[s_index][0] = 0 + # Update demand_cumul. + node.state_vars_current.demand_cumul += node.state_vars_current.inbound_order[s_index] def _initialize_next_period_state_vars(network, period): - """Set initial values for state variables in period ``period`` + 1. - - * Update shipment and order pipelines by "advancing" them by 1 period \ - and adding a 0 in the last element. - * Set IL, BO, RM, and OO next period = ending values this period. - * Set _cumul attributes = ending values this period. - * Do nothing for ``disrupted``; this is set in update_disruption_states(). - - If node is currently disrupted and its disruption type = 'TP' (transit-pausing), - items in its shipment pipelines are not advanced. - - Parameters - ---------- - network : |class_network| - The multi-echelon inventory network. - period : int - The current time period. - """ - - for n in network.nodes: - # Update pipelines. - for p in n.predecessor_indices(include_external=True): - # Is there a transit-pausing disruption? - if n.disrupted and n.disruption_process.disruption_type == 'TP': - # Yes; items in shipment pipeline stay where they are. - n.state_vars[period + 1].inbound_shipment_pipeline[p] = \ - n.state_vars[period].inbound_shipment_pipeline[p].copy() - else: - # No; items in shipment pipeline advance by 1 slot. - # Copy items from slot 0 in period t to t+1. (Normally, this will equal 0, but it can - # be non-zero if there was a type-RP disruption.) - n.state_vars[period + 1].inbound_shipment_pipeline[p][0] = \ - n.state_vars[period].inbound_shipment_pipeline[p][0] - # Add items from slot s+1 in period t to slot s in period t+1. - for s in range(len(n.state_vars[period].inbound_shipment_pipeline[p]) - 1): - n.state_vars[period + 1].inbound_shipment_pipeline[p][s] += \ - n.state_vars[period].inbound_shipment_pipeline[p][s + 1] - - # n.state_vars[period+1].inbound_shipment_pipeline[p] = \ - # n.state_vars[period].inbound_shipment_pipeline[p][1:] + [0] - for s in n.successor_indices(include_external=True): - n.state_vars[period + 1].inbound_order_pipeline[s] = \ - n.state_vars[period].inbound_order_pipeline[s][1:] + [0] - - # Set next period's starting IL, BO, IDI, ODI, RM, and OO. - n.state_vars[period + 1].inventory_level = n.state_vars[period].inventory_level - for s_index in n.successor_indices(include_external=True): - n.state_vars[period + 1].backorders_by_successor[s_index] = \ - n.state_vars[period].backorders_by_successor[s_index] - for s_index in n.successor_indices(include_external=False): - n.state_vars[period + 1].outbound_disrupted_items[s_index] = \ - n.state_vars[period].outbound_disrupted_items[s_index] - for p_index in n.predecessor_indices(include_external=True): - n.state_vars[period + 1].on_order_by_predecessor[p_index] = \ - n.state_vars[period].on_order_by_predecessor[p_index] - n.state_vars[period + 1].raw_material_inventory[p_index] = \ - n.state_vars[period].raw_material_inventory[p_index] - n.state_vars[period + 1].inbound_disrupted_items[p_index] = \ - n.state_vars[period].inbound_disrupted_items[p_index] - - # Set demand_met_from_stock_cumul and demand_cumul. - n.state_vars[period + 1].demand_met_from_stock_cumul = \ - n.state_vars[period].demand_met_from_stock_cumul - n.state_vars[period + 1].demand_cumul = \ - n.state_vars[period].demand_cumul + """Set initial values for state variables in period ``period`` + 1. + + * Update shipment and order pipelines by "advancing" them by 1 period \ + and adding a 0 in the last element. + * Set IL, BO, RM, and OO next period = ending values this period. + * Set _cumul attributes = ending values this period. + * Do nothing for ``disrupted``; this is set in update_disruption_states(). + + If node is currently disrupted and its disruption type = 'TP' (transit-pausing), + items in its shipment pipelines are not advanced. + + Parameters + ---------- + network : |class_network| + The multi-echelon inventory network. + period : int + The current time period. + """ + + for n in network.nodes: + # Update pipelines. + for p in n.predecessor_indices(include_external=True): + # Is there a transit-pausing disruption? + if n.disrupted and n.disruption_process.disruption_type == 'TP': + # Yes; items in shipment pipeline stay where they are. + n.state_vars[period + 1].inbound_shipment_pipeline[p] = \ + n.state_vars[period].inbound_shipment_pipeline[p].copy() + else: + # No; items in shipment pipeline advance by 1 slot. + # Copy items from slot 0 in period t to t+1. (Normally, this will equal 0, but it can + # be non-zero if there was a type-RP disruption.) + n.state_vars[period + 1].inbound_shipment_pipeline[p][0] = \ + n.state_vars[period].inbound_shipment_pipeline[p][0] + # Add items from slot s+1 in period t to slot s in period t+1. + for s in range(len(n.state_vars[period].inbound_shipment_pipeline[p]) - 1): + n.state_vars[period + 1].inbound_shipment_pipeline[p][s] += \ + n.state_vars[period].inbound_shipment_pipeline[p][s + 1] + + # n.state_vars[period+1].inbound_shipment_pipeline[p] = \ + # n.state_vars[period].inbound_shipment_pipeline[p][1:] + [0] + for s in n.successor_indices(include_external=True): + n.state_vars[period + 1].inbound_order_pipeline[s] = \ + n.state_vars[period].inbound_order_pipeline[s][1:] + [0] + + # Set next period's starting IL, BO, IDI, ODI, RM, and OO. + n.state_vars[period + 1].inventory_level = n.state_vars[period].inventory_level + for s_index in n.successor_indices(include_external=True): + n.state_vars[period + 1].backorders_by_successor[s_index] = \ + n.state_vars[period].backorders_by_successor[s_index] + for s_index in n.successor_indices(include_external=False): + n.state_vars[period + 1].outbound_disrupted_items[s_index] = \ + n.state_vars[period].outbound_disrupted_items[s_index] + for p_index in n.predecessor_indices(include_external=True): + n.state_vars[period + 1].on_order_by_predecessor[p_index] = \ + n.state_vars[period].on_order_by_predecessor[p_index] + n.state_vars[period + 1].raw_material_inventory[p_index] = \ + n.state_vars[period].raw_material_inventory[p_index] + n.state_vars[period + 1].inbound_disrupted_items[p_index] = \ + n.state_vars[period].inbound_disrupted_items[p_index] + + # Set demand_met_from_stock_cumul and demand_cumul. + n.state_vars[period + 1].demand_met_from_stock_cumul = \ + n.state_vars[period].demand_met_from_stock_cumul + n.state_vars[period + 1].demand_cumul = \ + n.state_vars[period].demand_cumul def _calculate_period_costs(network, period): - """Calculate costs and revenues for one period and store them in n.state_vars[period]. - - Parameters - ---------- - network : |class_network| - The multi-echelon inventory network. - period : int - The time period. - """ - - for n in network.nodes: - # Finished goods holding cost. - items_held = max(0, n.state_vars[period].inventory_level) + n._get_attribute_total('outbound_disrupted_items', - period) - try: - n.state_vars[period].holding_cost_incurred = n.local_holding_cost_function(items_held) - except TypeError: - n.state_vars[period].holding_cost_incurred = (n.local_holding_cost or 0) * items_held - # Raw materials holding cost. - for p in n.predecessors(include_external=False): - n.state_vars[period].holding_cost_incurred += \ - (p.local_holding_cost or 0) * \ - (n.state_vars[period].raw_material_inventory[p.index] + n.state_vars[period].inbound_disrupted_items[ - p.index]) - # Stockout cost. - try: - n.state_vars[period].stockout_cost_incurred = \ - n.stockout_cost_function(n.state_vars[period].inventory_level) - except TypeError: - n.state_vars[period].stockout_cost_incurred = \ - (n.stockout_cost or 0) * max(0, -n.state_vars[period].inventory_level) - # In-transit holding cost. - if n.in_transit_holding_cost is None: - h = n.local_holding_cost or 0 - else: - h = n.in_transit_holding_cost or 0 - n.state_vars[period].in_transit_holding_cost_incurred = \ - h * float(np.sum([n.state_vars[period].in_transit_to(s) for s in n.successors()])) - # Revenue. - n.state_vars[period].revenue_earned = (n.revenue or 0) * \ - float(np.sum([n.state_vars[period].outbound_shipment[s_index] \ - for s_index in n.successor_indices(include_external=True)])) - - # Total cost. - n.state_vars[period].total_cost_incurred = \ - n.state_vars[period].holding_cost_incurred + \ - n.state_vars[period].stockout_cost_incurred + \ - n.state_vars[period].in_transit_holding_cost_incurred - \ - n.state_vars[period].revenue_earned + """Calculate costs and revenues for one period and store them in n.state_vars[period]. + + Parameters + ---------- + network : |class_network| + The multi-echelon inventory network. + period : int + The time period. + """ + + for n in network.nodes: + # Finished goods holding cost. + items_held = max(0, n.state_vars[period].inventory_level) + n._get_attribute_total('outbound_disrupted_items', + period) + try: + n.state_vars[period].holding_cost_incurred = n.local_holding_cost_function(items_held) + except TypeError: + n.state_vars[period].holding_cost_incurred = (n.local_holding_cost or 0) * items_held + # Raw materials holding cost. + for p in n.predecessors(include_external=False): + n.state_vars[period].holding_cost_incurred += \ + (p.local_holding_cost or 0) * \ + (n.state_vars[period].raw_material_inventory[p.index] + n.state_vars[period].inbound_disrupted_items[ + p.index]) + # Stockout cost. + try: + n.state_vars[period].stockout_cost_incurred = \ + n.stockout_cost_function(n.state_vars[period].inventory_level) + except TypeError: + n.state_vars[period].stockout_cost_incurred = \ + (n.stockout_cost or 0) * max(0, -n.state_vars[period].inventory_level) + # In-transit holding cost. + if n.in_transit_holding_cost is None: + h = n.local_holding_cost or 0 + else: + h = n.in_transit_holding_cost or 0 + n.state_vars[period].in_transit_holding_cost_incurred = \ + h * float(np.sum([n.state_vars[period].in_transit_to(s) for s in n.successors()])) + # Revenue. + n.state_vars[period].revenue_earned = (n.revenue or 0) * \ + float(np.sum([n.state_vars[period].outbound_shipment[s_index] \ + for s_index in n.successor_indices(include_external=True)])) + + # Total cost. + n.state_vars[period].total_cost_incurred = \ + n.state_vars[period].holding_cost_incurred + \ + n.state_vars[period].stockout_cost_incurred + \ + n.state_vars[period].in_transit_holding_cost_incurred - \ + n.state_vars[period].revenue_earned def _receive_inbound_shipments(node): - """Receive inbound shipment for the node: - - * Set inbound_shipment. - * Remove from shipment pipeline and add to raw material inventory. - * Process as many units as possible. - * Update IL and OO. - - If node is currently disrupted and disruption type = 'RP' (receipt-pausing), inbound - items are moved to inbound_disrupted_items. - - Parameters - ---------- - node : |class_node| - The supply chain node. - """ - # Loop through predecessors. - for p_index in node.predecessor_indices(include_external=True): - # Determine number of items that will be received from p (if there is no disruption), - # not including inbound disrupted items waiting to be received. - ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][0] - - # Is there a receipt-pausing disruption? - if node.disrupted and node.disruption_process.disruption_type == 'RP': - # Yes: Don't receive anything. - IS = 0 - # Increase inbound disrupted items by the items that would have been received, if - # there were no disruption. - IDI = ready_to_receive - else: - # No: Inbound shipment from p = ready_to_receive + IDI from p. - IS = ready_to_receive + node.state_vars_current.inbound_disrupted_items[p_index] - # Decrease inbound disrupted items by its whole amount. (This will zero out - # inbound_disrupted_items below.) - IDI = -node.state_vars_current.inbound_disrupted_items[p_index] - - # Set inbound_shipment attribute. - node.state_vars_current.inbound_shipment[p_index] = IS - # Remove shipment from pipeline. - node.state_vars_current.inbound_shipment_pipeline[p_index][0] = 0 - # Add shipment to raw material inventory. - node.state_vars_current.raw_material_inventory[p_index] += IS - # Update on-order inventory. - node.state_vars_current.on_order_by_predecessor[p_index] -= ready_to_receive - # Update inbound_disrupted_items. - node.state_vars_current.inbound_disrupted_items[p_index] += IDI + """Receive inbound shipment for the node: + + * Set inbound_shipment. + * Remove from shipment pipeline and add to raw material inventory. + * Process as many units as possible. + * Update IL and OO. + + If node is currently disrupted and disruption type = 'RP' (receipt-pausing), inbound + items are moved to inbound_disrupted_items. + + Parameters + ---------- + node : |class_node| + The supply chain node. + """ + # Loop through predecessors. + for p_index in node.predecessor_indices(include_external=True): + # Determine number of items that will be received from p (if there is no disruption), + # not including inbound disrupted items waiting to be received. + ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][0] + + # Is there a receipt-pausing disruption? + if node.disrupted and node.disruption_process.disruption_type == 'RP': + # Yes: Don't receive anything. + IS = 0 + # Increase inbound disrupted items by the items that would have been received, if + # there were no disruption. + IDI = ready_to_receive + else: + # No: Inbound shipment from p = ready_to_receive + IDI from p. + IS = ready_to_receive + node.state_vars_current.inbound_disrupted_items[p_index] + # Decrease inbound disrupted items by its whole amount. (This will zero out + # inbound_disrupted_items below.) + IDI = -node.state_vars_current.inbound_disrupted_items[p_index] + + # Set inbound_shipment attribute. + node.state_vars_current.inbound_shipment[p_index] = IS + # Remove shipment from pipeline. + node.state_vars_current.inbound_shipment_pipeline[p_index][0] = 0 + # Add shipment to raw material inventory. + node.state_vars_current.raw_material_inventory[p_index] += IS + # Update on-order inventory. + node.state_vars_current.on_order_by_predecessor[p_index] -= ready_to_receive + # Update inbound_disrupted_items. + node.state_vars_current.inbound_disrupted_items[p_index] += IDI def _raw_materials_to_finished_goods(node): - """Process raw materials to convert them to finished goods: + """Process raw materials to convert them to finished goods: - * Remove items from raw material inventory. - * Update IL. + * Remove items from raw material inventory. + * Update IL. - Parameters - ---------- - node : |class_node| - The supply chain node. + Parameters + ---------- + node : |class_node| + The supply chain node. - Returns - ------- - new_finished_goods : float - Number of new finished goods added to inventory this period. + Returns + ------- + new_finished_goods : float + Number of new finished goods added to inventory this period. - """ - # Determine number of units that can be processed. - new_finished_goods = float(np.min([node.state_vars_current.raw_material_inventory[p_index] - for p_index in node.predecessor_indices(include_external=True)])) + """ + # Determine number of units that can be processed. + new_finished_goods = float(np.min([node.state_vars_current.raw_material_inventory[p_index] + for p_index in node.predecessor_indices(include_external=True)])) - # Process units: remove from raw material inventory and add to finished goods. - for p_index in node.predecessor_indices(include_external=True): - node.state_vars_current.raw_material_inventory[p_index] -= new_finished_goods - node.state_vars_current.inventory_level += new_finished_goods + # Process units: remove from raw material inventory and add to finished goods. + for p_index in node.predecessor_indices(include_external=True): + node.state_vars_current.raw_material_inventory[p_index] -= new_finished_goods + node.state_vars_current.inventory_level += new_finished_goods - return new_finished_goods + return new_finished_goods def _process_outbound_shipments(node, starting_inventory_level, new_finished_goods, consistency_checks='W'): - """Process outbound shipments for the node: - - * Determine outbound shipments. Demands are satisfied in order of \ - successor node index. - * Update inventory level. - * Calculate demand met from stock. - - If downstream node is currently disrupted and its disruption type = 'SP' (shipment-pausing), - no items are shipped to that node. Those items are placed in disrupted-items inventory. - They are not included in either the node's IL or its BOs, but they are charged a holding - cost as though they were included in IL. - - Parameters - ---------- - node : |class_node| - The supply chain node. - starting_inventory_level : float - Starting inventory level for the period. - new_finished_goods : float - Number of new finished goods added to inventory this period. - consistency_checks : str, optional - String indicating whether to run consistency checks (backorder calculations) and what to do - if check fails. For currently supported strings, see docstring for simulation(). - """ - # Determine current on-hand and backorders (after new finished goods are - # added but before demand is subtracted). - current_on_hand = max(0.0, starting_inventory_level) + new_finished_goods - current_backorders = max(0.0, -starting_inventory_level) - - global issued_backorder_warning - if consistency_checks in ('W', 'WF', 'E', 'EF') and not issued_backorder_warning: - # Double-check BO calculations. - current_backorders_check = node._get_attribute_total('backorders_by_successor', node.network.period) - if not np.isclose(current_backorders, current_backorders_check): - if consistency_checks in ('WF', 'EF'): - # Write instance and simulation data to file. - filename = 'failed_instance_' + str(datetime.datetime.now()) - filepath = 'aux_files/' + filename + '.json' - write_instance_and_states( - network=node.network, - filepath=filepath, - instance_name='failed_instance' - ) - # Issue warning. - # See https://stackoverflow.com/q/287871/3453768 for terminal text color. - if consistency_checks in ('W', 'WF'): - textcolor = '\033[93m' - else: - textcolor = '\033[91m' - warning_msg = f"\n{textcolor}Backorder check failed! current_backorders = {current_backorders} <> current_backorders_check = {current_backorders_check}, node = {node.index}, period = {node.network.period}.\n" - if consistency_checks in ('WF', 'EF'): - warning_msg += f"The instance and simulation data have been written to {filepath}.\n" - warning_msg += f"Please post an issue at https://github.com/LarrySnyder/stockpyl/issues or contact the developer directly.\n" - if consistency_checks in ('W', 'WF'): - warning_msg += f"Simulation will proceed, but results may be incorrect." - warning_msg += "\x1b[0m" # reset color - if consistency_checks in ('W', 'WF'): - warnings.warn(warning_msg) - issued_backorder_warning = True - if consistency_checks in ('E', 'EF'): - raise ValueError(warning_msg) - - # Determine outbound shipments. (Satisfy demand in order of successor node - # index.) Also update EIL and BO, and calculate demand met from stock. - node.state_vars_current.demand_met_from_stock = 0.0 - for s in node.successors(include_external=True): - # Get successor index (for convenience). - s_index = None if s is None else s.index - - # Determine number of items that will ship out to s (if there is no disruption), not including - # disrupted items waiting to ship. = min{OH, BO for s + new order from s} - ready_to_ship = min(current_on_hand, node.state_vars_current.backorders_by_successor[s_index] + - node.state_vars_current.inbound_order[s_index]) - - # Is there a shipment-pausing disruption at s? - if s is not None and s.disrupted and s.disruption_process.disruption_type == 'SP': - # Yes: Don't ship anything out. - OS = 0 - # New outbound disrupted items = the items that would have been shipped out, if - # there were no disruption. - ODI = ready_to_ship - # Decompose ODI into new demands that are now disrupted items and previously backordered items - # that are now disrupted items. Assumes backorders are handled first, then new demands. - BO_to_DI = min(ready_to_ship, node.state_vars_current.backorders_by_successor[s_index]) - ND_to_DI = ODI - BO_to_DI - else: - # No: Outbound shipment to s = ready_to_ship + ODI for s. - OS = ready_to_ship + node.state_vars_current.outbound_disrupted_items[s_index] - # No new disrupted items. - ODI = 0 - BO_to_DI = 0 - ND_to_DI = 0 - - # How much of outbound shipment was used for previously disrupted items and to clear backorders? - # (Assumes disrupted items are cleared first, then backorders, before satisfying current period's - # demands.) - DI_OS = min(OS, node.state_vars_current.outbound_disrupted_items[s_index]) - BO_OS = min(OS - DI_OS, node.state_vars_current.backorders_by_successor[s_index]) - non_BO_DI_OS = OS - BO_OS - DI_OS - - # Update outbound_shipment and current_on_hand. (Outbound items that were previously disrupted - # do not get subtracted from current_on_hand because they were not included in it to begin with.) - node.state_vars_current.outbound_shipment[s_index] = OS - current_on_hand -= (OS - DI_OS + ODI) - - # Calculate demand met from stock. (Note: This assumes that if there - # are backorders, they get priority over current period's demands.) - DMFS = max(0, OS - node.state_vars_current.backorders_by_successor[s_index]) - node.state_vars_current.demand_met_from_stock += DMFS - node.state_vars_current.demand_met_from_stock_cumul += DMFS - - # Update IL and BO. - node.state_vars_current.inventory_level -= node.state_vars_current.inbound_order[s_index] - - # Calculate new backorders_by_successor. - node.state_vars_current.backorders_by_successor[s_index] -= (BO_OS + BO_to_DI) - node.state_vars_current.backorders_by_successor[s_index] += max(0, - node.state_vars_current.inbound_order[ - s_index] - ND_to_DI - non_BO_DI_OS) - - # Update disrupted_items. - if s is not None: - node.state_vars_current.outbound_disrupted_items[s_index] += ODI - DI_OS + """Process outbound shipments for the node: + + * Determine outbound shipments. Demands are satisfied in order of \ + successor node index. + * Update inventory level. + * Calculate demand met from stock. + + If downstream node is currently disrupted and its disruption type = 'SP' (shipment-pausing), + no items are shipped to that node. Those items are placed in disrupted-items inventory. + They are not included in either the node's IL or its BOs, but they are charged a holding + cost as though they were included in IL. + + Parameters + ---------- + node : |class_node| + The supply chain node. + starting_inventory_level : float + Starting inventory level for the period. + new_finished_goods : float + Number of new finished goods added to inventory this period. + consistency_checks : str, optional + String indicating whether to run consistency checks (backorder calculations) and what to do + if check fails. For currently supported strings, see docstring for simulation(). + """ + # Determine current on-hand and backorders (after new finished goods are + # added but before demand is subtracted). + current_on_hand = max(0.0, starting_inventory_level) + new_finished_goods + current_backorders = max(0.0, -starting_inventory_level) + + global issued_backorder_warning + if consistency_checks in ('W', 'WF', 'E', 'EF') and not issued_backorder_warning: + # Double-check BO calculations. + current_backorders_check = node._get_attribute_total('backorders_by_successor', node.network.period) + if not np.isclose(current_backorders, current_backorders_check): + if consistency_checks in ('WF', 'EF'): + # Write instance and simulation data to file. + filename = 'failed_instance_' + str(datetime.datetime.now()) + filepath = 'aux_files/' + filename + '.json' + write_instance_and_states( + network=node.network, + filepath=filepath, + instance_name='failed_instance' + ) + # Issue warning. + # See https://stackoverflow.com/q/287871/3453768 for terminal text color. + if consistency_checks in ('W', 'WF'): + textcolor = '\033[93m' + else: + textcolor = '\033[91m' + warning_msg = f"\n{textcolor}Backorder check failed! current_backorders = {current_backorders} <> current_backorders_check = {current_backorders_check}, node = {node.index}, period = {node.network.period}.\n" + if consistency_checks in ('WF', 'EF'): + warning_msg += f"The instance and simulation data have been written to {filepath}.\n" + warning_msg += f"Please post an issue at https://github.com/LarrySnyder/stockpyl/issues or contact the developer directly.\n" + if consistency_checks in ('W', 'WF'): + warning_msg += f"Simulation will proceed, but results may be incorrect." + warning_msg += "\x1b[0m" # reset color + if consistency_checks in ('W', 'WF'): + warnings.warn(warning_msg) + issued_backorder_warning = True + if consistency_checks in ('E', 'EF'): + raise ValueError(warning_msg) + + # Determine outbound shipments. (Satisfy demand in order of successor node + # index.) Also update EIL and BO, and calculate demand met from stock. + node.state_vars_current.demand_met_from_stock = 0.0 + for s in node.successors(include_external=True): + # Get successor index (for convenience). + s_index = None if s is None else s.index + + # Determine number of items that will ship out to s (if there is no disruption), not including + # disrupted items waiting to ship. = min{OH, BO for s + new order from s} + ready_to_ship = min(current_on_hand, node.state_vars_current.backorders_by_successor[s_index] + + node.state_vars_current.inbound_order[s_index]) + + # Is there a shipment-pausing disruption at s? + if s is not None and s.disrupted and s.disruption_process.disruption_type == 'SP': + # Yes: Don't ship anything out. + OS = 0 + # New outbound disrupted items = the items that would have been shipped out, if + # there were no disruption. + ODI = ready_to_ship + # Decompose ODI into new demands that are now disrupted items and previously backordered items + # that are now disrupted items. Assumes backorders are handled first, then new demands. + BO_to_DI = min(ready_to_ship, node.state_vars_current.backorders_by_successor[s_index]) + ND_to_DI = ODI - BO_to_DI + else: + # No: Outbound shipment to s = ready_to_ship + ODI for s. + OS = ready_to_ship + node.state_vars_current.outbound_disrupted_items[s_index] + # No new disrupted items. + ODI = 0 + BO_to_DI = 0 + ND_to_DI = 0 + + # How much of outbound shipment was used for previously disrupted items and to clear backorders? + # (Assumes disrupted items are cleared first, then backorders, before satisfying current period's + # demands.) + DI_OS = min(OS, node.state_vars_current.outbound_disrupted_items[s_index]) + BO_OS = min(OS - DI_OS, node.state_vars_current.backorders_by_successor[s_index]) + non_BO_DI_OS = OS - BO_OS - DI_OS + + # Update outbound_shipment and current_on_hand. (Outbound items that were previously disrupted + # do not get subtracted from current_on_hand because they were not included in it to begin with.) + node.state_vars_current.outbound_shipment[s_index] = OS + current_on_hand -= (OS - DI_OS + ODI) + + # Calculate demand met from stock. (Note: This assumes that if there + # are backorders, they get priority over current period's demands.) + DMFS = max(0, OS - node.state_vars_current.backorders_by_successor[s_index]) + node.state_vars_current.demand_met_from_stock += DMFS + node.state_vars_current.demand_met_from_stock_cumul += DMFS + + # Update IL and BO. + node.state_vars_current.inventory_level -= node.state_vars_current.inbound_order[s_index] + + # Calculate new backorders_by_successor. + node.state_vars_current.backorders_by_successor[s_index] -= (BO_OS + BO_to_DI) + node.state_vars_current.backorders_by_successor[s_index] += max(0, + node.state_vars_current.inbound_order[ + s_index] - ND_to_DI - non_BO_DI_OS) + + # Update disrupted_items. + if s is not None: + node.state_vars_current.outbound_disrupted_items[s_index] += ODI - DI_OS def _calculate_fill_rate(node, period): - """Calculate fill rate for the node in the period. + """Calculate fill rate for the node in the period. - Parameters - ---------- - node : |class_node| - The supply chain node. - period : int - Time period. + Parameters + ---------- + node : |class_node| + The supply chain node. + period : int + Time period. - """ - # Calculate fill rate (cumulative in periods 0,...,t). - met_from_stock = node.state_vars[period].demand_met_from_stock_cumul - total_demand = node.state_vars[period].demand_cumul - # met_from_stock = np.sum([node.state_vars[t].demand_met_from_stock for t in range(period + 1)]) - # total_demand = np.sum([node._get_attribute_total('inbound_order', t) - # for t in range(period + 1)]) + """ + # Calculate fill rate (cumulative in periods 0,...,t). + met_from_stock = node.state_vars[period].demand_met_from_stock_cumul + total_demand = node.state_vars[period].demand_cumul + # met_from_stock = np.sum([node.state_vars[t].demand_met_from_stock for t in range(period + 1)]) + # total_demand = np.sum([node._get_attribute_total('inbound_order', t) + # for t in range(period + 1)]) - if total_demand > 0: - node.state_vars_current.fill_rate = met_from_stock / total_demand - else: - node.state_vars_current.fill_rate = 1.0 + if total_demand > 0: + node.state_vars_current.fill_rate = met_from_stock / total_demand + else: + node.state_vars_current.fill_rate = 1.0 def _propagate_shipment_downstream(node): - """Propagate shipment downstream, i.e., add it to successors' ``inbound_shipment_pipeline``. + """Propagate shipment downstream, i.e., add it to successors' ``inbound_shipment_pipeline``. - Parameters - ---------- - node : |class_node| - The supply chain node. + Parameters + ---------- + node : |class_node| + The supply chain node. - Returns - ------- - inbound_shipment : float - The inbound shipment quantity. + Returns + ------- + inbound_shipment : float + The inbound shipment quantity. - """ - # Propagate shipment downstream (i.e., add to successors' inbound_shipment_pipeline). - # (Normally inbound_shipment_pipeline[node.index][s.shipment_lead_time] should equal 0, - # unless there is a type-TP disruption, in which case outbound shipments - # successor wait in slot s.shipment_lead_time until the disruption ends.) - for s in node.successors(): - s.state_vars_current.inbound_shipment_pipeline[node.index][s.shipment_lead_time or 0] \ - += node.state_vars_current.outbound_shipment[s.index] + """ + # Propagate shipment downstream (i.e., add to successors' inbound_shipment_pipeline). + # (Normally inbound_shipment_pipeline[node.index][s.shipment_lead_time] should equal 0, + # unless there is a type-TP disruption, in which case outbound shipments + # successor wait in slot s.shipment_lead_time until the disruption ends.) + for s in node.successors(): + s.state_vars_current.inbound_shipment_pipeline[node.index][s.shipment_lead_time or 0] \ + += node.state_vars_current.outbound_shipment[s.index] # ------------------- @@ -920,62 +920,62 @@ def _propagate_shipment_downstream(node): # SIMULATION STUFF def run_multiple_trials(network, num_trials, num_periods, rand_seed=None, progress_bar=True): - """Run ``num_trials`` trials of the simulation, each with ``num_periods`` - periods. Return mean and SEM of average cost per period across all trials. - - (To build :math:`\\alpha`-confidence interval, use - ``mean_cost`` :math:`\\pm z_{1-(1-\\alpha)/2} \\times` ``sem_cost``.) - - Note: After trials, ``network`` will contain state variables for the - most recent trial. - - Parameters - ---------- - network : |class_network| - The multi-echelon inventory network. - num_trials : int - Number of trials to simulate. - num_periods : int - Number of periods to simulate. - rand_seed : int, optional - Random number generator seed. - progress_bar : bool, optional - Display a progress bar? - - Returns - ------- - mean_cost : float - Mean of average cost per period across all trials. - sem_cost : float - Standard error of average cost per period across all trials. - """ - - # Initialize list of average costs. - average_costs = [] - - # Initialize progress bar. (If not requested, then this will disable it.) - pbar = tqdm(total=num_trials, disable=not progress_bar) - - # Initialize random number generator seed. The idea for now is to initialize - # it with rand_seed (which is possibly None); then, for each trial, initialize it by generating a - # randint. This is because calling np.random.seed(None) is very slow - # (it was the bottleneck of the simulation when running multiple trials) - # so I'm generating seeds pseudo-randomly. Not sure this is the best approach. - np.random.seed(rand_seed) - - # Run trials. - for t in range(num_trials): - # Update progress bar. - pbar.update() - - total_cost = simulation(network, num_periods, rand_seed=np.random.randint(1, 10000), progress_bar=False) - average_costs.append(total_cost / num_periods) - - # Close progress bar. - pbar.close() - - # Calculate mean and SEM of average cost. - mean_cost = float(np.mean(average_costs)) - sem_cost = float(stats.sem(average_costs, ddof=0)) - - return mean_cost, sem_cost + """Run ``num_trials`` trials of the simulation, each with ``num_periods`` + periods. Return mean and SEM of average cost per period across all trials. + + (To build :math:`\\alpha`-confidence interval, use + ``mean_cost`` :math:`\\pm z_{1-(1-\\alpha)/2} \\times` ``sem_cost``.) + + Note: After trials, ``network`` will contain state variables for the + most recent trial. + + Parameters + ---------- + network : |class_network| + The multi-echelon inventory network. + num_trials : int + Number of trials to simulate. + num_periods : int + Number of periods to simulate. + rand_seed : int, optional + Random number generator seed. + progress_bar : bool, optional + Display a progress bar? + + Returns + ------- + mean_cost : float + Mean of average cost per period across all trials. + sem_cost : float + Standard error of average cost per period across all trials. + """ + + # Initialize list of average costs. + average_costs = [] + + # Initialize progress bar. (If not requested, then this will disable it.) + pbar = tqdm(total=num_trials, disable=not progress_bar) + + # Initialize random number generator seed. The idea for now is to initialize + # it with rand_seed (which is possibly None); then, for each trial, initialize it by generating a + # randint. This is because calling np.random.seed(None) is very slow + # (it was the bottleneck of the simulation when running multiple trials) + # so I'm generating seeds pseudo-randomly. Not sure this is the best approach. + np.random.seed(rand_seed) + + # Run trials. + for t in range(num_trials): + # Update progress bar. + pbar.update() + + total_cost = simulation(network, num_periods, rand_seed=np.random.randint(1, 10000), progress_bar=False) + average_costs.append(total_cost / num_periods) + + # Close progress bar. + pbar.close() + + # Calculate mean and SEM of average cost. + mean_cost = float(np.mean(average_costs)) + sem_cost = float(stats.sem(average_costs, ddof=0)) + + return mean_cost, sem_cost diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 8d9a2e5..76adc94 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -52,502 +52,502 @@ # =============================================================================== class SupplyChainNetwork(object): - """The |class_network| class contains one or more nodes, each - represented by a |class_node| object. - - Attributes - ---------- - period : int - The current period. Used for simulation. - problem_specific_data : object - Placeholder for object that is used to provide data for specific - problem types. - max_max_replenishment_time : int - Largest value of ``max_replenishment_time`` among all nodes in the network. - Used by |mod_gsm_tree| module. - """ - - def __init__(self, **kwargs): - """SupplyChainNetwork constructor method. - - Parameters - ---------- - kwargs : optional - Optional keyword arguments to specify network attributes. - - Raises - ------ - AttributeError - If an optional keyword argument does not match a |class_network| attribute. - - """ - # Initialize attributes. - self.initialize() - - # Set attributes specified by kwargs. - for key, value in kwargs.items(): - if key in vars(self): - vars(self)[key] = value - elif f"_{key}" in vars(self): - vars(self)[f"_{key}"] = value - else: - raise AttributeError(f"{key} is not an attribute of SupplyChainNetwork") - - _DEFAULT_VALUES = { - '_nodes': [], - '_period': 0, - 'max_max_replenishment_time': None - } - - @property - def nodes(self): - """List of all nodes in the network, as |class_node| objects. Read only. - """ - if hasattr(self, '_nodes'): - return self._nodes - else: - return [] - - @property - def node_indices(self): - """List of indices of all nodes in the network. Read only. - """ - return [node.index for node in self.nodes] - - @property - def period(self): - return self._period - - @period.setter - def period(self, value): - self._period = value - - @property - def source_nodes(self): - """List of all source nodes, i.e., all nodes that have no predecessors, - as |class_node| objects. - """ - return [node for node in self.nodes if node.predecessor_indices() == []] - - @property - def sink_nodes(self): - """List of all sink nodes, i.e., all nodes that have no successors, - as |class_node| objects. - """ - return [node for node in self.nodes if node.successor_indices() == []] - - @property - def edges(self): - """List of all edges, as tuples whose elements are the indices of - the nodes in the edge. - """ - edge_list = [] - for n in self.nodes: - for m in n.successors(): - edge_list.append((n.index, m.index)) - return edge_list - - def has_directed_cycle(self): - """Check whether network contains a directed cycle. - - Returns - ------- - bool - ``True`` if network contains a directed cycle, ``False`` otherwise. - """ - - # Build networkx representation. - G = self.networkx_digraph() - - # Count simple cycles. - num_cycles = len(list(nx.simple_cycles(G))) - - return num_cycles > 0 - - # Special members. - - def __repr__(self): - """ - Return a string representation of the |class_network| instance. - - Returns - ------- - str - A string representation of the |class_network| instance. - - """ - return "SupplyChainNetwork({:s})".format(str(vars(self))) - - # Attribute management. - - def initialize(self): - """Initialize the parameters in the object to their default values. - """ - # Loop through attributes. Special handling for list attributes. - for attr in self._DEFAULT_VALUES.keys(): - if is_list(self._DEFAULT_VALUES[attr]): - setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) - else: - setattr(self, attr, self._DEFAULT_VALUES[attr]) - - # # --- Nodes and Period --- # - # if overwrite or not hasattr(self, '_nodes'): - # self._nodes = [] - # elif is_list(self._nodes): - # for n in self._nodes: - # n.initialize(overwrite=False) - # if overwrite or not hasattr(self, '_period'): - # self._period = 0 - - # # --- Intermediate Calculations for GSM Problems --- # - # if overwrite or not hasattr(self, 'max_max_replenishment_time'): - # self.max_max_replenishment_time = None - - def deep_equal_to(self, other, rel_tol=1e-8): - """Check whether network "deeply equals" ``other``, i.e., if all attributes are - equal, including attributes that are themselves objects. - - Parameters - ---------- - other : |class_network| - The network to compare this one to. - rel_tol : float, optional - Relative tolerance to use when comparing equality of float attributes. - - Returns - ------- - bool - ``True`` if the two networks are equal, ``False`` otherwise. - """ - - eq = True - - if sorted(self.node_indices) != sorted(other.node_indices): - eq = False - else: - # Special handling for some attributes. - for attr in self._DEFAULT_VALUES.keys(): - if attr == '_nodes': - for n_ind in sorted(self.node_indices): - other_node = other.get_node_from_index(n_ind) - if other_node is None: - eq = False - elif not self.get_node_from_index(n_ind).deep_equal_to(other_node, rel_tol=rel_tol): - eq = False - else: - if getattr(self, attr) != getattr(other, attr): - eq = False - - return eq - - def to_dict(self): - """Convert the |class_network| object to a dict. Converts the object recursively, - calling ``to_dict()`` on each |class_node| in the network. - - Returns - ------- - dict - The dict representation of the network. - """ - # Initialize dict. - network_dict = {} - - # Attributes. - for attr in self._DEFAULT_VALUES.keys(): - # Remove leading '_' to get property names. - prop = attr[1:] if attr[0] == '_' else attr - if attr == '_nodes': - network_dict['nodes'] = [] - for n in self.nodes: - network_dict['nodes'].append(n.to_dict()) - else: - network_dict[prop] = getattr(self, prop) - - return network_dict - - @classmethod - def from_dict(cls, the_dict): - """Return a new |class_network| object with attributes copied from the - values in ``the_dict``. - - Parameters - ---------- - the_dict : dict - Dict representation of a |class_network|, typically created using ``to_dict()``. - - Returns - ------- - SupplyChainNetwork - The object converted from the dict. - """ - if the_dict is None: - network = cls() - else: - # Build empty SupplyChainNetwork. - network = cls() - # Fill attributes. - for attr in cls._DEFAULT_VALUES.keys(): - if attr == '_nodes': - if 'nodes' not in the_dict: - network._nodes = copy.deepcopy(cls._DEFAULT_VALUES['_nodes']) - else: - for n_dict in the_dict['nodes']: - network.add_node(SupplyChainNode.from_dict(n_dict)) - # Convert nodes' successors and predecessors back to node objects. (SupplyChainNode.to_dict() - # replaces them with indices.) - for n in network.nodes: - preds = [] - succs = [] - for m in network.nodes: - if m.index in n.predecessors(): - preds.append(m) - if m.index in n.successors(): - succs.append(m) - n._predecessors = preds - n._successors = succs - else: - # Remove leading '_' to get property names. - prop = attr[1:] if attr[0] == '_' else attr - if prop in the_dict: - value = the_dict[prop] - else: - value = cls._DEFAULT_VALUES[attr] - setattr(network, attr, value) - - return network - - # # Non-object attributes. - # network.period = the_dict['period'] - # network.max_max_replenishment_time = the_dict['max_max_replenishment_time'] - - # # Nodes. - # for n_dict in the_dict['nodes']: - # network.add_node(SupplyChainNode.from_dict(n_dict)) - - # # Convert nodes' successors and predecessors back to node objects. (SupplyChainNode.to_dict() - # # replaces them with indices.) - # for n in network.nodes: - # preds = [] - # succs = [] - # for m in network.nodes: - # if m.index in n.predecessors(): - # preds.append(m) - # if m.index in n.successors(): - # succs.append(m) - # n._predecessors = preds - # n._successors = succs - - # return network - - # Methods for node handling. - - def get_node_from_index(self, index): - """Return node object with the specified index, or ``None`` if no - matching node is found. - - Parameters - ---------- - index : int - Index of node to find. - - Returns - ------- - |class_node| - The node whose index is ``index``, or ``None`` if none. - - """ - for node in self.nodes: - if node.index == index: - return node - - return None - - def reindex_nodes(self, old_to_new_dict, new_names=None): - """Change indices of the nodes in the network using ``old_to_new_dict``. - If ``new_names`` is provided, also updates ``name`` attribute of the nodes. - - Parameters - ---------- - old_to_new_dict : dict - Dict in which keys are old indices and values are new indices. - new_names : dict, optional - Dict in which keys are old indices and values are new names. - - """ - # Reindex state variables. (This must be done before reindexing nodes.) - for node in self.nodes: - node.reindex_all_state_variables(old_to_new_dict) - - # Reindex nodes. - for node in self.nodes: - # Reindex node. - old_index = node.index - node.index = old_to_new_dict[old_index] - # Rename node. - if new_names is not None: - node.name = new_names[old_index] - - # Methods related to network structure. - - def add_node(self, node): - """Add ``node`` to the network. ``node`` will not be connected to other - nodes that might be in the network already. - - If ``node`` is already in the network (as determined by the index), - do nothing. - - Parameters - ---------- - node : |class_node| - The node to add to the network. - """ - - # Check whether node is already in network. - if node not in self.nodes: - self.nodes.append(node) - node.network = self - - def add_edge(self, from_index, to_index): - """Add an edge to the network to and from the nodes with the specified indices. - If the edge is already in the network, does nothing. - - Parameters - ---------- - from_index : int - Index of "from" node. - to_index : int - Index of "to" node. - - Raises - ------ - ValueError - If either index is not in the network. - """ - - if (from_index, to_index) not in self.edges: - - # Get nodes. - from_node = self.get_node_from_index(from_index) - to_node = self.get_node_from_index(to_index) - - # Do nodes exist? - if from_node is None: - raise ValueError(f"No node with index {from_index} in network") - if to_node is None: - raise ValueError(f"No node with index {to_index} in network") - - # Add edge. - self.add_successor(from_node, to_node) - - def add_edges_from_list(self, edge_list): - """Add multiple edges to the network from a list of index tuples. - Any edge that is already in the network is ignored. - - Parameters - ---------- - edge_list : list - List of tuples of indices of nodes in edges. - - Raises - ------ - ValueError - If any of the nodes are not in the network. - """ - - # Loop through edges in list. - for e in edge_list: - self.add_edge(e[0], e[1]) - - def add_successor(self, node, successor_node): - """Add ``successor_node`` as a successor to ``node``. ``node`` must - already be contained in the network. - - The method adds the nodes to each other's lists of _successors and - _predecessors. If ``successor_node`` is not already contained in the - network, the method also adds it. (The node is assumed to be contained - in the network if its index or name match those of a node in the network.) - - Parameters - ---------- - node : |class_node| - The node to which the successor should be added. - successor_node : |class_node| - The node to be added as a successor. - - """ - - # Add nodes to each other's predecessor and successor lists. - node.add_successor(successor_node) - successor_node.add_predecessor(node) - - # Add node to network (if not already contained in it). - self.add_node(successor_node) - - def add_predecessor(self, node, predecessor_node): - """Add ``predecessor_node`` as a predecessor to ``node``. ``node`` must - already be contained in the network. - - The method adds the nodes to each other's lists of _successors and - _predecessors. If ``predecessor_node`` is not already contained in the - network, the method also adds it. (The node is assumed to be contained - in the network if its index or name match those of a node in the network.) - - Parameters - ---------- - node : |class_node| - The node to which the successor should be added. - predecessor_node : |class_node| - The node to be added as a predecessor. - - """ - - # Add nodes to each other's predecessor and successor lists. - node.add_predecessor(predecessor_node) - predecessor_node.add_successor(node) - - # Add node to network (if not already contained in it). - self.add_node(predecessor_node) - - def remove_node(self, node): - """Remove a node from the network. Remove the node from the node list and - from its predecessors' and successors' successors and predecessors lists. - - If ``node`` is not in the network (as determined by the index), do nothing. - - Parameters - ---------- - node : |class_node| - The node to remove. - """ - - # Check whether node is in network. - if node in self.nodes: - # Remove from successors' predecessors lists. - for s in node.successors(): - s.remove_predecessor(node) - # Remove from predecessors' successors lists. - for p in node.predecessors(): - p.remove_successor(node) - # Remove node from network. - self.nodes.remove(node) - - def networkx_digraph(self): - """Build a `NetworkX `_ ``DiGraph`` object with the same structure as - the |class_network|. - - Returns - ------- - digraph : DiGraph - The ``networkx`` ``digraph`` object. - """ - - digraph = nx.DiGraph() - digraph.add_nodes_from(self.node_indices) - for n in self.nodes: - for p in n.predecessors(): - digraph.add_edge(p.index, n.index) - - return digraph + """The |class_network| class contains one or more nodes, each + represented by a |class_node| object. + + Attributes + ---------- + period : int + The current period. Used for simulation. + problem_specific_data : object + Placeholder for object that is used to provide data for specific + problem types. + max_max_replenishment_time : int + Largest value of ``max_replenishment_time`` among all nodes in the network. + Used by |mod_gsm_tree| module. + """ + + def __init__(self, **kwargs): + """SupplyChainNetwork constructor method. + + Parameters + ---------- + kwargs : optional + Optional keyword arguments to specify network attributes. + + Raises + ------ + AttributeError + If an optional keyword argument does not match a |class_network| attribute. + + """ + # Initialize attributes. + self.initialize() + + # Set attributes specified by kwargs. + for key, value in kwargs.items(): + if key in vars(self): + vars(self)[key] = value + elif f"_{key}" in vars(self): + vars(self)[f"_{key}"] = value + else: + raise AttributeError(f"{key} is not an attribute of SupplyChainNetwork") + + _DEFAULT_VALUES = { + '_nodes': [], + '_period': 0, + 'max_max_replenishment_time': None + } + + @property + def nodes(self): + """List of all nodes in the network, as |class_node| objects. Read only. + """ + if hasattr(self, '_nodes'): + return self._nodes + else: + return [] + + @property + def node_indices(self): + """List of indices of all nodes in the network. Read only. + """ + return [node.index for node in self.nodes] + + @property + def period(self): + return self._period + + @period.setter + def period(self, value): + self._period = value + + @property + def source_nodes(self): + """List of all source nodes, i.e., all nodes that have no predecessors, + as |class_node| objects. Read only. + """ + return [node for node in self.nodes if node.predecessor_indices() == []] + + @property + def sink_nodes(self): + """List of all sink nodes, i.e., all nodes that have no successors, + as |class_node| objects. Read only. + """ + return [node for node in self.nodes if node.successor_indices() == []] + + @property + def edges(self): + """List of all edges, as tuples whose elements are the indices of + the nodes in the edge. Read only. + """ + edge_list = [] + for n in self.nodes: + for m in n.successors(): + edge_list.append((n.index, m.index)) + return edge_list + + def has_directed_cycle(self): + """Check whether network contains a directed cycle. + + Returns + ------- + bool + ``True`` if network contains a directed cycle, ``False`` otherwise. + """ + + # Build networkx representation. + G = self.networkx_digraph() + + # Count simple cycles. + num_cycles = len(list(nx.simple_cycles(G))) + + return num_cycles > 0 + + # Special members. + + def __repr__(self): + """ + Return a string representation of the |class_network| instance. + + Returns + ------- + str + A string representation of the |class_network| instance. + + """ + return "SupplyChainNetwork({:s})".format(str(vars(self))) + + # Attribute management. + + def initialize(self): + """Initialize the parameters in the object to their default values. + """ + # Loop through attributes. Special handling for list attributes. + for attr in self._DEFAULT_VALUES.keys(): + if is_list(self._DEFAULT_VALUES[attr]): + setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) + else: + setattr(self, attr, self._DEFAULT_VALUES[attr]) + + # # --- Nodes and Period --- # + # if overwrite or not hasattr(self, '_nodes'): + # self._nodes = [] + # elif is_list(self._nodes): + # for n in self._nodes: + # n.initialize(overwrite=False) + # if overwrite or not hasattr(self, '_period'): + # self._period = 0 + + # # --- Intermediate Calculations for GSM Problems --- # + # if overwrite or not hasattr(self, 'max_max_replenishment_time'): + # self.max_max_replenishment_time = None + + def deep_equal_to(self, other, rel_tol=1e-8): + """Check whether network "deeply equals" ``other``, i.e., if all attributes are + equal, including attributes that are themselves objects. + + Parameters + ---------- + other : |class_network| + The network to compare this one to. + rel_tol : float, optional + Relative tolerance to use when comparing equality of float attributes. + + Returns + ------- + bool + ``True`` if the two networks are equal, ``False`` otherwise. + """ + + eq = True + + if sorted(self.node_indices) != sorted(other.node_indices): + eq = False + else: + # Special handling for some attributes. + for attr in self._DEFAULT_VALUES.keys(): + if attr == '_nodes': + for n_ind in sorted(self.node_indices): + other_node = other.get_node_from_index(n_ind) + if other_node is None: + eq = False + elif not self.get_node_from_index(n_ind).deep_equal_to(other_node, rel_tol=rel_tol): + eq = False + else: + if getattr(self, attr) != getattr(other, attr): + eq = False + + return eq + + def to_dict(self): + """Convert the |class_network| object to a dict. Converts the object recursively, + calling ``to_dict()`` on each |class_node| in the network. + + Returns + ------- + dict + The dict representation of the network. + """ + # Initialize dict. + network_dict = {} + + # Attributes. + for attr in self._DEFAULT_VALUES.keys(): + # Remove leading '_' to get property names. + prop = attr[1:] if attr[0] == '_' else attr + if attr == '_nodes': + network_dict['nodes'] = [] + for n in self.nodes: + network_dict['nodes'].append(n.to_dict()) + else: + network_dict[prop] = getattr(self, prop) + + return network_dict + + @classmethod + def from_dict(cls, the_dict): + """Return a new |class_network| object with attributes copied from the + values in ``the_dict``. + + Parameters + ---------- + the_dict : dict + Dict representation of a |class_network|, typically created using ``to_dict()``. + + Returns + ------- + SupplyChainNetwork + The object converted from the dict. + """ + if the_dict is None: + network = cls() + else: + # Build empty SupplyChainNetwork. + network = cls() + # Fill attributes. + for attr in cls._DEFAULT_VALUES.keys(): + if attr == '_nodes': + if 'nodes' not in the_dict: + network._nodes = copy.deepcopy(cls._DEFAULT_VALUES['_nodes']) + else: + for n_dict in the_dict['nodes']: + network.add_node(SupplyChainNode.from_dict(n_dict)) + # Convert nodes' successors and predecessors back to node objects. (SupplyChainNode.to_dict() + # replaces them with indices.) + for n in network.nodes: + preds = [] + succs = [] + for m in network.nodes: + if m.index in n.predecessors(): + preds.append(m) + if m.index in n.successors(): + succs.append(m) + n._predecessors = preds + n._successors = succs + else: + # Remove leading '_' to get property names. + prop = attr[1:] if attr[0] == '_' else attr + if prop in the_dict: + value = the_dict[prop] + else: + value = cls._DEFAULT_VALUES[attr] + setattr(network, attr, value) + + return network + + # # Non-object attributes. + # network.period = the_dict['period'] + # network.max_max_replenishment_time = the_dict['max_max_replenishment_time'] + + # # Nodes. + # for n_dict in the_dict['nodes']: + # network.add_node(SupplyChainNode.from_dict(n_dict)) + + # # Convert nodes' successors and predecessors back to node objects. (SupplyChainNode.to_dict() + # # replaces them with indices.) + # for n in network.nodes: + # preds = [] + # succs = [] + # for m in network.nodes: + # if m.index in n.predecessors(): + # preds.append(m) + # if m.index in n.successors(): + # succs.append(m) + # n._predecessors = preds + # n._successors = succs + + # return network + + # Methods for node handling. + + def get_node_from_index(self, index): + """Return |class_node| object with the specified index, or ``None`` if no + matching node is found. + + Parameters + ---------- + index : int + Index of node to find. + + Returns + ------- + |class_node| + The node whose index is ``index``, or ``None`` if none. + + """ + for node in self.nodes: + if node.index == index: + return node + + return None + + def reindex_nodes(self, old_to_new_dict, new_names=None): + """Change indices of the nodes in the network using ``old_to_new_dict``. + If ``new_names`` is provided, also updates ``name`` attribute of the nodes. + + Parameters + ---------- + old_to_new_dict : dict + Dict in which keys are old indices and values are new indices. + new_names : dict, optional + Dict in which keys are old indices and values are new names. + + """ + # Reindex state variables. (This must be done before reindexing nodes.) + for node in self.nodes: + node.reindex_all_state_variables(old_to_new_dict) + + # Reindex nodes. + for node in self.nodes: + # Reindex node. + old_index = node.index + node.index = old_to_new_dict[old_index] + # Rename node. + if new_names is not None: + node.name = new_names[old_index] + + # Methods related to network structure. + + def add_node(self, node): + """Add ``node`` to the network. ``node`` will not be connected to other + nodes that might be in the network already. + + If ``node`` is already in the network (as determined by the index), + do nothing. + + Parameters + ---------- + node : |class_node| + The node to add to the network. + """ + + # Check whether node is already in network. + if node not in self.nodes: + self.nodes.append(node) + node.network = self + + def add_edge(self, from_index, to_index): + """Add an edge to the network to and from the nodes with the specified indices. + If the edge is already in the network, does nothing. + + Parameters + ---------- + from_index : int + Index of "from" node. + to_index : int + Index of "to" node. + + Raises + ------ + ValueError + If either index is not in the network. + """ + + if (from_index, to_index) not in self.edges: + + # Get nodes. + from_node = self.get_node_from_index(from_index) + to_node = self.get_node_from_index(to_index) + + # Do nodes exist? + if from_node is None: + raise ValueError(f"No node with index {from_index} in network") + if to_node is None: + raise ValueError(f"No node with index {to_index} in network") + + # Add edge. + self.add_successor(from_node, to_node) + + def add_edges_from_list(self, edge_list): + """Add multiple edges to the network from a list of index tuples. + Any edge that is already in the network is ignored. + + Parameters + ---------- + edge_list : list + List of tuples of indices of nodes in edges. + + Raises + ------ + ValueError + If any of the nodes are not in the network. + """ + + # Loop through edges in list. + for e in edge_list: + self.add_edge(e[0], e[1]) + + def add_successor(self, node, successor_node): + """Add ``successor_node`` as a successor to ``node``. ``node`` must + already be contained in the network. + + The method adds the nodes to each other's lists of _successors and + _predecessors. If ``successor_node`` is not already contained in the + network, the method also adds it. (The node is assumed to be contained + in the network if its index or name match those of a node in the network.) + + Parameters + ---------- + node : |class_node| + The node to which the successor should be added. + successor_node : |class_node| + The node to be added as a successor. + + """ + + # Add nodes to each other's predecessor and successor lists. + node.add_successor(successor_node) + successor_node.add_predecessor(node) + + # Add node to network (if not already contained in it). + self.add_node(successor_node) + + def add_predecessor(self, node, predecessor_node): + """Add ``predecessor_node`` as a predecessor to ``node``. ``node`` must + already be contained in the network. + + The method adds the nodes to each other's lists of _successors and + _predecessors. If ``predecessor_node`` is not already contained in the + network, the method also adds it. (The node is assumed to be contained + in the network if its index or name match those of a node in the network.) + + Parameters + ---------- + node : |class_node| + The node to which the successor should be added. + predecessor_node : |class_node| + The node to be added as a predecessor. + + """ + + # Add nodes to each other's predecessor and successor lists. + node.add_predecessor(predecessor_node) + predecessor_node.add_successor(node) + + # Add node to network (if not already contained in it). + self.add_node(predecessor_node) + + def remove_node(self, node): + """Remove a node from the network. Remove the node from the node list and + from its predecessors' and successors' successors and predecessors lists. + + If ``node`` is not in the network (as determined by the index), do nothing. + + Parameters + ---------- + node : |class_node| + The node to remove. + """ + + # Check whether node is in network. + if node in self.nodes: + # Remove from successors' predecessors lists. + for s in node.successors(): + s.remove_predecessor(node) + # Remove from predecessors' successors lists. + for p in node.predecessors(): + p.remove_successor(node) + # Remove node from network. + self.nodes.remove(node) + + def networkx_digraph(self): + """Build a `NetworkX `_ ``DiGraph`` object with the same structure as + the |class_network|. + + Returns + ------- + digraph : DiGraph + The ``networkx`` ``digraph`` object. + """ + + digraph = nx.DiGraph() + digraph.add_nodes_from(self.node_indices) + for n in self.nodes: + for p in n.predecessors(): + digraph.add_edge(p.index, n.index) + + return digraph # =============================================================================== @@ -555,224 +555,226 @@ def networkx_digraph(self): # =============================================================================== def network_from_edges(edges, node_order_in_lists=None, **kwargs): - """Construct a supply chain network with the specified edges. - - The ``kwargs`` parameters specify the attributes (data) for the nodes in the network. - If they are provided, they must be either a dict, a list, or a singleton, - with the following requirements: - - * If the parameter is a dict, then the keys must contain the node indices - and the values must contain the corresponding attribute values. If a given - node index is contained in the list of edges but is not a key in the dict, - the attribute value is set to ``None`` for that node. - * If the parameter is a singleton, then the attribute is set to that value - for all nodes. - * If the parameter is a list and ``node_order_in_lists`` is provided, ``node_order_in_lists`` - must contain the same indices as the nodes in the edges in ``edges`` (otherwise a ``ValueError`` - is raised). The values in the list are - assumed to correspond to the node indices in the order they are specified in - ``node_order_in_lists``. That is, the value in slot ``k`` in the parameter list is - assigned to the node with index ``node_order_in_lists[k]``. If a given - node index is contained in the list of edges but is not in ``node_order_in_lists``, - the attribute value is set to ``None`` for that node. - * If the parameter is a list and ``node_order_in_lists`` is not provided, the values - in the list are assumed to correspond to the sorted list of node indices in - the edge list. That is, the value in slot ``k`` in the parameter list is assigned - to the node in slot ``k`` when the nodes in the edge list are sorted. - - If ``edges`` is ``None`` or ``[]``, a single-node network is returned. The index of the node - is set to 0, unless ``node_order_in_lists`` is provided, in which case the node's index is set to - ``node_order_in_lists[0]``. The rules for ``kwargs`` above also apply to the single-node case. - - The ``supply_type`` attribute is set to 'U' at all nodes that have no predecessors and to - ``None`` at all other nodes, no matter how (or whether) the corresponding parameter is set. - - For the ``demand_source`` attribute, you may pass a |class_demand_source| object - *or* the individual attributes of the demand source (``mean``, ``round_to_int``, etc.). - In the latter case, a ``DemandSource`` object will be constructed with the specified - attributes and filled into the ``demand_source`` attribute of the node. **Note:** If providing - individual demand source attributes, the ``type`` attribute must be called ``demand_type`` - to avoid ambiguity with other objects. - - Similarly, you may pass |class_policy| and |class_disruption_process| objects for - the ``inventory_policy`` and ``disruption_process`` attributes, or you may pass - the individual attributes for these objects. **Note:** If providing individual inventory policy - attributes, the ``type`` attribute must be called ``policy_type`` to avoid - ambiguity with other objects. - - If ``kwargs`` contains a parameter that is not an attribute of |class_node| or one of - its attribute objects (|class_demand_source|, |class_policy|, or |class_disruption_process|), - an ``AttributeError`` is raised. (Exception: ``demand_type`` and ``policy_type`` are allowed - even though they are not attributes of |class_node|; see above.) - - - .. note:: This function does not check that valid attributes have been provided for - ``demand_source``, ``inventory_policy``, and ``disruption_process``. For example, - it does not check that a ``base_stock_level`` has been provided if the policy type - is set to ``BS``. - - - Parameters - ---------- - edges : list - List of edges, with each edge specified as a tuple ``(a, b)``, where ``a`` - is the index of the predecessor and ``b`` is the index of the successor node. - If ``None`` or empty, a single-node network is created. - node_order_in_lists : list, optional - List of node indices in the order in which the nodes are listed in any - attributes that are lists. (``node_order_in_lists[k]`` is the index of the ``k`` th node.) - kwargs : optional - Optional keyword arguments to specify node attributes. - - - Raises - ------ - AttributeError - If ``kwargs`` contains a parameter that is not an attribute of |class_node|. - - """ - - # (Exception: ``demand_list`` and ``probabilities`` attributes of |class_demand_source| may be - # lists; these lists are treated as singletons for the purpose of the rules above.) - - # Create network. - network = SupplyChainNetwork() - - # Is the edge list non-empty? - if edges: - # Add nodes from edge list. - for e in edges: - if e[0] not in network.node_indices: - network.add_node(SupplyChainNode(e[0])) - if e[1] not in network.node_indices: - network.add_node(SupplyChainNode(e[1])) - else: - # Add single node. - if node_order_in_lists is not None: - ind = node_order_in_lists[0] - else: - ind = 0 - network.add_node(SupplyChainNode(ind)) - - # Check attributes in kwargs. - for a in kwargs.keys(): - if not hasattr(network.nodes[0], a) and \ - not hasattr(network.nodes[0].demand_source, a) and \ - not hasattr(network.nodes[0].inventory_policy, a) and \ - not hasattr(network.nodes[0].disruption_process, a) and \ - a not in ('demand_type', 'policy_type', 'order_capacity'): - raise AttributeError(f"{a} is not an attribute of SupplyChainNode") - - # Check node_order_in_lists; if not provided, build it. - if node_order_in_lists is None: - node_order_in_lists = sorted(network.node_indices) - else: - if set(node_order_in_lists) != set(network.node_indices): - raise ValueError("node_order_in_lists does not match nodes contained in edge list") - - # Add edges. - for e in edges: - source = network.get_node_from_index(e[0]) - sink = network.get_node_from_index(e[1]) - network.add_successor(source, sink) - - # Build data dict. - data_dict = build_node_data_dict(attribute_dict=kwargs, node_order_in_lists=node_order_in_lists) - - # Set node attributes. (The code below uses the get() function to access the - # dictionaries within data_dict; get() returns None if the requested key is not - # in the dict.) - for n in network.nodes: - - # Costs and lead times. - if data_dict[n.index].get('local_holding_cost') is not None: - n.local_holding_cost = data_dict[n.index].get('local_holding_cost') - else: - n.local_holding_cost = data_dict[n.index].get('holding_cost') - n.echelon_holding_cost = data_dict[n.index].get('echelon_holding_cost') - n.order_capacity = data_dict[n.index].get('order_capacity') - n.local_holding_cost_function = data_dict[n.index].get('local_holding_cost_function') - n.in_transit_holding_cost = data_dict[n.index].get('in_transit_holding_cost') - n.stockout_cost = data_dict[n.index].get('stockout_cost') - n.stockout_cost_function = data_dict[n.index].get('stockout_cost_function') - n.purchase_cost = data_dict[n.index].get('purchase_cost') - n.revenue = data_dict[n.index].get('revenue') - if data_dict[n.index].get('shipment_lead_time') is not None: - n.shipment_lead_time = data_dict[n.index].get('shipment_lead_time') - else: - n.shipment_lead_time = data_dict[n.index].get('lead_time') - n.order_lead_time = data_dict[n.index].get('order_lead_time') - - # Demand source. - if data_dict[n.index].get('demand_source') is not None: - n.demand_source = data_dict[n.index]['demand_source'] - else: - # Create DemandSource object. (Don't override default value for round_to_int - # with None.) - ds = DemandSource() - ds.type = data_dict[n.index].get('demand_type') - if data_dict[n.index].get('round_to_int') is not None: - ds.round_to_int = data_dict[n.index].get('round_to_int') - ds.mean = data_dict[n.index].get('mean') - ds.standard_deviation = data_dict[n.index].get('standard_deviation') - ds.demand_list = data_dict[n.index].get('demand_list') - ds.probabilities = data_dict[n.index].get('probabilities') - ds.lo = data_dict[n.index].get('lo') - ds.hi = data_dict[n.index].get('hi') - n.demand_source = ds - - # Inventory policy. - if data_dict[n.index].get('inventory_policy') is not None: - n.inventory_policy = data_dict[n.index]['inventory_policy'] - n.inventory_policy.node = n - else: - # Create Policy object. - pol = Policy() - pol.type = data_dict[n.index].get('policy_type') - pol.node = n - pol.base_stock_level = data_dict[n.index].get('base_stock_level') - pol.order_quantity = data_dict[n.index].get('order_quantity') - pol.reorder_point = data_dict[n.index].get('reorder_point') - pol.order_up_to_level = data_dict[n.index].get('order_up_to_level') - n.inventory_policy = pol - - # Disruption process. - if data_dict[n.index].get('disruption_process') is not None: - n.disruption_process = data_dict[n.index]['disruption_process'] - else: - # Create DisruptionProcess object. (Don't override default values for disruption_type - # or disrupted with None.) - dp = DisruptionProcess() - dp.random_process_type = data_dict[n.index].get('random_process_type') - if data_dict[n.index].get('disruption_type') is not None: - dp.disruption_type = data_dict[n.index].get('disruption_type') - dp.disruption_probability = data_dict[n.index].get('disruption_probability') - dp.recovery_probability = data_dict[n.index].get('recovery_probability') - dp.disruption_state_list = data_dict[n.index].get('disruption_state_list') - if data_dict[n.index].get('disrupted') is not None: - dp.disrupted = data_dict[n.index].get('disrupted') - n.disruption_process = dp - - # Supply type. - if not n.predecessors(): - n.supply_type = 'U' - - # Initial quantities. - n.initial_inventory_level = data_dict[n.index].get('initial_inventory_level') - n.initial_orders = data_dict[n.index].get('initial_orders') - n.initial_shipments = data_dict[n.index].get('initial_shipments') - - # GSM parameters. - n.processing_time = data_dict[n.index].get('processing_time') - n.external_inbound_cst = data_dict[n.index].get('external_inbound_cst') - n.external_outbound_cst = data_dict[n.index].get('external_outbound_cst') - n.demand_bound_constant = data_dict[n.index].get('demand_bound_constant') - n.units_required = data_dict[n.index].get('units_required') - - # Problem-specific data. - n.problem_specific_data = data_dict[n.index].get('problem_specific_data') - - return network + """Construct a supply chain network with the specified edges. + + The ``kwargs`` parameters specify the attributes (data) for the nodes in the network. + If they are provided, they must be either a dict, a list, or a singleton, + with the following requirements: + + * If the parameter is a dict, then the keys must contain the node indices + and the values must contain the corresponding attribute values. If a given + node index is contained in the list of edges but is not a key in the dict, + the attribute value is set to ``None`` for that node. + * If the parameter is a singleton, then the attribute is set to that value + for all nodes. + * If the parameter is a list and ``node_order_in_lists`` is provided, ``node_order_in_lists`` + must contain the same indices as the nodes in the edges in ``edges`` (otherwise a ``ValueError`` + is raised). The values in the list are + assumed to correspond to the node indices in the order they are specified in + ``node_order_in_lists``. That is, the value in slot ``k`` in the parameter list is + assigned to the node with index ``node_order_in_lists[k]``. If a given + node index is contained in the list of edges but is not in ``node_order_in_lists``, + the attribute value is set to ``None`` for that node. + * If the parameter is a list and ``node_order_in_lists`` is not provided, the values + in the list are assumed to correspond to the sorted list of node indices in + the edge list. That is, the value in slot ``k`` in the parameter list is assigned + to the node in slot ``k`` when the nodes in the edge list are sorted. + + If ``edges`` is ``None`` or ``[]``, a single-node network is returned. The index of the node + is set to 0, unless ``node_order_in_lists`` is provided, in which case the node's index is set to + ``node_order_in_lists[0]``. The rules for ``kwargs`` above also apply to the single-node case. + + The ``supply_type`` attribute is set to 'U' at all nodes that have no predecessors and to + ``None`` at all other nodes, no matter how (or whether) the corresponding parameter is set. + + For the ``demand_source`` attribute, you may pass a |class_demand_source| object + *or* the individual attributes of the demand source (``mean``, ``round_to_int``, etc.). + In the latter case, a ``DemandSource`` object will be constructed with the specified + attributes and filled into the ``demand_source`` attribute of the node. **Note:** If providing + individual demand source attributes, the ``type`` attribute must be called ``demand_type`` + to avoid ambiguity with other objects. + + Similarly, you may pass |class_policy| and |class_disruption_process| objects for + the ``inventory_policy`` and ``disruption_process`` attributes, or you may pass + the individual attributes for these objects. **Note:** If providing individual inventory policy + attributes, the ``type`` attribute must be called ``policy_type`` to avoid + ambiguity with other objects. + + If ``kwargs`` contains a parameter that is not an attribute of |class_node| or one of + its attribute objects (|class_demand_source|, |class_policy|, or |class_disruption_process|), + an ``AttributeError`` is raised. (Exception: ``demand_type`` and ``policy_type`` are allowed + even though they are not attributes of |class_node|; see above.) + + + .. note:: This function does not check that valid attributes have been provided for + ``demand_source``, ``inventory_policy``, and ``disruption_process``. For example, + it does not check that a ``base_stock_level`` has been provided if the policy type + is set to ``BS``. + + + Parameters + ---------- + edges : list + List of edges, with each edge specified as a tuple ``(a, b)``, where ``a`` + is the index of the predecessor and ``b`` is the index of the successor node. + If ``None`` or empty, a single-node network is created. + node_order_in_lists : list, optional + List of node indices in the order in which the nodes are listed in any + attributes that are lists. (``node_order_in_lists[k]`` is the index of the ``k`` th node.) + kwargs : optional + Optional keyword arguments to specify node attributes. + + + Raises + ------ + AttributeError + If ``kwargs`` contains a parameter that is not an attribute of |class_node|. + + """ + + # (Exception: ``demand_list`` and ``probabilities`` attributes of |class_demand_source| may be + # lists; these lists are treated as singletons for the purpose of the rules above.) + + # Create network. + network = SupplyChainNetwork() + + # Is the edge list non-empty? + if edges: + # Add nodes from edge list. + for e in edges: + if e[0] not in network.node_indices: + network.add_node(SupplyChainNode(e[0])) + if e[1] not in network.node_indices: + network.add_node(SupplyChainNode(e[1])) + else: + # Add single node. + if node_order_in_lists is not None: + ind = node_order_in_lists[0] + else: + ind = 0 + network.add_node(SupplyChainNode(ind)) + + # Check attributes in kwargs. + for a in kwargs.keys(): + if not hasattr(network.nodes[0], a) and \ + not hasattr(network.nodes[0].demand_source, a) and \ + not hasattr(network.nodes[0].inventory_policy, a) and \ + not hasattr(network.nodes[0].disruption_process, a) and \ + a not in ('demand_type', 'policy_type', 'order_capacity'): + raise AttributeError(f"{a} is not an attribute of SupplyChainNode") + + # Check node_order_in_lists; if not provided, build it. + if node_order_in_lists is None: + node_order_in_lists = sorted(network.node_indices) + else: + if set(node_order_in_lists) != set(network.node_indices): + raise ValueError("node_order_in_lists does not match nodes contained in edge list") + + # Add edges. + for e in edges: + source = network.get_node_from_index(e[0]) + sink = network.get_node_from_index(e[1]) + network.add_successor(source, sink) + + # Build data dict. + data_dict = build_node_data_dict(attribute_dict=kwargs, node_order_in_lists=node_order_in_lists) + + # Set node attributes. (The code below uses the get() function to access the + # dictionaries within data_dict; get() returns None if the requested key is not + # in the dict.) + for n in network.nodes: + + # Costs and lead times. + if data_dict[n.index].get('local_holding_cost') is not None: + n.local_holding_cost = data_dict[n.index].get('local_holding_cost') + else: + n.local_holding_cost = data_dict[n.index].get('holding_cost') + n.echelon_holding_cost = data_dict[n.index].get('echelon_holding_cost') + n.order_capacity = data_dict[n.index].get('order_capacity') + n.local_holding_cost_function = data_dict[n.index].get('local_holding_cost_function') + n.in_transit_holding_cost = data_dict[n.index].get('in_transit_holding_cost') + n.stockout_cost = data_dict[n.index].get('stockout_cost') + n.stockout_cost_function = data_dict[n.index].get('stockout_cost_function') + n.purchase_cost = data_dict[n.index].get('purchase_cost') + n.revenue = data_dict[n.index].get('revenue') + if data_dict[n.index].get('shipment_lead_time') is not None: + n.shipment_lead_time = data_dict[n.index].get('shipment_lead_time') + else: + n.shipment_lead_time = data_dict[n.index].get('lead_time') + n.order_lead_time = data_dict[n.index].get('order_lead_time') + + # Demand source. + if data_dict[n.index].get('demand_source') is not None: + n.demand_source = data_dict[n.index]['demand_source'] + else: + # Create DemandSource object. (Don't override default value for round_to_int + # with None.) + ds = DemandSource() + ds.type = data_dict[n.index].get('demand_type') + if data_dict[n.index].get('round_to_int') is not None: + ds.round_to_int = data_dict[n.index].get('round_to_int') + ds.mean = data_dict[n.index].get('mean') + ds.standard_deviation = data_dict[n.index].get('standard_deviation') + ds.demand_list = data_dict[n.index].get('demand_list') + ds.probabilities = data_dict[n.index].get('probabilities') + ds.lo = data_dict[n.index].get('lo') + ds.hi = data_dict[n.index].get('hi') + n.demand_source = ds + + # Inventory policy. + if data_dict[n.index].get('inventory_policy') is not None: + n.inventory_policy = data_dict[n.index]['inventory_policy'] + n.inventory_policy.node = n + else: + # Create Policy object. + pol = Policy() + pol.type = data_dict[n.index].get('policy_type') + pol.node = n + pol.base_stock_level = data_dict[n.index].get('base_stock_level') + pol.order_quantity = data_dict[n.index].get('order_quantity') + pol.reorder_point = data_dict[n.index].get('reorder_point') + pol.order_up_to_level = data_dict[n.index].get('order_up_to_level') + n.inventory_policy = pol + + # Disruption process. + if data_dict[n.index].get('disruption_process') is not None: + n.disruption_process = data_dict[n.index]['disruption_process'] + else: + # Create DisruptionProcess object. (Don't override default values for disruption_type + # or disrupted with None.) + dp = DisruptionProcess() + dp.random_process_type = data_dict[n.index].get('random_process_type') + if data_dict[n.index].get('disruption_type') is not None: + dp.disruption_type = data_dict[n.index].get('disruption_type') + dp.disruption_probability = data_dict[n.index].get('disruption_probability') + dp.recovery_probability = data_dict[n.index].get('recovery_probability') + dp.disruption_state_list = data_dict[n.index].get('disruption_state_list') + if data_dict[n.index].get('disrupted') is not None: + dp.disrupted = data_dict[n.index].get('disrupted') + n.disruption_process = dp + + # TODO: bill_of_materials + + # Supply type. + if not n.predecessors(): + n.supply_type = 'U' + + # Initial quantities. + n.initial_inventory_level = data_dict[n.index].get('initial_inventory_level') + n.initial_orders = data_dict[n.index].get('initial_orders') + n.initial_shipments = data_dict[n.index].get('initial_shipments') + + # GSM parameters. + n.processing_time = data_dict[n.index].get('processing_time') + n.external_inbound_cst = data_dict[n.index].get('external_inbound_cst') + n.external_outbound_cst = data_dict[n.index].get('external_outbound_cst') + n.demand_bound_constant = data_dict[n.index].get('demand_bound_constant') + n.units_required = data_dict[n.index].get('units_required') + + # Problem-specific data. + n.problem_specific_data = data_dict[n.index].get('problem_specific_data') + + return network # =============================================================================== @@ -780,421 +782,427 @@ def network_from_edges(edges, node_order_in_lists=None, **kwargs): # =============================================================================== def single_stage_system(index=0, **kwargs): - """Generate a single-stage network. + """Generate a single-stage network. - The ``kwargs`` parameters specify the attributes (data) for the node. + The ``kwargs`` parameters specify the attributes (data) for the node. - For the ``demand_source`` attribute, you may pass a |class_demand_source| object - *or* the individual attributes of the demand source (``mean``, ``round_to_int``, etc.). - In the latter case, a ``DemandSource`` object will be constructed with the specified - attributes and filled into the ``demand_source`` attribute of the node. **Note:** If providing - individual demand source attributes, the ``type`` attribute must be called ``demand_type`` - to avoid ambiguity with other objects. + For the ``demand_source`` attribute, you may pass a |class_demand_source| object + *or* the individual attributes of the demand source (``mean``, ``round_to_int``, etc.). + In the latter case, a ``DemandSource`` object will be constructed with the specified + attributes and filled into the ``demand_source`` attribute of the node. **Note:** If providing + individual demand source attributes, the ``type`` attribute must be called ``demand_type`` + to avoid ambiguity with other objects. - Similarly, you may pass |class_policy| and |class_disruption_process| objects for - the ``inventory_policy`` and ``disruption_process`` attributes, or you may pass - the individual attributes for these objects. **Note:** If providing individual inventory policy - attributes, the ``type`` attribute must be called ``policy_type`` to avoid - ambiguity with other objects. + Similarly, you may pass |class_policy| and |class_disruption_process| objects for + the ``inventory_policy`` and ``disruption_process`` attributes, or you may pass + the individual attributes for these objects. **Note:** If providing individual inventory policy + attributes, the ``type`` attribute must be called ``policy_type`` to avoid + ambiguity with other objects. - If ``kwargs`` contains a parameter that is not an attribute of |class_node| or one of - its attribute objects (|class_demand_source|, |class_policy|, or |class_disruption_process|), - an ``AttributeError`` is raised. (Exception: ``demand_type`` and ``policy_type`` are allowed - even though they are not attributes of |class_node|; see above.) + If ``kwargs`` contains a parameter that is not an attribute of |class_node| or one of + its attribute objects (|class_demand_source|, |class_policy|, or |class_disruption_process|), + an ``AttributeError`` is raised. (Exception: ``demand_type`` and ``policy_type`` are allowed + even though they are not attributes of |class_node|; see above.) - .. note:: This function does not check that valid attributes have been provided for - ``demand_source``, ``inventory_policy``, and ``disruption_process``. For example, - it does not check that a ``base_stock_level`` has been provided if the policy type - is set to ``BS``. + .. note:: This function does not check that valid attributes have been provided for + ``demand_source``, ``inventory_policy``, and ``disruption_process``. For example, + it does not check that a ``base_stock_level`` has been provided if the policy type + is set to ``BS``. - Parameters - ---------- - index : int, optional - Index to use for the node. Default = 0. - kwargs : optional - Optional keyword arguments to specify node attributes. + Parameters + ---------- + index : int, optional + Index to use for the node. Default = 0. + kwargs : optional + Optional keyword arguments to specify node attributes. - Returns - ------- - network : |class_network| - The single-stage network, with parameters filled. + Returns + ------- + network : |class_network| + The single-stage network, with parameters filled. - Raises - ------ - AttributeError - If ``kwargs`` contains a parameter that is not an attribute of |class_node|. + Raises + ------ + AttributeError + If ``kwargs`` contains a parameter that is not an attribute of |class_node|. - **Example** (a |class_network| object containing the data from Example 4.1): + **Example** (a |class_network| object containing the data from Example 4.1): - .. testsetup:: * + .. testsetup:: * - from stockpyl.supply_chain_network import * + from stockpyl.supply_chain_network import * - .. doctest:: + .. doctest:: - >>> network = single_stage_system(holding_cost=0.18, - stockout_cost=0.70, - demand_type='N', - mean=50, standard_deviation=8, - policy_type='BS', - base_stock_level=56.6) - >>> network.nodes[0].stockout_cost - 0.7 + >>> network = single_stage_system(holding_cost=0.18, + stockout_cost=0.70, + demand_type='N', + mean=50, standard_deviation=8, + policy_type='BS', + base_stock_level=56.6) + >>> network.nodes[0].stockout_cost + 0.7 - """ + """ - return network_from_edges( - edges=[], - node_order_in_lists=[index], - **kwargs - ) + return network_from_edges( + edges=[], + node_order_in_lists=[index], + **kwargs + ) def serial_system(num_nodes, node_order_in_system=None, node_order_in_lists=None, **kwargs): - """Generate a serial system with the specified number of nodes. By default, node 0 - is upstream and node ``num_nodes`` - 1 is downstream, but this can be changed by - setting ``node_order_in_system``. - - The ``kwargs`` parameters specify the attributes (data) for the nodes in the network. - If they are provided, they must be either a dict, a list, or a singleton, - with the following requirements: - - * If the parameter is a dict, then the keys must contain the node indices - and the values must contain the corresponding attribute values. If a given - node index is contained in ``node_order_in_system`` (or in ``range(num_nodes)``, - if ``node_order_in_system`` is not provided) but is not a key in the dict, - the attribute value is set to ``None`` for that node. - * If the parameter is a singleton, then the attribute is set to that value - for all nodes. - * If the parameter is a list and ``node_order_in_lists`` is provided, ``node_order_in_lists`` - must contain the same indices as ``node_order_in_system`` (if it is provided) or - 0, ..., ``num_nodes`` - 1 (if it is not), otherwise a ``ValueError`` - is raised. The values in the list are - assumed to correspond to the node indices in the order they are specified in - ``node_order_in_lists``. That is, the value in slot ``k`` in the parameter list is - assigned to the node with index ``node_order_in_lists[k]``. - * If the parameter is a list and ``node_order_in_lists`` is not provided, the values - in the list are assumed to correspond to nodes in the same order as ``node_order_in_system`` - (or in ``range(num_nodes)``, if ``node_order_in_system`` is not provided). - - ``demand_source`` and ``stockout_cost`` attributes are only set at the downstream-most node, - no matter how (or whether) the corresponding parameter is set. ``supply_type`` attribute is set to 'U' - at the upstream-most node and to ``None`` at all other nodes, no matter how (or whether) the - corresponding parameter is set. - - For the ``demand_source`` attribute, you may pass a |class_demand_source| object - *or* the individual attributes of the demand source (``mean``, ``round_to_int``, etc.). - In the latter case, a ``DemandSource`` object will be constructed with the specified - attributes and filled into the ``demand_source`` attribute of the node. **Note:** If providing - individual demand source attributes, the ``type`` attribute must be called ``demand_type`` - to avoid ambiguity with other objects. - - Similarly, you may pass |class_policy| and |class_disruption_process| objects for - the ``inventory_policy`` and ``disruption_process`` attributes, or you may pass - the individual attributes for these objects. **Note:** If providing individual inventory policy - attributes, the ``type`` attribute must be called ``policy_type`` to avoid - ambiguity with other objects. - - If ``kwargs`` contains a parameter that is not an attribute of |class_node| or one of - its attribute objects (|class_demand_source|, |class_policy|, or |class_disruption_process|), - an ``AttributeError`` is raised. (Exception: ``demand_type`` and ``policy_type`` are allowed - even though they are not attributes of |class_node|; see above.) - - - .. note:: This function does not check that valid attributes have been provided for - ``demand_source``, ``inventory_policy``, and ``disruption_process``. For example, - it does not check that a ``base_stock_level`` has been provided if the policy type - is set to ``BS``. - - - Parameters - ---------- - num_nodes : int - Number of nodes in the serial system. - node_order_in_system : list, optional - List of node indices in the order that they appear in the serial system, - with upstream-most node listed first. If omitted, the system will be indexed - 0, ..., ``num_nodes`` - 1. - node_order_in_lists : list, optional - List of node indices in the order in which the nodes are listed in any - attributes that are lists. (``node_order_in_lists[k]`` is the index of the ``k`` th node.) - kwargs : optional - Optional keyword arguments to specify node attributes. - - - Raises - ------ - AttributeError - If ``kwargs`` contains a parameter that is not an attribute of |class_node|. - - - **Example** (a |class_network| object containing the data from Example 4.1): - - .. testsetup:: * - - from stockpyl.supply_chain_network import * - - .. doctest:: - - >>> network = single_stage_system(holding_cost=0.18, - stockout_cost=0.70, - demand_type='N', - mean=50, standard_deviation=8, - policy_type='BS', - base_stock_level=56.6) - >>> network.nodes[0].stockout_cost - 0.7 - - - return network_from_edges( - edges=[], - node_order_in_lists=[index], - **kwargs - ) - """ - - # (Exception: ``demand_list`` and ``probabilities`` attributes of |class_demand_source| may be - # lists; these lists are treated as singletons for the purpose of the rules above.) - - # Determine edges of network. - if node_order_in_system is None: - node_order_in_system = list(range(num_nodes)) - edges = [(node_order_in_system[k], node_order_in_system[k + 1]) for k in range(len(node_order_in_system) - 1)] - - # Make local copy of kwarg dict. - local_kwargs = copy.deepcopy(kwargs) - - # Determine node_order_in_lists. - if node_order_in_lists is None: - node_order_in_lists = node_order_in_system - - # Build network. - network = network_from_edges( - edges=edges, - node_order_in_lists=node_order_in_lists, - **local_kwargs - ) - - # Determine sink node. - sink_node = node_order_in_system[-1] - # Set demand_source and stockout_cost parameters so they only occur at sink node. - for node in network.nodes: - if node.index != sink_node: - node.demand_source = DemandSource() - node.stockout_cost = 0 - node.stockout_cost_function = None - - return network + """Generate a serial system with the specified number of nodes. By default, node 0 + is upstream and node ``num_nodes`` - 1 is downstream, but this can be changed by + setting ``node_order_in_system``. + + The ``kwargs`` parameters specify the attributes (data) for the nodes in the network. + If they are provided, they must be either a dict, a list, or a singleton, + with the following requirements: + + * If the parameter is a dict, then the keys must contain the node indices + and the values must contain the corresponding attribute values. If a given + node index is contained in ``node_order_in_system`` (or in ``range(num_nodes)``, + if ``node_order_in_system`` is not provided) but is not a key in the dict, + the attribute value is set to ``None`` for that node. + * If the parameter is a singleton, then the attribute is set to that value + for all nodes. + * If the parameter is a list and ``node_order_in_lists`` is provided, ``node_order_in_lists`` + must contain the same indices as ``node_order_in_system`` (if it is provided) or + 0, ..., ``num_nodes`` - 1 (if it is not), otherwise a ``ValueError`` + is raised. The values in the list are + assumed to correspond to the node indices in the order they are specified in + ``node_order_in_lists``. That is, the value in slot ``k`` in the parameter list is + assigned to the node with index ``node_order_in_lists[k]``. + * If the parameter is a list and ``node_order_in_lists`` is not provided, the values + in the list are assumed to correspond to nodes in the same order as ``node_order_in_system`` + (or in ``range(num_nodes)``, if ``node_order_in_system`` is not provided). + + ``demand_source`` and ``stockout_cost`` attributes are only set at the downstream-most node, + no matter how (or whether) the corresponding parameter is set. ``supply_type`` attribute is set to 'U' + at the upstream-most node and to ``None`` at all other nodes, no matter how (or whether) the + corresponding parameter is set. + + For the ``demand_source`` attribute, you may pass a |class_demand_source| object + *or* the individual attributes of the demand source (``mean``, ``round_to_int``, etc.). + In the latter case, a ``DemandSource`` object will be constructed with the specified + attributes and filled into the ``demand_source`` attribute of the node. **Note:** If providing + individual demand source attributes, the ``type`` attribute must be called ``demand_type`` + to avoid ambiguity with other objects. + + Similarly, you may pass |class_policy| and |class_disruption_process| objects for + the ``inventory_policy`` and ``disruption_process`` attributes, or you may pass + the individual attributes for these objects. **Note:** If providing individual inventory policy + attributes, the ``type`` attribute must be called ``policy_type`` to avoid + ambiguity with other objects. + + If ``kwargs`` contains a parameter that is not an attribute of |class_node| or one of + its attribute objects (|class_demand_source|, |class_policy|, or |class_disruption_process|), + an ``AttributeError`` is raised. (Exception: ``demand_type`` and ``policy_type`` are allowed + even though they are not attributes of |class_node|; see above.) + + + .. note:: This function does not check that valid attributes have been provided for + ``demand_source``, ``inventory_policy``, and ``disruption_process``. For example, + it does not check that a ``base_stock_level`` has been provided if the policy type + is set to ``BS``. + + + Parameters + ---------- + num_nodes : int + Number of nodes in the serial system. + node_order_in_system : list, optional + List of node indices in the order that they appear in the serial system, + with upstream-most node listed first. If omitted, the system will be indexed + 0, ..., ``num_nodes`` - 1. + node_order_in_lists : list, optional + List of node indices in the order in which the nodes are listed in any + attributes that are lists. (``node_order_in_lists[k]`` is the index of the ``k`` th node.) + kwargs : optional + Optional keyword arguments to specify node attributes. + + + Raises + ------ + AttributeError + If ``kwargs`` contains a parameter that is not an attribute of |class_node|. + + + **Example** (a |class_network| object containing the data from Example 4.1): + + .. testsetup:: * + + from stockpyl.supply_chain_network import * + + .. doctest:: + + >>> network = single_stage_system(holding_cost=0.18, + stockout_cost=0.70, + demand_type='N', + mean=50, standard_deviation=8, + policy_type='BS', + base_stock_level=56.6) + >>> network.nodes[0].stockout_cost + 0.7 + + + return network_from_edges( + edges=[], + node_order_in_lists=[index], + **kwargs + ) + """ + + # (Exception: ``demand_list`` and ``probabilities`` attributes of |class_demand_source| may be + # lists; these lists are treated as singletons for the purpose of the rules above.) + + # Determine edges of network. + if node_order_in_system is None: + node_order_in_system = list(range(num_nodes)) + edges = [(node_order_in_system[k], node_order_in_system[k + 1]) for k in range(len(node_order_in_system) - 1)] + + # Make local copy of kwarg dict. + local_kwargs = copy.deepcopy(kwargs) + + # Determine node_order_in_lists. + if node_order_in_lists is None: + node_order_in_lists = node_order_in_system + + # TODO: bill_of_materials + + # Build network. + network = network_from_edges( + edges=edges, + node_order_in_lists=node_order_in_lists, + **local_kwargs + ) + + # Determine sink node. + sink_node = node_order_in_system[-1] + # Set demand_source and stockout_cost parameters so they only occur at sink node. + for node in network.nodes: + if node.index != sink_node: + node.demand_source = DemandSource() + node.stockout_cost = 0 + node.stockout_cost_function = None + + return network def owmr_system(num_retailers, node_order_in_system=None, node_order_in_lists=None, **kwargs): - """Generate a one-warehouse, multiple-retailer (OWMR) (i.e., 2-echelon distribution) - system with the specified number of retailers. By default, node 0 is the warehouse - and nodes 1, ..., ``num_retailers`` are the retailers, but this can be changed - by setting ``node_order_in_system``. - - The ``kwargs`` parameters specify the attributes (data) for the nodes in the network. - If they are provided, they must be either a dict, a list, or a singleton, - with the following requirements: - - * If the parameter is a dict, then the keys must contain the node indices - and the values must contain the corresponding attribute values. If a given - node index is contained in ``node_order_in_system`` (or in ``range(num_nodes)``, - if ``node_order_in_system`` is not provided) but is not a key in the dict, - the attribute value is set to ``None`` for that node. - * If the parameter is a singleton, then the attribute is set to that value - for all nodes. - * If the parameter is a list and ``node_order_in_lists`` is provided, ``node_order_in_lists`` - must contain the same indices as the nodes in the edges in ``edges`` (otherwise a ``ValueError`` - is raised). The values in the list are - assumed to correspond to the node indices in the order they are specified in - ``node_order_in_lists``. That is, the value in slot ``k`` in the parameter list is - assigned to the node with index ``node_order_in_lists[k]``. If a given - node index is contained in the list of edges but is not in ``node_order_in_lists``, - the attribute value is set to ``None`` for that node. - * If the parameter is a list and ``node_order_in_lists`` is not provided, the values - in the list are assumed to correspond to nodes in the same order as ``node_order_in_system`` - (or in ``range(num_retailers+1)``, if ``node_order_in_system`` is not provided). - - ``demand_source`` attribute is not set at the warehouse node, - no matter how (or whether) the corresponding parameter is set.``supply_type`` attribute is set to 'U' - at the warehouse node and to ``None`` at all other nodes, no matter how (or whether) the - corresponding parameter is set. - - For the ``demand_source`` attribute, you may pass a |class_demand_source| object - *or* the individual attributes of the demand source (``mean``, ``round_to_int``, etc.). - In the latter case, a ``DemandSource`` object will be constructed with the specified - attributes and filled into the ``demand_source`` attribute of the node. **Note:** If providing - individual demand source attributes, the ``type`` attribute must be called ``demand_type`` - to avoid ambiguity with other objects. - - Similarly, you may pass |class_policy| and |class_disruption_process| objects for - the ``inventory_policy`` and ``disruption_process`` attributes, or you may pass - the individual attributes for these objects. **Note:** If providing individual inventory policy - attributes, the ``type`` attribute must be called ``policy_type`` to avoid - ambiguity with other objects. - - If ``kwargs`` contains a parameter that is not an attribute of |class_node| or one of - its attribute objects (|class_demand_source|, |class_policy|, or |class_disruption_process|), - an ``AttributeError`` is raised. (Exception: ``demand_type`` and ``policy_type`` are allowed - even though they are not attributes of |class_node|; see above.) - - - .. note:: This function does not check that valid attributes have been provided for - ``demand_source``, ``inventory_policy``, and ``disruption_process``. For example, - it does not check that a ``base_stock_level`` has been provided if the policy type - is set to ``BS``. - - - Parameters - ---------- - num_retailers : int - Number of retailers in OWMR system. - node_order_in_system : list, optional - List of node indices in the order that they appear in the OWMR system, - with warehouse node first and retailer nodes last. If omitted, the warehouse - will have index 0 and the retailers will have indices 1, ..., ``num_retailers``. - node_order_in_lists : list, optional - List of node indices in the order in which the nodes are listed in any - attributes that are lists. (``node_order_in_lists[k]`` is the index of the ``k`` th node.) - kwargs : optional - Optional keyword arguments to specify node attributes. - - Raises - ------ - AttributeError - If ``kwargs`` contains a parameter that is not an attribute of |class_node|. - """ - - # Determine edges of network. - if node_order_in_system is None: - node_order_in_system = list(range(0, num_retailers + 1)) - edges = [(node_order_in_system[0], node_order_in_system[k]) for k in range(1, num_retailers + 1)] - - # Make local copy of kwarg dict. - local_kwargs = copy.deepcopy(kwargs) - # Set demand_source parameter so it only occurs at retailer nodes. - if 'demand_source' not in local_kwargs: - local_kwargs['demand_source'] = {} - local_kwargs['demand_source'][node_order_in_system[-1]] = DemandSource() - - # Determine node_order_in_lists. - if node_order_in_lists is None: - node_order_in_lists = node_order_in_system - - # Build network. - return network_from_edges( - edges=edges, - node_order_in_lists=node_order_in_lists, - **local_kwargs - ) + """Generate a one-warehouse, multiple-retailer (OWMR) (i.e., 2-echelon distribution) + system with the specified number of retailers. By default, node 0 is the warehouse + and nodes 1, ..., ``num_retailers`` are the retailers, but this can be changed + by setting ``node_order_in_system``. + + The ``kwargs`` parameters specify the attributes (data) for the nodes in the network. + If they are provided, they must be either a dict, a list, or a singleton, + with the following requirements: + + * If the parameter is a dict, then the keys must contain the node indices + and the values must contain the corresponding attribute values. If a given + node index is contained in ``node_order_in_system`` (or in ``range(num_nodes)``, + if ``node_order_in_system`` is not provided) but is not a key in the dict, + the attribute value is set to ``None`` for that node. + * If the parameter is a singleton, then the attribute is set to that value + for all nodes. + * If the parameter is a list and ``node_order_in_lists`` is provided, ``node_order_in_lists`` + must contain the same indices as the nodes in the edges in ``edges`` (otherwise a ``ValueError`` + is raised). The values in the list are + assumed to correspond to the node indices in the order they are specified in + ``node_order_in_lists``. That is, the value in slot ``k`` in the parameter list is + assigned to the node with index ``node_order_in_lists[k]``. If a given + node index is contained in the list of edges but is not in ``node_order_in_lists``, + the attribute value is set to ``None`` for that node. + * If the parameter is a list and ``node_order_in_lists`` is not provided, the values + in the list are assumed to correspond to nodes in the same order as ``node_order_in_system`` + (or in ``range(num_retailers+1)``, if ``node_order_in_system`` is not provided). + + ``demand_source`` attribute is not set at the warehouse node, + no matter how (or whether) the corresponding parameter is set.``supply_type`` attribute is set to 'U' + at the warehouse node and to ``None`` at all other nodes, no matter how (or whether) the + corresponding parameter is set. + + For the ``demand_source`` attribute, you may pass a |class_demand_source| object + *or* the individual attributes of the demand source (``mean``, ``round_to_int``, etc.). + In the latter case, a ``DemandSource`` object will be constructed with the specified + attributes and filled into the ``demand_source`` attribute of the node. **Note:** If providing + individual demand source attributes, the ``type`` attribute must be called ``demand_type`` + to avoid ambiguity with other objects. + + Similarly, you may pass |class_policy| and |class_disruption_process| objects for + the ``inventory_policy`` and ``disruption_process`` attributes, or you may pass + the individual attributes for these objects. **Note:** If providing individual inventory policy + attributes, the ``type`` attribute must be called ``policy_type`` to avoid + ambiguity with other objects. + + If ``kwargs`` contains a parameter that is not an attribute of |class_node| or one of + its attribute objects (|class_demand_source|, |class_policy|, or |class_disruption_process|), + an ``AttributeError`` is raised. (Exception: ``demand_type`` and ``policy_type`` are allowed + even though they are not attributes of |class_node|; see above.) + + + .. note:: This function does not check that valid attributes have been provided for + ``demand_source``, ``inventory_policy``, and ``disruption_process``. For example, + it does not check that a ``base_stock_level`` has been provided if the policy type + is set to ``BS``. + + + Parameters + ---------- + num_retailers : int + Number of retailers in OWMR system. + node_order_in_system : list, optional + List of node indices in the order that they appear in the OWMR system, + with warehouse node first and retailer nodes last. If omitted, the warehouse + will have index 0 and the retailers will have indices 1, ..., ``num_retailers``. + node_order_in_lists : list, optional + List of node indices in the order in which the nodes are listed in any + attributes that are lists. (``node_order_in_lists[k]`` is the index of the ``k`` th node.) + kwargs : optional + Optional keyword arguments to specify node attributes. + + Raises + ------ + AttributeError + If ``kwargs`` contains a parameter that is not an attribute of |class_node|. + """ + + # Determine edges of network. + if node_order_in_system is None: + node_order_in_system = list(range(0, num_retailers + 1)) + edges = [(node_order_in_system[0], node_order_in_system[k]) for k in range(1, num_retailers + 1)] + + # Make local copy of kwarg dict. + local_kwargs = copy.deepcopy(kwargs) + # Set demand_source parameter so it only occurs at retailer nodes. + if 'demand_source' not in local_kwargs: + local_kwargs['demand_source'] = {} + local_kwargs['demand_source'][node_order_in_system[-1]] = DemandSource() + + # Determine node_order_in_lists. + if node_order_in_lists is None: + node_order_in_lists = node_order_in_system + + # TODO: bill_of_materials + + # Build network. + return network_from_edges( + edges=edges, + node_order_in_lists=node_order_in_lists, + **local_kwargs + ) def mwor_system(num_warehouses, node_order_in_system=None, node_order_in_lists=None, **kwargs): - """Generate a multiple-warehouse, one-retailer (MWOR) (i.e., 2-echelon assembly) - system with the specified number of warehouses. By default, node 0 is the retailer - and nodes 1, ..., ``num_warehouses`` are the warehouses, but this can be changed - by setting ``node_order_in_system``. - - The ``kwargs`` parameters specify the attributes (data) for the nodes in the network. - If they are provided, they must be either a dict, a list, or a singleton, - with the following requirements: - - * If the parameter is a dict, then the keys must contain the node indices - and the values must contain the corresponding attribute values. If a given - node index is contained in ``node_order_in_system`` (or in ``range(num_nodes)``, - if ``node_order_in_system`` is not provided) but is not a key in the dict, - the attribute value is set to ``None`` for that node. - * If the parameter is a singleton, then the attribute is set to that value - for all nodes. - * If the parameter is a list and ``node_order_in_lists`` is provided, ``node_order_in_lists`` - must contain the same indices as the nodes in the edges in ``edges`` (otherwise a ``ValueError`` - is raised). The values in the list are - assumed to correspond to the node indices in the order they are specified in - ``node_order_in_lists``. That is, the value in slot ``k`` in the parameter list is - assigned to the node with index ``node_order_in_lists[k]``. If a given - node index is contained in the list of edges but is not in ``node_order_in_lists``, - the attribute value is set to ``None`` for that node. - * If the parameter is a list and ``node_order_in_lists`` is not provided, the values - in the list are assumed to correspond to nodes in the same order as ``node_order_in_system`` - (or in ``range(num_warehouses+1)``, if ``node_order_in_system`` is not provided). - - ``demand_source`` attribute is only set at the retailer node, - no matter how (or whether) the corresponding parameter is set. ``supply_type`` attribute is set to 'U' - at the warehouse nodes and to ``None`` at the retailer node, no matter how (or whether) the - corresponding parameter is set. - - For the ``demand_source`` attribute, you may pass a |class_demand_source| object - *or* the individual attributes of the demand source (``mean``, ``round_to_int``, etc.). - In the latter case, a ``DemandSource`` object will be constructed with the specified - attributes and filled into the ``demand_source`` attribute of the node. **Note:** If providing - individual demand source attributes, the ``type`` attribute must be called ``demand_type`` - to avoid ambiguity with other objects. - - Similarly, you may pass |class_policy| and |class_disruption_process| objects for - the ``inventory_policy`` and ``disruption_process`` attributes, or you may pass - the individual attributes for these objects. **Note:** If providing individual inventory policy - attributes, the ``type`` attribute must be called ``policy_type`` to avoid - ambiguity with other objects. - - If ``kwargs`` contains a parameter that is not an attribute of |class_node| or one of - its attribute objects (|class_demand_source|, |class_policy|, or |class_disruption_process|), - an ``AttributeError`` is raised. (Exception: ``demand_type`` and ``policy_type`` are allowed - even though they are not attributes of |class_node|; see above.) - - - .. note:: This function does not check that valid attributes have been provided for - ``demand_source``, ``inventory_policy``, and ``disruption_process``. For example, - it does not check that a ``base_stock_level`` has been provided if the policy type - is set to ``BS``. - - - Parameters - ---------- - num_warehouses : int - Number of warehouses in MWOR system. - node_order_in_system : list, optional - List of node indices in the order that they appear in the MWOR system, - with warehouse nodes first and retailer node last. If omitted, the retailer - will have index 0 and the warehouses will have indices 1, ..., ``num_warehouses``. - node_order_in_lists : list, optional - List of node indices in the order in which the nodes are listed in any - attributes that are lists. (``node_order_in_lists[k]`` is the index of the ``k`` th node.) - kwargs : optional - Optional keyword arguments to specify node attributes. - - Raises - ------ - AttributeError - If ``kwargs`` contains a parameter that is not an attribute of |class_node|. - """ - - # Determine edges of network. - if node_order_in_system is None: - node_order_in_system = list(range(1, num_warehouses + 1)) + [0] - edges = [(node_order_in_system[k], node_order_in_system[-1]) for k in range(0, num_warehouses)] - - # Make local copy of kwarg dict. - local_kwargs = copy.deepcopy(kwargs) - # Set demand_source parameter so it only occurs at retailer node. - if 'demand_source' not in local_kwargs: - local_kwargs['demand_source'] = {} - for n in node_order_in_system[0:-1]: - local_kwargs['demand_source'][n] = DemandSource() - - # Determine node_order_in_lists. - if node_order_in_lists is None: - node_order_in_lists = node_order_in_system - - # Build network. - return network_from_edges( - edges=edges, - node_order_in_lists=node_order_in_lists, - **local_kwargs - ) + """Generate a multiple-warehouse, one-retailer (MWOR) (i.e., 2-echelon assembly) + system with the specified number of warehouses. By default, node 0 is the retailer + and nodes 1, ..., ``num_warehouses`` are the warehouses, but this can be changed + by setting ``node_order_in_system``. + + The ``kwargs`` parameters specify the attributes (data) for the nodes in the network. + If they are provided, they must be either a dict, a list, or a singleton, + with the following requirements: + + * If the parameter is a dict, then the keys must contain the node indices + and the values must contain the corresponding attribute values. If a given + node index is contained in ``node_order_in_system`` (or in ``range(num_nodes)``, + if ``node_order_in_system`` is not provided) but is not a key in the dict, + the attribute value is set to ``None`` for that node. + * If the parameter is a singleton, then the attribute is set to that value + for all nodes. + * If the parameter is a list and ``node_order_in_lists`` is provided, ``node_order_in_lists`` + must contain the same indices as the nodes in the edges in ``edges`` (otherwise a ``ValueError`` + is raised). The values in the list are + assumed to correspond to the node indices in the order they are specified in + ``node_order_in_lists``. That is, the value in slot ``k`` in the parameter list is + assigned to the node with index ``node_order_in_lists[k]``. If a given + node index is contained in the list of edges but is not in ``node_order_in_lists``, + the attribute value is set to ``None`` for that node. + * If the parameter is a list and ``node_order_in_lists`` is not provided, the values + in the list are assumed to correspond to nodes in the same order as ``node_order_in_system`` + (or in ``range(num_warehouses+1)``, if ``node_order_in_system`` is not provided). + + ``demand_source`` attribute is only set at the retailer node, + no matter how (or whether) the corresponding parameter is set. ``supply_type`` attribute is set to 'U' + at the warehouse nodes and to ``None`` at the retailer node, no matter how (or whether) the + corresponding parameter is set. + + For the ``demand_source`` attribute, you may pass a |class_demand_source| object + *or* the individual attributes of the demand source (``mean``, ``round_to_int``, etc.). + In the latter case, a ``DemandSource`` object will be constructed with the specified + attributes and filled into the ``demand_source`` attribute of the node. **Note:** If providing + individual demand source attributes, the ``type`` attribute must be called ``demand_type`` + to avoid ambiguity with other objects. + + Similarly, you may pass |class_policy| and |class_disruption_process| objects for + the ``inventory_policy`` and ``disruption_process`` attributes, or you may pass + the individual attributes for these objects. **Note:** If providing individual inventory policy + attributes, the ``type`` attribute must be called ``policy_type`` to avoid + ambiguity with other objects. + + If ``kwargs`` contains a parameter that is not an attribute of |class_node| or one of + its attribute objects (|class_demand_source|, |class_policy|, or |class_disruption_process|), + an ``AttributeError`` is raised. (Exception: ``demand_type`` and ``policy_type`` are allowed + even though they are not attributes of |class_node|; see above.) + + + .. note:: This function does not check that valid attributes have been provided for + ``demand_source``, ``inventory_policy``, and ``disruption_process``. For example, + it does not check that a ``base_stock_level`` has been provided if the policy type + is set to ``BS``. + + + Parameters + ---------- + num_warehouses : int + Number of warehouses in MWOR system. + node_order_in_system : list, optional + List of node indices in the order that they appear in the MWOR system, + with warehouse nodes first and retailer node last. If omitted, the retailer + will have index 0 and the warehouses will have indices 1, ..., ``num_warehouses``. + node_order_in_lists : list, optional + List of node indices in the order in which the nodes are listed in any + attributes that are lists. (``node_order_in_lists[k]`` is the index of the ``k`` th node.) + kwargs : optional + Optional keyword arguments to specify node attributes. + + Raises + ------ + AttributeError + If ``kwargs`` contains a parameter that is not an attribute of |class_node|. + """ + + # Determine edges of network. + if node_order_in_system is None: + node_order_in_system = list(range(1, num_warehouses + 1)) + [0] + edges = [(node_order_in_system[k], node_order_in_system[-1]) for k in range(0, num_warehouses)] + + # Make local copy of kwarg dict. + local_kwargs = copy.deepcopy(kwargs) + # Set demand_source parameter so it only occurs at retailer node. + if 'demand_source' not in local_kwargs: + local_kwargs['demand_source'] = {} + for n in node_order_in_system[0:-1]: + local_kwargs['demand_source'][n] = DemandSource() + + # Determine node_order_in_lists. + if node_order_in_lists is None: + node_order_in_lists = node_order_in_system + + # TODO: bill_of_materials + + # Build network. + return network_from_edges( + edges=edges, + node_order_in_lists=node_order_in_lists, + **local_kwargs + ) # =============================================================================== @@ -1202,80 +1210,80 @@ def mwor_system(num_warehouses, node_order_in_system=None, node_order_in_lists=N # =============================================================================== def local_to_echelon_base_stock_levels(network, S_local): - """Convert local base-stock levels to echelon base-stock levels for a serial system. + """Convert local base-stock levels to echelon base-stock levels for a serial system. - Assumes network is serial system but does not assume anything about the - labeling of the nodes. + Assumes network is serial system but does not assume anything about the + labeling of the nodes. - Parameters - ---------- - network : |class_network| - The serial inventory network. - S_local : dict - Dict of local base-stock levels. + Parameters + ---------- + network : |class_network| + The serial inventory network. + S_local : dict + Dict of local base-stock levels. - Returns - ------- - S_echelon : dict - Dict of echelon base-stock levels. + Returns + ------- + S_echelon : dict + Dict of echelon base-stock levels. - """ + """ - S_echelon = {} - for n in network.nodes: - S_echelon[n.index] = S_local[n.index] - k = n.get_one_successor() - while k is not None: - S_echelon[n.index] += S_local[k.index] - k = k.get_one_successor() + S_echelon = {} + for n in network.nodes: + S_echelon[n.index] = S_local[n.index] + k = n.get_one_successor() + while k is not None: + S_echelon[n.index] += S_local[k.index] + k = k.get_one_successor() - return S_echelon + return S_echelon def echelon_to_local_base_stock_levels(network, S_echelon): - """Convert echelon base-stock levels to local base-stock levels for a serial system. - - Assumes network is serial system but does not assume anything about the - labeling of the nodes. - - Parameters - ---------- - network : |class_network| - The serial inventory network. - S_echelon : dict - Dict of echelon base-stock levels. - - Returns - ------- - S_local : dict - Dict of local base-stock levels. - - """ - - S_local = {} - num_nodes = len(network.nodes) - - # Determine indexing of nodes. (node_list[i] = index of i'th node, where - # i = 0 means sink node and i = N-1 means source node.) - node_list = [] - n = network.sink_nodes[0] - while n is not None: - node_list.append(n.index) - n = n.get_one_predecessor() - - # Calculate S-minus. - S_minus = {} - for j in range(num_nodes): - S_minus[node_list[j]] = np.min([S_echelon[node_list[i]] for i in range(j, num_nodes)]) - - # Calculate S_local. - for n in network.nodes: - # Get successor. - k = n.get_one_successor() - if k is None: - S_local[n.index] = S_minus[n.index] - else: - S_local[n.index] = S_minus[n.index] - S_minus[k.index] - - return S_local + """Convert echelon base-stock levels to local base-stock levels for a serial system. + + Assumes network is serial system but does not assume anything about the + labeling of the nodes. + + Parameters + ---------- + network : |class_network| + The serial inventory network. + S_echelon : dict + Dict of echelon base-stock levels. + + Returns + ------- + S_local : dict + Dict of local base-stock levels. + + """ + + S_local = {} + num_nodes = len(network.nodes) + + # Determine indexing of nodes. (node_list[i] = index of i'th node, where + # i = 0 means sink node and i = N-1 means source node.) + node_list = [] + n = network.sink_nodes[0] + while n is not None: + node_list.append(n.index) + n = n.get_one_predecessor() + + # Calculate S-minus. + S_minus = {} + for j in range(num_nodes): + S_minus[node_list[j]] = np.min([S_echelon[node_list[i]] for i in range(j, num_nodes)]) + + # Calculate S_local. + for n in network.nodes: + # Get successor. + k = n.get_one_successor() + if k is None: + S_local[n.index] = S_minus[n.index] + else: + S_local[n.index] = S_minus[n.index] - S_minus[k.index] + + return S_local diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index f9ff245..867cc40 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -31,6 +31,16 @@ Therefore, to determine which attributes are needed, refer to the documentation for the function you are using. +For multi-product models, most attributes may be either at the node level (by setting the attribute +in the |class_node| object), or at the product level (by setting the attribute in the |class_product| object), +or at the node-product level (by setting the |class_node|'s attribute to a dict whose keys are product +indices and whose values are the attribute values). In particular: + + * If the attribute is a dict, the node will first attempt to access the value of ``[]``. + * Else, if the attribute is a dict but does not contain a value for a given product, the product's value + for the attribute is used. + * Else the node's value of the attribute is used. (It should be a singleton in this case.) + API Reference ------------- @@ -49,9 +59,10 @@ import math from stockpyl import policy +from stockpyl.supply_chain_product import SupplyChainProduct from stockpyl import demand_source from stockpyl import disruption_process -from stockpyl.helpers import change_dict_key, is_integer, is_list +from stockpyl.helpers import change_dict_key, is_integer, is_list, is_dict, is_numeric_string # =============================================================================== @@ -59,789 +70,1110 @@ # =============================================================================== class SupplyChainNode(object): - """The |class_node| class contains the data, state variables, and - performance measures for a supply chain node. - - Attributes - ---------- - network : |class_network| - The network that contains the node. - local_holding_cost : float - Local holding cost, per unit per period. [:math:`h'`] - echelon_holding_cost : float - Echelon holding cost, per unit per period. (**Note:** *not currently supported*.) [:math:`h`] - local_holding_cost_function : function - Function that calculates local holding cost per period, as a function - of ending inventory level. Function must take exactly one argument, the - ending IL. Function should check that IL > 0. - in_transit_holding_cost : float - Holding cost coefficient used to calculate in-transit holding cost for - shipments en route from the node to its downstream successors, if any. - If ``in_transit_holding_cost`` is ``None``, then the stage's local_holding_cost - is used. To ignore in-transit holding costs, set ``in_transit_holding_cost`` = 0. - stockout_cost : float - Stockout cost, per unit (per period, if backorders). [:math:`p`] - stockout_cost_function : function - Function that calculates stockout cost per period, as a function - of ending inventory level. Function must take exactly one argument, the - ending IL. Function should check that IL < 0. - purchase_cost : float - Cost incurred per unit. (**Note:** *not currently supported*.) - revenue : float - Revenue earned per unit of demand met. (**Note:** *not currently supported*.) [:math:`r`] - shipment_lead_time : int - Shipment lead time. [:math:`L`] - lead_time : int - An alias for ``shipment_lead_time``. - order_lead_time : int - Order lead time. (**Note:** *not currently supported*.) - demand_source : |class_demand_source| - Demand source object. - initial_inventory_level : float - Initial inventory level. - initial_orders : float - Initial outbound order quantity. - initial shipments : float - Initial inbound shipment quantity. - inventory_policy : |class_policy| - Inventory policy to be used to make inventory decisions. - supply_type : str - Supply type , as a string. Currently supported strings are: - - * None - * 'U': unlimited - - order_capacity : float - Maximum size of an order. - disruption_process : |class_disruption_process| - Disruption process object (if any). - state_vars : list of |class_state_vars| - List of |class_state_vars|, one for each period in a simulation. - problem_specific_data : object - Placeholder for object that is used to provide data for specific - problem types. - """ - - def __init__(self, index, name=None, network=None, **kwargs): - """SupplyChainNode constructor method. - - Parameters - ---------- - index : int - Numeric index to identify node. In a SupplyChainNetwork, each node - must have a unique index. - name : str, optional - String to identify node. - network : |class_network| - The network that contains the node. - kwargs : optional - Optional keyword arguments to specify node attributes. - - Raises - ------ - AttributeError - If an optional keyword argument does not match a |class_node| attribute. - """ - # Initialize attributes. - self.initialize() - - # Set named attributes. - self.index = index - self.name = name - self.network = network - - # Set attributes specified by kwargs. - for key, value in kwargs.items(): - if key in vars(self): - # The key refers to an attribute of the object. - setattr(self, key, value) - elif key in dir(self.__class__) and isinstance(getattr(self.__class__, key), property): - # The key refers to a property of the object. (We can still set it using setattr().) - setattr(self, key, value) - elif f"_{key}" in vars(self): - # The key refers to an attribute that has "_" prepended to it. - setattr(self, f"_{key}", value) - else: - raise AttributeError(f"{key} is not an attribute of Policy") - - _DEFAULT_VALUES = { - 'index': None, - 'name': None, - 'network': None, - '_predecessors': [], - '_successors': [], - 'local_holding_cost': None, - 'echelon_holding_cost': None, - 'local_holding_cost_function': None, - 'in_transit_holding_cost': None, - 'stockout_cost': None, - 'stockout_cost_function': None, - 'revenue': None, - 'shipment_lead_time': None, - 'order_lead_time': None, - 'demand_source': None, - 'initial_inventory_level': None, - 'initial_orders': None, - 'initial_shipments': None, - '_inventory_policy': None, - 'supply_type': None, - 'order_capacity': None, - 'disruption_process': None, - 'processing_time': None, - 'external_inbound_cst': None, - 'external_outbound_cst': None, - 'demand_bound_constant': None, - 'units_required': None, - 'original_label': None, - 'net_demand_mean': None, - 'net_demand_standard_deviation': None, - 'larger_adjacent_node': None, - 'larger_adjacent_node_is_downstream': None, - 'max_replenishment_time': None, - 'state_vars': [] - } - - # Properties and functions related to network structure. - - def predecessors(self, include_external=False): - """Return a list of all predecessors of the node, as |class_node| objects. - - Parameters - ---------- - include_external : bool, optional - Include the external supplier (if any)? Default = ``False``. - - Returns - ------- - list - List of all predecessors, as |class_node| objects. - """ - if include_external and self.supply_type is not None: - return self._predecessors + [None] - else: - return self._predecessors - - def successors(self, include_external=False): - """Return a list of all successors of the node, as |class_node| objects. - - Parameters - ---------- - include_external : bool, optional - Include the external customer (if any)? Default = ``False``. - - Returns - ------- - list - List of all successors, as |class_node| objects. - """ - if include_external and \ - (self.demand_source is not None and self.demand_source.type is not None): - return self._successors + [None] - else: - return self._successors - - def predecessor_indices(self, include_external=False): - """Return a list of indices of all predecessors of the node. - - Parameters - ---------- - include_external : bool, optional - Include the external supplier (if any)? Default = ``False``. - - Returns - ------- - list - List of all predecessor indices. - """ - return [node.index if node else None for node in self.predecessors(include_external)] - - def successor_indices(self, include_external=False): - """Return a list of indices of all successors of the node. - - Parameters - ---------- - include_external : bool, optional - Include the external customer (if any)? Default = ``False``. - - Returns - ------- - list - List of all successor indices. - """ - return [node.index if node else None for node in self.successors(include_external)] - - @property - def descendants(self): - """A list of all descendants of the node, as |class_node| objects. - A descendant is a node that is downstream from the node but not necessarily directly - adjacent; that is, a node that can be reached from the node via a directed path. Read only. - """ - G = self.network.networkx_digraph() - desc = nx.descendants(G, self.index) - return [self.network.get_node_from_index(d) for d in desc] - - @property - def ancestors(self): - """A list of all ancestors of the node, as |class_node| objects. - An ancestor is a node that is upstream from the node but not necessarily directly - adjacent; that is, a node from which we can reach the node via a directed path. - Read only. - """ - G = self.network.networkx_digraph() - anc = nx.ancestors(G, self.index) - return [self.network.get_node_from_index(a) for a in anc] - - @property - def neighbors(self): - """A list of all neighbors (successors and predecessors) of the node, as - |class_node| objects. Read only. - """ - return list(set(self.successors()).union(set(self.predecessors()))) - - @property - def neighbor_indices(self): - """A list of indices of all neighbors (successors and predecessors) of the node. - Read only. - """ - return [n.index for n in self.neighbors] - - # Properties related to input parameters. - - @property - def holding_cost(self): - """An alias for ``local_holding_cost``. Read only. - """ - return self.local_holding_cost - - @property - def lead_time(self): - return self.shipment_lead_time - - @lead_time.setter - def lead_time(self, value): - self.shipment_lead_time = value - - @property - def inventory_policy(self): - return self._inventory_policy - - @inventory_policy.setter - def inventory_policy(self, value): - # Set _inventory_policy, and also set _inventory_policy's node attribute to self. - self._inventory_policy = value - if self._inventory_policy is not None: - self._inventory_policy.node = self - - @property - def forward_echelon_lead_time(self): - """Total shipment lead time for node and all of its descendants. - Rosling (1989) calls this :math:`M_i`; Zipkin (2000) calls it :math:`\\underline{L}_j`. - Some assembly-system algorithms assume that the nodes are indexed - in order of forward echelon lead time. Read only. - """ - return int(self.shipment_lead_time + np.sum([d.shipment_lead_time for d in self.descendants])) - - @property - def equivalent_lead_time(self): - """Difference between forward echelon lead time for the node (node :math:`i`) and - for node :math:`i-1`, where the nodes are indexed in non-decreasing order of - forward_echelon_lead_time, consecutively. - (If nodes are not indexed in this way, results will be unreliable.) - - If node is the smallest-indexed node in the network, equivalent lead - time equals forward echelon lead time, which also equals shipment lead time. - - Rosling (1989) calls this :math:`L_i`; Zipkin (2000) calls it :math:`L''_j`. - - Read only. - """ - if self.index == np.min(self.network.node_indices): - return self.forward_echelon_lead_time - else: - return self.forward_echelon_lead_time - \ - self.network.get_node_from_index(self.index - 1).forward_echelon_lead_time - - @property - def derived_demand_mean(self): - """ - Mean of derived demand, i.e., external demand at node and all of its descendants. - Read only. - """ - if self.demand_source is not None and self.demand_source.type == 'N': - DDM = self.demand_source.mean - else: - DDM = 0 - for d in self.descendants: - if d.demand_source is not None and d.demand_source.type == 'N': - DDM += d.demand_source.mean - return DDM - - @property - def derived_demand_standard_deviation(self): - """ - Standard deviation of derived demand, i.e., external demand at node and all of its descendants. - Read only. - """ - if self.demand_source is not None and self.demand_source.type == 'N': - DDV = self.demand_source.standard_deviation ** 2 - else: - DDV = 0 - for d in self.descendants: - if d.demand_source is not None and d.demand_source.type == 'N': - DDV += d.demand_source.standard_deviation ** 2 - return math.sqrt(DDV) - - # Properties related to state variables. - - @property - def state_vars_current(self): - """ - An alias for the most recent set of state variables, i.e., for the - current period. (Period is determined from ``self.network.period``). Read only. - """ - return self.state_vars[self.network.period] - - @property - def disrupted(self): - """Is the node currently disrupted? - - (Works even if the node has no |class_disruption_process| object in its - ``disruption_process`` attribute.) - """ - if self.disruption_process is None: - return False - else: - return self.disruption_process.disrupted - - # Special methods. - - def __eq__(self, other): - """Determine whether ``other`` is equal to the node. Two nodes are - considered equal if their indices are equal. - - Parameters - ---------- - other : |class_node| - The node to compare to. - - Returns - ------- - bool - True if the nodes are equal, False otherwise. - - """ - return self.index == other.index - - def __ne__(self, other): - """Determine whether ``other`` is not equal to the node. Two nodes are - considered equal if their indices are equal. - - Parameters - ---------- - other : |class_node| - The node to compare to. - - Returns - ------- - bool - True if the nodes are not equal, False otherwise. - - """ - return not self.__eq__(other) - - def __hash__(self): - """ - Return the hash for the node, which equals its index. - - """ - return self.index - - def __repr__(self): - """ - Return a string representation of the |class_node| instance. - - Returns - ------- - A string representation of the |class_node| instance. - - """ - return "SupplyChainNode({:s})".format(str(vars(self))) - - # Attribute management. - - def initialize(self): - """Initialize the parameters in the object to their default values. - Also initializes attributes that are objects (``demand_source``, ``disruption_process``, ``_inventory_policy``): - """ - - # Loop through attributes. Special handling for list and object attributes. - for attr in self._DEFAULT_VALUES.keys(): - if attr == 'demand_source': - self.demand_source = demand_source.DemandSource() - elif attr == 'disruption_process': - self.disruption_process = disruption_process.DisruptionProcess() - elif attr == '_inventory_policy': - self.inventory_policy = policy.Policy(node=self) - elif is_list(self._DEFAULT_VALUES[attr]): - setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) - else: - setattr(self, attr, self._DEFAULT_VALUES[attr]) - - def deep_equal_to(self, other, rel_tol=1e-8): - """Check whether node "deeply equals" ``other``, i.e., if all attributes are - equal, including attributes that are themselves objects. - - Note the following caveats: - - * Does not check equality of ``network``. - * Checks predecessor and successor equality by index only. - * Does not check equality of ``local_holding_cost_function`` or ``stockout_cost_function``. - * Does not check equality of ``state_vars``. - - Parameters - ---------- - other : |class_node| - The node to compare this one to. - rel_tol : float, optional - Relative tolerance to use when comparing equality of float attributes. - - Returns - ------- - bool - ``True`` if the two nodes are equal, ``False`` otherwise. - """ - - # Initialize name of violating attribute (used for debugging) and equality flag. - viol_attr = None - eq = True - - if other is None: - eq = False - else: - # Special handling for some attributes. - for attr in self._DEFAULT_VALUES.keys(): - if attr in ('network', 'local_holding_cost_function', 'stockout_cost_function', 'state_vars'): - # Ignore. - pass - elif attr == '_predecessors': - # Only compare indices. - if sorted(self.predecessor_indices()) != sorted(other.predecessor_indices()): - viol_attr = attr - eq = False - elif attr == '_successors': - # Only compare indices. - if sorted(self.successor_indices()) != sorted(other.successor_indices()): - viol_attr = attr - eq = False - elif attr == '_inventory_policy': - # Compare inventory policies. - if self.inventory_policy != other.inventory_policy: - viol_attr = attr - eq = False - elif attr in ('local_holding_cost', 'echelon_holding_cost', 'in_transit_holding_cost', \ - 'stockout_cost', 'revenue', 'initial_inventory_level', 'initial_orders', - 'initial_shipments' \ - 'demand_bound_constant', 'units_required', 'net_demand_mean', - 'net_demand_standard_deviation', 'order_capacity'): - # These attributes need approximate comparisons. - if not isclose(getattr(self, attr) or 0, getattr(other, attr) or 0, rel_tol=rel_tol): - viol_attr = attr - eq = False - elif attr in ('demand_source', 'disruption_process'): - # Check for None in object or object type. - if (getattr(self, attr) is None and getattr(other, attr) is not None) or \ - (getattr(self, attr) is not None and getattr(other, attr) is None) or \ - getattr(self, attr) != getattr(other, attr): - viol_attr = attr - eq = False - else: - if getattr(self, attr) != getattr(other, attr): - viol_attr = attr - eq = False - - return eq - - def to_dict(self): - """Convert the |class_node| object to a dict. Converts the object recursively, - calling ``to_dict()`` on each object that is an attribute of the node - (|class_demand_source|, etc.). - - Successors and predecessors are stored as their indices only, not |class_node| objects. - They should be replaced with the node objects if this function is called recursively - from a |class_network|'s ``from_dict()`` method. - - Similarly, ``network`` object is not filled, but should be filled with the network object if this - function is called recursively from a |class_network|'s ``from_dict()`` method. - - Returns - ------- - dict - The dict representation of the node. - """ - # Initialize dict. - node_dict = {} - - # Attributes. - for attr in self._DEFAULT_VALUES.keys(): - # A few attributes need special handling. - if attr == 'network': - node_dict[attr] = None - elif attr == '_predecessors': - node_dict[attr] = copy.deepcopy(self.predecessor_indices(include_external=True)) - elif attr == '_successors': - node_dict[attr] = copy.deepcopy(self.successor_indices(include_external=True)) - elif attr in ('demand_source', 'disruption_process', '_inventory_policy'): - node_dict[attr] = None if getattr(self, attr) is None else getattr(self, attr).to_dict() - elif attr == 'state_vars': - node_dict[attr] = None if self.state_vars is None else [sv.to_dict() for sv in self.state_vars] - else: - node_dict[attr] = getattr(self, attr) - - return node_dict - - @classmethod - def from_dict(cls, the_dict): - """Return a new |class_node| object with attributes copied from the - values in ``the_dict``. List attributes - are deep-copied so changes to the original dict do not get propagated to the object. - - ``_predecessors`` and ``_successors`` attributes are set to the indices of the nodes, - like they are in the dict, but should be converted to node objects if this - function is called recursively from a |class_network|'s ``from_dict()`` method. - - Similarly, ``network`` object is not filled, but should be filled with the network object if this - function is called recursively from a |class_network|'s ``from_dict()`` method. - - Parameters - ---------- - the_dict : dict - Dict representation of a |class_node|, typically created using ``to_dict()``. - - Returns - ------- - SupplyChainNode - The object converted from the dict. - """ - if the_dict is None: - node = cls() - else: - # Build empty SupplyChainNode. - node = cls(the_dict['index']) - # Fill attributes. - for attr in cls._DEFAULT_VALUES.keys(): - # Some attributes require special handling. - if attr in ('_predecessors', '_successors'): - if attr in the_dict: - value = copy.deepcopy(the_dict[attr]) - else: - value = copy.deepcopy(cls._DEFAULT_VALUES[attr]) - elif attr == 'demand_source': - if attr in the_dict: - value = demand_source.DemandSource.from_dict(the_dict[attr]) - else: - value = demand_source.DemandSource.from_dict(None) - elif attr == 'disruption_process': - if attr in the_dict: - value = disruption_process.DisruptionProcess.from_dict(the_dict[attr]) - else: - value = disruption_process.DisruptionProcess.from_dict(None) - elif attr == '_inventory_policy': - if attr in the_dict: - value = policy.Policy.from_dict(the_dict[attr]) - else: - value = policy.Policy.from_dict(None) - value.node = node - # Remove "_" from attr so we are setting the property, not the attribute. - attr = 'inventory_policy' - elif attr == 'state_vars': - if attr in the_dict: - if the_dict[attr] is None: - value = None - else: - value = [NodeStateVars.from_dict(sv) for sv in the_dict[attr]] - for sv in value: - sv.node = node - else: - value = cls._DEFAULT_VALUES[attr] - else: - if attr in the_dict: - value = the_dict[attr] - else: - value = cls._DEFAULT_VALUES[attr] - setattr(node, attr, value) - - return node - - # Neighbor management. - - def add_successor(self, successor): - """Add ``successor`` to the node's list of successors. - - .. important:: This method simply updates the node's list of successors. It does not - add ``successor`` to the network or add ``self`` as a predecessor of - ``successor``. Typically, this method is called by the network rather - than directly. Use the :meth:`~stockpyl.supply_chain_network.SupplyChainNetwork.add_successor` method - in |class_network| instead. - - Parameters - ---------- - successor : |class_node| - The node to add as a successor. - - """ - self._successors.append(successor) - - def add_predecessor(self, predecessor): - """Add ``predecessor`` to the node's list of predecessors. - - .. important:: This method simply updates the node's list of predecessors. It does not - add ``predecessor`` to the network or add ``self`` as a successor of - ``predecessor``. Typically, this method is called by the network rather - than directly. Use the :meth:`~stockpyl.supply_chain_network.SupplyChainNetwork.add_predecessor` method - in |class_network| instead. - - Parameters - ---------- - predecessor : |class_node| - The node to add as a predecessor. - - """ - self._predecessors.append(predecessor) - - def remove_successor(self, successor): - """Remove ``successor`` from the node's list of successors. - - .. important:: This method simply updates the node's list of successors. It does not - remove ``successor`` from the network or remove ``self`` as a predecessor of - ``successor``. Typically, this method is called by the - :meth:`~stockpyl.supply_chain_network.SupplyChainNetwork.remove_node` method of the - |class_network| rather than directly. - - Parameters - ---------- - successor : |class_node| - The node to remove as a successor. - - """ - self._successors.remove(successor) - - def remove_predecessor(self, predecessor): - """Remove ``predecessor`` from the node's list of predecessors. - - .. important:: This method simply updates the node's list of predecessors. It does not - remove ``predecessor`` from the network or remove ``self`` as a successor of - ``predecessor``. Typically, this method is called by the - :meth:`~stockpyl.supply_chain_network.SupplyChainNetwork.remove_node` method of the - |class_network| rather than directly. - - Parameters - ---------- - predecessor : |class_node| - The node to remove as a predecessor. - - """ - self._predecessors.remove(predecessor) - - def get_one_successor(self): - """Get one successor of the node. If the node has more than one - successor, return the first in the list. If the node has no - successors, return ``None``. - - Returns - ------- - successor : |class_node| - A successor of the node. - """ - if len(self._successors) == 0: - return None - else: - return self._successors[0] - - def get_one_predecessor(self): - """Get one predecessor of the node. If the node has more than one - predecessor, return the first in the list. If the node has no - predecessor, return ``None``. - - Returns - ------- - predecessor : |class_node| - A predecessor of the node. - """ - if len(self._predecessors) == 0: - return None - else: - return self._predecessors[0] - - # Attribute management. - - def _get_attribute_total(self, attribute, period, include_external=True): - """Return total of ``attribute`` in the node's ``state_vars`` for the period specified, for an - attribute that is indexed by successor or predecessor, i.e., - ``inbound_shipment``,`` on_order_by_predecessor``, ``inbound_order``, ``outbound_shipment``, - ``backorders_by_successor``, ``outbound_disrupted_items``, ``inbound_disrupted_items``. - (If another attribute is specified, returns the value of the - attribute, without any summation.) - - If ``period`` is ``None``, sums the attribute over all periods. - - If ``include_external`` is ``True``, includes the external supply or - demand node (if any) in the total. - - Example: ``_get_attribute_total(inbound_shipment, 5)`` returns the total - inbound shipment, from all predecessor nodes (including the external - supply, if any), in period 5. - - Parameters - ---------- - attribute : str - Attribute to be totalled. Error occurs if attribute is not present. - period : int - Time period. Set to ``None`` to sum over all periods. - include_external : bool - Include the external supply or demand node (if any) in the total? - - Returns - ------- - float - The total value of the attribute. - - """ - if attribute in ( - 'inbound_shipment', 'on_order_by_predecessor', 'raw_material_inventory', 'inbound_disrupted_items'): - # These attributes are indexed by predecessor. - if period is None: - return float(np.sum([self.state_vars[t].__dict__[attribute][p_index] - for t in range(len(self.state_vars)) - for p_index in self.predecessor_indices(include_external=True)])) - else: - return float(np.sum([self.state_vars[period].__dict__[attribute][p_index] - for p_index in self.predecessor_indices(include_external=True)])) - elif attribute in ('inbound_order', 'outbound_shipment', 'backorders_by_successor', 'outbound_disrupted_items'): - # These attributes are indexed by successor. - if period is None: - return float(np.sum([self.state_vars[t].__dict__[attribute][s_index] - for t in range(len(self.state_vars)) - for s_index in self.successor_indices(include_external=True)])) - else: - return float(np.sum([self.state_vars[period].__dict__[attribute][s_index] - for s_index in self.successor_indices(include_external=True)])) - else: - if period is None: - return np.sum([self.state_vars[:].__dict__[attribute]]) - else: - return self.state_vars[period].__dict__[attribute] - - def reindex_all_state_variables(self, old_to_new_dict): - """Change indices of all keys in all state variables using ``old_to_new_dict``. - - Parameters - ---------- - old_to_new_dict : dict - Dict in which keys are old indices and values are new indices. - - """ - for i in range(len(self.state_vars)): - self.state_vars[i].reindex_state_variables(old_to_new_dict) + """The |class_node| class contains the data, state variables, and + performance measures for a supply chain node. + + Attributes + ---------- + network : |class_network| + The network that contains the node. + products : list + A list of |class_product| objects for products that are handled at the node. + For single-product nodes, set this list to ``[]``, or to a list + containing the single |class_product| handled at the node. + local_holding_cost : float + Local holding cost, per unit per period. [:math:`h'`] + echelon_holding_cost : float + Echelon holding cost, per unit per period. (**Note:** *not currently supported*.) [:math:`h`] + local_holding_cost_function : function + Function that calculates local holding cost per period, as a function + of ending inventory level. Function must take exactly one argument, the + ending IL. Function should check that IL > 0. + in_transit_holding_cost : float + Holding cost coefficient used to calculate in-transit holding cost for + shipments en route from the node to its downstream successors, if any. + If ``in_transit_holding_cost`` is ``None``, then the stage's local_holding_cost + is used. To ignore in-transit holding costs, set ``in_transit_holding_cost`` = 0. + stockout_cost : float + Stockout cost, per unit (per period, if backorders). [:math:`p`] + stockout_cost_function : function + Function that calculates stockout cost per period, as a function + of ending inventory level. Function must take exactly one argument, the + ending IL. Function should check that IL < 0. + purchase_cost : float + Cost incurred per unit. (**Note:** *not currently supported*.) + revenue : float + Revenue earned per unit of demand met. (**Note:** *not currently supported*.) [:math:`r`] + shipment_lead_time : int + Shipment lead time. [:math:`L`] + lead_time : int + An alias for ``shipment_lead_time``. + order_lead_time : int + Order lead time. (**Note:** *not currently supported*.) + demand_source : |class_demand_source| + Demand source object. + initial_inventory_level : float + Initial inventory level. + initial_orders : float + Initial outbound order quantity. + initial shipments : float + Initial inbound shipment quantity. + inventory_policy : |class_policy| + Inventory policy to be used to make inventory decisions. + supply_type : str + Supply type , as a string. Currently supported strings are: + + * None + * 'U': unlimited + + disruption_process : |class_disruption_process| + Disruption process object (if any). + order_capacity : float + Maximum size of an order. + + # TODO: DELETE + # bill_of_materials : dict + # Dict whose keys are predecessor indices (or ``None`` for external supplier) + # and whose values are the number of units of required from that predecessor + # to make one unit of the product at this node. If not specified, default + # is 1. If this node is multi-product, this attribute + # must be a dict of dicts, with the keys of the outer dict representing the products + # handled at this node, and the keys in the inner dict representing the predecessor nodes. + # If the predecessor node is multi-product, the values of the (inner) dict should themselves + # be dicts, whose keys are predecessor products and whose values are the number of units required + # of that product from that predecessor node to make one unit at this node. + + # Examples: + + # * ``bill_of_materials[None] = None``: to make 1 unit of the (single) product at this node + # requires 1 unit from external supplier. + # * ``bill_of_materials[None] = 2``: to make 1 unit of the (single) product at this node + # requires 2 units from external supplier. + # * ``bill_of_materials[None] = 2``, ``bill_of_materials[4] = 5``: to make 1 unit of the (single) + # product at this node requires 2 units from external supplier and 5 units of the (single) product from predecessor 4. + # * ``bill_of_materials[11][None] = 6``: to make 1 unit of product 11 at this node requires 6 units + # from external supplier. + # * ``bill_of_materials[11][None] = 6``, ``bill_of_materials[11][4] = 5``: to make 1 unit of product 11 + # at this node requires 6 units from external supplier and 5 units of the (single) product from predecessor 4. + # * ``bill_of_materials[11][None] = 6``, ``bill_of_materials[11][4][0] = 5``, ``bill_of_materials[11][4][19] = 8``: + # to make 1 unit of product 11 at this node requires 6 units from external supplier, 5 units of the product 0 from predecessor 4, + # and 8 units of product 19 from predecessor 4. + + state_vars : list of |class_state_vars| + List of |class_state_vars|, one for each period in a simulation. + problem_specific_data : object + Placeholder for object that is used to provide data for specific + problem types. + """ + + def __init__(self, index, name=None, network=None, products=[], **kwargs): + """SupplyChainNode constructor method. + + Parameters + ---------- + index : int + A numeric value to identify the node. In a |class_network|, each node + must have a unique index. + name : str, optional + A string to identify the node. + network : |class_network|, optional + The network that contains the node. + products : list, optional + A list of |class_product| objects for products that are handled at the node. + For single-product nodes, set this list to ``[]``, or to a list + containing the single |class_product| handled at the node. + kwargs : optional + Optional keyword arguments to specify node attributes. These arguments may be + dicts to specify product-specific value of the attributes. + + Raises + ------ + AttributeError + If an optional keyword argument does not match a |class_node| attribute. + """ + # Initialize attributes. + self.initialize() + + # Set named attributes. + self.index = index + self.name = name + self.network = network + self.products = products + + # Set attributes specified by kwargs. + for key, value in kwargs.items(): + if key in vars(self): + # The key refers to an attribute of the object. + setattr(self, key, value) + elif key in dir(self.__class__) and isinstance(getattr(self.__class__, key), property): + # The key refers to a property of the object. (We can still set it using setattr().) + setattr(self, key, value) + elif f"_{key}" in vars(self): + # The key refers to an attribute that has "_" prepended to it. + setattr(self, f"_{key}", value) + else: + raise AttributeError(f"{key} is not an attribute of SupplyChainNode") + + _DEFAULT_VALUES = { + 'index': None, + 'name': None, + 'network': None, + 'products': [], + '_predecessors': [], + '_successors': [], + '_bill_of_materials': {}, + 'local_holding_cost': None, + 'echelon_holding_cost': None, + 'local_holding_cost_function': None, + 'in_transit_holding_cost': None, + 'stockout_cost': None, + 'stockout_cost_function': None, + 'revenue': None, + 'shipment_lead_time': None, + 'order_lead_time': None, + 'demand_source': None, + 'initial_inventory_level': None, + 'initial_orders': None, + 'initial_shipments': None, + '_inventory_policy': None, + 'supply_type': None, + 'disruption_process': None, + 'order_capacity': None, + 'processing_time': None, + 'external_inbound_cst': None, + 'external_outbound_cst': None, + 'demand_bound_constant': None, + 'units_required': None, + 'original_label': None, + 'net_demand_mean': None, + 'net_demand_standard_deviation': None, + 'larger_adjacent_node': None, + 'larger_adjacent_node_is_downstream': None, + 'max_replenishment_time': None, + 'state_vars': [] + } + + def get_attribute(self, attr, product=None): + """Return the value of the attribute ``attr`` for ``product``. This is a way to + easily access an attribute without knowing ahead of time whether it is a singleton + or a product-keyed dict. ``product`` may be either a |class_product| object or the index of the product. + + * If ``self.attr`` is a dict and contains the key ``product``, returns ``self.attr[product]``. + (This returns a (node, product)-specific value of the attribute.) + * Else if ``self.attr`` is a dict but does not contain the key ``product``, returns + ``self.products[product].attr``. (This returns a product-specific value of the attribute.) + * Else (``self.attr`` is a singleton), returns ``self.attr``. (This returns a node-specific value + of the attribute.) + + (Here, we are assuming ``product`` is an index. If it is a |class_product| object, replace ``product`` + with ``product.index``.) + + Parameters + ---------- + attr : str + The name of the attribute to get. + product : |class_product| or int, optional + The product to get the attribute for, either as a |class_product| object or as an index. + Set to ``None`` or omit for single-product models. + + Returns + ------- + any + The value of the attribute for the product (if any). + """ + # Get self.attr and the product and index. + self_attr = getattr(self, attr) + if isinstance(product, SupplyChainProduct): + product_obj = product + product_ind = product.index + else: + product_obj = self.get_product_from_index(product) + product_ind = product + + # Is self.attr a dict? + if is_dict(self_attr): + if product_ind in self_attr: + return self_attr[product_ind] + else: + return getattr(product_obj, attr) + else: + return self_attr + + # Properties and functions related to network structure. + + def predecessors(self, include_external=False): + """Return a list of all predecessors of the node, as |class_node| objects. + + Parameters + ---------- + include_external : bool, optional + Include the external supplier (if any)? Default = ``False``. + + Returns + ------- + list + List of all predecessors, as |class_node| objects. + """ + if include_external and self.supply_type is not None: + return self._predecessors + [None] + else: + return self._predecessors + + def successors(self, include_external=False): + """Return a list of all successors of the node, as |class_node| objects. + + Parameters + ---------- + include_external : bool, optional + Include the external customer (if any)? Default = ``False``. + + Returns + ------- + list + List of all successors, as |class_node| objects. + """ + if include_external and \ + (self.demand_source is not None and self.demand_source.type is not None): + return self._successors + [None] + else: + return self._successors + + def predecessor_indices(self, include_external=False): + """Return a list of indices of all predecessors of the node. + + Parameters + ---------- + include_external : bool, optional + Include the external supplier (if any)? Default = ``False``. + + Returns + ------- + list + List of all predecessor indices. + """ + return [node.index if node else None for node in self.predecessors(include_external)] + + def successor_indices(self, include_external=False): + """Return a list of indices of all successors of the node. + + Parameters + ---------- + include_external : bool, optional + Include the external customer (if any)? Default = ``False``. + + Returns + ------- + list + List of all successor indices. + """ + return [node.index if node else None for node in self.successors(include_external)] + + @property + def descendants(self): + """A list of all descendants of the node, as |class_node| objects. + A descendant is a node that is downstream from the node but not necessarily directly + adjacent; that is, a node that can be reached from the node via a directed path. Read only. + """ + G = self.network.networkx_digraph() + desc = nx.descendants(G, self.index) + return [self.network.get_node_from_index(d) for d in desc] + + @property + def ancestors(self): + """A list of all ancestors of the node, as |class_node| objects. + An ancestor is a node that is upstream from the node but not necessarily directly + adjacent; that is, a node from which we can reach the node via a directed path. + Read only. + """ + G = self.network.networkx_digraph() + anc = nx.ancestors(G, self.index) + return [self.network.get_node_from_index(a) for a in anc] + + @property + def neighbors(self): + """A list of all neighbors (successors and predecessors) of the node, as + |class_node| objects. Read only. + """ + return list(set(self.successors()).union(set(self.predecessors()))) + + @property + def neighbor_indices(self): + """A list of indices of all neighbors (successors and predecessors) of the node. + Read only. + """ + return [n.index for n in self.neighbors] + + # Properties and functions related to products and bill of materials. + + @property + def is_multiproduct(self): + """Returns ``True`` if the node handles multiple products, ``False`` otherwise. Read only.""" + return (self.products and (len(self.products) > 1)) + + @property + def product_indices(self): + """A list of indices of all products handled at the node. Always returns a list, even if the + node is single-product. (In that case, the list equals ``[None]``.) Read only.""" + if self.products: + return [prod.index for prod in self.products] + else: + return [None] + + def get_product_from_index(self, index): + """Return |class_product| object from ``self.products`` with the specified index, + or ``None`` if no matching product is found. + + Parameters + ---------- + index : int + Index of product to find. + + Returns + ------- + |class_product| + The product whose index is ``index``, or ``None`` if none. + """ + for product in self.products: + if product.index == index: + return product + + return None + + def set_bill_of_materials(self, num_needed=1.0, product_index=None, predecessor_index=None, rm_index=None): + """Specify that ``num_needed`` units of raw material product ``rm_index`` are required from ``predecessor_index`` in order + to make one unit of ``product_index`` at this node. If this is a single-product node, set ``product_index`` to ``None``. + If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. If the predecessor is a + single-product node, set ``rm_index`` to ``None``. + + To remove a BOM relationship, call this function again, setting ``num_needed = 0`` or ``num_needed = None``. + If ``num_needed = 0`` or ``None`` and a BOM relationship does not already exist for the specified product, + predecessory, and raw material, does nothing. + + **Note:** If a node and its predecessor are both single-product (or if the predecessor is the external supplier), + their BOM number is assumed to equal 1, even if it is not set using this function. If the BOM number is something + other than 1, it must be set using this function. + + Parameters + ---------- + product_index : int, optional + Index of product at this node, or ``None`` if this is a single-product node. + predecessor_index : int, optional + Index of predecessor node, or ``None`` if the predecessor is the external supplier. + rm_index : int, optional + Index of raw material product, or ``None`` if the predecessor is the external supplier or + is single-product. + num_needed : float, optional + The number of units required. Set to 0 or ``None`` to remove the BOM relationship. + """ + + # Are we adding a BOM relationship? + if num_needed: + # Does self._bill_of_materials[product_index] already exist? + if product_index not in self._bill_of_materials: + self._bill_of_materials[product_index] = {} + # Does self._bill_of_materials[product_index][predecessor_index] already exist? + if predecessor_index not in self._bill_of_materials[product_index]: + self._bill_of_materials[product_index][predecessor_index] = {} + # Set self._bill_of_materials[product_index][predecessor_index][rm_index]. + self._bill_of_materials[product_index][predecessor_index][rm_index] = num_needed + else: + # We are removing a BOM relationship. + if product_index in self._bill_of_materials: + if predecessor_index in self._bill_of_materials[product_index]: + if rm_index in self._bill_of_materials[product_index][predecessor_index]: + del self._bill_of_materials[product_index][predecessor_index][rm_index] + # If there are now no raw materials from predecessor_index, remove predecessor_index from + # self._bill_of_materials[product_index]. + if not self._bill_of_materials[product_index][predecessor_index]: + del self._bill_of_materials[product_index][predecessor_index] + # If there are now no predecessors for this product, remove product_index from self._bill_of_materials. + if not self._bill_of_materials[product_index]: + del self._bill_of_materials[product_index] + + def get_bill_of_materials(self, product_index=None, predecessor_index=None, rm_index=None): + """Get the number of units of raw material product ``rm_index`` that are required from ``predecessor_index`` in order + to make one unit of ``product_index`` at this node. If this is a single-product node, set ``product_index`` to ``None``. + If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. If the predecessor is a + single-product node, set ``rm_index`` to ``None``. + + Returns 1 if the node and its predecessor are both single-product (or the predecessor is the external supplier) + and there is no BOM relationship specified for this pair. Node pairs are assumed to have a BOM number of 1 if + both are single-product (or the predecessor is the external supplier), unless specified otherwise in the BOM. + + Returns 0 if there is no BOM relationship for this product, predecessor, and raw material. + + Parameters + ---------- + product_index : int, optional + Index of product at this node, or ``None`` if this is a single-product node. + predecessor_index : int, optional + Index of predecessor node, or ``None`` if the predecessor is the external supplier. + rm_index : int, optional + Index of raw material product, or ``None`` if the predecessor is the external supplier or + is single-product. + """ + try: + # Return BOM number, if BOM entry exists. + return self._bill_of_materials[product_index][predecessor_index][rm_index] + except: + if not self.is_multiproduct and predecessor_index is None: + # Node is single-product and predecessor is external supplier; return default BOM number of 1. + return 1 + elif not self.is_multiproduct and not self.network.get_node_from_index(predecessor_index).is_multiproduct: + # Both nodes are single-product; return default BOM number of 1. + return 1 + else: + # No BOM relationship exists; return 0. + return 0 + + @property + def bill_of_materials(self): + """A list of all non-zero bill-of-materials relationships for products at this node. + Relationships are represented as tuples ``(num, n, prod, p, rm)``, where ``num`` is the + number of units required, ``n`` is the index of this node, + ``prod`` is the index of a product (or ``None`` if ``n`` is single-product), + ``p`` is the index of a predecessor node (or ``None`` for external supplier), and ``rm`` is the index + of a product at ``p`` (or ``None`` if ``p`` is single-product or the external supplier). + + **Note:** If the node and a predecessor are both single-product (or if the predecessor is the external supplier), + their BOM number is assumed to equal 1, even if it has not been set explicitly. If the BOM number is something + other than 1, it must be set using ``set_bill_of_materials()``. + + Read only. + """ + bom = [] + + # Build list of product indices, including None if single-product. + prod_indices = self.product_indices or [None] + + # Loop through products, predecessors, and raw materials. + for prod in prod_indices: + for p in self.predecessors(include_external=True): + # Build list of raw materials, including None if single-product + if p: + rm_indices = p.product_indices or [None] + p_ind = p.index + else: + rm_indices = [None] + p_ind = None + for rm in rm_indices: + bom_value = self.get_bill_of_materials(product_index=prod, predecessor_index=p_ind, rm_index=rm) + if bom_value > 0: + bom.append((bom_value, self.index, prod, p_ind, rm)) + + return bom + + + def raw_material_supplier_indices(self, product_index=None): + """Return a list of all indices of predecessors from which a raw material must be ordered in order to + make ``product_index`` at this node, according to the bill of materials. + + Parameters + ---------- + product_index : int, optional + Index of product at this node, or ``None`` if this is a single-product node. + + Returns + ------- + list + List of all indices of predecessors from which a raw material must be ordered in order to + make ``product_index`` at this node, according to the bill of materials. + """ + supplier_indices = [] + for p in self.predecessors: + # Determine whether p provides a raw material for the product. + if not self.is_multiproduct and not p.is_multiproduct and \ + self.get_bill_of_materials(predecessor_index=p.index) > 0: + # The node and predecessor are both single-product, and the predecessor provides a raw material. + provides_rm = True + else: + provides_rm = False + for rm_ind in p.product_indices: + if self.get_bill_of_materials(product_index=product_index, predecessor_index=p.index, rm_index=rm_ind) > 0: + # Predecessor provides a raw material. + provides_rm = True + # Add p to list if it provides a raw material. + if provides_rm: + supplier_indices.append(p.index) + + return supplier_indices + + + # Properties related to input parameters. + + @property + def holding_cost(self): + """An alias for ``local_holding_cost``. Read only. + """ + return self.local_holding_cost + + @property + def lead_time(self): + return self.shipment_lead_time + + @lead_time.setter + def lead_time(self, value): + self.shipment_lead_time = value + + @property + def inventory_policy(self): + return self._inventory_policy + + @inventory_policy.setter + def inventory_policy(self, value): + # Set ``_inventory_policy``, and also set ``_inventory_policy``'s ``node`` attribute to self. + # If ``value`` is a dict (for multi-product), set ``node`` and ``product`` attributes of the policy + # for each product in the dict. + self._inventory_policy = value + if self._inventory_policy is not None: + if is_dict(value): + for prod, _ in value.items(): + self._inventory_policy[prod].node = self + self._inventory_policy[prod].product = prod + else: + self._inventory_policy.node = self + + @property + def forward_echelon_lead_time(self): + """Total shipment lead time for node and all of its descendants. + Rosling (1989) calls this :math:`M_i`; Zipkin (2000) calls it :math:`\\underline{L}_j`. + Some assembly-system algorithms assume that the nodes are indexed + in order of forward echelon lead time. Read only. + """ + return int(self.shipment_lead_time + np.sum([d.shipment_lead_time for d in self.descendants])) + + @property + def equivalent_lead_time(self): + """Difference between forward echelon lead time for the node (node :math:`i`) and + for node :math:`i-1`, where the nodes are indexed in non-decreasing order of + forward_echelon_lead_time, consecutively. + (If nodes are not indexed in this way, results will be unreliable.) + + If node is the smallest-indexed node in the network, equivalent lead + time equals forward echelon lead time, which also equals shipment lead time. + + Rosling (1989) calls this :math:`L_i`; Zipkin (2000) calls it :math:`L''_j`. + + Read only. + """ + if self.index == np.min(self.network.node_indices): + return self.forward_echelon_lead_time + else: + return self.forward_echelon_lead_time - \ + self.network.get_node_from_index(self.index - 1).forward_echelon_lead_time + + @property + def derived_demand_mean(self): + """ + Mean of derived demand, i.e., external demand at node and all of its descendants. + Read only. + """ + if self.demand_source is not None and self.demand_source.type == 'N': + DDM = self.demand_source.mean + else: + DDM = 0 + for d in self.descendants: + if d.demand_source is not None and d.demand_source.type == 'N': + DDM += d.demand_source.mean + return DDM + + @property + def derived_demand_standard_deviation(self): + """ + Standard deviation of derived demand, i.e., external demand at node and all of its descendants. + Read only. + """ + if self.demand_source is not None and self.demand_source.type == 'N': + DDV = self.demand_source.standard_deviation ** 2 + else: + DDV = 0 + for d in self.descendants: + if d.demand_source is not None and d.demand_source.type == 'N': + DDV += d.demand_source.standard_deviation ** 2 + return math.sqrt(DDV) + + # Properties related to state variables. + + @property + def state_vars_current(self): + """ + An alias for the most recent set of state variables, i.e., for the + current period. (Period is determined from ``self.network.period``). Read only. + """ + return self.state_vars[self.network.period] + + @property + def disrupted(self): + """Is the node currently disrupted? + + (Works even if the node has no |class_disruption_process| object in its + ``disruption_process`` attribute.) + """ + if self.disruption_process is None: + return False + else: + return self.disruption_process.disrupted + + # Special methods. + + def __eq__(self, other): + """Determine whether ``other`` is equal to the node. Two nodes are + considered equal if their indices are equal. + + Parameters + ---------- + other : |class_node| + The node to compare to. + + Returns + ------- + bool + True if the nodes are equal, False otherwise. + + """ + return self.index == other.index + + def __ne__(self, other): + """Determine whether ``other`` is not equal to the node. Two nodes are + considered equal if their indices are equal. + + Parameters + ---------- + other : |class_node| + The node to compare to. + + Returns + ------- + bool + True if the nodes are not equal, False otherwise. + + """ + return not self.__eq__(other) + + def __hash__(self): + """ + Return the hash for the node, which equals its index. + + """ + return self.index + + def __repr__(self): + """ + Return a string representation of the |class_node| instance. + + Returns + ------- + A string representation of the |class_node| instance. + + """ + return "SupplyChainNode({:s})".format(str(vars(self))) + + # Attribute management. + + def initialize(self): + """Initialize the parameters in the object to their default values. + Also initializes attributes that are objects (``demand_source``, ``disruption_process``, ``_inventory_policy``): + """ + + # Loop through attributes. Special handling for list and object attributes. + for attr in self._DEFAULT_VALUES.keys(): + if attr == 'demand_source': + self.demand_source = demand_source.DemandSource() + elif attr == 'disruption_process': + self.disruption_process = disruption_process.DisruptionProcess() + elif attr == '_inventory_policy': + self.inventory_policy = policy.Policy(node=self) + elif is_list(self._DEFAULT_VALUES[attr]) or is_dict(self._DEFAULT_VALUES[attr]): + setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) + else: + setattr(self, attr, self._DEFAULT_VALUES[attr]) + + def deep_equal_to(self, other, rel_tol=1e-8): + """Check whether node "deeply equals" ``other``, i.e., if all attributes are + equal, including attributes that are themselves objects. + + Note the following caveats: + + * Does not check equality of ``network``. + * Checks predecessor and successor equality by index only. + * Does not check equality of ``local_holding_cost_function`` or ``stockout_cost_function``. + * Does not check equality of ``state_vars``. + + Parameters + ---------- + other : |class_node| + The node to compare this one to. + rel_tol : float, optional + Relative tolerance to use when comparing equality of float attributes. + + Returns + ------- + bool + ``True`` if the two nodes are equal, ``False`` otherwise. + """ + + # Initialize name of violating attribute (used for debugging) and equality flag. + viol_attr = None + eq = True + + if other is None: + eq = False + else: + # Special handling for some attributes. + for attr in self._DEFAULT_VALUES.keys(): + if attr in ('network', 'local_holding_cost_function', 'stockout_cost_function', 'state_vars'): + # Ignore. + pass + elif attr == '_predecessors': + # Only compare indices. + if sorted(self.predecessor_indices()) != sorted(other.predecessor_indices()): + viol_attr = attr + eq = False + elif attr == '_successors': + # Only compare indices. + if sorted(self.successor_indices()) != sorted(other.successor_indices()): + viol_attr = attr + eq = False + elif attr == '_inventory_policy': + # Compare inventory policies. + if self.inventory_policy != other.inventory_policy: + viol_attr = attr + eq = False + elif attr in ('local_holding_cost', 'echelon_holding_cost', 'in_transit_holding_cost', + 'stockout_cost', 'revenue', 'initial_inventory_level', 'initial_orders', + 'initial_shipments','demand_bound_constant', 'units_required', 'net_demand_mean', + 'net_demand_standard_deviation', 'order_capacity'): + # These attributes need approximate comparisons. + if not isclose(getattr(self, attr) or 0, getattr(other, attr) or 0, rel_tol=rel_tol): + viol_attr = attr + eq = False + elif attr in ('demand_source', 'disruption_process'): + # Check for None in object or object type. + if (getattr(self, attr) is None and getattr(other, attr) is not None) or \ + (getattr(self, attr) is not None and getattr(other, attr) is None) or \ + getattr(self, attr) != getattr(other, attr): + viol_attr = attr + eq = False + else: + if getattr(self, attr) != getattr(other, attr): + viol_attr = attr + eq = False + + return eq + + def to_dict(self): + """Convert the |class_node| object to a dict. Converts the object recursively, + calling ``to_dict()`` on each object that is an attribute of the node + (|class_demand_source|, etc.). + + Successors and predecessors are stored as their indices only, not |class_node| objects. + They should be replaced with the node objects if this function is called recursively + from a |class_network|'s ``from_dict()`` method. + + Similarly, ``network`` object is not filled, but should be filled with the network object if this + function is called recursively from a |class_network|'s ``from_dict()`` method. + + Returns + ------- + dict + The dict representation of the node. + """ + # Initialize dict. + node_dict = {} + + # Attributes. + for attr in self._DEFAULT_VALUES.keys(): + # A few attributes need special handling. + if attr == 'network': + node_dict[attr] = None + elif attr == '_predecessors': + node_dict[attr] = copy.deepcopy(self.predecessor_indices(include_external=True)) + elif attr == '_successors': + node_dict[attr] = copy.deepcopy(self.successor_indices(include_external=True)) + elif attr == 'products': + node_dict[attr] = [prod.to_dict() for prod in self.products] + elif attr in ('demand_source', 'disruption_process', '_inventory_policy'): + node_dict[attr] = None if getattr(self, attr) is None else getattr(self, attr).to_dict() + elif attr == 'state_vars': + node_dict[attr] = None if self.state_vars is None else [sv.to_dict() for sv in self.state_vars] + else: + node_dict[attr] = getattr(self, attr) + + return node_dict + + @classmethod + def from_dict(cls, the_dict): + """Return a new |class_node| object with attributes copied from the + values in ``the_dict``. List attributes + are deep-copied so changes to the original dict do not get propagated to the object. + + ``_predecessors`` and ``_successors`` attributes are set to the indices of the nodes, + like they are in the dict, but should be converted to node objects if this + function is called recursively from a |class_network|'s ``from_dict()`` method. + + Similarly, ``network`` object is not filled, but should be filled with the network object if this + function is called recursively from a |class_network|'s ``from_dict()`` method. + + Parameters + ---------- + the_dict : dict + Dict representation of a |class_node|, typically created using ``to_dict()``. + + Returns + ------- + |class_product| + The object converted from the dict. + """ + if the_dict is None: + node = cls() + else: + # Build empty SupplyChainNode. + node = cls(the_dict['index']) + # Fill attributes. + for attr in cls._DEFAULT_VALUES.keys(): + # Some attributes require special handling. + if attr in ('_predecessors', '_successors'): + if attr in the_dict: + value = copy.deepcopy(the_dict[attr]) + else: + value = copy.deepcopy(cls._DEFAULT_VALUES[attr]) + elif attr == 'products': + # TODO: why isn't this handled by setting `value` like others? + if attr not in the_dict: + node.products = copy.deepcopy(cls._DEFAULT_VALUES['products']) + else: + for prod_dict in (the_dict['products'] or []): + node.products.append(SupplyChainProduct.from_dict(prod_dict)) + elif attr == '_bill_of_materials': + if attr in the_dict: + bom = copy.deepcopy(the_dict[attr]) + else: + bom = copy.deepcopy(cls._DEFAULT_VALUES[attr]) + # Convert 'null' to None and string-wrapped ints to ints in dictionary keys. + # (Note that JSON encoding/decoding onverts correctly between None and 'null' + # for dictionary values but not keys. Similarly, it leaves ints as strings.) + # TODO: repalce numeric strings + + if 'null' in value: + value[None] = value.pop('null') + for prod in value: + if 'null' in value[prod]: + value[prod][None] = value[prod].pop('null') + for p in value[prod]: + if 'null' in value[prod][p]: + value[prod][p][None] = value[prod][p].pop('null') + elif attr == 'demand_source': + if attr in the_dict: + value = demand_source.DemandSource.from_dict(the_dict[attr]) + else: + value = demand_source.DemandSource.from_dict(None) + elif attr == 'disruption_process': + if attr in the_dict: + value = disruption_process.DisruptionProcess.from_dict(the_dict[attr]) + else: + value = disruption_process.DisruptionProcess.from_dict(None) + elif attr == '_inventory_policy': + if attr in the_dict: + value = policy.Policy.from_dict(the_dict[attr]) + else: + value = policy.Policy.from_dict(None) + value.node = node + # Remove "_" from attr so we are setting the property, not the attribute. + attr = 'inventory_policy' + elif attr == 'state_vars': + if attr in the_dict: + if the_dict[attr] is None: + value = None + else: + value = [NodeStateVars.from_dict(sv) for sv in the_dict[attr]] + for sv in value: + sv.node = node + else: + value = cls._DEFAULT_VALUES[attr] + else: + if attr in the_dict: + value = the_dict[attr] + else: + value = cls._DEFAULT_VALUES[attr] + setattr(node, attr, value) + + return node + + # Neighbor management. + + def add_successor(self, successor): + """Add ``successor`` to the node's list of successors. + + .. important:: This method simply updates the node's list of successors. It does not + add ``successor`` to the network or add ``self`` as a predecessor of + ``successor``. Typically, this method is called by the network rather + than directly. Use the :meth:`~stockpyl.supply_chain_network.SupplyChainNetwork.add_successor` method + in |class_network| instead. + + Parameters + ---------- + successor : |class_node| + The node to add as a successor. + + """ + self._successors.append(successor) + + def add_predecessor(self, predecessor): + """Add ``predecessor`` to the node's list of predecessors. + + .. important:: This method simply updates the node's list of predecessors. It does not + add ``predecessor`` to the network or add ``self`` as a successor of + ``predecessor``. Typically, this method is called by the network rather + than directly. Use the :meth:`~stockpyl.supply_chain_network.SupplyChainNetwork.add_predecessor` method + in |class_network| instead. + + Parameters + ---------- + predecessor : |class_node| + The node to add as a predecessor. + + """ + self._predecessors.append(predecessor) + + def remove_successor(self, successor): + """Remove ``successor`` from the node's list of successors. + + .. important:: This method simply updates the node's list of successors. It does not + remove ``successor`` from the network or remove ``self`` as a predecessor of + ``successor``. Typically, this method is called by the + :meth:`~stockpyl.supply_chain_network.SupplyChainNetwork.remove_node` method of the + |class_network| rather than directly. + + Parameters + ---------- + successor : |class_node| + The node to remove as a successor. + + """ + self._successors.remove(successor) + + def remove_predecessor(self, predecessor): + """Remove ``predecessor`` from the node's list of predecessors. + + .. important:: This method simply updates the node's list of predecessors. It does not + remove ``predecessor`` from the network or remove ``self`` as a successor of + ``predecessor``. Typically, this method is called by the + :meth:`~stockpyl.supply_chain_network.SupplyChainNetwork.remove_node` method of the + |class_network| rather than directly. + + Parameters + ---------- + predecessor : |class_node| + The node to remove as a predecessor. + + """ + self._predecessors.remove(predecessor) + + def get_one_successor(self): + """Get one successor of the node. If the node has more than one + successor, return the first in the list. If the node has no + successors, return ``None``. + + Returns + ------- + successor : |class_node| + A successor of the node. + """ + if len(self._successors) == 0: + return None + else: + return self._successors[0] + + def get_one_predecessor(self): + """Get one predecessor of the node. If the node has more than one + predecessor, return the first in the list. If the node has no + predecessor, return ``None``. + + Returns + ------- + predecessor : |class_node| + A predecessor of the node. + """ + if len(self._predecessors) == 0: + return None + else: + return self._predecessors[0] + + # Attribute management. + + def _get_attribute_total(self, attribute, period, product_index=None, include_external=True): + """Return total of ``attribute`` in the node's ``state_vars`` for the period and product specified, for an + attribute that is indexed by successor or predecessor, i.e., + ``inbound_shipment``,`` on_order_by_predecessor``, ``inbound_order``, ``outbound_shipment``, + ``backorders_by_successor``, ``outbound_disrupted_items``, ``inbound_disrupted_items``. + (If another attribute is specified, returns the value of the + attribute, without any summation.) + + If ``period`` is ``None``, sums the attribute over all periods. + + If node is multi-product, ``product_index`` must be set to the index of the product for which + the attribute is being requested. + + If ``include_external`` is ``True``, includes the external supply or + demand node (if any) in the total. + + Example: ``_get_attribute_total('inbound_shipment', 5)`` returns the total + inbound shipment, from all predecessor nodes (including the external + supply, if any), in period 5. + + Parameters + ---------- + attribute : str + Attribute to be totalled. Error occurs if attribute is not present. + period : int + Time period. Set to ``None`` to sum over all periods. + product_index : int + Index of product for which the attribute is being requested. May set to ``None`` for + single-product nodes. + include_external : bool + Include the external supply or demand node (if any) in the total? + + Returns + ------- + float + The total value of the attribute. + + """ + if attribute in ('inbound_shipment', 'on_order_by_predecessor', 'raw_material_inventory', 'inbound_disrupted_items'): + # These attributes are indexed by predecessor. + if period is None: + return float(np.sum([self.state_vars[t].__dict__[attribute][p_index] + for t in range(len(self.state_vars)) + for p_index in self.predecessor_indices(include_external=include_external)])) + else: + return float(np.sum([self.state_vars[period].__dict__[attribute][p_index] + for p_index in self.predecessor_indices(include_external=include_external)])) + elif attribute in ('inbound_order', 'outbound_shipment', 'backorders_by_successor', 'outbound_disrupted_items'): + # These attributes are indexed by successor. + if period is None: + return float(np.sum([self.state_vars[t].__dict__[attribute][s_index] + for t in range(len(self.state_vars)) + for s_index in self.successor_indices(include_external=include_external)])) + else: + return float(np.sum([self.state_vars[period].__dict__[attribute][s_index] + for s_index in self.successor_indices(include_external=include_external)])) + else: + if period is None: + return np.sum([self.state_vars[:].__dict__[attribute]]) + else: + return self.state_vars[period].__dict__[attribute] + + def reindex_all_state_variables(self, old_to_new_dict): + """Change indices of all keys in all state variables using ``old_to_new_dict``. + + Parameters + ---------- + old_to_new_dict : dict + Dict in which keys are old indices and values are new indices. + + """ + for i in range(len(self.state_vars)): + self.state_vars[i].reindex_state_variables(old_to_new_dict) # =============================================================================== @@ -849,623 +1181,676 @@ def reindex_all_state_variables(self, old_to_new_dict): # =============================================================================== class NodeStateVars(object): - """The |class_state_vars| class contains values of the state variables - for a supply chain node during a :ref:`simulation `. - All state variables refer to their values at the - end of a period (except during the period itself, in which case the - values might be intermediate until the period is complete). - - - Attributes - ---------- - node : |class_node| - The node the state variables refer to. - period : int - The period of the simulation that the state variables refer to. - inbound_shipment_pipeline : dict - ``inbound_shipment_pipeline[p][r]`` = shipment quantity arriving - from predecessor node ``p`` in ``r`` periods from the current period. - If ``p`` is ``None``, refers to external supply. - inbound_shipment : dict - ``inbound_shipment[p]`` = shipment quantity arriving at node from - predecessor node ``p`` in the current period. If ``p`` is ``None``, - refers to external supply. - inbound_order_pipeline : dict - ``inbound_order_pipeline[s][r]`` = order quantity arriving from - successor node ``s`` in ``r`` periods from the current period. - If ``s`` is ``None``, refers to external demand. - inbound_order : dict - ``inbound_order[s]`` = order quantity arriving at node from successor - node ``s`` in the current period. If ``s`` is ``None``, refers to - external demand. - demand_cumul : float - Cumulative demand (from all sources, internal and external) - from period 0 through the current period. (Used for ``fill_rate`` calculation.) - outbound_shipment : dict - ``outbound_shipment[s]`` = outbound shipment to successor node ``s``. - If ``s`` is ``None``, refers to external demand. - on_order_by_predecessor : dict - ``on_order_by_predecessor[p]`` = on-order quantity (items that have been - ordered from successor node ``p`` but not yet received) at node. If ``p`` is ``None``, refers to external supply. - inventory_level : float - Inventory level (positive, negative, or zero) at node - backorders_by_successor : dict - ``backorders_by_successor[s]`` = number of backorders for successor - ``s``. If ``s`` is ``None``, refers to external demand. - outbound_disrupted_items : dict - ``outbound_disrupted_items[s]`` = number of items held for successor ``s`` - due to a type-SP disruption at ``s``. (Since external demand cannot be - disrupted, ``outbound_disrupted_items[None]`` always = 0.) Items held for successor - are not included in ``backorders_by_successor``. - Sum over all successors of ``backorders_by_successor + outbound_disrupted_items`` - should always equal max{0, -``inventory_level``}. - inbound_disrupted_items : dict - ``inbound_disrupted_items[p]`` = number of items from predecessor ``p`` that are - being held before receipt due to a type-RP disruption at the node. - raw_material_inventory : dict - ``raw_material_inventory[p]`` = number of units of predecessor ``p``'s - product in raw-material inventory at node. If ``p`` is ``None``, refers - to external supply. - disrupted : bool - ``True`` if the node was disrupted in the period, ``False`` otherwise. - holding_cost_incurred : float - Holding cost incurred at the node in the period. - stockout_cost_incurred : float - Stockout cost incurred at the node in the period. - in_transit_holding_cost_incurred : float - In-transit holding cost incurred at the node in the period. - revenue_earned : float - Revenue earned at the node in the period. - total_cost_incurred : float - Total cost (less revenue) incurred at the node in the period. - demand_met_from_stock : float - Demands met from stock at the node in the period. - demand_met_from_stock_cumul : float - Cumulative demands met from stock from period 0 through the current period. - (Used for ``fill_rate`` calculation.) - fill_rate : float - Cumulative fill rate in periods 0, ..., period. - order_quantity : dict - ``order_quantity[p]`` = order quantity placed by the node to - predecessor ``p`` in period. If ``p`` is ``None``, refers to external supply. - """ - - def __init__(self, node=None, period=None): - """NodeStateVars constructor method. - - If ``node`` is provided, the state variable dicts (``inbound_shipment``, - ``inbound_order``, etc.) are initialized with the appropriate keys. - Otherwise, they are set to empty dicts and must be initialized before - using. - - Parameters - ---------- - node : |class_node|, optional - The node to which these state variables refer. - period : int, optional - The period to which these state variables refer. - """ - # --- Node --- # - self.node = node - self.period = period - - # --- Primary State Variables --- # - # These are set explicitly during the simulation. - - if node: - - # Initialize dicts with appropriate keys. (inbound_shipment_pipeline gets - # order_lead_time+shipment_lead_time slots for orders to external supplier) - self.inbound_shipment_pipeline = {p_index: - [0] * ((self.node.order_lead_time or 0) + ( - self.node.shipment_lead_time or 0) + 1) - for p_index in self.node.predecessor_indices(include_external=True)} - self.inbound_shipment = {p_index: 0 for p_index in self.node.predecessor_indices(include_external=True)} - self.inbound_order_pipeline = {s_index: - [0] * ((self.node.network.get_node_from_index( - s_index).order_lead_time or 0) + 1) - for s_index in node.successor_indices()} - # Add external customer to inbound_order_pipeline. (Must be done - # separately since external customer does not have its own node, - # or its own order lead time.) - if node.demand_source is not None and node.demand_source.type is not None: - self.inbound_order_pipeline[None] = [0] - self.inbound_order = {s_index: 0 for s_index in self.node.successor_indices(include_external=True)} - self.outbound_shipment = {s_index: 0 for s_index in self.node.successor_indices(include_external=True)} - self.on_order_by_predecessor = {p_index: 0 for p_index in - self.node.predecessor_indices(include_external=True)} - self.backorders_by_successor = {s_index: 0 for s_index in - self.node.successor_indices(include_external=True)} - self.outbound_disrupted_items = {s_index: 0 for s_index in - self.node.successor_indices(include_external=True)} - self.inbound_disrupted_items = {p_index: 0 for p_index in - self.node.predecessor_indices(include_external=True)} - self.order_quantity = {p_index: 0 for p_index in self.node.predecessor_indices(include_external=True)} - self.raw_material_inventory = {p_index: 0 for p_index in - self.node.predecessor_indices(include_external=True)} - - else: - - # Initialize dicts to empty dicts. - self.inbound_shipment_pipeline = {} - self.inbound_shipment = {} - self.inbound_order_pipeline = {} - self.inbound_order = {} - self.outbound_shipment = {} - self.on_order_by_predecessor = {} - self.backorders_by_successor = {} - self.outbound_disrupted_items = {} - self.inbound_disrupted_items = {} - self.order_quantity = {} - self.raw_material_inventory = {} - - # Remaining state variables. - self.inventory_level = 0 - self.disrupted = False - - # Costs: each refers to a component of the cost (or the total cost) - # incurred at the node in the period. - self.holding_cost_incurred = 0 - self.stockout_cost_incurred = 0 - self.in_transit_holding_cost_incurred = 0 - self.revenue_earned = 0 - self.total_cost_incurred = 0 - - # Fill rate quantities. - self.demand_cumul = 0 - self.demand_met_from_stock = 0 - self.demand_met_from_stock_cumul = 0 - self.fill_rate = 0 - - # --- Special Methods --- # - - def __eq__(self, other): - """Determine whether ``other`` is equal to the state variables object. Two objects are - considered equal if they are deeply-equal to each other. - - Parameters - ---------- - other : |class_state_vars| - The state variables object to compare to. - - Returns - ------- - bool - True if the state variables objects are equal, False otherwise. - - """ - return self.deep_equal_to(other) - - def __ne__(self, other): - """Determine whether ``other`` is not equal to the state variables object. Two objects are - considered equal if they are deeply-equal to each other. - - Parameters - ---------- - other : |class_state_vars| - The state variables object to compare to. - - Returns - ------- - bool - True if the state variables objects are not equal, False otherwise. - - """ - return not self.__eq__(other) - - # --- Calculated State Variables --- # - # These are calculated based on the primary state variables. - - @property - def on_hand(self): - """Current on-hand inventory. Read only. - """ - return max(0, self.inventory_level) - - @property - def backorders(self): - """Current number of backorders. Should always equal sum over all successors ``s`` - of ``backorders_by_successor[s]`` + ``outbound_disrupted_items[s]``. Read only. - """ - return max(0, -self.inventory_level) - - def in_transit_to(self, successor): - """Return current total inventory in transit to a given successor. - (Declared as a function, not a property, because needs to take an argument.) - Includes items that will be/have been delivered during the current period. - - Parameters - ---------- - successor : |class_node| - The successor node. - - Returns - ------- - The current inventory in transit to the successor. - """ - return np.sum([successor.state_vars[self.period].inbound_shipment_pipeline[self.node.index][:]]) - - def in_transit_from(self, predecessor): - """Return current total inventory in transit from a given predecessor. - (Declared as a function, not a property, because needs to take an argument.) - Includes items that will be/have been delivered during the current period - (``self.network.period``). - - Parameters - ---------- - predecessor : |class_node| - The predecessor node (or ``None`` for external supplier). - - Returns - ------- - The current inventory in transit from the predecessor. - """ - if predecessor is None: - p = None - else: - p = predecessor.index - - return np.sum(self.inbound_shipment_pipeline[p][:]) - - @property - def in_transit(self): - """Current total inventory in transit to the node. If node has - more than 1 predecessor (it is an assembly node), including external supplier, - in-transit items are counted using the "units" of the node itself. - That is, they are divided by the total number of predecessors. Read only. - """ - total_in_transit = np.sum([self.in_transit_from(p) - for p in self.node.predecessors(include_external=True)]) - if total_in_transit == 0: - return 0 - else: - return total_in_transit / len(self.node.predecessors(include_external=True)) - - @property - def on_order(self): - """Current total on-order quantity. If node has more than 1 - predecessor (it is an assembly node), including external supplier, - on-order items are counted using the "units" of the node itself. - That is, they are divided by the total number of predecessors. Read only. - """ - total_on_order = self.node._get_attribute_total('on_order_by_predecessor', - self.period, - include_external=True) - if total_on_order == 0: - return 0 - else: - return total_on_order / len(self.node.predecessors(include_external=True)) - - @property - def raw_material_aggregate(self): - """Total raw materials at the node. Raw materials - are counted using the "units" of the node itself. That is, they are - divided by the total number of predecessors. Read only. - """ - total_raw_material = self.node._get_attribute_total('raw_material_inventory', - self.period, - include_external=True) - if total_raw_material == 0: - return 0 - else: - return total_raw_material / len(self.node.predecessors(include_external=True)) - - @property - def inbound_disrupted_items_aggregate(self): - """Total inbound disrupted items at the node. Inbound disrupted items - are counted using the "units" of the node itself. That is, they are - divided by the total number of predecessors. Read only. - """ - total_raw_material = self.node._get_attribute_total('inbound_disrupted_items', - self.period, - include_external=True) - if total_raw_material == 0: - return 0 - else: - return total_raw_material / len(self.node.predecessors(include_external=True)) - - def inventory_position(self, predecessor_index=None): - """Current local inventory position at node. Equals inventory level plus - on-order inventory. - On-order includes raw material inventory that has not yet been processed, as - well as inbound disrupted items due to type-RP disruptions. - If the node has more than one predecessor (including external supplier), - set ``predecessor_index`` for predecessor-specific inventory position, or set to ``None`` - to use aggregate on-order and raw material inventory (counting such - items using the "units" of the node itself). - - Parameters - ---------- - predecessor_index : int, optional - Predecessor to consider in inventory position calculation (excluding all others), - or ``None`` to include all predecessors. - - Returns - ------- - float - The inventory position. - """ - if predecessor_index is not None: - return self.inventory_level \ - + self.on_order_by_predecessor[predecessor_index] \ - + self.raw_material_inventory[predecessor_index] \ - + self.inbound_disrupted_items[predecessor_index] - else: - # Note: If <=1 predecessor, raw_material_inventory should always = 0. - return self.inventory_level + self.on_order + self.raw_material_aggregate \ - + self.inbound_disrupted_items_aggregate - - @property - def echelon_on_hand_inventory(self): - """Current echelon on-hand inventory at node. Equals on-hand inventory at node - and at or in transit to all of its downstream nodes. Read only. - """ - EOHI = self.on_hand - for d in self.node.descendants: - EOHI += d.state_vars[self.period].on_hand - # Add in-transit quantity from predecessors that are descendents - # of self (or equal to self). - for p in d.predecessors(): - if p.index == self.node.index or p in self.node.descendants: - EOHI += d.state_vars[self.period].in_transit_from(p) - return EOHI - - @property - def echelon_inventory_level(self): - """Current echelon inventory level at node. Equals echelon on-hand inventory - minus backorders at terminal node(s) downstream from node. Read only. - """ - EIL = self.echelon_on_hand_inventory - for d in self.node.descendants + [self.node]: - if d in self.node.network.sink_nodes: - EIL -= d.state_vars[self.period].backorders - return EIL - - def echelon_inventory_position(self, predecessor_index=None): - """Current echelon inventory position at node. Equals echelon inventory level plus - on order items. On-order includes raw material inventory that has not yet been processed. - If the node has more than one predecessor (including external supplier), - set ``predecessor_index`` for predecessor-specific inventory position, or set to ``None`` - to use aggregate on-order and raw material inventory (counting such - items using the "units" of the node itself). - - Parameters - ---------- - predecessor_index : int, optional - Predecessor to consider in inventory position calculation (excluding all others), - or ``None`` to include all predecessors. - - Returns - ------- - float - The echelon inventory position. - """ - if predecessor_index is not None: - return self.echelon_inventory_level \ - + self.on_order_by_predecessor[predecessor_index] \ - + self.raw_material_inventory[predecessor_index] - else: - # Note: If <=1 predecessor, raw_material_inventory should always = 0. - return self.echelon_inventory_level + self.on_order + self.raw_material_aggregate - - def _echelon_inventory_position_adjusted(self): - """Calculate the adjusted echelon inventory position. Equals the current echelon inventory position - including only items ordered :math:`L_i` periods ago or earlier, where :math:`L_i` is the - forward echelon lead time for the node. That is, equals current echelon inventory level - plus items ordered :math:`L_i` periods ago or earlier. - - Rosling (1989) calls this :math:`X^L_{it}`; Zipkin (2000) calls it :math:`IN^+_j(t)`. - - Assumes there are no order lead times. - - This quantity is used (only?) for balanced echelon base-stock policies. - Nodes are assumed to be indexed consecutively in non-decreasing order of - forward echelon lead time. - - Note: Balanced echelon base-stock policy assumes a node never orders - more than its predecessor can ship; therefore, # of items shipped in a - given interval is the same as # of items ordered. In addition, there - are no raw-material inventories. - - Returns - ------- - float - The adjusted echelon inventory position. - """ - # Calculate portion of in-transit inventory that was ordered L_i periods - # ago or earlier. - # Since order quantity to all predecessors is the same, choose one arbitrarily - # and get order quantities for that predecessor. - in_transit_adjusted = 0 - pred = self.node.get_one_predecessor() - if pred is None: - pred_index = None - else: - pred_index = pred.index - for t in range(self.node.equivalent_lead_time, self.node.shipment_lead_time): - if self.node.network.period - t >= 0: - in_transit_adjusted += self.node.state_vars[self.node.network.period - t].order_quantity[pred_index] - # np.sum([self.node.state_vars[self.node.network.period-t].order_quantity[predecessor_index] - # for t in range(self.node.equivalent_lead_time, self.node.shipment_lead_time)]) - # Calculate adjusted echelon inventory position. - return self.echelon_inventory_level + in_transit_adjusted - - # --- Conversion to/from Dicts --- # - - def to_dict(self): - """Convert the |class_state_vars| object to a dict. List and dict attributes - are deep-copied so changes to the original object do not get propagated to the dict. - The ``node`` attribute is set to the index of the node (if any), rather than to the object. - - Returns - ------- - dict - The dict representation of the object. - """ - # Initialize dict. - sv_dict = {} - - # Attributes. - sv_dict['node'] = self.node.index - sv_dict['period'] = self.period - sv_dict['inbound_shipment_pipeline'] = copy.deepcopy(self.inbound_shipment_pipeline) - sv_dict['inbound_shipment'] = copy.deepcopy(self.inbound_shipment) - sv_dict['inbound_order_pipeline'] = copy.deepcopy(self.inbound_order_pipeline) - sv_dict['inbound_order'] = copy.deepcopy(self.inbound_order) - sv_dict['outbound_shipment'] = copy.deepcopy(self.outbound_shipment) - sv_dict['on_order_by_predecessor'] = copy.deepcopy(self.on_order_by_predecessor) - sv_dict['backorders_by_successor'] = copy.deepcopy(self.backorders_by_successor) - sv_dict['outbound_disrupted_items'] = copy.deepcopy(self.outbound_disrupted_items) - sv_dict['inbound_disrupted_items'] = copy.deepcopy(self.inbound_disrupted_items) - sv_dict['order_quantity'] = copy.deepcopy(self.order_quantity) - sv_dict['raw_material_inventory'] = copy.deepcopy(self.raw_material_inventory) - sv_dict['inventory_level'] = self.inventory_level - sv_dict['disrupted'] = self.disrupted - sv_dict['holding_cost_incurred'] = self.holding_cost_incurred - sv_dict['stockout_cost_incurred'] = self.stockout_cost_incurred - sv_dict['in_transit_holding_cost_incurred'] = self.in_transit_holding_cost_incurred - sv_dict['revenue_earned'] = self.revenue_earned - sv_dict['total_cost_incurred'] = self.total_cost_incurred - sv_dict['demand_cumul'] = self.demand_cumul - sv_dict['demand_met_from_stock'] = self.demand_met_from_stock - sv_dict['demand_met_from_stock_cumul'] = self.demand_met_from_stock_cumul - sv_dict['fill_rate'] = self.fill_rate - - return sv_dict - - @classmethod - def from_dict(cls, the_dict): - """Return a new |class_state_vars| object with attributes copied from the - values in ``the_dict``. List and dict attributes - are deep-copied so changes to the original dict do not get propagated to the object. - - The ``node`` attribute is set to the index of the node, - like it is in the dict, but should be converted to a node object if this - function is called recursively from a |class_node|'s ``from_dict()`` method. - - Parameters - ---------- - the_dict : dict - Dict representation of a |class_state_vars|, typically created using ``to_dict()``. - - Returns - ------- - NodeStateVars - The object converted from the dict. - """ - if the_dict is None: - nsv = None - else: - nsv = NodeStateVars() - - nsv.node = the_dict['node'] - nsv.period = the_dict['period'] - nsv.inbound_shipment_pipeline = copy.deepcopy(the_dict['inbound_shipment_pipeline']) - nsv.inbound_shipment = copy.deepcopy(the_dict['inbound_shipment']) - nsv.inbound_order_pipeline = copy.deepcopy(the_dict['inbound_order_pipeline']) - nsv.inbound_order = copy.deepcopy(the_dict['inbound_order']) - nsv.outbound_shipment = copy.deepcopy(the_dict['outbound_shipment']) - nsv.on_order_by_predecessor = copy.deepcopy(the_dict['on_order_by_predecessor']) - nsv.backorders_by_successor = copy.deepcopy(the_dict['backorders_by_successor']) - nsv.outbound_disrupted_items = copy.deepcopy(the_dict['outbound_disrupted_items']) - nsv.inbound_disrupted_items = copy.deepcopy(the_dict['inbound_disrupted_items']) - nsv.order_quantity = copy.deepcopy(the_dict['order_quantity']) - nsv.raw_material_inventory = copy.deepcopy(the_dict['raw_material_inventory']) - nsv.inventory_level = the_dict['inventory_level'] - nsv.disrupted = the_dict['disrupted'] - nsv.holding_cost_incurred = the_dict['holding_cost_incurred'] - nsv.stockout_cost_incurred = the_dict['stockout_cost_incurred'] - nsv.in_transit_holding_cost_incurred = the_dict['in_transit_holding_cost_incurred'] - nsv.revenue_earned = the_dict['revenue_earned'] - nsv.total_cost_incurred = the_dict['total_cost_incurred'] - nsv.demand_cumul = the_dict['demand_cumul'] - nsv.demand_met_from_stock = the_dict['demand_met_from_stock'] - nsv.demand_met_from_stock_cumul = the_dict['demand_met_from_stock_cumul'] - nsv.fill_rate = the_dict['fill_rate'] - - return nsv - - # --- Utility Functions --- # - - def reindex_state_variables(self, old_to_new_dict): - """Change indices of state variable dict keys using ``old_to_new_dict``. - - Parameters - ---------- - old_to_new_dict : dict - Dict in which keys are old indices and values are new indices. - - """ - # State variables indexed by predecessor. - for p in self.node.predecessors(include_external=False): - change_dict_key(self.inbound_shipment_pipeline, p.index, old_to_new_dict[p.index]) - change_dict_key(self.inbound_shipment, p.index, old_to_new_dict[p.index]) - change_dict_key(self.on_order_by_predecessor, p.index, old_to_new_dict[p.index]) - change_dict_key(self.raw_material_inventory, p.index, old_to_new_dict[p.index]) - change_dict_key(self.order_quantity, p.index, old_to_new_dict[p.index]) - change_dict_key(self.inbound_disrupted_items, p.index, old_to_new_dict[p.index]) - - # State variables indexed by successor. - for s in self.node.successors(include_external=False): - change_dict_key(self.inbound_order_pipeline, s.index, old_to_new_dict[s.index]) - change_dict_key(self.inbound_order, s.index, old_to_new_dict[s.index]) - change_dict_key(self.outbound_shipment, s.index, old_to_new_dict[s.index]) - change_dict_key(self.backorders_by_successor, s.index, old_to_new_dict[s.index]) - change_dict_key(self.outbound_disrupted_items, s.index, old_to_new_dict[s.index]) - - def deep_equal_to(self, other, rel_tol=1e-8): - """Check whether object "deeply equals" ``other``, i.e., if all attributes are - equal, including attributes that are lists or dicts. - - Note the following caveats: - - * Checks the equality of ``node.index`` but not the entire ``node`` object. - - Parameters - ---------- - other : |class_state_vars| - The state variables to compare this one to. - rel_tol : float, optional - Relative tolerance to use when comparing equality of float attributes. - - Returns - ------- - bool - ``True`` if the two state variables objects are equal, ``False`` otherwise. - """ - - if (self.node is not None and other.node is None) or ( - self.node is None and other.node is not None): return False - if self.node is not None and other.node is not None: - if is_integer(self.node) and is_integer(other.node): - if self.node != other.node: return False - elif not is_integer(self.node) and not is_integer(other.node): - if self.node.index != other.node.index: return False - else: - return False - if self.period != other.period: return False - if self.inbound_shipment_pipeline != other.inbound_shipment_pipeline: return False - if self.inbound_shipment != other.inbound_shipment: return False - if self.inbound_order_pipeline != other.inbound_order_pipeline: return False - if self.inbound_order != other.inbound_order: return False - if self.outbound_shipment != other.outbound_shipment: return False - if self.on_order_by_predecessor != other.on_order_by_predecessor: return False - if self.backorders_by_successor != other.backorders_by_successor: return False - if self.outbound_disrupted_items != other.outbound_disrupted_items: return False - if self.inbound_disrupted_items != other.inbound_disrupted_items: return False - if self.order_quantity != other.order_quantity: return False - if self.raw_material_inventory != other.raw_material_inventory: return False - if self.inventory_level != other.inventory_level: return False - if self.disrupted != other.disrupted: return False - if self.holding_cost_incurred != other.holding_cost_incurred: return False - if self.stockout_cost_incurred != other.stockout_cost_incurred: return False - if self.in_transit_holding_cost_incurred != other.in_transit_holding_cost_incurred: return False - if self.revenue_earned != other.revenue_earned: return False - if self.total_cost_incurred != other.total_cost_incurred: return False - if self.demand_cumul != other.demand_cumul: return False - if self.demand_met_from_stock != other.demand_met_from_stock: return False - if self.demand_met_from_stock_cumul != other.demand_met_from_stock_cumul: return False - if self.fill_rate != other.fill_rate: return False - - return True + """The |class_state_vars| class contains values of the state variables + for a supply chain node during a :ref:`simulation `. + All state variables refer to their values at the + end of a period (except during the period itself, in which case the + values might be intermediate until the period is complete). + + Attributes + ---------- + node : |class_node| + The node the state variables refer to. + period : int + The period of the simulation that the state variables refer to. + inbound_shipment_pipeline : dict + ``inbound_shipment_pipeline[p][prod][r]`` = shipment quantity of product ``prod`` + arriving from predecessor node ``p`` in ``r`` periods from the current period. + If ``p`` is ``None``, refers to external supplier. If ``p`` is single-product or + external supplier, ``prod=None``. + inbound_shipment : dict + ``inbound_shipment[p][prod]`` = shipment quantity of product ``prod`` arriving at node from + predecessor node ``p`` in the current period. If ``p`` is ``None``, + refers to external supplier. If ``p`` is single-product or + external supplier, ``prod=None``. + inbound_order_pipeline : dict + ``inbound_order_pipeline[s][prod][r]`` = order quantity for product ``prod`` arriving from + successor node ``s`` in ``r`` periods from the current period. + If ``s`` is ``None``, refers to external demand. If ``s`` is single-product or external + demand, ``prod=None``. + inbound_order : dict + ``inbound_order[s][prod]`` = order quantity for product ``prod`` arriving at node from successor + node ``s`` in the current period. If ``s`` is ``None``, refers to + external demand. If ``s`` is single-product or external + demand, ``prod=None``. + demand_cumul : float + ``demand_cumul[prod]`` = cumulative demand (from all sources, internal and external) for product ``prod`` + from period 0 through the current period. If node is single-product, ``prod=None``. + (Used for ``fill_rate`` calculation.) + outbound_shipment : dict + ``outbound_shipment[s][prod]`` = outbound shipment of product ``prod`` to successor node ``s``. + If ``s`` is ``None``, refers to external demand. If node is single-product, ``prod=None``. + on_order_by_predecessor : dict + ``on_order_by_predecessor[p][prod]`` = on-order quantity (items that have been + ordered from successor node ``p`` but not yet received) for product ``prod`` at node. If ``p`` is ``None``, + refers to external supply. If ``p`` is single-product or external supplier, ``prod=None``. + inventory_level : float + ``inventory_level[prod]`` = inventory level (positive, negative, or zero) of product ``prod`` at node. + If node is single-product, ``prod=None``. + backorders_by_successor : dict + ``backorders_by_successor[s][prod]`` = number of backorders of product ``prod`` for successor + ``s``. If ``s`` is ``None``, refers to external demand. If node is single-product, ``prod=None``. + outbound_disrupted_items : dict + ``outbound_disrupted_items[s][prod]`` = number of items of product ``prod`` held for successor ``s`` + due to a type-SP disruption at ``s``. (Since external demand cannot be + disrupted, ``outbound_disrupted_items[None][prod]`` always = 0.) If node is single-product, ``prod=None``. + Items held for successor are not included in ``backorders_by_successor``. + Sum over all successors of ``backorders_by_successor + outbound_disrupted_items`` + should always equal max{0, -``inventory_level``}. + inbound_disrupted_items : dict + ``inbound_disrupted_items[p][prod]`` = number of items of product ``prod`` from predecessor ``p`` that are + being held before receipt due to a type-RP disruption at the node. If ``p`` is external supplier or + single-product, ``prod=None``. + raw_material_inventory : dict + ``raw_material_inventory[p][prod]`` = number of units of product ``prod`` from predecessor ``p`` + in raw-material inventory at node. If ``p`` is ``None``, refers to external supply. If ``p`` is external + supplier or single-product, ``prod=None``. + disrupted : bool + ``True`` if the node was disrupted in the period, ``False`` otherwise. + holding_cost_incurred : float + Holding cost incurred at the node in the period. + stockout_cost_incurred : float + Stockout cost incurred at the node in the period. + in_transit_holding_cost_incurred : float + In-transit holding cost incurred at the node in the period. + revenue_earned : float + Revenue earned at the node in the period. + total_cost_incurred : float + Total cost (less revenue) incurred at the node in the period. + demand_met_from_stock : float + ``demand_met_from_stock[prod]`` = demand for product ``prod`` met from stock at the node in the period. + If node is single-product, ``prod=None``. + demand_met_from_stock_cumul : float + ``demand_met_from_stock_cumul[prod]`` = cumulative demand for product ``prod`` met from stock from + period 0 through the current period. If node is single-product, ``prod=None``. + (Used for ``fill_rate`` calculation.) + fill_rate : float + ``fill_rate[prod]`` = cumulative fill rate for product ``prod`` in periods 0, ..., period. + If node is single product, ``prod=None``. + order_quantity : dict + ``order_quantity[p][prod]`` = order quantity for product ``prod`` placed by the node to + predecessor ``p`` in period. If ``p`` is ``None``, refers to external supplir. If ``p`` is external + supplier or single-product, ``prod=None``. + """ + + def __init__(self, node=None, period=None): + """NodeStateVars constructor method. + + If ``node`` is provided, the state variable dicts (``inbound_shipment``, + ``inbound_order``, etc.) are initialized with the appropriate keys. + Otherwise, they are set to empty dicts and must be initialized before + using. + + Parameters + ---------- + node : |class_node|, optional + The node to which these state variables refer. + period : int, optional + The period to which these state variables refer. + """ + # --- Node --- # + self.node = node + self.period = period + + # --- Primary State Variables --- # + # These are set explicitly during the simulation. + + if node: + + # Initialize dicts with appropriate keys. (inbound_shipment_pipeline gets + # order_lead_time+shipment_lead_time slots for orders to external supplier) + self.inbound_shipment_pipeline = {p.index: + {prod_index: + [0] * ((self.node.order_lead_time or 0) + ( + self.node.shipment_lead_time or 0) + 1) + for prod_index in p.product_indices} + for p in self.node.predecessors(include_external=True)} + self.inbound_shipment = {p.index: + {prod_index: 0 for prod_index in p.product_indices} + for p in self.node.predecessors(include_external=True)} + self.inbound_order_pipeline = {s.index: + {prod_index: + [0] * ((s.order_lead_time or 0) + 1) + for prod_index in s.product_indices} + for s in node.successors()} + # Add external customer to inbound_order_pipeline. (Must be done + # separately since external customer does not have its own node, + # or its own order lead time.) + if node.demand_source is not None and node.demand_source.type is not None: + self.inbound_order_pipeline[None][None] = [0] + self.inbound_order = {s.index: {prod_index: 0 for prod_index in s.product_indices} for s in self.node.successors(include_external=True)} + self.outbound_shipment = {s.index: {prod_index: 0 for prod_index in s.product_indices} for s in self.node.successors(include_external=True)} + self.on_order_by_predecessor = {p.index: {prod_index: 0 for prod_index in p.product_indices} + for p in self.node.predecessors(include_external=True)} + self.backorders_by_successor = {s.index: {prod_index: 0 for prod_index in s.product_indices} + for s in self.node.successors(include_external=True)} + self.outbound_disrupted_items = {s.index: {prod_index: 0 for prod_index in s.product_indices} + for s in self.node.successors(include_external=True)} + self.inbound_disrupted_items = {p.index: {prod_index: 0 for prod_index in p.product_indices} + for p in self.node.predecessors(include_external=True)} + self.order_quantity = {p.index: {prod_index: 0 for prod_index in p.product_indices} + for p in self.node.predecessors(include_external=True)} + self.raw_material_inventory = {p.index: {prod_index: 0 for prod_index in p.product_indices} + for p in self.node.predecessors(include_external=True)} + + else: + + # Initialize dicts to empty dicts. + self.inbound_shipment_pipeline = {} + self.inbound_shipment = {} + self.inbound_order_pipeline = {} + self.inbound_order = {} + self.outbound_shipment = {} + self.on_order_by_predecessor = {} + self.backorders_by_successor = {} + self.outbound_disrupted_items = {} + self.inbound_disrupted_items = {} + self.order_quantity = {} + self.raw_material_inventory = {} + + # Remaining state variables. + self.inventory_level = {prod_index: 0 for prod_index in self.node.product_indices} + self.disrupted = False + + # Costs: each refers to a component of the cost (or the total cost) + # incurred at the node in the period. + self.holding_cost_incurred = 0 + self.stockout_cost_incurred = 0 + self.in_transit_holding_cost_incurred = 0 + self.revenue_earned = 0 + self.total_cost_incurred = 0 + + # Fill rate quantities. + self.demand_cumul = {prod_index: 0 for prod_index in self.node.product_indices} + self.demand_met_from_stock = {prod_index: 0 for prod_index in self.node.product_indices} + self.demand_met_from_stock_cumul = {prod_index: 0 for prod_index in self.node.product_indices} + self.fill_rate = {prod_index: 0 for prod_index in self.node.product_indices} + + # --- Special Methods --- # + + def __eq__(self, other): + """Determine whether ``other`` is equal to the state variables object. Two objects are + considered equal if they are deeply-equal to each other. + + Parameters + ---------- + other : |class_state_vars| + The state variables object to compare to. + + Returns + ------- + bool + True if the state variables objects are equal, False otherwise. + + """ + return self.deep_equal_to(other) + + def __ne__(self, other): + """Determine whether ``other`` is not equal to the state variables object. Two objects are + considered equal if they are deeply-equal to each other. + + Parameters + ---------- + other : |class_state_vars| + The state variables object to compare to. + + Returns + ------- + bool + True if the state variables objects are not equal, False otherwise. + + """ + return not self.__eq__(other) + + # --- Calculated State Variables --- # + # These are calculated based on the primary state variables. + + @property + def on_hand(self): + """Current on-hand inventory. If node is multi-product, returns dict whose + keys are product indices and whose values are the corresponding on-hand inventory levels. Read only. + """ + if self.node.is_multiproduct: + return {prod_index: max(0, self.inventory_level[prod_index]) for prod_index in self.node.product_indices} + else: + return max(0, self.inventory_level[None]) + + @property + def backorders(self): + """Current number of backorders. Should always equal sum over all successors ``s`` + of ``backorders_by_successor[s]`` + ``outbound_disrupted_items[s]``. If node is + multi-product, returns dict whose keys are product indices and whose values are the + corresponding numbers of backorders. Read only. + """ + if self.node.is_multiproduct: + return {prod_index: max(0, -self.inventory_level[prod_index]) for prod_index in self.node.product_indices} + else: + return max(0, -self.inventory_level[None]) + + def in_transit_to(self, successor, prod_index=None): + """Return current total inventory of product ``prod_index`` in transit to a given successor. + Includes items that will be/have been delivered during the current period. + + Parameters + ---------- + successor : |class_node| + The successor node. + prod_index : int + The product index, or ``None`` if ``successor`` is single-product. + + Returns + ------- + The current inventory in transit to the successor. + """ + return np.sum([successor.state_vars[self.period].inbound_shipment_pipeline[self.node.index][prod_index][:]]) + + def in_transit_from(self, predecessor, prod_index=None): + """Return current total inventory of product ``prod_index`` in transit from a given predecessor. + Includes items that will be/have been delivered during the current period. + + Parameters + ---------- + predecessor : |class_node| + The predecessor node (or ``None`` for external supplier). + prod_index : int + The product index, or ``None`` if ``predecessor`` is single-product or external supplier. + + Returns + ------- + The current inventory in transit from the predecessor. + """ + if predecessor is None: + p = None + else: + p = predecessor.index + + return np.sum(self.inbound_shipment_pipeline[p][prod_index][:]) + + @property + def in_transit(self): + """Current total inventory in transit to the node. If node is multi-product, + returns dict whose keys are product indices and whose values are the corresponding + in-transit quantities. Read only. + + If node (or node-product pair) has + more than 1 predecessor (it is an assembly node), including external supplier, + in-transit items are counted using the "units" of the node (or node-product pair) itself. + That is, each in-transit quantity is divided by the number of units of the inbound item + required to make one unit of the item at this node, according to the bill of materials; and then + those quantities are averaged over all predecessor nodes whose products are required as raw + materials for this node. + + For example, if the bill of materials specifies that to make one unit at the node requires + 2 units from predecessor node A and 6 units from predecessor node B, and if there are + 10 in-transit units from A and 18 from B, then ``in_transit`` equals + + .. math:: + + \\frac{1}{2}\\left[\\frac{10}{2} + \\frac{18}{6} \\right] = 4 + + """ + if self.node.is_multproduct: + total_in_transit = {} + for prod_index in self.node.product_indices: + # TODO + total_in_transit[prod_index] + else: + total_in_transit = np.sum([ + self.in_transit_from(p, prod_index) + * self.node.get_bill_of_materials(product_index=None, predecessor_index=p, rm_index=prod_index) + for p in self.node.predecessors(include_external=True) + for prod_index in p.product_indices]) + + if total_in_transit == 0: + return 0 + else: + return total_in_transit / len(self.node.predecessors(include_external=True)) + + @property + def on_order(self): + """Current total on-order quantity. If node has more than 1 + predecessor (it is an assembly node), including external supplier, + on-order items are counted using the "units" of the node itself. + That is, they are divided by the total number of predecessors. Read only. + """ + total_on_order = self.node._get_attribute_total('on_order_by_predecessor', + self.period, + include_external=True) + if total_on_order == 0: + return 0 + else: + return total_on_order / len(self.node.predecessors(include_external=True)) + + @property + def raw_material_aggregate(self): + """Total raw materials at the node. Raw materials + are counted using the "units" of the node itself. That is, they are + divided by the total number of predecessors. Read only. + """ + total_raw_material = self.node._get_attribute_total('raw_material_inventory', + self.period, + include_external=True) + if total_raw_material == 0: + return 0 + else: + return total_raw_material / len(self.node.predecessors(include_external=True)) + + @property + def inbound_disrupted_items_aggregate(self): + """Total inbound disrupted items at the node. Inbound disrupted items + are counted using the "units" of the node itself. That is, they are + divided by the total number of predecessors. Read only. + """ + total_raw_material = self.node._get_attribute_total('inbound_disrupted_items', + self.period, + include_external=True) + if total_raw_material == 0: + return 0 + else: + return total_raw_material / len(self.node.predecessors(include_external=True)) + + def inventory_position(self, predecessor_index=None): + """Current local inventory position at node. Equals inventory level plus + on-order inventory. + On-order includes raw material inventory that has not yet been processed, as + well as inbound disrupted items due to type-RP disruptions. + If the node has more than one predecessor (including external supplier), + set ``predecessor_index`` for predecessor-specific inventory position, or set to ``None`` + to use aggregate on-order and raw material inventory (counting such + items using the "units" of the node itself). + + Parameters + ---------- + predecessor_index : int, optional + Predecessor to consider in inventory position calculation (excluding all others), + or ``None`` to include all predecessors. + + Returns + ------- + float + The inventory position. + """ + if predecessor_index is not None: + return self.inventory_level \ + + self.on_order_by_predecessor[predecessor_index] \ + + self.raw_material_inventory[predecessor_index] \ + + self.inbound_disrupted_items[predecessor_index] + else: + # Note: If <=1 predecessor, raw_material_inventory should always = 0. + return self.inventory_level + self.on_order + self.raw_material_aggregate \ + + self.inbound_disrupted_items_aggregate + + @property + def echelon_on_hand_inventory(self): + """Current echelon on-hand inventory at node. Equals on-hand inventory at node + and at or in transit to all of its downstream nodes. Read only. + """ + EOHI = self.on_hand + for d in self.node.descendants: + EOHI += d.state_vars[self.period].on_hand + # Add in-transit quantity from predecessors that are descendents + # of self (or equal to self). + for p in d.predecessors(): + if p.index == self.node.index or p in self.node.descendants: + EOHI += d.state_vars[self.period].in_transit_from(p) + return EOHI + + @property + def echelon_inventory_level(self): + """Current echelon inventory level at node. Equals echelon on-hand inventory + minus backorders at terminal node(s) downstream from node. Read only. + """ + EIL = self.echelon_on_hand_inventory + for d in self.node.descendants + [self.node]: + if d in self.node.network.sink_nodes: + EIL -= d.state_vars[self.period].backorders + return EIL + + def echelon_inventory_position(self, predecessor_index=None): + """Current echelon inventory position at node. Equals echelon inventory level plus + on order items. On-order includes raw material inventory that has not yet been processed. + If the node has more than one predecessor (including external supplier), + set ``predecessor_index`` for predecessor-specific inventory position, or set to ``None`` + to use aggregate on-order and raw material inventory (counting such + items using the "units" of the node itself). + + Parameters + ---------- + predecessor_index : int, optional + Predecessor to consider in inventory position calculation (excluding all others), + or ``None`` to include all predecessors. + + Returns + ------- + float + The echelon inventory position. + """ + if predecessor_index is not None: + return self.echelon_inventory_level \ + + self.on_order_by_predecessor[predecessor_index] \ + + self.raw_material_inventory[predecessor_index] + else: + # Note: If <=1 predecessor, raw_material_inventory should always = 0. + return self.echelon_inventory_level + self.on_order + self.raw_material_aggregate + + def _echelon_inventory_position_adjusted(self): + """Calculate the adjusted echelon inventory position. Equals the current echelon inventory position + including only items ordered :math:`L_i` periods ago or earlier, where :math:`L_i` is the + forward echelon lead time for the node. That is, equals current echelon inventory level + plus items ordered :math:`L_i` periods ago or earlier. + + Rosling (1989) calls this :math:`X^L_{it}`; Zipkin (2000) calls it :math:`IN^+_j(t)`. + + Assumes there are no order lead times. + + This quantity is used (only?) for balanced echelon base-stock policies. + Nodes are assumed to be indexed consecutively in non-decreasing order of + forward echelon lead time. + + Note: Balanced echelon base-stock policy assumes a node never orders + more than its predecessor can ship; therefore, # of items shipped in a + given interval is the same as # of items ordered. In addition, there + are no raw-material inventories. + + Returns + ------- + float + The adjusted echelon inventory position. + """ + # Calculate portion of in-transit inventory that was ordered L_i periods + # ago or earlier. + # Since order quantity to all predecessors is the same, choose one arbitrarily + # and get order quantities for that predecessor. + in_transit_adjusted = 0 + pred = self.node.get_one_predecessor() + if pred is None: + pred_index = None + else: + pred_index = pred.index + for t in range(self.node.equivalent_lead_time, self.node.shipment_lead_time): + if self.node.network.period - t >= 0: + in_transit_adjusted += self.node.state_vars[self.node.network.period - t].order_quantity[pred_index] + # np.sum([self.node.state_vars[self.node.network.period-t].order_quantity[predecessor_index] + # for t in range(self.node.equivalent_lead_time, self.node.shipment_lead_time)]) + # Calculate adjusted echelon inventory position. + return self.echelon_inventory_level + in_transit_adjusted + + # --- Conversion to/from Dicts --- # + + def to_dict(self): + """Convert the |class_state_vars| object to a dict. List and dict attributes + are deep-copied so changes to the original object do not get propagated to the dict. + The ``node`` attribute is set to the index of the node (if any), rather than to the object. + + Returns + ------- + dict + The dict representation of the object. + """ + # Initialize dict. + sv_dict = {} + + # Attributes. + sv_dict['node'] = self.node.index + sv_dict['period'] = self.period + sv_dict['inbound_shipment_pipeline'] = copy.deepcopy(self.inbound_shipment_pipeline) + sv_dict['inbound_shipment'] = copy.deepcopy(self.inbound_shipment) + sv_dict['inbound_order_pipeline'] = copy.deepcopy(self.inbound_order_pipeline) + sv_dict['inbound_order'] = copy.deepcopy(self.inbound_order) + sv_dict['outbound_shipment'] = copy.deepcopy(self.outbound_shipment) + sv_dict['on_order_by_predecessor'] = copy.deepcopy(self.on_order_by_predecessor) + sv_dict['backorders_by_successor'] = copy.deepcopy(self.backorders_by_successor) + sv_dict['outbound_disrupted_items'] = copy.deepcopy(self.outbound_disrupted_items) + sv_dict['inbound_disrupted_items'] = copy.deepcopy(self.inbound_disrupted_items) + sv_dict['order_quantity'] = copy.deepcopy(self.order_quantity) + sv_dict['raw_material_inventory'] = copy.deepcopy(self.raw_material_inventory) + sv_dict['inventory_level'] = self.inventory_level + sv_dict['disrupted'] = self.disrupted + sv_dict['holding_cost_incurred'] = self.holding_cost_incurred + sv_dict['stockout_cost_incurred'] = self.stockout_cost_incurred + sv_dict['in_transit_holding_cost_incurred'] = self.in_transit_holding_cost_incurred + sv_dict['revenue_earned'] = self.revenue_earned + sv_dict['total_cost_incurred'] = self.total_cost_incurred + sv_dict['demand_cumul'] = self.demand_cumul + sv_dict['demand_met_from_stock'] = self.demand_met_from_stock + sv_dict['demand_met_from_stock_cumul'] = self.demand_met_from_stock_cumul + sv_dict['fill_rate'] = self.fill_rate + + return sv_dict + + @classmethod + def from_dict(cls, the_dict): + """Return a new |class_state_vars| object with attributes copied from the + values in ``the_dict``. List and dict attributes + are deep-copied so changes to the original dict do not get propagated to the object. + + The ``node`` attribute is set to the index of the node, + like it is in the dict, but should be converted to a node object if this + function is called recursively from a |class_node|'s ``from_dict()`` method. + + Parameters + ---------- + the_dict : dict + Dict representation of a |class_state_vars|, typically created using ``to_dict()``. + + Returns + ------- + NodeStateVars + The object converted from the dict. + """ + if the_dict is None: + nsv = None + else: + nsv = NodeStateVars() + + nsv.node = the_dict['node'] + nsv.period = the_dict['period'] + nsv.inbound_shipment_pipeline = copy.deepcopy(the_dict['inbound_shipment_pipeline']) + nsv.inbound_shipment = copy.deepcopy(the_dict['inbound_shipment']) + nsv.inbound_order_pipeline = copy.deepcopy(the_dict['inbound_order_pipeline']) + nsv.inbound_order = copy.deepcopy(the_dict['inbound_order']) + nsv.outbound_shipment = copy.deepcopy(the_dict['outbound_shipment']) + nsv.on_order_by_predecessor = copy.deepcopy(the_dict['on_order_by_predecessor']) + nsv.backorders_by_successor = copy.deepcopy(the_dict['backorders_by_successor']) + nsv.outbound_disrupted_items = copy.deepcopy(the_dict['outbound_disrupted_items']) + nsv.inbound_disrupted_items = copy.deepcopy(the_dict['inbound_disrupted_items']) + nsv.order_quantity = copy.deepcopy(the_dict['order_quantity']) + nsv.raw_material_inventory = copy.deepcopy(the_dict['raw_material_inventory']) + nsv.inventory_level = the_dict['inventory_level'] + nsv.disrupted = the_dict['disrupted'] + nsv.holding_cost_incurred = the_dict['holding_cost_incurred'] + nsv.stockout_cost_incurred = the_dict['stockout_cost_incurred'] + nsv.in_transit_holding_cost_incurred = the_dict['in_transit_holding_cost_incurred'] + nsv.revenue_earned = the_dict['revenue_earned'] + nsv.total_cost_incurred = the_dict['total_cost_incurred'] + nsv.demand_cumul = the_dict['demand_cumul'] + nsv.demand_met_from_stock = the_dict['demand_met_from_stock'] + nsv.demand_met_from_stock_cumul = the_dict['demand_met_from_stock_cumul'] + nsv.fill_rate = the_dict['fill_rate'] + + return nsv + + # --- Utility Functions --- # + + def reindex_state_variables(self, old_to_new_dict): + """Change indices of state variable dict keys using ``old_to_new_dict``. + + Parameters + ---------- + old_to_new_dict : dict + Dict in which keys are old indices and values are new indices. + + """ + # State variables indexed by predecessor. + for p in self.node.predecessors(include_external=False): + change_dict_key(self.inbound_shipment_pipeline, p.index, old_to_new_dict[p.index]) + change_dict_key(self.inbound_shipment, p.index, old_to_new_dict[p.index]) + change_dict_key(self.on_order_by_predecessor, p.index, old_to_new_dict[p.index]) + change_dict_key(self.raw_material_inventory, p.index, old_to_new_dict[p.index]) + change_dict_key(self.order_quantity, p.index, old_to_new_dict[p.index]) + change_dict_key(self.inbound_disrupted_items, p.index, old_to_new_dict[p.index]) + + # State variables indexed by successor. + for s in self.node.successors(include_external=False): + change_dict_key(self.inbound_order_pipeline, s.index, old_to_new_dict[s.index]) + change_dict_key(self.inbound_order, s.index, old_to_new_dict[s.index]) + change_dict_key(self.outbound_shipment, s.index, old_to_new_dict[s.index]) + change_dict_key(self.backorders_by_successor, s.index, old_to_new_dict[s.index]) + change_dict_key(self.outbound_disrupted_items, s.index, old_to_new_dict[s.index]) + + def deep_equal_to(self, other, rel_tol=1e-8): + """Check whether object "deeply equals" ``other``, i.e., if all attributes are + equal, including attributes that are lists or dicts. + + Note the following caveats: + + * Checks the equality of ``node.index`` but not the entire ``node`` object. + + Parameters + ---------- + other : |class_state_vars| + The state variables to compare this one to. + rel_tol : float, optional + Relative tolerance to use when comparing equality of float attributes. + + Returns + ------- + bool + ``True`` if the two state variables objects are equal, ``False`` otherwise. + """ + + if (self.node is not None and other.node is None) or ( + self.node is None and other.node is not None): return False + if self.node is not None and other.node is not None: + if is_integer(self.node) and is_integer(other.node): + if self.node != other.node: return False + elif not is_integer(self.node) and not is_integer(other.node): + if self.node.index != other.node.index: return False + else: + return False + if self.period != other.period: return False + if self.inbound_shipment_pipeline != other.inbound_shipment_pipeline: return False + if self.inbound_shipment != other.inbound_shipment: return False + if self.inbound_order_pipeline != other.inbound_order_pipeline: return False + if self.inbound_order != other.inbound_order: return False + if self.outbound_shipment != other.outbound_shipment: return False + if self.on_order_by_predecessor != other.on_order_by_predecessor: return False + if self.backorders_by_successor != other.backorders_by_successor: return False + if self.outbound_disrupted_items != other.outbound_disrupted_items: return False + if self.inbound_disrupted_items != other.inbound_disrupted_items: return False + if self.order_quantity != other.order_quantity: return False + if self.raw_material_inventory != other.raw_material_inventory: return False + if self.inventory_level != other.inventory_level: return False + if self.disrupted != other.disrupted: return False + if self.holding_cost_incurred != other.holding_cost_incurred: return False + if self.stockout_cost_incurred != other.stockout_cost_incurred: return False + if self.in_transit_holding_cost_incurred != other.in_transit_holding_cost_incurred: return False + if self.revenue_earned != other.revenue_earned: return False + if self.total_cost_incurred != other.total_cost_incurred: return False + if self.demand_cumul != other.demand_cumul: return False + if self.demand_met_from_stock != other.demand_met_from_stock: return False + if self.demand_met_from_stock_cumul != other.demand_met_from_stock_cumul: return False + if self.fill_rate != other.fill_rate: return False + + return True diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py new file mode 100644 index 0000000..bf5490b --- /dev/null +++ b/src/stockpyl/supply_chain_product.py @@ -0,0 +1,514 @@ +# =============================================================================== +# stockpyl - SupplyChainProduct Class +# ------------------------------------------------------------------------------- +# Author: Larry Snyder +# License: GPLv3 +# =============================================================================== + +""" +.. include:: ../../globals.inc + +Overview +-------- + +This module contains the |class_product| class, which is a product handled by a node +in a supply chain network. + +.. note:: |fosct_notation| + +A |class_product| is used primarily for :ref:`multi-echelon inventory optimization (MEIO) ` +or :ref:`simulation `. |class_product| objects are ... TODO: info here about including these +objects in nodes or nodeproducts. + +TODO: update: +The product object contains many attributes, and different functions use different sets of attributes. +For example, the :func:`stockpyl.ssm_serial.optimize_base_stock_levels` function takes a +|class_network| whose nodes contain values for ``echelon_holding_cost``, ``lead_time``, ``stockout_cost``, +and ``demand_source`` attributes, while :func:`stockpyl.gsm_serial.optimize_committed_service_times` +uses ``local_holding_cost``, ``processing_time``, etc. +Therefore, to determine which attributes are needed, refer to the documentation for the function +you are using. + + +API Reference +------------- + + +""" + +# =============================================================================== +# Imports +# =============================================================================== + +import numpy as np +import networkx as nx +from math import isclose +import copy +import math + +from stockpyl import policy +from stockpyl import demand_source +from stockpyl import disruption_process +from stockpyl.helpers import change_dict_key, is_integer, is_list + + +# =============================================================================== +# SupplyChainProduct Class +# =============================================================================== + +class SupplyChainProduct(object): + """The |class_product| class contains the data for a product within a supply chain. + + All attributes except ``name``, ``id``, and ``network`` may be overridden at the node level + by a |class_node| that handles the product. + TODO: update? + + TODO: note that GSM and SSM modules can't handle multi-product; only sim. + + Attributes + ---------- + index : int + A numeric identifier for the product. + name : str + A string to identify the product. + network : |class_network| + The network that contains node(s) that handle this product. + local_holding_cost : float + Local holding cost, per unit per period. [:math:`h'`] + echelon_holding_cost : float + Echelon holding cost, per unit per period. (**Note:** *not currently supported*.) [:math:`h`] + local_holding_cost_function : function + Function that calculates local holding cost per period, as a function + of ending inventory level. Function must take exactly one argument, the + ending IL. Function should check that IL > 0. + in_transit_holding_cost : float + Holding cost coefficient used to calculate in-transit holding cost for + shipments en route from a node to its downstream successors, if any. + If ``in_transit_holding_cost`` is ``None``, then the product's local_holding_cost + is used. To ignore in-transit holding costs, set ``in_transit_holding_cost`` = 0. + stockout_cost : float + Stockout cost, per unit (per period, if backorders). [:math:`p`] + stockout_cost_function : function + Function that calculates stockout cost per period, as a function + of ending inventory level. Function must take exactly one argument, the + ending IL. Function should check that IL < 0. + purchase_cost : float + Cost incurred per unit. (**Note:** *not currently supported*.) + revenue : float + Revenue earned per unit of demand met. (**Note:** *not currently supported*.) [:math:`r`] + shipment_lead_time : int + Shipment lead time. [:math:`L`] + lead_time : int + An alias for ``shipment_lead_time``. + order_lead_time : int + Order lead time. (**Note:** *not currently supported*.) + demand_source : |class_demand_source| + Demand source object. + initial_inventory_level : float + Initial inventory level. + initial_orders : float + Initial outbound order quantity. + initial shipments : float + Initial inbound shipment quantity. + inventory_policy : |class_policy| + Inventory policy to be used to make inventory decisions. + TODO: decide whether disruptions are at node or product level + supply_type : str + Supply type , as a string. Currently supported strings are: + + * None + * 'U': unlimited + + disruption_process : |class_disruption_process| + Disruption process object (if any). + order_capacity : float + Maximum size of an order. + bill_of_materials : dict + # TODO: write description and figure out how this will be handled + state_vars : list of |class_state_vars| + List of |class_state_vars|, one for each period in a simulation. + problem_specific_data : object + Placeholder for object that is used to provide data for specific + problem types. + """ + + def __init__(self, index, name=None, network=None, **kwargs): + """SupplyChainProduct constructor method. + + Parameters + ---------- + index : int + A numeric value to identify the product. In a |class_network|, each product + must have a unique index. + name : str, optional + A string to identify the product. + network : |class_network|, optional + The network that contains node(s) that handle this product. + kwargs : optional + Optional keyword arguments to specify node attributes. + + Raises + ------ + AttributeError + If an optional keyword argument does not match a |class_product| attribute. + """ + # Initialize attributes. + self.initialize() + + # Set named attributes. + self.index = index + self.name = name + self.network = network + + # Set attributes specified by kwargs. + for key, value in kwargs.items(): + if key in vars(self): + # The key refers to an attribute of the object. + setattr(self, key, value) + elif key in dir(self.__class__) and isinstance(getattr(self.__class__, key), property): + # The key refers to a property of the object. (We can still set it using setattr().) + setattr(self, key, value) + elif f"_{key}" in vars(self): + # The key refers to an attribute that has "_" prepended to it. + setattr(self, f"_{key}", value) + else: + raise AttributeError(f"{key} is not an attribute of Policy") + + _DEFAULT_VALUES = { + 'index': None, + 'name': None, + 'network': None, + 'local_holding_cost': None, + 'echelon_holding_cost': None, + 'local_holding_cost_function': None, + 'in_transit_holding_cost': None, + 'stockout_cost': None, + 'stockout_cost_function': None, + 'revenue': None, + 'shipment_lead_time': None, + 'order_lead_time': None, + 'demand_source': None, + 'initial_inventory_level': None, + 'initial_orders': None, + 'initial_shipments': None, + '_inventory_policy': None, +# 'supply_type': None, +# 'disruption_process': None, + 'order_capacity': None, + 'state_vars': [] + } + + + # Properties and functions related to network structure. + + @property + def handling_nodes(self): + """A list of all nodes in the network that handle this product, + as |class_node| objects. Read only. + """ + # TODO: +# return [node for node in self.network.nodes if .......] + pass + + @property + def handling_node_indices(self): + """A list of indices of all nodes in the network that handle this product. + Read only. + """ + return [node.index for node in self.handling_nodes()] + + # Properties related to input parameters. + @property + def holding_cost(self): + """An alias for ``local_holding_cost``. Read only. + """ + return self.local_holding_cost + + @property + def lead_time(self): + """An alias for ``shipment_lead_time``.""" + return self.shipment_lead_time + + @lead_time.setter + def lead_time(self, value): + """An alias for ``shipment_lead_time``.""" + self.shipment_lead_time = value + + @property + def inventory_policy(self): + return self._inventory_policy + + @inventory_policy.setter + def inventory_policy(self, value): + # Set _inventory_policy, and also set _inventory_policy's product + self._inventory_policy = value + # TODO: handle setting product and node attributes + + + + # Special methods. + + def __eq__(self, other): + """Determine whether ``other`` is equal to the product. Two products are + considered equal if their indices are equal. + + Parameters + ---------- + other : |class_product| + The product to compare to. + + Returns + ------- + bool + True if the products are equal, False otherwise. + + """ + return self.index == other.index + + def __ne__(self, other): + """Determine whether ``other`` is not equal to the product. Two products are + considered equal if their indices are equal. + + Parameters + ---------- + other : |class_product| + The product to compare to. + + Returns + ------- + bool + True if the products are not equal, False otherwise. + + """ + return not self.__eq__(other) + + def __hash__(self): + """ + Return the hash for the product, which equals its index. + + """ + return self.index + + def __repr__(self): + """ + Return a string representation of the |class_product| instance. + + Returns + ------- + A string representation of the |class_product| instance. + + """ + return "SupplyChainProduct({:s})".format(str(vars(self))) + + # Attribute management. + + def initialize(self): + """Initialize the parameters in the object to their default values. + Also initializes attributes that are objects (``demand_source``, ``disruption_process``, ``_inventory_policy``): + """ + + # Loop through attributes. Special handling for list and object attributes. + for attr in self._DEFAULT_VALUES.keys(): + if attr == 'demand_source': + self.demand_source = demand_source.DemandSource() + elif attr == 'disruption_process': + self.disruption_process = disruption_process.DisruptionProcess() + elif attr == '_inventory_policy': + self.inventory_policy = policy.Policy(node=self) + elif is_list(self._DEFAULT_VALUES[attr]): + setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) + else: + setattr(self, attr, self._DEFAULT_VALUES[attr]) + + def deep_equal_to(self, other, rel_tol=1e-8): + """Check whether product "deeply equals" ``other``, i.e., if all attributes are + equal, including attributes that are themselves objects. + + Note the following caveats: + + * Does not check equality of ``network``. + * Does not check equality of ``local_holding_cost_function`` or ``stockout_cost_function``. + + Parameters + ---------- + other : |class_product| + The product to compare this one to. + rel_tol : float, optional + Relative tolerance to use when comparing equality of float attributes. + + Returns + ------- + bool + ``True`` if the two products are equal, ``False`` otherwise. + """ + + # Initialize name of violating attribute (used for debugging) and equality flag. + viol_attr = None + eq = True + + if other is None: + eq = False + else: + # Special handling for some attributes. + for attr in self._DEFAULT_VALUES.keys(): + if attr in ('network', 'local_holding_cost_function', 'stockout_cost_function'): + # Ignore. + pass + elif attr == '_inventory_policy': + # Compare inventory policies. + if self.inventory_policy != other.inventory_policy: + viol_attr = attr + eq = False + elif attr in ('local_holding_cost', 'echelon_holding_cost', 'in_transit_holding_cost', \ + 'stockout_cost', 'revenue', 'initial_inventory_level', 'initial_orders', + 'initial_shipments', 'order_capacity'): + # These attributes need approximate comparisons. + if not isclose(getattr(self, attr) or 0, getattr(other, attr) or 0, rel_tol=rel_tol): + viol_attr = attr + eq = False +# TODO: bill_of_materials + elif attr in ('demand_source', 'disruption_process'): + # Check for None in object or object type. + if (getattr(self, attr) is None and getattr(other, attr) is not None) or \ + (getattr(self, attr) is not None and getattr(other, attr) is None) or \ + getattr(self, attr) != getattr(other, attr): + viol_attr = attr + eq = False + else: + if getattr(self, attr) != getattr(other, attr): + viol_attr = attr + eq = False + + return eq + + def to_dict(self): + """Convert the |class_product| object to a dict. Converts the object recursively, + calling ``to_dict()`` on each object that is an attribute of the product + (|class_demand_source|, etc.). + + ``network`` object is not filled, but should be filled with the network object if this + function is called recursively from a |class_network|'s ``from_dict()`` method. + + Returns + ------- + dict + The dict representation of the product. + """ + # Initialize dict. + product_dict = {} + + # Attributes. + for attr in self._DEFAULT_VALUES.keys(): + # A few attributes need special handling. + if attr == 'network': + product_dict[attr] = None + elif attr in ('demand_source', 'disruption_process', '_inventory_policy'): + product_dict[attr] = None if getattr(self, attr) is None else getattr(self, attr).to_dict() + else: + product_dict[attr] = getattr(self, attr) + + return product_dict + + @classmethod + def from_dict(cls, the_dict): + """Return a new |class_product| object with attributes copied from the + values in ``the_dict``. List attributes are deep-copied so changes to the original dict do + not get propagated to the object. + + ``network`` object is not filled, but should be filled with the network object if this + function is called recursively from a |class_network|'s ``from_dict()`` method. + ``node`` attribute is not filled in the product's ``inventory_policy`` attribute. + + Parameters + ---------- + the_dict : dict + Dict representation of a |class_product|, typically created using ``to_dict()``. + + Returns + ------- + |class_product| + The object converted from the dict. + """ + if the_dict is None: + product = cls() + else: + # Build empty SupplyChainProduct. + product = cls(the_dict['index']) + # Fill attributes. + for attr in cls._DEFAULT_VALUES.keys(): + # Some attributes require special handling. + if attr == 'demand_source': + if attr in the_dict: + value = demand_source.DemandSource.from_dict(the_dict[attr]) + else: + value = demand_source.DemandSource.from_dict(None) + elif attr == 'disruption_process': + if attr in the_dict: + value = disruption_process.DisruptionProcess.from_dict(the_dict[attr]) + else: + value = disruption_process.DisruptionProcess.from_dict(None) + elif attr == '_inventory_policy': + if attr in the_dict: + value = policy.Policy.from_dict(the_dict[attr]) + # Set policy's node to None. + value.node = None + else: + value = policy.Policy.from_dict(None) + # Remove "_" from attr so we are setting the property, not the attribute. + attr = 'inventory_policy' + else: + if attr in the_dict: + value = the_dict[attr] + else: + value = cls._DEFAULT_VALUES[attr] + setattr(product, attr, value) + + return product + + + @classmethod + def from_node(cls, the_node): + """Return a new |class_product| object with attributes copied from the + corresponding attributes in ``the_node``. (This is useful mostly for debugging.) + List attributes are deep-copied so changes to the original node do not get propagated to the product. + + Only copies attributes that are present in both classes. + + ``network`` attribute is copied from the node (not deep-copied). ``node`` attribute + is not filled in the product's ``inventory_policy`` attribute. + + Parameters + ---------- + the_node : |class_node| + Node object whose attributes are to be copied to the product. + + Returns + ------- + |class_product| + The product object converted from the node. + """ + if the_node is None: + product = cls() + else: + # Build empty SupplyChainProduct. + product = cls(the_node.index) + # Fill attributes. + for attr in cls._DEFAULT_VALUES.keys(): + # Some attributes require special handling. + if attr in ('demand_source', 'disruption_process'): + value = copy.deepcopy(getattr(the_node, attr)) + elif attr == '_inventory_policy': + value = copy.deepcopy(getattr(the_node, attr)) + # Set policy's node to None. + value.node = None + # Remove "_" from attr so we are setting the property, not the attribute. + attr = 'inventory_policy' + else: + if hasattr(the_node, attr): + value = getattr(the_node, attr) + else: + value = cls._DEFAULT_VALUES[attr] + setattr(product, attr, value) + + return product + diff --git a/tests/additional_files/multi_product_instance.json b/tests/additional_files/multi_product_instance.json new file mode 100644 index 0000000..6ef6da8 --- /dev/null +++ b/tests/additional_files/multi_product_instance.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [0], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "products": [], "_predecessors": [3, 4], "_successors": [], "_bill_of_materials": {"null": {"3": {"null": 4}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [0, 1], "_bill_of_materials": {"null": {"null": {"null": 3}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "products": [{"index": 1, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "order_capacity": null, "state_vars": []}], "_predecessors": [4, 5], "_successors": [], "_bill_of_materials": {"1": {"5": {"4": 2.6, "5": 5.1}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "products": [{"index": 4, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "order_capacity": null, "state_vars": []}, {"index": 5, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "order_capacity": null, "state_vars": []}], "_predecessors": [null], "_successors": [1, 2], "_bill_of_materials": {"5": {"null": {"null": 16}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "products": [{"index": 2, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "order_capacity": null, "state_vars": []}, {"index": 3, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "order_capacity": null, "state_vars": []}], "_predecessors": [5, 6], "_successors": [], "_bill_of_materials": {"2": {"5": {"5": 3.8}}, "3": {"5": {"5": 6}, "6": {"null": 1}, "null": {"null": 5}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [2], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-03-09 20:58:07.766970"} \ No newline at end of file diff --git a/tests/old_test_demand_source.py b/tests/old_test_demand_source.py deleted file mode 100644 index c171961..0000000 --- a/tests/old_test_demand_source.py +++ /dev/null @@ -1,486 +0,0 @@ -import unittest - -# import numpy as np -# from scipy.stats import norm -# from scipy.stats import poisson -# from scipy.stats import lognorm - -from demand_source import * - - -# Module-level functions. - -def print_status(class_name, function_name): - """Print status message.""" - print("module : test_demand_source class : {:30s} function : {:30s}".format(class_name, function_name)) - - -def set_up_module(): - """Called once, before anything else in this module.""" - print_status('---', 'set_up_module()') - - -def tear_down_module(): - """Called once, after everything else in this module.""" - print_status('---', 'tear_down_module()') - - -class TestValidateParameters(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestValidateParameters', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestValidateParameters', 'tear_down_class()') - - def test_normal(self): - """Test that TestValidateParameters correctly raises errors on invalid parameters - for normal distribution. - """ - print_status('TestValidateParameters', 'test_normal()') - - demand_source = DemandSource() - demand_source.demand_type = 'N' - demand_source.demand_mean = -100 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - demand_source = DemandSource() - demand_source.demand_type = 'N' - demand_source.demand_standard_deviation = -100 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - def test_uniform_discrete(self): - """Test that TestValidateParameters correctly raises errors on invalid parameters - for uniform discrete distribution. - """ - print_status('TestValidateParameters', 'test_uniform_discrete()') - - demand_source = DemandSource() - demand_source.demand_type = 'UD' - demand_source.demand_lo = -100 - demand_source.demand_hi = 100 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - demand_source = DemandSource() - demand_source.demand_type = 'UD' - demand_source.demand_lo = 10 - demand_source.demand_hi = -100 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - demand_source = DemandSource() - demand_source.demand_type = 'UD' - demand_source.demand_lo = 3.8 - demand_source.demand_hi = 100 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - demand_source = DemandSource() - demand_source.demand_type = 'UD' - demand_source.demand_hi = 72.3 - demand_source.demand_lo = 50 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - demand_source = DemandSource() - demand_source.demand_type = 'UD' - demand_source.demand_lo = 50 - demand_source.demand_hi = 20 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - def test_uniform_continuous(self): - """Test that TestValidateParameters correctly raises errors on invalid parameters - for uniform continuous distribution. - """ - print_status('TestValidateParameters', 'test_uniform_continuous()') - - demand_source = DemandSource() - demand_source.demand_type = 'UC' - demand_source.demand_lo = -100 - demand_source.demand_hi = 100 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - demand_source = DemandSource() - demand_source.demand_type = 'UC' - demand_source.demand_lo = 10 - demand_source.demand_hi = -100 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - demand_source = DemandSource() - demand_source.demand_type = 'UC' - demand_source.demand_lo = 50 - demand_source.demand_hi = 20 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - def test_deterministic(self): - """Test that TestValidateParameters correctly raises errors on invalid parameters - for deterministic distribution. - """ - print_status('TestValidateParameters', 'test_deterministic()') - - demand_source = DemandSource() - demand_source.demand_type = 'D' - demand_source.demand_lo = -100 - demand_source.demand_hi = 100 - with self.assertRaises(AssertionError): - demand_source.validate_parameters() - - def test_init_discrete_explicit(self): - """Test that DemandSourceDiscreteExplicit correctly raises errors on invalid parameters. - """ - print_status('TestValidateParameters', 'TestDemandSourceParameters()') - - demand_source_factory = DemandSourceFactory() - - demand_source = demand_source_factory.build_demand_source(DemandType.DISCRETE_EXPLICIT) - with self.assertRaises(AssertionError): - demand_source.probabilities = [0.2, 0.5, 0.2] - - -class TestDemandSourceRepr(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestDemandSourceRepr', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestDemandSourceRepr', 'tear_down_class()') - - def test_none(self): - """Test that DemandSourceNone.__repr__() correctly returns demand source string. - """ - demand_source_factory = DemandSourceFactory() - - demand_source = demand_source_factory.build_demand_source(DemandType.NONE) - demand_source_str = demand_source.__repr__() - self.assertEqual(demand_source_str, "DemandSource(NONE)") - - def test_normal(self): - """Test that DemandSourceNormal.__repr__() correctly returns demand source string. - """ - print_status('TestDemandSourceRepr', 'test_normal()') - - demand_source_factory = DemandSourceFactory() - - demand_source = demand_source_factory.build_demand_source(DemandType.NORMAL) - demand_source.mean = 50 - demand_source.standard_deviation = 8 - demand_source_str = demand_source.__repr__() - self.assertEqual(demand_source_str, "DemandSource(NORMAL: mean=50.00, standard_deviation=8.00)") - - def test_uniform_discrete(self): - """Test that DemandSourceUniformDiscrete.__repr__() correctly returns demand source string. - """ - print_status('TestDemandSourceRepr', 'test_uniform_discrete()') - - demand_source_factory = DemandSourceFactory() - - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_DISCRETE) - demand_source.lo = 50 - demand_source.hi = 80 - demand_source_str = demand_source.__repr__() - self.assertEqual(demand_source_str, "DemandSource(UNIFORM_DISCRETE: lo=50.00, hi=80.00)") - - def test_uniform_continuous(self): - """Test that DemandSourceUniformContinuous.__repr__() correctly returns demand source string. - """ - print_status('TestDemandSourceRepr', 'test_uniform_continuous()') - - demand_source_factory = DemandSourceFactory() - - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_CONTINUOUS) - demand_source.lo = 50 - demand_source.hi = 80 - demand_source_str = demand_source.__repr__() - self.assertEqual(demand_source_str, "DemandSource(UNIFORM_CONTINUOUS: lo=50.00, hi=80.00)") - - def test_deterministic(self): - """Test that DemandSource.__repr__() correctly returns demand source string for - deterministic demand_list. - """ - print_status('TestDemandSourceRepr', 'test_deterministic()') - - demand_source_factory = DemandSourceFactory() - - demand_source = demand_source_factory.build_demand_source(DemandType.DETERMINISTIC) - demand_source.demands = 5 - demand_source_str = demand_source.__repr__() - self.assertEqual(demand_source_str, "DemandSource(DETERMINISTIC: demand_list=5)") - - demand_source = demand_source_factory.build_demand_source(DemandType.DETERMINISTIC) - demand_source.demands = [5, 4, 3] - demand_source_str = demand_source.__repr__() - self.assertEqual(demand_source_str, "DemandSource(DETERMINISTIC: demand_list=[5, 4, 3])") - - def test_discrete_explicit(self): - """Test that DemandSource.__repr__() correctly returns demand source string for - discrete explicit demand_list. - """ - print_status('TestDemandSourceRepr', 'test_discrete_explicit()') - - demand_source_factory = DemandSourceFactory() - - demand_source = demand_source_factory.build_demand_source(DemandType.DISCRETE_EXPLICIT) - demand_source.demands = [5, 4, 3] - demand_source.probabilities = [0.2, 0.5, 0.3] - demand_source_str = demand_source.__repr__() - self.assertEqual(demand_source_str, "DemandSource(DISCRETE_EXPLICIT: demand_list=[5, 4, 3], probabilities=[0.2, 0.5, 0.3])") - - -class TestGenerateDemand(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestGenerateDemand', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestGenerateDemand', 'tear_down_class()') - - def test_normal(self): - """Test that generate_demand() returns valid demand values for normal demand_list. - """ - print_status('TestGenerateDemand', 'test_normal()') - - demand_source_factory = DemandSourceFactory() - - # Check for correct errors. - demand_source = demand_source_factory.build_demand_source(DemandType.NORMAL) - demand_source.mean = 4 - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - demand_source = demand_source_factory.build_demand_source(DemandType.NORMAL) - demand_source.standard_deviation = 4 - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - - def test_uniform_discrete(self): - """Test that generate_demand() returns valid demand values for discrete uniform demand_list. - """ - print_status('TestGenerateDemand', 'test_uniform_discrete()') - - demand_source_factory = DemandSourceFactory() - - # Check for correct errors. - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_DISCRETE) - demand_source.lo = 4 - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_DISCRETE) - demand_source.hi = 12 - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_DISCRETE) - demand_source.lo = 12 - demand_source.hi = 4 - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - - # Check for correct demand values. - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_DISCRETE) - demand_source.lo = 4 - demand_source.hi = 12 - for _ in range(100): - d = demand_source.generate_demand() - self.assertTrue(d >= 4, d <= 12) - - def test_uniform_continuous(self): - """Test that generate_demand() returns valid demand values for continuous uniform demand_list. - """ - print_status('TestGenerateDemand', 'test_uniform_continuous()') - - demand_source_factory = DemandSourceFactory() - - # Check for correct errors. - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_CONTINUOUS) - demand_source.lo = 4 - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_CONTINUOUS) - demand_source.hi = 12 - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_CONTINUOUS) - demand_source.lo = 12 - demand_source.hi = 4 - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - - # Check for correct demand values. - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_CONTINUOUS) - demand_source.lo = 4 - demand_source.hi = 12 - for _ in range(100): - d = demand_source.generate_demand() - self.assertTrue(d >= 4, d <= 12) - - def test_deterministic(self): - """Test that generate_demand() returns valid demand values for deterministic demand_list. - """ - print_status('TestGenerateDemand', 'test_deterministic()') - - demand_source_factory = DemandSourceFactory() - - # Check for correct errors. - demand_source = demand_source_factory.build_demand_source(DemandType.DETERMINISTIC) - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - - # Check for correct demand values. - demand_source = demand_source_factory.build_demand_source(DemandType.DETERMINISTIC) - demand_source.demands = 5 - d = demand_source.generate_demand() - self.assertEqual(d, 5) - - demand_source = demand_source_factory.build_demand_source(DemandType.DETERMINISTIC) - demand_source.demands = [5, 4, 3, 2] - d = demand_source.generate_demand() - self.assertEqual(d, 5) - - demand_source = demand_source_factory.build_demand_source(DemandType.DETERMINISTIC) - demand_source.demands = [5, 4, 3, 2] - d = demand_source.generate_demand(period=2) - self.assertEqual(d, 3) - - def test_discrete_explicit(self): - """Test that generate_demand() returns valid demand values for discrete explicit demand_list. - """ - print_status('TestGenerateDemand', 'test_discrete_explicit()') - - demand_source_factory = DemandSourceFactory() - - # Check for correct errors. - demand_source = demand_source_factory.build_demand_source(DemandType.DISCRETE_EXPLICIT) - demand_source.demands = [5, 4, 3, 2] - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - demand_source = demand_source_factory.build_demand_source(DemandType.DISCRETE_EXPLICIT) - demand_source.probabilities = [0.25, 0.25, 0.2, 0.3] - with self.assertRaises(AssertionError): - _ = demand_source.generate_demand() - - # Check for correct demand values. - demand_source = demand_source_factory.build_demand_source(DemandType.DISCRETE_EXPLICIT) - demand_source. demands = [5, 4, 3, 2] - demand_source.probabilities = [0.25, 0.25, 0.2, 0.3] - for _ in range(100): - d = demand_source.generate_demand() - self.assertTrue(d in (5, 4, 3, 2)) - - -class TestDemandDistribution(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestDemandDistribution', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestDemandDistribution', 'tear_down_class()') - - def test_normal(self): - """Test demand_distribution() for normal demand_list. - """ - print_status('TestDemandDistribution', 'test_normal()') - - demand_source_factory = DemandSourceFactory() - demand_source = demand_source_factory.build_demand_source(DemandType.NORMAL) - demand_source.mean = 50 - demand_source.standard_deviation = 8 - - distribution = demand_source.demand_distribution() -# a = distribution.a -# b = distribution.b - mu = distribution.mean() - sigma = distribution.std() - z = distribution.ppf(0.85) - -# self.assertEqual(a, float("-inf")) -# self.assertEqual(b, float("inf")) - self.assertEqual(mu, 50) - self.assertEqual(sigma, 8) - self.assertAlmostEqual(z, 58.291467115950319) - - def test_uniform_continuous(self): - """Test demand_distribution() for continuous uniform demand_list. - """ - print_status('TestDemandDistribution', 'test_uniform_continuous()') - - demand_source_factory = DemandSourceFactory() - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_CONTINUOUS) - demand_source.lo = 50 - demand_source.hi = 100 - - distribution = demand_source.demand_distribution() -# a = distribution.a -# b = distribution.b - mu = distribution.mean() - sigma = distribution.std() - z = distribution.ppf(0.85) - -# self.assertEqual(a, 50) -# self.assertEqual(b, 100) - self.assertEqual(mu, 75) - self.assertAlmostEqual(sigma, 50 / math.sqrt(12)) - self.assertEqual(z, 92.5) - - -class TestCDF(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestCDF', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestCDF', 'tear_down_class()') - - def test_normal(self): - """Test that cdf() returns correct values normal demand_list. - """ - print_status('TestCDF', 'test_normal()') - - demand_source_factory = DemandSourceFactory() - demand_source = demand_source_factory.build_demand_source(DemandType.NORMAL) - demand_source.mean = 50 - demand_source.standard_deviation = 8 - - F = demand_source.cdf(55) - self.assertAlmostEqual(F, 0.734014470951299) - - F = demand_source.cdf(40) - self.assertAlmostEqual(F, 0.105649773666855) - - def test_uniform_continuous(self): - """Test that truncation_bounds() returns correct bounds for continuous - uniform demand_list. - """ - print_status('TestCDF', 'test_uniform_continuous()') - - demand_source_factory = DemandSourceFactory() - demand_source = demand_source_factory.build_demand_source(DemandType.UNIFORM_CONTINUOUS) - demand_source.lo = 50 - demand_source.hi = 100 - - F = demand_source.cdf(55) - self.assertEqual(F, 0.100000000000000) - - F = demand_source.cdf(80) - self.assertEqual(F, 0.600000000000000) - - diff --git a/tests/settings.py b/tests/settings.py index 988a505..968f05d 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -2,4 +2,4 @@ # Set to True to run all tests, even those that are normally skipped because # they are slow. -RUN_ALL_TESTS = False \ No newline at end of file +RUN_ALL_TESTS = False diff --git a/tests/test_helpers.py b/tests/test_helpers.py index 6b9a1ae..76dee97 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -156,6 +156,114 @@ def test_iter(self): self.assertEqual(helpers.is_iterable(a), True) +class TestIsList(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestIsList', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestIsList', 'tear_down_class()') + + def test_list(self): + """Test that is_list() correctly returns True when input is a list. + """ + print_status('TestIsList', 'test_list()') + + a = [1, 2, 3] + self.assertEqual(helpers.is_list(a), True) + + def test_set(self): + """Test that is_list() correctly returns False when input is a set. + """ + print_status('TestIsList', 'test_set()') + + a = {1, 2, 3} + self.assertEqual(helpers.is_list(a), False) + + def test_dict(self): + """Test that is_list() correctly returns False when input is a dict. + """ + print_status('TestIsList', 'test_dict()') + + a = {1: 0, 2: 5, 3: 'potato'} + self.assertEqual(helpers.is_list(a), False) + + def test_singleton(self): + """Test that is_list() correctly returns False when input is a + singleton. + """ + print_status('TestIsList', 'test_singleton()') + + a = 3.14 + self.assertEqual(helpers.is_list(a), False) + + def test_iter(self): + """Test that is_list() correctly returns False when input is an + iter. + """ + print_status('TestIsList', 'test_iter()') + + a = iter("foo") + self.assertEqual(helpers.is_list(a), False) + + +class TestIsDict(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestIsDict', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestIsDict', 'tear_down_class()') + + def test_list(self): + """Test that is_dict() correctly returns False when input is a list. + """ + print_status('TestIsDict', 'test_list()') + + a = [1, 2, 3] + self.assertEqual(helpers.is_dict(a), False) + + def test_set(self): + """Test that is_dict() correctly returns False when input is a set. + """ + print_status('TestIsDict', 'test_set()') + + a = {1, 2, 3} + self.assertEqual(helpers.is_dict(a), False) + + def test_dict(self): + """Test that is_dict() correctly returns True when input is a dict. + """ + print_status('TestIsDict', 'test_dict()') + + a = {1: 0, 2: 5, 3: 'potato'} + self.assertEqual(helpers.is_dict(a), True) + + def test_singleton(self): + """Test that is_dict() correctly returns False when input is a + singleton. + """ + print_status('TestIsDict', 'test_singleton()') + + a = 3.14 + self.assertEqual(helpers.is_dict(a), False) + + def test_iter(self): + """Test that is_dict() correctly returns False when input is an + iter. + """ + print_status('TestIsDict', 'test_iter()') + + a = iter("foo") + self.assertEqual(helpers.is_dict(a), False) + + class TestIsInteger(unittest.TestCase): @classmethod def set_up_class(cls): @@ -174,7 +282,7 @@ def test_int(self): x = 14 is_int = helpers.is_integer(x) - self.assertEqual(is_int, True) + self.assertTrue(is_int) def test_int_float(self): """Test that is_integer() returns correct result if x is an integer float. @@ -183,7 +291,7 @@ def test_int_float(self): x = 14.0 is_int = helpers.is_integer(x) - self.assertEqual(is_int, True) + self.assertTrue(is_int) def test_nonint_float(self): """Test that is_integer() returns correct result if x is a non-integer @@ -205,6 +313,63 @@ def test_nonfloat(self): self.assertEqual(is_int, False) +class TestIsNumericString(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestIsNumericString', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestIsNumericString', 'tear_down_class()') + + def test_str_int(self): + """Test that is_numeric_string() returns correct result if x is a string that represents an int. + """ + print_status('TestIsNumericString', 'test_str_int()') + + x = '14' + is_int = helpers.is_numeric_string(x) + self.assertTrue(is_int) + + def test_str_int_float(self): + """Test that is_numeric_string() returns correct result if x is a string that represents an integer float. + """ + print_status('TestIsNumericString', 'test_str_int_float()') + + x = '14.0' + is_int = helpers.is_numeric_string(x) + self.assertTrue(is_int) + + def test_str_nonint_float(self): + """Test that is_numeric_string() returns correct result if x is a string that represents an non-integer float. + """ + print_status('TestIsNumericString', 'test_str_int_float()') + + x = '14.5' + is_int = helpers.is_numeric_string(x) + self.assertTrue(is_int) + + def test_str_nonfloat(self): + """Test that is_numeric_string() returns correct result if x is a string that represents an non-float. + """ + print_status('TestIsNumericString', 'test_str_nonfloat()') + + x = 'foo' + is_int = helpers.is_numeric_string(x) + self.assertFalse(is_int) + + def test_nonstr(self): + """Test that is_numeric_string() returns correct result if x is not a string. + """ + print_status('TestIsNumericString', 'test_nonstr()') + + x = 14 + is_int = helpers.is_numeric_string(x) + self.assertFalse(is_int) + + class TestIsDiscreteDistribution(unittest.TestCase): @classmethod def set_up_class(cls): @@ -726,6 +891,36 @@ def test_bad_key(self): helpers.change_dict_key(a, 1, 77) +class TestReplaceDictNumericStringKeys(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestReplaceDictNumericStringKeys', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestReplaceDictNumericStringKeys', 'tear_down_class()') + + def test_no_nesting(self): + """Test that replace_dict_numeric_string_keys() returns correct result + when dict doesn't have any nested dicts. + """ + print_status('TestReplaceDictNumericStringKeys', 'test_no_nesting()') + + a = {0: 5, 3: "hello", 2: -1, "9": None} + b = {"c": -5, "4": 2, "d": None, 6: "foo"} + c = {"0": 5, 3: "hello", 2: -1, 9: None, None: "bar"} + + helpers.replace_dict_numeric_string_keys(a) + helpers.replace_dict_numeric_string_keys(b) + helpers.replace_dict_numeric_string_keys(c) + + self.assertDictEqual(a, {0: 5, 3: "hello", 2: -1, 9: None}) + self.assertDictEqual(b, {"c": -5, 4: 2, "d": None, 6: "foo"}) + self.assertDictEqual(c, {0: 5, 3: "hello", 2: -1, 9: None, None: "bar"}) + + class TestConvolveMany(unittest.TestCase): @classmethod def set_up_class(cls): diff --git a/tests/test_ss.py b/tests/test_ss.py index 23b2bfa..4b67e17 100644 --- a/tests/test_ss.py +++ b/tests/test_ss.py @@ -9,7 +9,6 @@ from stockpyl.instances import * from tests.settings import * - # Module-level functions. def print_status(class_name, function_name): diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 0e7a1bc..0332459 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -7,6 +7,7 @@ #from supply_chain_node import * from stockpyl.supply_chain_network import * +from stockpyl.supply_chain_product import * from stockpyl.demand_source import DemandSource from stockpyl.policy import Policy from stockpyl.instances import * @@ -266,6 +267,249 @@ def test_4_node_owmr(self): self.assertEqual(anc[3], [nodes[0]]) +class TestIsMultiProduct(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestIsMultiProduct', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestIsMultiProduct', 'tear_down_class()') + + def test_empty_list(self): + """Test that is_multiproduct correctly returns ``False`` if ``products = []``. + """ + print_status('TestIsMultiProduct', 'test_empty_list()') + + network = load_instance("example_6_1") + + network.nodes[0].products = [] + + self.assertFalse(network.nodes[0].is_multiproduct) + + def test_none(self): + """Test that is_multiproduct correctly returns ``False`` if ``products is None``. + """ + print_status('TestIsMultiProduct', 'test_none()') + + network = load_instance("example_6_1") + + network.nodes[0].products = None + + self.assertFalse(network.nodes[0].is_multiproduct) + + def test_singleton(self): + """Test that is_multiproduct correctly returns ``False`` if ``products`` is a list with one element. + """ + print_status('TestIsMultiProduct', 'test_singleton()') + + network = load_instance("example_6_1") + + network.nodes[0].products = [0] + network.nodes[1].products = [SupplyChainProduct(0)] + + self.assertFalse(network.nodes[0].is_multiproduct) + self.assertFalse(network.nodes[1].is_multiproduct) + + def test_multi(self): + """Test that is_multiproduct correctly returns ``False`` if ``products`` is a list with multiple elements. + """ + print_status('TestIsMultiProduct', 'test_multi()') + + network = load_instance("example_6_1") + + network.nodes[0].products = [0, 1] + network.nodes[1].products = [SupplyChainProduct(0), SupplyChainProduct(1)] + + self.assertTrue(network.nodes[0].is_multiproduct) + self.assertTrue(network.nodes[1].is_multiproduct) + + +class TestGetProductFromIndex(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestGetProductFromIndex', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestGetProductFromIndex', 'tear_down_class()') + + def test_basic(self): + """Basic test. + """ + print_status('TestGetProductFromIndex', 'test_basic()') + + prod1 = SupplyChainProduct(index=0, local_holding_cost=1, stockout_cost=10) + prod2 = SupplyChainProduct(index=1, local_holding_cost=2, stockout_cost=50) + node = SupplyChainNode(index=0, products=[prod1, prod2]) + + self.assertEqual(node.get_product_from_index(0).index, 0) + self.assertEqual(node.get_product_from_index(1).index, 1) + + +class TestSetGetBillOfMaterials(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestSetGetBillOfMaterials', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestSetGetBillOfMaterials', 'tear_down_class()') + + def test_single_product(self): + """Test that set_ and get_bill_of_materials() work correctly when the node is single-product. + """ + print_status('TestSetGetBillOfMaterials', 'test_single_product()') + + network = mwor_system(3) + + network.nodes[1].products = [SupplyChainProduct(1), SupplyChainProduct(2)] + network.nodes[2].products = [SupplyChainProduct(2), SupplyChainProduct(3)] + network.nodes[3].products = [SupplyChainProduct(4), SupplyChainProduct(5)] + + network.nodes[0].set_bill_of_materials( 5, None, 1, 1) + network.nodes[0].set_bill_of_materials( 7, None, 1, 2) + network.nodes[0].set_bill_of_materials( 3, None, 2, 2) + network.nodes[0].set_bill_of_materials(15, None, 2, 3) + network.nodes[0].set_bill_of_materials( 6, None, 3, 4) + network.nodes[0].set_bill_of_materials(16, None, 3, 5) + + self.assertEqual(network.nodes[0].get_bill_of_materials(None, 1, 1), 5) + self.assertEqual(network.nodes[0].get_bill_of_materials(None, 1, 2), 7) + self.assertEqual(network.nodes[0].get_bill_of_materials(None, 2, 2), 3) + self.assertEqual(network.nodes[0].get_bill_of_materials(None, 2, 3), 15) + self.assertEqual(network.nodes[0].get_bill_of_materials(None, 3, 4), 6) + self.assertEqual(network.nodes[0].get_bill_of_materials(None, 3, 5), 16) + + def test_multi_product(self): + """Test that set_ and get_bill_of_materials() work correctly when the node is multi-product. + """ + print_status('TestSetGetBillOfMaterials', 'test_multi_product()') + + network = mwor_system(3) + + network.nodes[0].products = [SupplyChainProduct(10), SupplyChainProduct(11)] + network.nodes[1].products = [SupplyChainProduct(1), SupplyChainProduct(2)] + network.nodes[2].products = [SupplyChainProduct(2), SupplyChainProduct(3)] + network.nodes[3].products = [SupplyChainProduct(4), SupplyChainProduct(5)] + + network.nodes[0].set_bill_of_materials(5, 10, 1, 1) + network.nodes[0].set_bill_of_materials(7, 10, 1, 2) + network.nodes[0].set_bill_of_materials(3, 11, 2, 2) + network.nodes[0].set_bill_of_materials(15, 10, 2, 3) + network.nodes[0].set_bill_of_materials(6, 11, 3, 4) + network.nodes[0].set_bill_of_materials(16, 11, 3, 5) + + self.assertEqual(network.nodes[0].get_bill_of_materials(10, 1, 1), 5) + self.assertEqual(network.nodes[0].get_bill_of_materials(10, 1, 2), 7) + self.assertEqual(network.nodes[0].get_bill_of_materials(11, 2, 2), 3) + self.assertEqual(network.nodes[0].get_bill_of_materials(10, 2, 3), 15) + self.assertEqual(network.nodes[0].get_bill_of_materials(11, 3, 4), 6) + self.assertEqual(network.nodes[0].get_bill_of_materials(11, 3, 5), 16) + + def test_default_value_1node(self): + """Test that get_bill_of_materials() works correctly in a single-node system + with a single product, in which case the BOM number for the node and the external + supplier defaults to 1. + """ + print_status('TestSetGetBillOfMaterials', 'test_default_value()') + + network = single_stage_system() + + self.assertEqual(network.nodes[0].get_bill_of_materials(), 1) + + # Now set BOM number explicitly. + network.nodes[0].set_bill_of_materials(num_needed=6.3) + self.assertEqual(network.nodes[0].get_bill_of_materials(), 6.3) + + def test_default_value_2node(self): + """Test that get_bill_of_materials() works correctly in a 2-node system + when both the node and its predecessor are single product, in which case the + BOM number defaults to 1. + """ + print_status('TestSetGetBillOfMaterials', 'test_default_value()') + + network = serial_system(2) + + self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(predecessor_index=0), 1) + + # Now set BOM number explicitly. + network.get_node_from_index(1).set_bill_of_materials(predecessor_index=0, num_needed=6.3) + self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(predecessor_index=0), 6.3) + + def test_default_value_mwor(self): + """Test that get_bill_of_materials() works correctly in a MWOR system + when both the downstream node and one of its predecessors are single product, in which case the + BOM number defaults to 1. + """ + print_status('TestSetGetBillOfMaterials', 'test_default_value()') + + network = mwor_system(3) + + network.get_node_from_index(1).products = [SupplyChainProduct(1), SupplyChainProduct(2)] + network.get_node_from_index(2).products = [SupplyChainProduct(2)] + + self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=1), 0) + self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=2), 1) + self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=3), 1) + + +class TestBillOfMaterialsList(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestBillOfMaterialsList', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestBillOfMaterialsList', 'tear_down_class()') + + def test_mwor(self): + """Test that bill_of_materials works correctly on MWOR network. + """ + print_status('TestBillOfMaterialsList', 'test_mwor()') + + network = mwor_system(3) + + network.get_node_from_index(1).products = [SupplyChainProduct(1), SupplyChainProduct(2)] + network.get_node_from_index(2).products = [SupplyChainProduct(2), SupplyChainProduct(3)] + network.get_node_from_index(3).products = [SupplyChainProduct(4), SupplyChainProduct(5)] + + node0 = network.get_node_from_index(0) + + node0.set_bill_of_materials( 5, None, 1, 1) + node0.set_bill_of_materials( 7, None, 1, 2) + node0.set_bill_of_materials( 3, None, 2, 2) + node0.set_bill_of_materials(15, None, 2, 3) + node0.set_bill_of_materials( 6, None, 3, 4) + node0.set_bill_of_materials(16, None, 3, 5) + + bom = node0.bill_of_materials + self.assertListEqual(bom, [(5, 0, None, 1, 1), (7, 0, None, 1, 2), (3, 0, None, 2, 2), (15, 0, None, 2, 3), (6, 0, None, 3, 4), (16, 0, None, 3, 5)]) + + def test_multi_product_network7(self): + """Test that bill_of_materials works correctly on 7-node network. + """ + print_status('TestBillOfMaterialsList', 'test_multi_product()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + self.assertSetEqual( + set(network.get_node_from_index(0).bill_of_materials), + {(1, 0, None, 4, None), (4, 0, None, 3, None)} + ) + self.assertListEqual( + network.get_node_from_index(1).bill_of_materials, + [(1, 1, 1, 4, None), (2.6, 1, 1, 5, 4), (5.1, 1, 1, 5, 5)] + ) + class TestLeadTime(unittest.TestCase): @classmethod def set_up_class(cls): diff --git a/tests/test_supply_chain_product.py b/tests/test_supply_chain_product.py new file mode 100644 index 0000000..99b15fe --- /dev/null +++ b/tests/test_supply_chain_product.py @@ -0,0 +1,383 @@ +import unittest + +from stockpyl.supply_chain_network import * +from stockpyl.supply_chain_product import * +from stockpyl.demand_source import DemandSource +from stockpyl.policy import Policy +from stockpyl.instances import * +from stockpyl.sim import * + + +# Module-level functions. + +def print_status(class_name, function_name): + """Print status message.""" + print("module : test_supply_chain_product class : {:30s} function : {:30s}".format(class_name, function_name)) + + +def set_up_module(): + """Called once, before anything else in this module.""" + print_status('---', 'set_up_module()') + + +def tear_down_module(): + """Called once, after everything else in this module.""" + print_status('---', 'tear_down_module()') + + +class TestSupplyChainProductInit(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestSupplyChainProductInit', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestSupplyChainProductInit', 'tear_down_class()') + + def test_kwargs(self): + """Test that SupplyChainProduct.__init__() produces identical products + if parameters are passed as arguments vs. set later. + """ + print_status('TestSupplyChainProductInit', 'test_kwargs()') + + product1 = SupplyChainProduct(index=1, name='foo', local_holding_cost=5, order_lead_time=2) + product2 = SupplyChainProduct(index=1) + product2.name = 'foo' + product2.local_holding_cost = 5 + product2.order_lead_time = 2 + self.assertTrue(product1.deep_equal_to(product2)) + + product1 = SupplyChainProduct(index=3, name='bar', local_holding_cost=2, + demand_source=DemandSource(type='N', mean=20, standard_deviation=4), + inventory_policy=Policy(type='BS', base_stock_level=30) + ) + product2 = SupplyChainProduct(index=3) + product2.name = 'bar' + product2.local_holding_cost = 2 + product2.demand_source = DemandSource() + product2.demand_source.type = 'N' + product2.demand_source.mean = 20 + product2.demand_source.standard_deviation = 4 + product2.inventory_policy = Policy() + product2.inventory_policy.type = 'BS' + product2.inventory_policy.base_stock_level = 30 + self.assertTrue(product1.deep_equal_to(product2)) + + def test_bad_params(self): + """Test that SupplyChainProduct.__init__() correctly raises errors on + invalid parameters. + """ + print_status('TestSupplyChainProductInit', 'test_bad_params()') + + with self.assertRaises(AttributeError): + _ = SupplyChainProduct(index=4, foo=7) + + +class TestSupplyChainProductEq(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestSupplyChainProductEq', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestSupplyChainProductEq', 'tear_down_class()') + + def test_eq(self): + """Test SupplyChainProduct.__eq__(). + """ + print_status('TestSupplyChainProductEq', 'test_eq()') + + product1 = SupplyChainProduct(index=3, name="foo") + product2 = SupplyChainProduct(index=3, name="bar") + product3 = SupplyChainProduct(index=5, name=None) + product4 = SupplyChainProduct(index=5, name="taco") + product5 = SupplyChainProduct(index=3, name="foo") + + eq11 = product1 == product1 + eq12 = product1 == product2 + eq13 = product1 == product3 + eq14 = product1 == product4 + eq15 = product1 == product5 + eq21 = product2 == product1 + eq22 = product2 == product2 + eq23 = product2 == product3 + eq24 = product2 == product4 + eq25 = product2 == product5 + eq31 = product3 == product1 + eq32 = product3 == product2 + eq34 = product3 == product4 + eq35 = product3 == product5 + + self.assertEqual(eq11, True) + self.assertEqual(eq12, True) + self.assertEqual(eq13, False) + self.assertEqual(eq14, False) + self.assertEqual(eq15, True) + self.assertEqual(eq21, True) + self.assertEqual(eq22, True) + self.assertEqual(eq23, False) + self.assertEqual(eq24, False) + self.assertEqual(eq25, True) + self.assertEqual(eq31, False) + self.assertEqual(eq32, False) + self.assertEqual(eq34, True) + self.assertEqual(eq35, False) + + def test_list_contains(self): + """Test that a list can correctly determine whether a SupplyChainProduct is + contained in it. This depends on SupplyChainProduct.__eq__() working + properly. + """ + print_status('TestSupplyChainProductEq', 'test_list_contains()') + + product1 = SupplyChainProduct(index=3, name="foo") + product2 = SupplyChainProduct(index=3, name="bar") + product3 = SupplyChainProduct(index=5, name=None) + product4 = SupplyChainProduct(index=6, name="taco") + product5 = SupplyChainProduct(index=3, name="foo") + + mylist = [product1, product2, product3] + + contains1 = product1 in mylist + contains2 = product2 in mylist + contains3 = product3 in mylist + contains4 = product4 in mylist + contains5 = product5 in mylist + + self.assertEqual(contains1, True) + self.assertEqual(contains2, True) + self.assertEqual(contains3, True) + self.assertEqual(contains4, False) + self.assertEqual(contains5, True) + + +class TestDeepEqualTo(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestDeepEqualTo', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestDeepEqualTo', 'tear_down_class()') + + def test_example_6_1(self): + """Test deep_equal_to() for nodes in in Example 6.1, but treating the nodes as though + they were products. + """ + print_status('TestDeepEqualTo', 'test_example_6_1()') + + network = load_instance("example_6_1") + + # Convert nodes in network to products. + products = {n: SupplyChainProduct.from_node(network.get_node_from_index(n)) for n in network.node_indices} + + # Equal products. + product1copy = copy.deepcopy(products[1]) + self.assertTrue(product1copy.deep_equal_to(products[1])) + self.assertTrue(products[1].deep_equal_to(product1copy)) + product2copy = copy.deepcopy(products[2]) + self.assertTrue(product2copy.deep_equal_to(products[2])) + self.assertTrue(products[2].deep_equal_to(product2copy)) + product3copy = copy.deepcopy(products[3]) + self.assertTrue(product3copy.deep_equal_to(products[3])) + self.assertTrue(products[3].deep_equal_to(product3copy)) + + # Unequal nodes due to parameters. + product1copy.local_holding_cost = 99 + self.assertFalse(product1copy.deep_equal_to(products[1])) + self.assertFalse(products[1].deep_equal_to(product1copy)) + product2copy.demand_source.standard_deviation = 99 + self.assertFalse(product2copy.deep_equal_to(products[2])) + self.assertFalse(products[2].deep_equal_to(product2copy)) + + # Unequal networks due to missing policy. + product3copy.inventory_policy = None + self.assertFalse(product3copy.deep_equal_to(products[3])) + self.assertFalse(products[3].deep_equal_to(product3copy)) + + +class TestProductToFromDict(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestProductToFromDict', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestProductToFromDict', 'tear_down_class()') + + def test_example_6_1(self): + """Test that to_dict() and from_dict() correctly convert SupplyChainProduct objects to and from dicts, + for products converted from nodes in Example 6.1. + """ + print_status('TestProductToFromDict', 'test_example_6_1()') + + network = load_instance("example_6_1") + + # Convert nodes in network to products. + products = [SupplyChainProduct.from_node(network.get_node_from_index(n)) for n in network.node_indices] + + # Convert products to dicts. + product_dicts = [prod.to_dict() for prod in products] + + # Convert dicts back to products. + dict_products = [SupplyChainProduct.from_dict(d) for d in product_dicts] + + # Compare. + for i in range(len(products)): + self.assertTrue(products[i].deep_equal_to(dict_products[i])) + + def test_assembly_3_stage(self): + """Test that to_dict() and from_dict() correctly convert SupplyChainProduct objects to and from dicts, + for products converted from nodes in 3-stage assembly system. + """ + print_status('TestProductToFromDict', 'test_assembly_3_stage()') + + network = load_instance("example_6_1") + + # Convert nodes in network to products. + products = [SupplyChainProduct.from_node(network.get_node_from_index(n)) for n in network.node_indices] + + # Convert products to dicts. + product_dicts = [prod.to_dict() for prod in products] + + # Convert dicts back to products. + dict_products = [SupplyChainProduct.from_dict(d) for d in product_dicts] + + # Compare. + for i in range(len(products)): + self.assertTrue(products[i].deep_equal_to(dict_products[i])) + + +class TestProductFromNode(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestProductFromNode', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestProductFromNode', 'tear_down_class()') + + def test_example_6_1(self): + """Test that from_node() correctly converts SupplyChainNode object to product + in Example 6.1. + """ + print_status('TestProductFromNode', 'test_example_6_1()') + + network = load_instance("example_6_1") + + # Convert nodes in network to products. + products = {n: SupplyChainProduct.from_node(network.get_node_from_index(n)) for n in network.node_indices} + + # Build products from scratch. + scratch_products = { + 1: SupplyChainProduct(1, + echelon_holding_cost=2, + local_holding_cost=2, + shipment_lead_time=2, + stockout_cost=0, + demand_source=DemandSource(type='N', mean=5, standard_deviation=1), + inventory_policy=Policy(type='BS', base_stock_level=6.49) + ), + 2: SupplyChainProduct(2, + echelon_holding_cost=2, + local_holding_cost=4, + shipment_lead_time=1, + stockout_cost=0, + demand_source=None, + inventory_policy=Policy(type='BS', base_stock_level=5.53) + ), + 3: SupplyChainProduct(3, + echelon_holding_cost=3, + local_holding_cost=7, + shipment_lead_time=1, + stockout_cost=0, + demand_source=None, + inventory_policy=Policy(type='BS', base_stock_level=10.69) + ), + } + + # Compare. + for i in network.node_indices: + self.assertTrue(products[i], scratch_products[i]) + + + def test_assembly_3_stage(self): + """Test that from_node() correctly converts SupplyChainNode object to product + in 3-stage assembly system. + """ + print_status('TestProductFromNode', 'test_assembly_3_stage()') + + network = load_instance("assembly_3_stage") + + # Convert nodes in network to products. + products = {n: SupplyChainProduct.from_node(network.get_node_from_index(n)) for n in range(3)} + + # Build products from scratch. + scratch_products = { + 0: SupplyChainProduct(0, + local_holding_cost=2, + stockout_cost=20, + shipment_lead_time=1, + demand_source=DemandSource(type='N', mean=5, standard_deviation=1), + inventory_policy=Policy(type='BS', base_stock_level=7), + initial_inventory_level=7 + ), + 1: SupplyChainProduct(1, + local_holding_cost=1, + stockout_cost=0, + shipment_lead_time=2, + demand_source=None, + inventory_policy=Policy(type='BS', base_stock_level=13), + initial_inventory_level=13 + ), + 2: SupplyChainProduct(2, + local_holding_cost=1, + stockout_cost=0, + shipment_lead_time=2, + demand_source=None, + inventory_policy=Policy(type='BS', base_stock_level=11), + initial_inventory_level=11 + ) + } + + # Compare. + for i in range(3): + self.assertTrue(products[i], scratch_products[i]) + + +class TestInitialize(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestInitialize', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestInitialize', 'tear_down_class()') + + def test_initialize(self): + """Test that initialize() correctly initializes. + """ + print_status('TestInitialize', 'test_copy()') + + prod1 = SupplyChainProduct(index=None) + prod2 = SupplyChainProduct(index=None) + prod1.initialize() + self.assertTrue(prod1.deep_equal_to(prod2)) + + prod1 = SupplyChainProduct(index=None, local_holding_cost=2, stockout_cost=50, shipment_lead_time=3) + prod2 = SupplyChainProduct(index=None) + prod1.initialize() + self.assertTrue(prod1.deep_equal_to(prod2)) + From 2086a3b8270ebe807cb069c47473e8afb93cc9d6 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 23 Mar 2024 22:33:46 -0400 Subject: [PATCH 02/94] Updates to loss functions, finite horizon, multiprod --- CHANGELOG.md | 8 +- src/stockpyl/finite_horizon.py | 25 +++- src/stockpyl/helpers.py | 59 ++++++++- src/stockpyl/loss_functions.py | 48 +++++++ src/stockpyl/supply_chain_node.py | 65 +++++----- src/stockpyl/supply_chain_product.py | 2 +- .../multi_product_instance.json | 2 +- tests/test_helpers.py | 120 +++++++++++++++++- tests/test_loss_functions.py | 44 +++++++ tests/test_supply_chain_node.py | 38 +++++- 10 files changed, 362 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b9e0c5..b6dd97a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -(none so far) +### Added +- ``helpers.nearest_dict_value()`` function, to find key in a dictionary that's nearest to +a given number and return the corresponding value. +- ``loss_functions.standard_normal_loss_dict()`` function, to build a dictionary of loss-function values. + +### Fixed +- Bug in ``helpers.ensure_list_for_time_period()`` that caused it to handle numpy arrays improperly. ## [0.0.15] -- 2024-02-10 diff --git a/src/stockpyl/finite_horizon.py b/src/stockpyl/finite_horizon.py index d4229b8..2c5c281 100644 --- a/src/stockpyl/finite_horizon.py +++ b/src/stockpyl/finite_horizon.py @@ -328,6 +328,11 @@ def finite_horizon_dp( # - to get index from x value, use x - x_min # Example: x_range = 10:20; then x_range[3] = 13 and 13 - x_min = 3. + # Pre-calculate standard normal loss function values. + min_z, max_z, step_z = -4, 4, 0.01 + loss_table = lf.standard_normal_loss_dict(start=min_z, stop=max_z, step=step_z) + comp_table = lf.standard_normal_loss_dict(start=min_z, stop=max_z, step=step_z, complementary=True) + # Start with initial truncation range; abort, expand, and re-try if necessary. done = False while not done: @@ -364,11 +369,25 @@ def finite_horizon_dp( # Initialize cost. cost = 0.0 - # Calculate n(y) and \bar{n}(y). - n, n_bar = lf.normal_loss(y, demand_mean[t], demand_sd[t]) +# TODO: this needs to be an option; and add tests for it + + # Calculate n(y) and \bar{n}(y). + # if False: + z = (y - demand_mean[t]) / demand_sd[t] + if z < min_z: + n = demand_mean[t] - y + n_bar = 0 + elif z > max_z: + n = 0 + n_bar = y - demand_mean[t] + else: + n = nearest_dict_value(z, loss_table) * demand_sd[t] + n_bar = nearest_dict_value(z, comp_table) * demand_sd[t] + # else: +# n, n_bar = lf.normal_loss(y, demand_mean[t], demand_sd[t]) # Calculate current-period (newsvendor) cost. - cost += holding_cost[t] * n_bar + stockout_cost[t] * n; + cost += holding_cost[t] * n_bar + stockout_cost[t] * n # Truncate demand range to avoid y-d exceeding x bounds. # Need x_min <= y - d <= x_max. diff --git a/src/stockpyl/helpers.py b/src/stockpyl/helpers.py index ee7c24d..d3d504a 100644 --- a/src/stockpyl/helpers.py +++ b/src/stockpyl/helpers.py @@ -287,6 +287,22 @@ def is_continuous_distribution(distribution): return isinstance(distribution, rv_continuous) +def nearest_dict_value(key_to_search, the_dict): + """Return the value in ``the_dict`` corresponding to the key that is closest + to ``key_to_search``. + + Parameters + ---------- + key_to_search : float + The number to search for among the keys. + the_dict : dict + The dictionary to search. + """ + + # https://stackoverflow.com/a/7934624/3453768 + return the_dict.get(key_to_search, the_dict[min(the_dict.keys(), key=lambda k: abs(k-key_to_search))]) + + def find_nearest(array, values, sorted=False, index=dict()): """Determine entries in ``array`` that are closest to each of the entries in ``values`` and return their indices. Neither array needs to be sorted, @@ -383,6 +399,7 @@ def ensure_list_for_time_periods(x, num_periods, var_name=None): * If ``x`` is a list of length ``num_periods``+1, return ``x``. * If ``x`` is a list of length ``num_periods``, shift elements to the right by 1 slot, fill the 0th element with 0, and return new list. + * If ``x`` is a numpy array, convert to list first, then follow above rules. * Otherwise, raise a ``ValueError``. **Examples:** @@ -426,6 +443,10 @@ def ensure_list_for_time_periods(x, num_periods, var_name=None): ValueError If ``x`` is not a singleton or a list of length ``num_periods`` or ``num_periods`` + 1. """ + # If numpy array, convert to list. + if isinstance(x, np.ndarray): + x = x.tolist() + # Determine whether x is singleton or iterable. if is_iterable(x): if len(x) == num_periods+1: @@ -791,8 +812,8 @@ def change_dict_key(dict_to_change, old_key, new_key): def replace_dict_numeric_string_keys(dict_to_change): - """Replace any key in ``dict_to_change`` that is a string representing an integer. - Return a new dict. + """Replace any key in ``dict_to_change`` that is a string representing an integer with + the integer itself. Return a new dict. Works recursively to replace numeric-string keys in any values in ``dict_to_change``, etc. Parameters @@ -823,6 +844,40 @@ def replace_dict_numeric_string_keys(dict_to_change): # Add item to dict. new_dict[new_key] = v + return new_dict + + +def replace_dict_null_keys(dict_to_change): + """Replace any key in ``dict_to_change`` that equals the string ``'null'`` with ``None``. + Return a new dict. + Works recursively to replace ``'null'``'`` keys in any values in ``dict_to_change``, etc. + + Parameters + ---------- + dict_to_change : dict + The dict. + + Returns + ------- + dict + The new dict. + """ + new_dict = {} + for old_key, v in dict_to_change.items(): + + # If v is a dict, call this function recursively on it. + if is_dict(v): + v = replace_dict_null_keys(v) + + # Determine new key, if any. + if old_key == 'null': + new_key = None + else: + new_key = old_key + # Add item to dict. + new_dict[new_key] = v + + return new_dict ### STATS FUNCTIONS ### diff --git a/src/stockpyl/loss_functions.py b/src/stockpyl/loss_functions.py index 41536c6..887c246 100644 --- a/src/stockpyl/loss_functions.py +++ b/src/stockpyl/loss_functions.py @@ -258,6 +258,54 @@ def normal_second_loss(x, mean, sd): return n, n_bar +def standard_normal_loss_dict(start=-4, stop=4, step=0.01, complementary=False): + """Return a dictionary whose keys range from ``start`` to ``stop`` in intervals of ``step``, + and whose values are the standard normal loss function + values corresponding to those keys. If going from ``start`` in increments of ``step`` + overshoots ``stop``, ends at the largest value before ``stop``. If ``complementary`` is ``False``, + the dictionary values are the standard normal complementary loss function. + + Default values return :math:`\\mathscr{L}^{(2)}(z)` + for :math:`z = -4.00, -3.99, -3.98, \ldots, 3.98, 3.99, 4.00`. + + **Note:** Because of how floating point arithmetic works, the dictionary keys will not + precisely equal the desired values. Therefore, the resulting dictionary is difficult to + use by calling it directly. For example, 0.55 is unlikely to be a key in the dictionary + returned, even if the input parameters suggest that it should; instead, the key might be + represented as, say, 0.5499999999999593. Therefore, to determine the value of the loss function + for 0.55, you must generally search for the nearest key to 0.55 and take the corresponding value. + (The ``helpers.nearest_dict_value()`` function does just that.) + + Parameters + ---------- + start : float, optional + The start value to calculate the loss function for, by default -4 + stop : float, optional + The start value to calculate the loss function for, by default 4 + step : float, optional + The interval between values to calculate the loss function for, by default 0.01 + complementary : bool, optional + Set to ``True`` to return the complementary loss function, by default ``False`` + + Returns + ------- + dict + Dictoinary whose keys range from ``start`` to ``stop`` in intervals of ``step``, + and whose values are the standard normal loss function + values corresponding to those keys. + """ + + # Build list of z values. + z = start + z_list = [] + while z < stop: + z_list.append(z) + z += step + + # Build and return dictionary. + return {z: standard_normal_loss(z)[1 if complementary else 0] for z in z_list} + + def lognormal_loss(x, mu, sigma): """ Return lognormal loss and complementary loss functions for :math:`\\text{lognormal}(\\mu,\\sigma)` diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 867cc40..006904c 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -62,7 +62,7 @@ from stockpyl.supply_chain_product import SupplyChainProduct from stockpyl import demand_source from stockpyl import disruption_process -from stockpyl.helpers import change_dict_key, is_integer, is_list, is_dict, is_numeric_string +from stockpyl.helpers import change_dict_key, is_integer, is_list, is_dict, replace_dict_null_keys, replace_dict_numeric_string_keys # =============================================================================== @@ -314,7 +314,15 @@ def predecessors(self, include_external=False): list List of all predecessors, as |class_node| objects. """ - if include_external and self.supply_type is not None: + # Set supply_type to not None if the node or any products have it set to not None. + # TODO: handle this more elegantly (node supply_type property sets based on products too) + supply_type = self.supply_type + if not supply_type: + for prod in self.products: + if prod is not None and prod.supply_type is not None: + supply_type = prod.supply_type + # Include external supplier if include_external and supply_type is not None. + if include_external and supply_type is not None: return self._predecessors + [None] else: return self._predecessors @@ -449,9 +457,9 @@ def set_bill_of_materials(self, num_needed=1.0, product_index=None, predecessor_ If ``num_needed = 0`` or ``None`` and a BOM relationship does not already exist for the specified product, predecessory, and raw material, does nothing. - **Note:** If a node and its predecessor are both single-product (or if the predecessor is the external supplier), - their BOM number is assumed to equal 1, even if it is not set using this function. If the BOM number is something - other than 1, it must be set using this function. + **Note:** If the node and a predecessor are both single-product (or if the predecessor is the external supplier + and the node's ``supply_type`` is not ``None``), their BOM number is assumed to equal 1, even if it has not been + set explicitly. If the BOM number is something other than 1, it must be set using ``set_bill_of_materials()``. Parameters ---------- @@ -496,11 +504,11 @@ def get_bill_of_materials(self, product_index=None, predecessor_index=None, rm_i If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. If the predecessor is a single-product node, set ``rm_index`` to ``None``. - Returns 1 if the node and its predecessor are both single-product (or the predecessor is the external supplier) - and there is no BOM relationship specified for this pair. Node pairs are assumed to have a BOM number of 1 if - both are single-product (or the predecessor is the external supplier), unless specified otherwise in the BOM. + Returns 1 if the node and the predecessor are both single-product (or the predecessor is the external supplier and the node + does not have ``supply_type`` ``None``) and there is no BOM relationship specified for this pair. Node(/product) pairs are + assumed to have a BOM number of 1 in this case, unless specified otherwise in the BOM. - Returns 0 if there is no BOM relationship for this product, predecessor, and raw material. + Otherwise, returns 0 if there is no BOM relationship for this product, predecessor, and raw material. Parameters ---------- @@ -516,11 +524,15 @@ def get_bill_of_materials(self, product_index=None, predecessor_index=None, rm_i # Return BOM number, if BOM entry exists. return self._bill_of_materials[product_index][predecessor_index][rm_index] except: - if not self.is_multiproduct and predecessor_index is None: - # Node is single-product and predecessor is external supplier; return default BOM number of 1. - return 1 - elif not self.is_multiproduct and not self.network.get_node_from_index(predecessor_index).is_multiproduct: - # Both nodes are single-product; return default BOM number of 1. + # Treat supply_type as not None if it's not None in either the node or the product. + supply_type = self.supply_type + if product_index in self.product_indices: + if product_index is not None: + supply_type = supply_type or self.get_product_from_index(product_index).supply_type + # Default to 1 if predecessor is external and supply_type is not None, or if + # node and predecessor are both single-product. + if (predecessor_index is None and supply_type is not None) \ + or (not self.is_multiproduct and not self.network.get_node_from_index(predecessor_index).is_multiproduct): return 1 else: # No BOM relationship exists; return 0. @@ -535,8 +547,9 @@ def bill_of_materials(self): ``p`` is the index of a predecessor node (or ``None`` for external supplier), and ``rm`` is the index of a product at ``p`` (or ``None`` if ``p`` is single-product or the external supplier). - **Note:** If the node and a predecessor are both single-product (or if the predecessor is the external supplier), - their BOM number is assumed to equal 1, even if it has not been set explicitly. If the BOM number is something + **Note:** If the node and a predecessor are both single-product (or if the predecessor is the external supplier + and the node's ``supply_type`` is not ``None``), their BOM number is assumed to equal 1, + even if it has not been set explicitly. If the BOM number is something other than 1, it must be set using ``set_bill_of_materials()``. Read only. @@ -630,8 +643,8 @@ def inventory_policy(self, value): for prod, _ in value.items(): self._inventory_policy[prod].node = self self._inventory_policy[prod].product = prod - else: - self._inventory_policy.node = self + else: + self._inventory_policy.node = self @property def forward_echelon_lead_time(self): @@ -940,10 +953,11 @@ def from_dict(cls, the_dict): elif attr == 'products': # TODO: why isn't this handled by setting `value` like others? if attr not in the_dict: - node.products = copy.deepcopy(cls._DEFAULT_VALUES['products']) + value = copy.deepcopy(cls._DEFAULT_VALUES['products']) else: + value = [] for prod_dict in (the_dict['products'] or []): - node.products.append(SupplyChainProduct.from_dict(prod_dict)) + value.append(SupplyChainProduct.from_dict(prod_dict)) elif attr == '_bill_of_materials': if attr in the_dict: bom = copy.deepcopy(the_dict[attr]) @@ -952,16 +966,7 @@ def from_dict(cls, the_dict): # Convert 'null' to None and string-wrapped ints to ints in dictionary keys. # (Note that JSON encoding/decoding onverts correctly between None and 'null' # for dictionary values but not keys. Similarly, it leaves ints as strings.) - # TODO: repalce numeric strings - - if 'null' in value: - value[None] = value.pop('null') - for prod in value: - if 'null' in value[prod]: - value[prod][None] = value[prod].pop('null') - for p in value[prod]: - if 'null' in value[prod][p]: - value[prod][p][None] = value[prod][p].pop('null') + value = replace_dict_numeric_string_keys(replace_dict_null_keys(bom)) elif attr == 'demand_source': if attr in the_dict: value = demand_source.DemandSource.from_dict(the_dict[attr]) diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index bf5490b..1a5977a 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -192,7 +192,7 @@ def __init__(self, index, name=None, network=None, **kwargs): 'initial_orders': None, 'initial_shipments': None, '_inventory_policy': None, -# 'supply_type': None, + 'supply_type': None, # 'disruption_process': None, 'order_capacity': None, 'state_vars': [] diff --git a/tests/additional_files/multi_product_instance.json b/tests/additional_files/multi_product_instance.json index 6ef6da8..be904b4 100644 --- a/tests/additional_files/multi_product_instance.json +++ b/tests/additional_files/multi_product_instance.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [0], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "products": [], "_predecessors": [3, 4], "_successors": [], "_bill_of_materials": {"null": {"3": {"null": 4}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [0, 1], "_bill_of_materials": {"null": {"null": {"null": 3}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "products": [{"index": 1, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "order_capacity": null, "state_vars": []}], "_predecessors": [4, 5], "_successors": [], "_bill_of_materials": {"1": {"5": {"4": 2.6, "5": 5.1}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "products": [{"index": 4, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "order_capacity": null, "state_vars": []}, {"index": 5, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "order_capacity": null, "state_vars": []}], "_predecessors": [null], "_successors": [1, 2], "_bill_of_materials": {"5": {"null": {"null": 16}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "products": [{"index": 2, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "order_capacity": null, "state_vars": []}, {"index": 3, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "order_capacity": null, "state_vars": []}], "_predecessors": [5, 6], "_successors": [], "_bill_of_materials": {"2": {"5": {"5": 3.8}}, "3": {"5": {"5": 6}, "6": {"null": 1}, "null": {"null": 5}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [2], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-03-09 20:58:07.766970"} \ No newline at end of file +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [0], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "products": [], "_predecessors": [3, 4], "_successors": [], "_bill_of_materials": {"null": {"3": {"null": 4}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [0, 1], "_bill_of_materials": {"null": {"null": {"null": 3}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "products": [{"index": 1, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "_predecessors": [4, 5], "_successors": [], "_bill_of_materials": {"1": {"5": {"4": 2.6, "5": 5.1}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "products": [{"index": 4, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 5, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "order_capacity": null, "state_vars": []}], "_predecessors": [null], "_successors": [1, 2], "_bill_of_materials": {"5": {"null": {"null": 16}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "products": [{"index": 2, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 3, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "order_capacity": null, "state_vars": []}], "_predecessors": [5, 6, null], "_successors": [], "_bill_of_materials": {"2": {"5": {"5": 3.8}}, "3": {"5": {"5": 6}, "6": {"null": 1}, "null": {"null": 5}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [2], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-03-18 20:19:03.844568"} \ No newline at end of file diff --git a/tests/test_helpers.py b/tests/test_helpers.py index 76dee97..6e023c1 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -432,6 +432,30 @@ def _pdf(self, x, *args): self.assertEqual(is_discrete, False) +class TestNearestDictValue(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestNearestDictValue', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestNearestDictValue', 'tear_down_class()') + + def test(self): + """Test nearest_dict_value(). + """ + print_status('TestNearestDictValue', 'nearest_dict_value()') + + the_dict = {0: 5, 0.1: 6.2, 0.2: 'foo', 0.3: None} + + self.assertEqual(helpers.nearest_dict_value(0.1, the_dict), 6.2) + self.assertEqual(helpers.nearest_dict_value(0.09, the_dict), 6.2) + self.assertEqual(helpers.nearest_dict_value(-40, the_dict), 5) + self.assertEqual(helpers.nearest_dict_value(0.23, the_dict), 'foo') + self.assertIsNone(helpers.nearest_dict_value(6, the_dict)) + class TestIsContinuousDistribution(unittest.TestCase): @classmethod def set_up_class(cls): @@ -604,6 +628,24 @@ def test_list_with_0(self): x = helpers.ensure_list_for_time_periods([-1, 3.14, 3.14, 3.14, 3.14, 3.14], 5) self.assertEqual(x, [-1, 3.14, 3.14, 3.14, 3.14, 3.14]) + def test_ndarray_without_0(self): + """Test that ensure_list_of_length() returns correct result if x is + an ndarray of length num_periods. + """ + print_status('TestEnsureListForTimePeriods', 'test_ndarray_without_0()') + + x = helpers.ensure_list_for_time_periods(np.array([3.14, 3.14, 3.14, 3.14, 3.14]), 5) + self.assertEqual(x, [0, 3.14, 3.14, 3.14, 3.14, 3.14]) + + def test_ndarray_with_0(self): + """Test that ensure_list_of_length() returns correct result if x is + an ndarray of length num_periods+1. + """ + print_status('TestEnsureListForTimePeriods', 'test_ndarray_with_0()') + + x = helpers.ensure_list_for_time_periods(np.array([-1, 3.14, 3.14, 3.14, 3.14, 3.14]), 5) + self.assertEqual(x, [-1, 3.14, 3.14, 3.14, 3.14, 3.14]) + def test_bad_list(self): """Test that ensure_list_of_length() returns correct result if x is a list of an incorrect length. @@ -912,13 +954,79 @@ def test_no_nesting(self): b = {"c": -5, "4": 2, "d": None, 6: "foo"} c = {"0": 5, 3: "hello", 2: -1, 9: None, None: "bar"} - helpers.replace_dict_numeric_string_keys(a) - helpers.replace_dict_numeric_string_keys(b) - helpers.replace_dict_numeric_string_keys(c) + a_new = helpers.replace_dict_numeric_string_keys(a) + b_new = helpers.replace_dict_numeric_string_keys(b) + c_new = helpers.replace_dict_numeric_string_keys(c) + + self.assertDictEqual(a_new, {0: 5, 3: "hello", 2: -1, 9: None}) + self.assertDictEqual(b_new, {"c": -5, 4: 2, "d": None, 6: "foo"}) + self.assertDictEqual(c_new, {0: 5, 3: "hello", 2: -1, 9: None, None: "bar"}) + + def test_nesting(self): + """Test that replace_dict_numeric_string_keys() returns correct result + when dict contains nested dicts. + """ + print_status('TestReplaceDictNumericStringKeys', 'test_no_nesting()') + + a = {0: 5, 3: "hello", 2: -1, "9": None} + b = {"c": -5, "4": 2, "d": None, 6: "foo"} + c = {"0": 5, 3: "hello", 2: -1, 9: a, None: b} + + a_new = helpers.replace_dict_numeric_string_keys(a) + b_new = helpers.replace_dict_numeric_string_keys(b) + c_new = helpers.replace_dict_numeric_string_keys(c) + + self.assertDictEqual(a_new, {0: 5, 3: "hello", 2: -1, 9: None}) + self.assertDictEqual(b_new, {"c": -5, 4: 2, "d": None, 6: "foo"}) + self.assertDictEqual(c_new, {0: 5, 3: "hello", 2: -1, 9: {0: 5, 3: "hello", 2: -1, 9: None}, None: {"c": -5, 4: 2, "d": None, 6: "foo"}}) + + +class TestReplaceDictNullKeys(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestReplaceDictNullKeys', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestReplaceDictNullKeys', 'tear_down_class()') + + def test_no_nesting(self): + """Test that replace_dict_null_keys() returns correct result + when dict doesn't have any nested dicts. + """ + print_status('TestReplaceDictNullKeys', 'test_no_nesting()') + + a = {0: 5, 3: "hello", "null": -1, "9": None} + b = {"null": -5, "4": 2, "d": None, 6: "foo"} + c = {"0": 5, 3: "hello", 2: -1, 9: None, None: "bar"} + + a_new = helpers.replace_dict_null_keys(a) + b_new = helpers.replace_dict_null_keys(b) + c_new = helpers.replace_dict_null_keys(c) + + self.assertDictEqual(a_new, {0: 5, 3: "hello", None: -1, "9": None}) + self.assertDictEqual(b_new, {None: -5, "4": 2, "d": None, 6: "foo"}) + self.assertDictEqual(c_new, {"0": 5, 3: "hello", 2: -1, 9: None, None: "bar"}) + + def test_nesting(self): + """Test that replace_dict_null_keys() returns correct result + when dict contains nested dicts. + """ + print_status('TestReplaceDictNullKeys', 'test_no_nesting()') + + a = {0: 5, 3: "hello", "null": -1, "9": None} + b = {"null": -5, "4": 2, "d": None, 6: "foo"} + c = {"0": 5, 3: "hello", 2: -1, 9: a, None: b} + + a_new = helpers.replace_dict_null_keys(a) + b_new = helpers.replace_dict_null_keys(b) + c_new = helpers.replace_dict_null_keys(c) - self.assertDictEqual(a, {0: 5, 3: "hello", 2: -1, 9: None}) - self.assertDictEqual(b, {"c": -5, 4: 2, "d": None, 6: "foo"}) - self.assertDictEqual(c, {0: 5, 3: "hello", 2: -1, 9: None, None: "bar"}) + self.assertDictEqual(a_new, {0: 5, 3: "hello", None: -1, "9": None}) + self.assertDictEqual(b_new, {None: -5, "4": 2, "d": None, 6: "foo"}) + self.assertDictEqual(c_new, {"0": 5, 3: "hello", 2: -1, 9: {0: 5, 3: "hello", None: -1, "9": None}, None: {None: -5, "4": 2, "d": None, 6: "foo"}}) class TestConvolveMany(unittest.TestCase): diff --git a/tests/test_loss_functions.py b/tests/test_loss_functions.py index d03a323..5d1674b 100644 --- a/tests/test_loss_functions.py +++ b/tests/test_loss_functions.py @@ -12,6 +12,7 @@ import math import stockpyl.loss_functions as loss_functions +from stockpyl.helpers import nearest_dict_value # Module-level functions. @@ -192,6 +193,49 @@ def test(self): self.assertAlmostEqual(n2_bar, n2a_bar, places=4) +class TestStandardNormalLossDict(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestStandardNormalLossDict', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestStandardNormalLossDict', 'tear_down_class()') + + def test_loss(self): + """Test standard_normal_loss_dict function for returning loss function. + """ + print_status('TestStandardNormalLossDict', 'test_loss()') + + loss_dict = loss_functions.standard_normal_loss_dict() + self.assertAlmostEqual(nearest_dict_value(-3.71, loss_dict), 3.7100, places=4) + self.assertAlmostEqual(nearest_dict_value(-0.77, loss_dict), 0.8967, places=4) + self.assertAlmostEqual(nearest_dict_value( 1.12, loss_dict), 0.0659, places=4) + self.assertAlmostEqual(nearest_dict_value( 2.34, loss_dict), 0.0033, places=4) + + loss_dict = loss_functions.standard_normal_loss_dict(start=-0.5, stop=2.5, step=0.1) + self.assertAlmostEqual(nearest_dict_value(-0.3, loss_dict), 0.5668, places=4) + self.assertAlmostEqual(nearest_dict_value( 1.1, loss_dict), 0.0686, places=4) + self.assertAlmostEqual(nearest_dict_value( 2.3, loss_dict), 0.0037, places=4) + + def test_complementary_loss(self): + """Test standard_normal_loss_dict function for returning complementary loss function. + """ + print_status('TestStandardNormalLossDict', 'test_complementary_loss()') + + loss_dict = loss_functions.standard_normal_loss_dict(complementary=True) + self.assertAlmostEqual(nearest_dict_value(-3.71, loss_dict), 2.486423864755949e-05, places=4) + self.assertAlmostEqual(nearest_dict_value(-0.77, loss_dict), 0.12669429630997542, places=4) + self.assertAlmostEqual(nearest_dict_value( 1.12, loss_dict), 1.1859494400078596, places=4) + self.assertAlmostEqual(nearest_dict_value( 2.34, loss_dict), 2.343254599799449, places=4) + + loss_dict = loss_functions.standard_normal_loss_dict(start=-0.5, stop=2.5, step=0.1, complementary=True) + self.assertAlmostEqual(nearest_dict_value(-0.3, loss_dict), 0.2667612421172099, places=4) + self.assertAlmostEqual(nearest_dict_value( 1.1, loss_dict), 1.1686195099915297, places=4) + self.assertAlmostEqual(nearest_dict_value( 2.3, loss_dict), 2.3036615846917465, places=4) + class TestLognormalLoss(unittest.TestCase): @classmethod def set_up_class(cls): diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 0332459..947fb1e 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -491,8 +491,14 @@ def test_mwor(self): node0.set_bill_of_materials( 6, None, 3, 4) node0.set_bill_of_materials(16, None, 3, 5) - bom = node0.bill_of_materials - self.assertListEqual(bom, [(5, 0, None, 1, 1), (7, 0, None, 1, 2), (3, 0, None, 2, 2), (15, 0, None, 2, 3), (6, 0, None, 3, 4), (16, 0, None, 3, 5)]) + bom0 = node0.bill_of_materials + self.assertListEqual(bom0, [(5, 0, None, 1, 1), (7, 0, None, 1, 2), (3, 0, None, 2, 2), (15, 0, None, 2, 3), (6, 0, None, 3, 4), (16, 0, None, 3, 5)]) + bom1 = network.get_node_from_index(1).bill_of_materials + self.assertListEqual(bom1, [(1, 1, 1, None, None), (1, 1, 2, None, None)]) + bom2 = network.get_node_from_index(2).bill_of_materials + self.assertListEqual(bom2, [(1, 2, 2, None, None), (1, 2, 3, None, None)]) + bom3 = network.get_node_from_index(3).bill_of_materials + self.assertListEqual(bom3, [(1, 3, 4, None, None), (1, 3, 5, None, None)]) def test_multi_product_network7(self): """Test that bill_of_materials works correctly on 7-node network. @@ -505,9 +511,30 @@ def test_multi_product_network7(self): set(network.get_node_from_index(0).bill_of_materials), {(1, 0, None, 4, None), (4, 0, None, 3, None)} ) - self.assertListEqual( - network.get_node_from_index(1).bill_of_materials, - [(1, 1, 1, 4, None), (2.6, 1, 1, 5, 4), (5.1, 1, 1, 5, 5)] + self.assertSetEqual( + set(network.get_node_from_index(1).bill_of_materials), + {(1, 1, 1, 4, None), (2.6, 1, 1, 5, 4), (5.1, 1, 1, 5, 5)} + ) + self.assertSetEqual( + set(network.get_node_from_index(2).bill_of_materials), + {(3.8, 2, 2, 5, 5), (6, 2, 3, 5, 5), (1, 2, 3, 6, None), (5, 2, 3, None, None)} + ) + # TODO: is it right that network_from_edges() sets supply_type to 'U' if there are no predecessors? + self.assertSetEqual( + set(network.get_node_from_index(3).bill_of_materials), + set() + ) + self.assertSetEqual( + set(network.get_node_from_index(4).bill_of_materials), + {(3, 4, None, None, None)} + ) + self.assertSetEqual( + set(network.get_node_from_index(5).bill_of_materials), + {(16, 5, 5, None, None)} + ) + self.assertSetEqual( + set(network.get_node_from_index(6).bill_of_materials), + set() ) class TestLeadTime(unittest.TestCase): @@ -1045,6 +1072,7 @@ def test_missing_values(self): n2.disruption_process.recovery_probability = DisruptionProcess._DEFAULT_VALUES['_recovery_probability'] self.assertTrue(n1.deep_equal_to(n2)) + # TODO: test with multi-product instance class TestStateVariables(unittest.TestCase): @classmethod From 607a78471a7a6c907df5e0551cea9b8b72caffe9 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Tue, 26 Mar 2024 18:14:54 -0400 Subject: [PATCH 03/94] Support for negative binomial distribution in demand_source and finite_horizon --- CHANGELOG.md | 1 + src/stockpyl/demand_source.py | 107 +++++++++++-- src/stockpyl/finite_horizon.py | 175 +++++++++++++++------ tests/test_demand_source.py | 268 ++++++++++++++++++++++++++++++++- tests/test_finite_horizon.py | 15 +- 5 files changed, 492 insertions(+), 74 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6dd97a..6abadc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - ``helpers.nearest_dict_value()`` function, to find key in a dictionary that's nearest to a given number and return the corresponding value. - ``loss_functions.standard_normal_loss_dict()`` function, to build a dictionary of loss-function values. +- Support for negative binomial demand distributions in ``DemandSource``. ### Fixed - Bug in ``helpers.ensure_list_for_time_period()`` that caused it to handle numpy arrays improperly. diff --git a/src/stockpyl/demand_source.py b/src/stockpyl/demand_source.py index a95ef53..a66e59f 100644 --- a/src/stockpyl/demand_source.py +++ b/src/stockpyl/demand_source.py @@ -76,15 +76,18 @@ class DemandSource(object): * 'P' (Poisson) * 'UD' (uniform discrete) * 'UC' (uniform continuous) + * 'NB' (negative binomial) * 'D' (deterministic) * 'CD' (custom discrete) round_to_int : bool Round demand to nearest integer? mean : float, optional - Mean of demand per period. Required if ``type`` == 'N' or 'P'. [:math:`\mu`] + Mean of demand per period. Required if ``type`` == 'N' or 'P'. + If not provided explicitly, the object will calculate it from the underlying distribution. [:math:`\mu`] standard_deviation : float, optional - Standard deviation of demand per period. Required if ``type`` == 'N'. [:math:`\sigma`] + Standard deviation of demand per period. Required if ``type`` == 'N'. + If not provided explicitly, the object will calculate it from the underlying distribution. [:math:`\sigma`] demand_list : list, optional List of demands, one per period (for deterministic demand types), or list of possible demand values (for custom discrete demand types). For deterministic @@ -101,6 +104,12 @@ class DemandSource(object): hi : float, optional High value of demand range (for uniform demand types). Required if ``type`` == 'UD' or 'UC'. + n : int, optional + Parameter for negative binomial distribution indicating number of trial successes. + Required if ``type`` == 'NB'. [:math:`n`] + p : float, optional + Parameter for negative binomial distribution indicating probability of success for each trial. + Required if ``type`` == 'NB'. [:math:`p`] """ def __init__(self, **kwargs): @@ -136,6 +145,8 @@ def __init__(self, **kwargs): '_probabilities': None, '_lo': None, '_hi': None, + '_n': None, + '_p': None, '_round_to_int': None } @@ -194,7 +205,12 @@ def type(self, value): @property def mean(self): - return self._mean + if self._mean: + return self._mean + elif self.demand_distribution: + return self.demand_distribution.mean() + else: + return None @mean.setter def mean(self, value): @@ -202,7 +218,12 @@ def mean(self, value): @property def standard_deviation(self): - return self._standard_deviation + if self._standard_deviation: + return self._standard_deviation + elif self.demand_distribution: + return self.demand_distribution.std() + else: + return None @standard_deviation.setter def standard_deviation(self, value): @@ -240,6 +261,22 @@ def hi(self): def hi(self, value): self._hi = value + @property + def n(self): + return self._n + + @n.setter + def n(self, value): + self._n = value + + @property + def p(self): + return self._p + + @p.setter + def p(self, value): + self._p = value + @property def round_to_int(self): return self._round_to_int @@ -247,7 +284,7 @@ def round_to_int(self): @round_to_int.setter def round_to_int(self, value): self._round_to_int = value - + # READ-ONLY PROPERTIES @property def demand_distribution(self): @@ -264,6 +301,8 @@ def demand_distribution(self): distribution = scipy.stats.randint(self.lo, self.hi+1) elif self.type == 'UC': distribution = scipy.stats.uniform(self.lo, self.hi - self.lo) + elif self.type == 'NB': + distribution = scipy.stats.nbinom(self.n, self.p) elif self.type == 'CD': distribution = scipy.stats.rv_discrete(name='custom', values=(self.demand_list, self.probabilities)) @@ -271,6 +310,21 @@ def demand_distribution(self): distribution = None return distribution + + @property + def is_discrete(self): + """``True`` if the distribution is discrete, ``False`` if it is continuous. Read only. + + The distribution is discrete if ``self.type`` is 'P', 'UD', 'CD', 'NB', or 'D'. + + Returns + ------- + bool + ``True`` if the distribution is discrete, ``False`` if it is continuous. +# TODO: unit tests + """ + return self.type in ('P', 'UD', 'CD', 'NB', 'D') + # SPECIAL MEMBERS @@ -299,6 +353,8 @@ def __repr__(self): param_str = "demand_list={}".format(self.demand_list) else: param_str = "demand_list={}...".format(self.demand_list[0:8]) + elif self.type == 'NB': + param_str = "n={:d}, p={:.2f}".format(self.n, self.p) elif self.type == 'CD': if len(self.demand_list) <= 8: param_str = "demand_list={}, probabilities={}".format( @@ -356,6 +412,11 @@ def validate_parameters(self): if self.hi is None: raise AttributeError("For 'UC' (uniform continuous) demand, hi must be provided") if self.hi < 0: raise AttributeError("For 'UC' (uniform continuous) demand, hi must be non-negative") if self.lo > self.hi: raise AttributeError("For 'UC' (uniform continuous) demand, lo must be <= hi") + elif self.type == 'NB': + if self.n is None: raise AttributeError("For 'NB' (negative binomial) demand, n must be provided") + if self.n <= 0: raise AttributeError("For 'NB' (negative binomial) demand, n must be positive") + if self.p is None: raise AttributeError("For 'NB' (negative binomial) demand, p must be provided") + if self.p < 0 or self.p > 1: raise AttributeError("For 'NB' (negative binomial) demand, p must be in [0, 1]") elif self.type == 'D': if self.demand_list is None: raise AttributeError("For 'D' (deterministic) demand, demand_list must be provided") elif self.type == 'CD': @@ -451,6 +512,8 @@ def generate_demand(self, period=None): demand = self._generate_demand_uniform_discrete() elif self.type == 'UC': demand = self._generate_demand_uniform_continuous() + elif self.type == 'NB': + demand = self._generate_demand_negative_binomial() elif self.type == 'D': demand = self._generate_demand_deterministic(period) elif self.type == 'CD': @@ -507,6 +570,17 @@ def _generate_demand_uniform_continuous(self): """ return float(np.random.uniform(self.lo, self.hi - self.lo)) + def _generate_demand_negative_binomial(self): + """Generate demand from negative binomial distribution. + + Returns + ------- + demand : int + The demand value. + + """ + return float(np.random.negative_binomial(self.n, self.p)) + def _generate_demand_deterministic(self, period=None): """Generate deterministic demand. @@ -576,7 +650,7 @@ def lead_time_demand_distribution(self, lead_time): """Return lead-time demand distribution, as a ``scipy.stats.rv_continuous`` or ``scipy.stats.rv_discrete`` object. - .. note:: For 'UC', 'UD', and 'CD' demands, this method calculates the lead-time + .. note:: For 'UC', 'UD', 'NB', and 'CD' demands, this method calculates the lead-time demand distribution as the sum of ``lead_time`` independent random variables. Therefore, the method requires ``lead_time`` to be an integer for these distributions. If it is not, it raises a ``ValueError``. @@ -594,12 +668,12 @@ def lead_time_demand_distribution(self, lead_time): Raises ------ ValueError - If ``type`` is 'UC', 'UD', or 'CD' and ``lead_time`` is not an integer. + If ``type`` is 'UC', 'UD', 'NB', or 'CD' and ``lead_time`` is not an integer. """ # Check whether lead_time is an integer. - if self.type in ('UC', 'UD', 'CD') and not is_integer(lead_time): - raise ValueError("lead_time must be an integer for 'UC', 'UD', or 'CD' demand") + if self.type in ('UC', 'UD', 'NB', 'CD') and not is_integer(lead_time): + raise ValueError("lead_time must be an integer for 'UC', 'UD', 'NB', or 'CD' demand") # Get distribution object. if self.type == 'N': @@ -610,17 +684,24 @@ def lead_time_demand_distribution(self, lead_time): distribution = sum_of_continuous_uniforms_distribution(lead_time, self.lo, self.hi) elif self.type == 'UD': distribution = sum_of_discrete_uniforms_distribution(lead_time, self.lo, self.hi) + elif self.type == 'NB': + # Build probability list. + min_demand = 0 + max_demand = int(self.demand_distribution.ppf(0.9999)) + prob = [self.demand_distribution.pmf(d) for d in range(min_demand, max_demand + 1)] + prob = [prob[d] / sum(prob) for d in range(min_demand, max_demand + 1)] + distribution = sum_of_discretes_distribution(lead_time, min_demand, max_demand, prob) elif self.type == 'CD': # Convert probability list to a list with 0 values for x values not in support. min_demand = min(self.demand_list) max_demand = max(self.demand_list) - p = [] + prob = [] for x in range(min_demand, max_demand + 1): if x in self.demand_list: - p.append(self.probabilities[self.demand_list.index(x)]) + prob.append(self.probabilities[self.demand_list.index(x)]) else: - p.append(0) - distribution = sum_of_discretes_distribution(lead_time, min_demand, max_demand, p) + prob.append(0) + distribution = sum_of_discretes_distribution(lead_time, min_demand, max_demand, prob) else: return None diff --git a/src/stockpyl/finite_horizon.py b/src/stockpyl/finite_horizon.py index 2c5c281..3969419 100644 --- a/src/stockpyl/finite_horizon.py +++ b/src/stockpyl/finite_horizon.py @@ -45,13 +45,16 @@ def finite_horizon_dp( terminal_stockout_cost, purchase_cost, fixed_cost, - demand_mean, - demand_sd, + demand_mean=None, + demand_sd=None, + demand_source=None, discount_factor=1.0, initial_inventory_level=0.0, trunc_tol=0.02, d_spread=4, - s_spread=5): + s_spread=5, + oul_matrix=None, + x_range=None): """ Solve the finite-horizon inventory optimization problem, with or without fixed costs, minimizing the expected discounted cost over the time horizon, @@ -81,7 +84,10 @@ def finite_horizon_dp( ``terminal_stockout_cost``, :math:`x^+ = \\max\\{x,0\\}`, and :math:`x^- = \\max\\{-x,0\\}`. - Demands are assumed to be normally distributed. + Either ``demand_mean`` and ``demand_sd`` must be + provided (in which case the demand will be assumed to be normally distributed), + or ``demand_source`` must be provided (in which case the demand will follow the + distribution specified in ``demand_source``). Most parameters may be given as a singleton or a list. If given as a singleton, the parameter will be assumed to be the same in every time @@ -106,6 +112,10 @@ def finite_horizon_dp( Raises warnings if the discretization and truncation settings are likely to lead to suboptimal results. (See details in the code.) + + If ``oul_matrix`` is provided as an input, the function uses it (with discretization + specified by ``x_range`` input) instead of optimizing over the order-up-to levels. + If ``oul_matrix`` is provided, then ``x_range`` must be provided as well. .. note:: This function executes faster than straightforward implementation because it calculates :math:`H_t(y)` (as defined in (4.87)) for each :math:`t` and :math:`y`, @@ -129,10 +139,13 @@ def finite_horizon_dp( Purchase cost per item. [:math:`c`] fixed_cost : float or list Fixed cost per order. [:math:`K`] - demand_mean : float or list - Demand mean per period. [:math:`\\mu`] - demand_sd : float or list - Demand standard deviation per period. [:math:`\\sigma`] + demand_mean : float or list, optional + Demand mean per period. Ignored if ``demand_source`` is not ``None``. [:math:`\\mu`] + demand_sd : float or list, optional + Demand standard deviation per period. Ignored if ``demand_source`` is not ``None``. [:math:`\\sigma`] + demand_source : |class_demand_source|, optional + A |class_demand_source| object describing the demand distribution. Required if + ``demand_mean`` and ``demand_standard_deviation`` are ``None``. discount_factor : float or list Discount factor, in :math:`(0,1]`. Default = 1. [:math:`\\gamma`] initial_inventory_level : float @@ -146,6 +159,13 @@ def finite_horizon_dp( Number of standard deviations around mean to consider for demand truncation. s_spread : float Number of (demand) standard deviations around :math:`(s,S)` estimates to consider. + oul_matrix : ndarray, optional + User-specified matrix of order-up-to levels; ``oul_matrix[t,x]`` = optimal + order-up-to level in period :math:`t` if we begin period :math:`t` + with :math:`IL_t = x`. ``t=0`` is ignored. If provided, then ``x_range`` must also be provided. + x_range : ndarray, optional + User-specified list of :math:`x`-values used in the discretization, i.e., + indices of the columns of ``cost_matrix`` and ``oul_matrix``. Returns ------- @@ -163,9 +183,9 @@ def finite_horizon_dp( oul_matrix : ndarray Matrix of order-up-to levels; ``oul_matrix[t,x]`` = optimal order-up-to level in period :math:`t` if we begin period :math:`t` - with :math:`IL_t = x`. + with :math:`IL_t = x`. ``t=0`` is ignored. x_range : list - Vector of :math:`x`-values used in the discretization, i.e., + List of :math:`x`-values used in the discretization, i.e., indices of the columns of ``cost_matrix`` and ``oul_matrix``. Raises @@ -175,10 +195,16 @@ def finite_horizon_dp( ValueError If ``holding_cost``, ``stockout_cost``, ``purchase_cost``, ``fixed_cost``, ``demand_mean``, or ``demand_sd`` < 0 for any time period. + ValueError + If ``demand_mean`` or ``demand_standard_deviation`` is ``None`` and + ``demand_source`` is ``None``. ValueError If ``discount_factor`` <= 0 or > 1 for any time period. ValueError If ``terminal_holding_cost`` < 0 or ``terminal_stockout_cost`` < 0. + ValueError + If ``oul_matrix`` is provided but ``x_range`` is not, or ``x_range`` does not contain all + values in ``oul_matrix``. **Equation Used** (equation (4.66)): @@ -261,6 +287,16 @@ def finite_horizon_dp( discount_factor = np.array(ensure_list_for_time_periods(discount_factor, num_periods, var_name="discount_factor")) demand_mean = np.array(ensure_list_for_time_periods(demand_mean, num_periods, var_name="mean")) demand_sd = np.array(ensure_list_for_time_periods(demand_sd, num_periods, var_name="demand_sd")) + demand_source = np.array(ensure_list_for_time_periods(demand_source, num_periods, var_name="demand_source")) + + # Build demand_source, if not provided; and get mean and SD, if demand_source is provided. + # After this step, demand_mean[t], demand_sd[t], and demand_source[t] will be reliably set for all t. + for t in range(1, num_periods + 1): + if demand_source[t] is None: + demand_source[t] = DemandSource(type='N', mean=demand_mean[t], standard_deviation=demand_sd[t]) + else: + demand_mean[t] = demand_source[t].mean or demand_source[t].demand_distribution.mean() + demand_sd[t] = demand_source[t].standard_deviation or demand_source[t].demand_distribution.std() # Validate other parameters. if not np.all(np.array(holding_cost[1:]) >= 0): raise ValueError("holding_cost must be non-negative") @@ -271,7 +307,9 @@ def finite_horizon_dp( not np.all(np.array(discount_factor[1:]) <= 1): raise ValueError("discount_factor must be <0 and <=1") if not np.all(np.array(demand_mean[1:]) >= 0): raise ValueError("demand_mean must be non-negative") if not np.all(np.array(demand_sd[1:]) >= 0): raise ValueError("demand_sd must be non-negative") - + if (demand_mean is None or demand_sd is None) and demand_source is None: + raise ValueError("You must provide either demand_mean and demand_standard_deviation, or demand_source") + # Determine truncation for D: mu +/- d_spread * sigma (but no negative values) # (accounting appropriately for variations among periods) d_min = int(max(0, round(np.min(demand_mean[1:]) - d_spread * np.max(demand_sd[1:])))) @@ -282,12 +320,13 @@ def finite_horizon_dp( # raise warning if > trunc_tol for any t. (prob is an array.) # Ignore entry 0 (o/w divide-by-0) but then add back an entry for 0 to keep # things consistent. - prob = norm.cdf(d_min, demand_mean[1:], demand_sd[1:]) + \ - (1 - norm.cdf(d_max, demand_mean[1:], demand_sd[1:])) + prob = [demand_source[t].demand_distribution.cdf(d_min) + \ + (1 - demand_source[t].demand_distribution.cdf(d_max)) for t in range(1, num_periods + 1)] + # prob = norm.cdf(d_min, demand_mean[1:], demand_sd[1:]) + \ + # (1 - norm.cdf(d_max, demand_mean[1:], demand_sd[1:])) prob = np.append([0], prob) if np.any(prob > trunc_tol): - warnings.warn("Total probability of demand outside demand-truncation range exceeds trunc_tol for at least one " - "period.") + warnings.warn("Total probability of demand outside demand-truncation range exceeds trunc_tol for at least one period.") # Calculate alpha (= p/(p+h)) in each period. alpha = np.zeros(num_periods+1) @@ -313,15 +352,33 @@ def finite_horizon_dp( Q = [economic_order_quantity_with_backorders(fixed_cost[t], holding_cost[t], stockout_cost[t], demand_mean[t])[0] for t in range(1, num_periods+1)] - # Determine initial truncation for x: - # - estimate s = newsvendor solution, S = s + EOQB - # - then subtract s_spread * sigma from s and add s_spread * sigma to S - # - then, subtract mu + d_spread * sigma from s to account for demand - # (accounting appropriately for variations among periods, and adjusting - # period T to include terminal costs) - x_min = int(round(np.min(nv[1:]) - np.max(demand_mean[1:]) - np.max(demand_sd[1:]) * (s_spread + d_spread))) - x_max = int(round(np.max(nv[1:]) + np.max(Q[1:]) + np.max(demand_sd[1:]) * s_spread)) - x_range = np.array(range(x_min, x_max+1)) + # Determine initial truncation for x. + # Did user specify oul_matrix? + if oul_matrix is not None: + user_provided_oul_matrix = True + # Make sure x_range is also provided and contains all OULs. + if x_range is None: + raise ValueError('If oul_matrix is provided, then x_range must also be provided.') + elif (np.amax(np.amax(oul_matrix)) not in x_range) or \ + (np.amin(np.amin(oul_matrix)) not in x_range): + raise ValueError('x_range must contain all oul_matrix values.') + else: + x_min = int(np.amin(x_range)) + x_max = int(np.amax(x_range)) + elif x_range is not None: + user_provided_oul_matrix = False + x_min = int(np.amin(x_range)) + x_max = int(np.amax(x_range)) + else: + user_provided_oul_matrix = False + # - estimate s = newsvendor solution, S = s + EOQB + # - then subtract s_spread * sigma from s and add s_spread * sigma to S + # - then, subtract mu + d_spread * sigma from s to account for demand + # (accounting appropriately for variations among periods, and adjusting + # period T to include terminal costs) + x_min = int(round(np.min(nv[1:]) - np.max(demand_mean[1:]) - np.max(demand_sd[1:]) * (s_spread + d_spread))) + x_max = int(round(np.max(nv[1:]) + np.max(Q[1:]) + np.max(demand_sd[1:]) * s_spread)) + x_range = np.array(range(x_min, x_max+1)) # Note: # - to get x value from index i, use x_range[i] @@ -329,6 +386,7 @@ def finite_horizon_dp( # Example: x_range = 10:20; then x_range[3] = 13 and 13 - x_min = 3. # Pre-calculate standard normal loss function values. + # TODO: deal with this min_z, max_z, step_z = -4, 4, 0.01 loss_table = lf.standard_normal_loss_dict(start=min_z, stop=max_z, step=step_z) comp_table = lf.standard_normal_loss_dict(start=min_z, stop=max_z, step=step_z, complementary=True) @@ -341,7 +399,8 @@ def finite_horizon_dp( reorder_points = [0] * (num_periods+1) order_up_to_levels = [0] * (num_periods+1) cost_matrix = np.zeros((num_periods+2, len(x_range))) - oul_matrix = np.zeros((num_periods+1, len(x_range))) + if not user_provided_oul_matrix: + oul_matrix = np.zeros((num_periods+1, len(x_range))) H = np.zeros((num_periods+1, len(x_range))) # Initialize abort (will be set to true if range is not large enough) @@ -360,8 +419,13 @@ def finite_horizon_dp( for t in range(num_periods, 0, -1): # Calculate probability vector for demand. - prob = norm.cdf(d_range + 0.5, demand_mean[t], demand_sd[t]) - \ - norm.cdf(d_range - 0.5, demand_mean[t], demand_sd[t]) + if demand_source[t].is_discrete: + prob = [demand_source[t].demand_distribution.pmf(d) for d in d_range] + else: + prob = [demand_source[t].demand_distribution.cdf(d + 0.5) - \ + demand_source[t].demand_distribution.cdf(d - 0.5) for d in d_range] + # prob = norm.cdf(d_range + 0.5, demand_mean[t], demand_sd[t]) - \ + # norm.cdf(d_range - 0.5, demand_mean[t], demand_sd[t]) # Calculate H_t(y). for y in range(x_min, x_max + 1): @@ -370,21 +434,20 @@ def finite_horizon_dp( cost = 0.0 # TODO: this needs to be an option; and add tests for it - # Calculate n(y) and \bar{n}(y). - # if False: - z = (y - demand_mean[t]) / demand_sd[t] - if z < min_z: - n = demand_mean[t] - y - n_bar = 0 - elif z > max_z: - n = 0 - n_bar = y - demand_mean[t] + if False: + z = (y - demand_mean[t]) / demand_sd[t] + if z < min_z: + n = demand_mean[t] - y + n_bar = 0 + elif z > max_z: + n = 0 + n_bar = y - demand_mean[t] + else: + n = nearest_dict_value(z, loss_table) * demand_sd[t] + n_bar = nearest_dict_value(z, comp_table) * demand_sd[t] else: - n = nearest_dict_value(z, loss_table) * demand_sd[t] - n_bar = nearest_dict_value(z, comp_table) * demand_sd[t] - # else: -# n, n_bar = lf.normal_loss(y, demand_mean[t], demand_sd[t]) + n, n_bar = lf.normal_loss(y, demand_mean[t], demand_sd[t]) # Calculate current-period (newsvendor) cost. cost += holding_cost[t] * n_bar + stockout_cost[t] * n @@ -418,8 +481,16 @@ def finite_horizon_dp( # cost found for this t and x). best_cost = float("inf") + # Did user provide oul_matrix? + if user_provided_oul_matrix: + # Only consider y equal to value specified in oul_matrix. + y_range = [oul_matrix[t, x - x_min]] + else: + # Consider y = x, ..., x_max. + y_range = list(range(x, x_max + 1)) + # Loop through possible y values. - for y in range(x, x_max + 1): + for y in y_range: # Initialize cost. cost = 0.0 @@ -429,7 +500,7 @@ def finite_horizon_dp( cost += purchase_cost[t] * (y - x) + fixed_cost[t] # Add H_t(y). - cost += H[t, y - x_min] + cost += H[t, int(y - x_min)] # Compare cost to current best. if cost < best_cost: @@ -439,12 +510,16 @@ def finite_horizon_dp( # If this is the largest y in range (and range has more # than one element), abort and increase upper range. if y == x_max and x < x_max: - warnings.warn('Cost is still decreasing at upper end of y range; increasing upper range ' - 'and retrying: t = {:d}, x = {:d}, y = {:d}.'.format(t, x, y)) - abort = True - x_max = x_max * 2 - x_range = np.array(range(x_min, x_max + 1)) - break + if user_provided_oul_matrix: + warnings.warn('Cost is still decreasing at upper end of y range; did not increase upper range ' + 'because oul_matrix was provided: t = {:d}, x = {:d}, y = {:d}.'.format(t, x, y)) + else: + warnings.warn('Cost is still decreasing at upper end of y range; increasing upper range ' + 'and retrying: t = {:d}, x = {:d}, y = {:d}.'.format(t, x, y)) + abort = True + x_max = x_max * 2 + x_range = np.array(range(x_min, x_max + 1)) + break # If abort flag was set in for-y loop, exit for-x loop. if abort: @@ -472,7 +547,9 @@ def finite_horizon_dp( # P(s - D < x_min) > trunc_tol). (Issue warning in each period # in which there is a violation.) prob_demand_below_range = 1 - \ - norm.cdf(reorder_points[t] - x_min, demand_mean[t], demand_sd[t]) + demand_source[t].demand_distribution.cdf(reorder_points[t] - x_min) + # prob_demand_below_range = 1 - \ + # norm.cdf(reorder_points[t] - x_min, demand_mean[t], demand_sd[t]) if prob_demand_below_range > trunc_tol: warnings.warn('Probability that demand brings IL below x-truncation range exceeds trunc_tol: t = {:d}, prob = {:f}'.format(t, prob_demand_below_range)) diff --git a/tests/test_demand_source.py b/tests/test_demand_source.py index dfdf633..61ece79 100644 --- a/tests/test_demand_source.py +++ b/tests/test_demand_source.py @@ -4,7 +4,7 @@ # import numpy as np # from scipy.stats import norm # from scipy.stats import poisson -# from scipy.stats import lognorm +from scipy.stats import nbinom from stockpyl.demand_source import * from stockpyl.instances import load_instance @@ -73,6 +73,11 @@ def test_true(self): eq = ds1 == ds2 self.assertTrue(eq) + ds1 = DemandSource(type='NB', n=50, p=0.2) + ds2 = DemandSource(type='NB', n=50, p=0.2) + eq = ds1 == ds2 + self.assertTrue(eq) + def test_false(self): """Test that DemandSource.__eq__() correctly returns False when objects are not equal. """ @@ -108,6 +113,11 @@ def test_false(self): eq = ds1 == ds2 self.assertFalse(eq) + ds1 = DemandSource(type='NB', n=50, p=0.2) + ds2 = DemandSource(type='NB', n=50, p=0.3) + eq = ds1 == ds2 + self.assertFalse(eq) + class TestInitialize(unittest.TestCase): @classmethod def set_up_class(cls): @@ -134,6 +144,84 @@ def test_initialize(self): ds1.initialize() self.assertEqual(ds1, ds2) + ds1 = DemandSource(type='NB', n=10, p=0.1) + ds2 = DemandSource() + ds1.initialize() + self.assertEqual(ds1, ds2) + +class TestMean(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestMean', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestMean', 'tear_down_class()') + + def test_set_explicitly(self): + """Test that standard_deviation property correctly returns mean if it is set explicitly. + """ + print_status('TestMean', 'test_copy()') + + ds = DemandSource(type='N', mean=50, standard_deviation=2) + self.assertEqual(ds.mean, 50) + + def test_set_implicitly(self): + """Test that standard_deviation property correctly returns mean if it is set implicitly via + the demand distribution. + """ + print_status('TestMean', 'test_copy()') + + ds = DemandSource(type='NB', n=20, p=0.1) + self.assertEqual(ds.mean, 20 * 0.9 / 0.1) + + ds = DemandSource(type='UC', lo=0, hi=10) + self.assertEqual(ds.mean, 5) + + ds = DemandSource(type='CD', demand_list=[0, 1, 2, 3], probabilities=[0.25, 0.25, 0.25, 0.25]) + self.assertEqual(ds.mean, 1.5) + + +class TestStandardDeviation(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestStandardDeviation', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestStandardDeviation', 'tear_down_class()') + + def test_set_explicitly(self): + """Test that standard_deviation property correctly returns SD if it is set explicitly. + """ + print_status('TestStandardDeviation', 'test_copy()') + + ds = DemandSource(type='N', mean=50, standard_deviation=2) + self.assertEqual(ds.standard_deviation, 2) + + def test_set_implicitly(self): + """Test that standard_deviation property correctly returns SD if it is set implicitly via + the demand distribution. + """ + print_status('TestStandardDeviation', 'test_copy()') + + ds = DemandSource(type='P', mean=100) + self.assertEqual(ds.standard_deviation, 10) + + ds = DemandSource(type='NB', n=20, p=0.1) + self.assertAlmostEqual(ds.standard_deviation, np.sqrt(20 * 0.9 / (0.1**2))) + + ds = DemandSource(type='UC', lo=0, hi=10) + self.assertAlmostEqual(ds.standard_deviation, np.sqrt(100 / 12)) + + ds = DemandSource(type='CD', demand_list=[0, 1, 2, 3], probabilities=[0.25, 0.25, 0.25, 0.25]) + self.assertAlmostEqual(ds.standard_deviation, np.sqrt(15/12)) + + class TestToDict(unittest.TestCase): @classmethod def set_up_class(cls): @@ -164,7 +252,9 @@ def test_normal(self): 'demand_list': None, 'probabilities': None, 'lo': None, - 'hi': None + 'hi': None, + 'n': None, + 'p': None } self.assertDictEqual(ds_dict, correct_dict) @@ -186,7 +276,9 @@ def test_uniform(self): 'demand_list': None, 'probabilities': None, 'lo': 100, - 'hi': 200 + 'hi': 200, + 'n': None, + 'p': None } self.assertDictEqual(ds_dict, correct_dict) @@ -211,7 +303,9 @@ def test_custom_discrete(self): 'demand_list': [0, 1, 2, 3], 'probabilities': [0.25, 0.1, 0.5, 0.15], 'lo': None, - 'hi': None + 'hi': None, + 'n': None, + 'p': None } self.assertDictEqual(ds_dict, correct_dict) @@ -220,6 +314,31 @@ def test_custom_discrete(self): probabilities = [0.25] * 4 self.assertDictEqual(ds_dict, correct_dict) + def test_negative_binomial(self): + """Test that to_dict() correctly converts a negative binomial DemandSource object to dict. + """ + print_status('TestToDict', 'test_negative_binomial()') + + demand_source = DemandSource() + demand_source.type = 'NB' + demand_source.n = 20 + demand_source.p = 0.1 + ds_dict = demand_source.to_dict() + correct_dict = { + 'type': 'NB', + 'round_to_int': None, + 'mean': None, + 'standard_deviation': None, + 'demand_list': None, + 'probabilities': None, + 'lo': None, + 'hi': None, + 'n': 20, + 'p': 0.1 + } + self.assertDictEqual(ds_dict, correct_dict) + + class TestFromDict(unittest.TestCase): @classmethod @@ -245,7 +364,9 @@ def test_normal(self): 'demand_list': None, 'probabilities': None, 'lo': None, - 'hi': None + 'hi': None, + 'n': None, + 'p': None } ds = DemandSource.from_dict(the_dict) @@ -270,7 +391,9 @@ def test_uniform(self): 'demand_list': None, 'probabilities': None, 'lo': 100, - 'hi': 200 + 'hi': 200, + 'n': None, + 'p': None } ds = DemandSource.from_dict(the_dict) @@ -297,7 +420,9 @@ def test_custom_discrete(self): 'demand_list': demand_list, 'probabilities': probabilities, 'lo': None, - 'hi': None + 'hi': None, + 'n': None, + 'p': None } ds = DemandSource.from_dict(the_dict) @@ -313,7 +438,34 @@ def test_custom_discrete(self): probabilities = [0.25] * 4 self.assertEqual(ds, correct_ds) - def test_missing_values(self): + def test_negative_binomial(self): + """Test that from_dict() correctly converts a negative binomial DemandSource object from a dict. + """ + print_status('TestFromDict', 'test_negative_binomial()') + + the_dict = { + 'type': 'NB', + 'round_to_int': None, + 'mean': None, + 'standard_deviation': None, + 'demand_list': None, + 'probabilities': None, + 'lo': None, + 'hi': None, + 'n': 20, + 'p': 0.1 + } + ds = DemandSource.from_dict(the_dict) + + correct_ds = DemandSource() + correct_ds.type = 'NB' + correct_ds.n = 20 + correct_ds.p = 0.1 + + self.assertEqual(ds, correct_ds) + + +def test_missing_values(self): """Test that from_dict() correctly fills missing attribute values to their defaults. """ print_status('TestFromDict', 'test_missing_values()') @@ -443,6 +595,33 @@ def test_uniform_continuous(self): with self.assertRaises(AttributeError): demand_source.validate_parameters() + def test_negative_binomial(self): + """Test that TestValidateParameters correctly raises errors on invalid parameters + for negative binomial distribution. + """ + print_status('TestValidateParameters', 'test_negative_binomial()') + + demand_source = DemandSource() + demand_source.type = 'NB' + demand_source.n = -100 + demand_source.p = 0.1 + with self.assertRaises(AttributeError): + demand_source.validate_parameters() + + demand_source = DemandSource() + demand_source.type = 'NB' + demand_source.n = 20 + demand_source.p = -0.1 + with self.assertRaises(AttributeError): + demand_source.validate_parameters() + + demand_source = DemandSource() + demand_source.type = 'NB' + demand_source.n = 20 + demand_source.p = 2.1 + with self.assertRaises(AttributeError): + demand_source.validate_parameters() + def test_deterministic(self): """Test that TestValidateParameters correctly raises errors on invalid parameters for deterministic distribution. @@ -568,6 +747,20 @@ def test_uniform_continuous(self): demand_source_str = demand_source.__repr__() self.assertEqual(demand_source_str, "DemandSource(UC: lo=50.00, hi=80.00)") + def test_negative_binomial(self): + """Test that DemandSource.__repr__() correctly returns demand source string + when type is 'NB'. + """ + print_status('TestDemandSourceRepr', 'test_negative_binomial()') + + demand_source = DemandSource() + demand_source.type = 'NB' + demand_source.n = 20 + demand_source.p = 0.1 + + demand_source_str = demand_source.__repr__() + self.assertEqual(demand_source_str, "DemandSource(NB: n=20, p=0.10)") + def test_deterministic(self): """Test that DemandSource.__repr__() correctly returns demand source string when type is 'D'. @@ -744,6 +937,25 @@ def test_uniform_continuous(self): self.assertAlmostEqual(sigma, 50 / math.sqrt(12)) self.assertEqual(z, 92.5) + def test_negative_binomial(self): + """Test demand_distribution() for negative binomial demands. + """ + print_status('TestDemandDistribution', 'test_negative_binomial()') + + demand_source = DemandSource() + demand_source.type = 'NB' + demand_source.n = 5 + demand_source.p = 0.1 + + distribution = demand_source.demand_distribution + mu = distribution.mean() + sigma = distribution.std() + z = distribution.ppf(0.85) + + self.assertEqual(mu, 45) + self.assertAlmostEqual(sigma, np.sqrt(5 * 0.9 / (0.1**2))) + self.assertEqual(z, 67) + def test_custom_discrete(self): """Test demand_distribution() for custom discrete demands. """ @@ -843,6 +1055,22 @@ def test_uniform_discrete(self): F = demand_source.cdf(80) self.assertEqual(F, 0.6078431372549019) + def test_negative_binomial(self): + """Test that cdf() returns correct values for negative binomial demands. + """ + print_status('TestCDF', 'test_negative_binomial()') + + demand_source = DemandSource() + demand_source.type = 'NB' + demand_source.n = 5 + demand_source.p = 0.1 + + F = demand_source.cdf(55) + self.assertEqual(F, 0.7290417418745389) + + F = demand_source.cdf(80) + self.assertEqual(F, 0.935675210417672) + def test_custom_discrete(self): """Test that cdf() returns correct values for custom discrete demands. @@ -952,6 +1180,30 @@ def test_uniform_continuous(self): with self.assertRaises(ValueError): ltd_dist = demand_source.lead_time_demand_distribution(5.5) + def test_negative_binomial(self): + """Test lead_time_demand_distribution() for negative binomial demands. + """ + print_status('TestLeadTimeDemandDistribution', 'test_negative_binomial()') + + demand_source = DemandSource() + demand_source.type = 'NB' + demand_source.n = 5 + demand_source.p = 0.1 + + min_demand = 0 + max_demand = int(nbinom(5, 0.1).ppf(0.9999)) + prob = [nbinom(5, 0.1).pmf(d) for d in range(min_demand, max_demand + 1)] + prob = [prob[d] / sum(prob) for d in range(min_demand, max_demand + 1)] + the_distribution = sum_of_discretes_distribution(4, min_demand, max_demand, prob) + + ltd_dist = demand_source.lead_time_demand_distribution(4) + self.assertAlmostEqual(ltd_dist.mean(), the_distribution.mean()) + self.assertAlmostEqual(ltd_dist.std(), the_distribution.std()) + self.assertEqual(ltd_dist.ppf(0.85), the_distribution.ppf(0.85)) + + with self.assertRaises(ValueError): + ltd_dist = demand_source.lead_time_demand_distribution(5.5) + def test_custom_discrete(self): """Test lead_time_demand_distribution() for custom discrete demands. """ diff --git a/tests/test_finite_horizon.py b/tests/test_finite_horizon.py index 7cdbfc2..f0feaac 100644 --- a/tests/test_finite_horizon.py +++ b/tests/test_finite_horizon.py @@ -106,6 +106,7 @@ def test_problem_4_29(self): instance['fixed_cost'], instance['demand_mean'], instance['demand_sd'], + None, instance['discount_factor'], instance['initial_inventory_level'] ) @@ -136,7 +137,7 @@ def test_problem_4_29_with_T_arrays(self): reorder_points, order_up_to_levels, total_cost, cost_matrix, oul_matrix, \ x_range = finite_horizon.finite_horizon_dp(num_periods, holding_cost, stockout_cost, instance['terminal_holding_cost'], instance['terminal_stockout_cost'], - purchase_cost, fixed_cost, demand_mean, demand_sd, discount_factor, + purchase_cost, fixed_cost, demand_mean, demand_sd, None, discount_factor, instance['initial_inventory_level']) # Test against MATLAB solution. @@ -165,7 +166,7 @@ def test_problem_4_29_with_T1_arrays(self): reorder_points, order_up_to_levels, total_cost, cost_matrix, oul_matrix, \ x_range = finite_horizon.finite_horizon_dp(num_periods, holding_cost, stockout_cost, instance['terminal_holding_cost'], instance['terminal_stockout_cost'], - purchase_cost, fixed_cost, demand_mean, demand_sd, discount_factor, + purchase_cost, fixed_cost, demand_mean, demand_sd, None, discount_factor, instance['initial_inventory_level']) # Test against MATLAB solution. @@ -193,7 +194,7 @@ def test_problem_4_29_with_mixed_inputs(self): reorder_points, order_up_to_levels, total_cost, cost_matrix, oul_matrix, \ x_range = finite_horizon.finite_horizon_dp(num_periods, holding_cost, stockout_cost, instance['terminal_holding_cost'], instance['terminal_stockout_cost'], - instance['purchase_cost'], instance['fixed_cost'], demand_mean, demand_sd, discount_factor, + instance['purchase_cost'], instance['fixed_cost'], demand_mean, demand_sd, None, discount_factor, instance['initial_inventory_level']) # Test against MATLAB solution. @@ -220,6 +221,7 @@ def test_problem_4_30(self): instance['fixed_cost'], instance['demand_mean'], instance['demand_sd'], + None, instance['discount_factor'], instance['initial_inventory_level'] ) @@ -248,6 +250,7 @@ def test_bad_parameters(self): instance['fixed_cost'], instance['demand_mean'], instance['demand_sd'], + None, instance['discount_factor'], instance['initial_inventory_level'] ) @@ -264,6 +267,7 @@ def test_bad_parameters(self): instance['fixed_cost'], instance['demand_mean'], instance['demand_sd'], + None, instance['discount_factor'], instance['initial_inventory_level'] ) @@ -280,6 +284,7 @@ def test_bad_parameters(self): instance['fixed_cost'], instance['demand_mean'], instance['demand_sd'], + None, instance['discount_factor'], instance['initial_inventory_level'] ) @@ -298,6 +303,7 @@ def test_bad_parameters(self): instance['fixed_cost'], instance['demand_mean'], instance['demand_sd'], + None, instance['discount_factor'], instance['initial_inventory_level'] ) @@ -316,6 +322,7 @@ def test_bad_parameters(self): instance['fixed_cost'], instance['demand_mean'], instance['demand_sd'], + None, discount_factor, instance['initial_inventory_level'] ) @@ -344,7 +351,7 @@ def test_instance_1(self): reorder_points, order_up_to_levels, total_cost, cost_matrix, oul_matrix, \ x_range = finite_horizon.finite_horizon_dp(num_periods, holding_cost, stockout_cost, terminal_holding_cost, terminal_stockout_cost, - purchase_cost, fixed_cost, demand_mean, demand_sd, discount_factor, + purchase_cost, fixed_cost, demand_mean, demand_sd, None, discount_factor, initial_inventory_level) # Test against MATLAB solution. From f28d7c71c122f33985bf800f5a8fbe74c07d129e Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Wed, 27 Mar 2024 17:14:53 -0400 Subject: [PATCH 04/94] More unit tests for supply_chain_node for multi-product --- src/stockpyl/supply_chain_node.py | 2 +- tests/test_supply_chain_node.py | 159 ++++++++++++++++++++++++++++-- 2 files changed, 154 insertions(+), 7 deletions(-) diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 006904c..714618c 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -416,7 +416,7 @@ def neighbor_indices(self): @property def is_multiproduct(self): """Returns ``True`` if the node handles multiple products, ``False`` otherwise. Read only.""" - return (self.products and (len(self.products) > 1)) + return (self.products is not None and (len(self.products) > 1)) @property def product_indices(self): diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 947fb1e..08a9dc8 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -214,6 +214,23 @@ def test_4_node_owmr(self): self.assertEqual(desc[2], []) self.assertEqual(desc[3], []) + def test_multi_product_network7(self): + """Test descendants for 7-node multi-product system. + """ + print_status('TestDescendants', 'test_multi_product_network7()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + desc = {i: network.get_node_from_index(i).descendants for i in network.node_indices} + + self.assertEqual(desc[0], []) + self.assertEqual(desc[1], []) + self.assertEqual(desc[2], []) + self.assertEqual(desc[3], [network.get_node_from_index(0)]) + self.assertEqual(desc[4], [network.get_node_from_index(0), network.get_node_from_index(1)]) + self.assertEqual(desc[5], [network.get_node_from_index(1), network.get_node_from_index(2)]) + self.assertEqual(desc[6], [network.get_node_from_index(2)]) + class TestAncestors(unittest.TestCase): @classmethod @@ -266,6 +283,23 @@ def test_4_node_owmr(self): self.assertEqual(anc[2], [nodes[0]]) self.assertEqual(anc[3], [nodes[0]]) + def test_multi_product_network7(self): + """Test ancestors for 7-node multi-product system. + """ + print_status('TestAncestors', 'test_multi_product_network7()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + anc = {i: network.get_node_from_index(i).ancestors for i in network.node_indices} + + self.assertEqual(anc[0], [network.get_node_from_index(3), network.get_node_from_index(4)]) + self.assertEqual(anc[1], [network.get_node_from_index(4), network.get_node_from_index(5)]) + self.assertEqual(anc[2], [network.get_node_from_index(5), network.get_node_from_index(6)]) + self.assertEqual(anc[3], []) + self.assertEqual(anc[4], []) + self.assertEqual(anc[5], []) + self.assertEqual(anc[6], []) + class TestIsMultiProduct(unittest.TestCase): @classmethod @@ -326,6 +360,24 @@ def test_multi(self): self.assertTrue(network.nodes[0].is_multiproduct) self.assertTrue(network.nodes[1].is_multiproduct) + def test_multi_product_network7(self): + """Test that is_multiproduct works correctly for 7-node multi-product instance. + """ + print_status('TestIsMultiProduct', 'test_multi_product_network7()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + self.assertFalse(network.get_node_from_index(0).is_multiproduct) + self.assertFalse(network.get_node_from_index(1).is_multiproduct) + self.assertTrue(network.get_node_from_index(2).is_multiproduct) + self.assertFalse(network.get_node_from_index(3).is_multiproduct) + self.assertFalse(network.get_node_from_index(4).is_multiproduct) + self.assertTrue(network.get_node_from_index(5).is_multiproduct) + self.assertFalse(network.get_node_from_index(6).is_multiproduct) + + +## STOPPED + class TestGetProductFromIndex(unittest.TestCase): @classmethod @@ -350,6 +402,20 @@ def test_basic(self): self.assertEqual(node.get_product_from_index(0).index, 0) self.assertEqual(node.get_product_from_index(1).index, 1) + def test_multi_product_network7(self): + """Test 7-node multiproduct instance. + """ + print_status('TestGetProductFromIndex', 'test_multi_product_network7()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + self.assertIsNone(network.get_node_from_index(0).get_product_from_index(None)) + self.assertIsNone(network.get_node_from_index(0).get_product_from_index(44)) + self.assertEqual(network.get_node_from_index(1).get_product_from_index(1).index, 1) + self.assertEqual(network.get_node_from_index(2).get_product_from_index(2).index, 2) + self.assertEqual(network.get_node_from_index(2).get_product_from_index(3).index, 3) + self.assertIsNone(network.get_node_from_index(2).get_product_from_index(44)) + class TestSetGetBillOfMaterials(unittest.TestCase): @classmethod @@ -413,6 +479,30 @@ def test_multi_product(self): self.assertEqual(network.nodes[0].get_bill_of_materials(11, 3, 4), 6) self.assertEqual(network.nodes[0].get_bill_of_materials(11, 3, 5), 16) + def test_multi_product_network7(self): + """Test that set_ and get_bill_of_materials() work correctly on 7-node multi-product instance. + """ + print_status('TestSetGetBillOfMaterials', 'test_multi_product_network7()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 3, None), 4) + self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 4, None), 1) + self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 5, 4), 2.6) + self.assertEqual(network.get_node_from_index(2).get_bill_of_materials(3, 5, 5), 6) + self.assertEqual(network.get_node_from_index(2).get_bill_of_materials(3, None, None), 5) + self.assertEqual(network.get_node_from_index(6).get_bill_of_materials(None, None, None), 1) + + network.get_node_from_index(0).set_bill_of_materials(500, None, 6, None) + network.get_node_from_index(0).set_bill_of_materials(600, None, 5, 4) + network.get_node_from_index(1).set_bill_of_materials(700, 1, 6, None) + network.get_node_from_index(1).set_bill_of_materials(800, 1, None, None) + + self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 6, None), 500) + self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 5, 4), 600) + self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 6, None), 700) + self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, None, None), 800) + def test_default_value_1node(self): """Test that get_bill_of_materials() works correctly in a single-node system with a single product, in which case the BOM number for the node and the external @@ -519,10 +609,9 @@ def test_multi_product_network7(self): set(network.get_node_from_index(2).bill_of_materials), {(3.8, 2, 2, 5, 5), (6, 2, 3, 5, 5), (1, 2, 3, 6, None), (5, 2, 3, None, None)} ) - # TODO: is it right that network_from_edges() sets supply_type to 'U' if there are no predecessors? self.assertSetEqual( set(network.get_node_from_index(3).bill_of_materials), - set() + {(1, 3, None, None, None)} ) self.assertSetEqual( set(network.get_node_from_index(4).bill_of_materials), @@ -530,11 +619,11 @@ def test_multi_product_network7(self): ) self.assertSetEqual( set(network.get_node_from_index(5).bill_of_materials), - {(16, 5, 5, None, None)} + {(16, 5, 5, None, None), (1, 5, 4, None, None)} ) self.assertSetEqual( set(network.get_node_from_index(6).bill_of_materials), - set() + {(1, 6, None, None, None)} ) class TestLeadTime(unittest.TestCase): @@ -892,6 +981,34 @@ def test_rong_atan_snyder_figure_1a(self): self.assertFalse(node6copy.deep_equal_to(node6)) self.assertFalse(node6.deep_equal_to(node6copy)) + def test_multi_product_network7(self): + """Test deep_equal_to() for nodes in 7-node multi-product network. + """ + print_status('TestDeepEqualTo', 'test_multi_product_network7()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + node_copies = [copy.deepcopy(n) for n in network.nodes] + + # Equal nodes. + for i in range(len(network.nodes)): + self.assertTrue(node_copies[i].deep_equal_to(network.nodes[i])) + self.assertTrue(network.nodes[i].deep_equal_to(node_copies[i])) + + # Unequal nodes due to parameters. + network.nodes[0].local_holding_cost = 99 + self.assertFalse(node_copies[0].deep_equal_to(network.nodes[0])) + self.assertFalse(network.nodes[0].deep_equal_to(node_copies[0])) + network.nodes[2].demand_source.standard_deviation = 99 + self.assertFalse(node_copies[2].deep_equal_to(network.nodes[2])) + self.assertFalse(network.nodes[2].deep_equal_to(node_copies[2])) + + # Unequal networks due to missing policy. + node_copies[6].inventory_policy = None + self.assertFalse(node_copies[6].deep_equal_to(network.nodes[6])) + self.assertFalse(network.nodes[6].deep_equal_to(node_copies[6])) + + class TestNodeToFromDict(unittest.TestCase): @classmethod def set_up_class(cls): @@ -1072,8 +1189,38 @@ def test_missing_values(self): n2.disruption_process.recovery_probability = DisruptionProcess._DEFAULT_VALUES['_recovery_probability'] self.assertTrue(n1.deep_equal_to(n2)) - # TODO: test with multi-product instance - + def test_multi_product_network7(self): + """Test that to_dict() and from_dict() correctly convert SupplyChainNode object to and from dict + in 7-stage multi-product network. + """ + print_status('TestNodeToFromDict', 'test_multi_product_network7()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + # Convert nodes to dicts. + node_dicts = [n.to_dict() for n in network.nodes] + + # Convert dicts back to nodes. + dict_nodes = [SupplyChainNode.from_dict(d) for d in node_dicts] + + # Convert successors and predecessors back to node objects. Replace network objects. + for n in dict_nodes: + preds = [] + succs = [] + for m in dict_nodes: + if m.index in n.predecessors(): + preds.append(m) + if m.index in n.successors(): + succs.append(m) + n._predecessors = preds + n._successors = succs + n.network = network + + # Compare. + for i in range(len(network.nodes)): + self.assertTrue(network.nodes[i].deep_equal_to(dict_nodes[i])) + + class TestStateVariables(unittest.TestCase): @classmethod def set_up_class(cls): From 5412421a1d559d7cfe18825a73df495dec796888 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Thu, 28 Mar 2024 08:01:10 -0400 Subject: [PATCH 05/94] Implement _products_by_index --- src/stockpyl/supply_chain_node.py | 180 +++++++++++------- .../multi_product_instance.json | 2 +- tests/test_supply_chain_node.py | 103 +++++----- 3 files changed, 160 insertions(+), 125 deletions(-) diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 714618c..217136e 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -41,6 +41,10 @@ for the attribute is used. * Else the node's value of the attribute is used. (It should be a singleton in this case.) +To add a product to the node, use :func:`add_product`. To retrieve the products at the node, use +the ``products`` property, which is a dict whose keys are product indices and whose values are the +corresponding |class_product| objects. (For example, ``node.products[4]`` is the product at ``node`` with index 4.) + API Reference ------------- @@ -77,10 +81,6 @@ class SupplyChainNode(object): ---------- network : |class_network| The network that contains the node. - products : list - A list of |class_product| objects for products that are handled at the node. - For single-product nodes, set this list to ``[]``, or to a list - containing the single |class_product| handled at the node. local_holding_cost : float Local holding cost, per unit per period. [:math:`h'`] echelon_holding_cost : float @@ -130,35 +130,6 @@ class SupplyChainNode(object): Disruption process object (if any). order_capacity : float Maximum size of an order. - - # TODO: DELETE - # bill_of_materials : dict - # Dict whose keys are predecessor indices (or ``None`` for external supplier) - # and whose values are the number of units of required from that predecessor - # to make one unit of the product at this node. If not specified, default - # is 1. If this node is multi-product, this attribute - # must be a dict of dicts, with the keys of the outer dict representing the products - # handled at this node, and the keys in the inner dict representing the predecessor nodes. - # If the predecessor node is multi-product, the values of the (inner) dict should themselves - # be dicts, whose keys are predecessor products and whose values are the number of units required - # of that product from that predecessor node to make one unit at this node. - - # Examples: - - # * ``bill_of_materials[None] = None``: to make 1 unit of the (single) product at this node - # requires 1 unit from external supplier. - # * ``bill_of_materials[None] = 2``: to make 1 unit of the (single) product at this node - # requires 2 units from external supplier. - # * ``bill_of_materials[None] = 2``, ``bill_of_materials[4] = 5``: to make 1 unit of the (single) - # product at this node requires 2 units from external supplier and 5 units of the (single) product from predecessor 4. - # * ``bill_of_materials[11][None] = 6``: to make 1 unit of product 11 at this node requires 6 units - # from external supplier. - # * ``bill_of_materials[11][None] = 6``, ``bill_of_materials[11][4] = 5``: to make 1 unit of product 11 - # at this node requires 6 units from external supplier and 5 units of the (single) product from predecessor 4. - # * ``bill_of_materials[11][None] = 6``, ``bill_of_materials[11][4][0] = 5``, ``bill_of_materials[11][4][19] = 8``: - # to make 1 unit of product 11 at this node requires 6 units from external supplier, 5 units of the product 0 from predecessor 4, - # and 8 units of product 19 from predecessor 4. - state_vars : list of |class_state_vars| List of |class_state_vars|, one for each period in a simulation. problem_specific_data : object @@ -166,7 +137,7 @@ class SupplyChainNode(object): problem types. """ - def __init__(self, index, name=None, network=None, products=[], **kwargs): + def __init__(self, index, name=None, network=None, **kwargs): """SupplyChainNode constructor method. Parameters @@ -178,10 +149,6 @@ def __init__(self, index, name=None, network=None, products=[], **kwargs): A string to identify the node. network : |class_network|, optional The network that contains the node. - products : list, optional - A list of |class_product| objects for products that are handled at the node. - For single-product nodes, set this list to ``[]``, or to a list - containing the single |class_product| handled at the node. kwargs : optional Optional keyword arguments to specify node attributes. These arguments may be dicts to specify product-specific value of the attributes. @@ -198,7 +165,6 @@ def __init__(self, index, name=None, network=None, products=[], **kwargs): self.index = index self.name = name self.network = network - self.products = products # Set attributes specified by kwargs. for key, value in kwargs.items(): @@ -218,7 +184,7 @@ def __init__(self, index, name=None, network=None, products=[], **kwargs): 'index': None, 'name': None, 'network': None, - 'products': [], + '_products_by_index': {}, '_predecessors': [], '_successors': [], '_bill_of_materials': {}, @@ -287,7 +253,7 @@ def get_attribute(self, attr, product=None): product_obj = product product_ind = product.index else: - product_obj = self.get_product_from_index(product) + product_obj = self.products[product] product_ind = product # Is self.attr a dict? @@ -413,6 +379,80 @@ def neighbor_indices(self): # Properties and functions related to products and bill of materials. + @property + def products(self): + """A list containing products handled by the node. Read only. """ + return list(self._products_by_index.values()) + + @property + def products_by_index(self): + """A dict containing products handled by the node. The keys of the dict are + product indices and the values are the corresponding |class_product| objects. + For example, ``self.products_by_index[4]`` returns a |class_product| object for the product + with index 4. Read only. """ + return self._products_by_index + + def add_product(self, product): + """Add ``product`` to the node. If ``product`` is already in the node (as determined by the index), + do nothing. + + Parameters + ---------- + product : |class_product| + The product to add to the node. + """ + + # Check whether product is already in node. + if product not in self.products: + self._products_by_index[product.index] = product + + def add_products(self, list_of_products): + """Add each product in ``list_of_products`` to the node. If a given product is already in the + node (as determined by the index), do not add it. + + Parameters + ---------- + list_of_products : list of |class_product| objects + The list of products to add to the node. + """ + + for prod in list_of_products: + self.add_product(prod) + + def remove_product(self, product): + """Remove ``product`` from the node. ``product`` may be either a |class_product| object or + the index of the product. If ``product`` is not in the node (as determined by the index), + do nothing. + + Parameters + ---------- + product : |class_product| or int + The product to remove from the node. + """ + if isinstance(product, SupplyChainProduct): + self._products_by_index.pop(product.index, None) + else: + self._products_by_index.pop(product, None) + + def remove_products(self, list_of_products): + """Remove each product in ``list_of_products`` from the node. Products in ``list_of_products`` + may be either |class_product| objects or product indices, or a mix. Alternatively, set ``list_of_products`` to + the string ``'all'`` to remove all products. If a given product is not in the + node (as determined by the index), do not remove it. + + Parameters + ---------- + list_of_products : list of |class_product| objects + The list of products to remove from the node. + """ + + if list_of_products == 'all': + for prod in self.products: + self.remove_product(prod) + else: + for prod in list_of_products: + self.remove_product(prod) + @property def is_multiproduct(self): """Returns ``True`` if the node handles multiple products, ``False`` otherwise. Read only.""" @@ -423,29 +463,29 @@ def product_indices(self): """A list of indices of all products handled at the node. Always returns a list, even if the node is single-product. (In that case, the list equals ``[None]``.) Read only.""" if self.products: - return [prod.index for prod in self.products] + return list(self._products_by_index.keys()) else: return [None] - def get_product_from_index(self, index): - """Return |class_product| object from ``self.products`` with the specified index, - or ``None`` if no matching product is found. - - Parameters - ---------- - index : int - Index of product to find. - - Returns - ------- - |class_product| - The product whose index is ``index``, or ``None`` if none. - """ - for product in self.products: - if product.index == index: - return product + # def get_product_from_index(self, index): + # """Return |class_product| object from ``self.products`` with the specified index, + # or ``None`` if no matching product is found. + + # Parameters + # ---------- + # index : int + # Index of product to find. + + # Returns + # ------- + # |class_product| + # The product whose index is ``index``, or ``None`` if none. + # """ + # for product in self.products: + # if product.index == index: + # return product - return None + # return None def set_bill_of_materials(self, num_needed=1.0, product_index=None, predecessor_index=None, rm_index=None): """Specify that ``num_needed`` units of raw material product ``rm_index`` are required from ``predecessor_index`` in order @@ -528,7 +568,7 @@ def get_bill_of_materials(self, product_index=None, predecessor_index=None, rm_i supply_type = self.supply_type if product_index in self.product_indices: if product_index is not None: - supply_type = supply_type or self.get_product_from_index(product_index).supply_type + supply_type = supply_type or self.products_by_index[product_index].supply_type # Default to 1 if predecessor is external and supply_type is not None, or if # node and predecessor are both single-product. if (predecessor_index is None and supply_type is not None) \ @@ -575,7 +615,6 @@ def bill_of_materials(self): bom.append((bom_value, self.index, prod, p_ind, rm)) return bom - def raw_material_supplier_indices(self, product_index=None): """Return a list of all indices of predecessors from which a raw material must be ordered in order to @@ -823,6 +862,8 @@ def deep_equal_to(self, other, rel_tol=1e-8): ------- bool ``True`` if the two nodes are equal, ``False`` otherwise. + + # TODO: check products """ # Initialize name of violating attribute (used for debugging) and equality flag. @@ -903,8 +944,8 @@ def to_dict(self): node_dict[attr] = copy.deepcopy(self.predecessor_indices(include_external=True)) elif attr == '_successors': node_dict[attr] = copy.deepcopy(self.successor_indices(include_external=True)) - elif attr == 'products': - node_dict[attr] = [prod.to_dict() for prod in self.products] + elif attr == '_products_by_index': + node_dict[attr] = {prod.index: prod.to_dict() for prod in self.products} elif attr in ('demand_source', 'disruption_process', '_inventory_policy'): node_dict[attr] = None if getattr(self, attr) is None else getattr(self, attr).to_dict() elif attr == 'state_vars': @@ -950,14 +991,13 @@ def from_dict(cls, the_dict): value = copy.deepcopy(the_dict[attr]) else: value = copy.deepcopy(cls._DEFAULT_VALUES[attr]) - elif attr == 'products': - # TODO: why isn't this handled by setting `value` like others? + elif attr == '_products_by_index': if attr not in the_dict: - value = copy.deepcopy(cls._DEFAULT_VALUES['products']) + value = copy.deepcopy(cls._DEFAULT_VALUES['_products_by_index']) else: - value = [] - for prod_dict in (the_dict['products'] or []): - value.append(SupplyChainProduct.from_dict(prod_dict)) + value = {} + for prod_dict in (the_dict['_products_by_index'].values() or []): + value[prod_dict['index']] = SupplyChainProduct.from_dict(prod_dict) elif attr == '_bill_of_materials': if attr in the_dict: bom = copy.deepcopy(the_dict[attr]) diff --git a/tests/additional_files/multi_product_instance.json b/tests/additional_files/multi_product_instance.json index be904b4..1188500 100644 --- a/tests/additional_files/multi_product_instance.json +++ b/tests/additional_files/multi_product_instance.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [0], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "products": [], "_predecessors": [3, 4], "_successors": [], "_bill_of_materials": {"null": {"3": {"null": 4}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [0, 1], "_bill_of_materials": {"null": {"null": {"null": 3}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "products": [{"index": 1, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "_predecessors": [4, 5], "_successors": [], "_bill_of_materials": {"1": {"5": {"4": 2.6, "5": 5.1}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "products": [{"index": 4, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 5, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "order_capacity": null, "state_vars": []}], "_predecessors": [null], "_successors": [1, 2], "_bill_of_materials": {"5": {"null": {"null": 16}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "products": [{"index": 2, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 3, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "order_capacity": null, "state_vars": []}], "_predecessors": [5, 6, null], "_successors": [], "_bill_of_materials": {"2": {"5": {"5": 3.8}}, "3": {"5": {"5": 6}, "6": {"null": 1}, "null": {"null": 5}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "products": [], "_predecessors": [null], "_successors": [2], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-03-18 20:19:03.844568"} \ No newline at end of file +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_products_by_index": {}, "_predecessors": [null], "_successors": [0], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "_products_by_index": {}, "_predecessors": [3, 4], "_successors": [], "_bill_of_materials": {"null": {"3": {"null": 4}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_products_by_index": {}, "_predecessors": [null], "_successors": [0, 1], "_bill_of_materials": {"null": {"null": {"null": 3}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_products_by_index": {"1": {"index": 1, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [4, 5], "_successors": [], "_bill_of_materials": {"1": {"5": {"4": 2.6, "5": 5.1}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "_products_by_index": {"4": {"index": 4, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "5": {"index": 5, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "order_capacity": null, "state_vars": []}}, "_predecessors": [null], "_successors": [1, 2], "_bill_of_materials": {"5": {"null": {"null": 16}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_products_by_index": {"2": {"index": 2, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "3": {"index": 3, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "order_capacity": null, "state_vars": []}}, "_predecessors": [5, 6, null], "_successors": [], "_bill_of_materials": {"2": {"5": {"5": 3.8}}, "3": {"5": {"5": 6}, "6": {"null": 1}, "null": {"null": 5}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "_products_by_index": {}, "_predecessors": [null], "_successors": [2], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-03-28 07:44:24.573504"} \ No newline at end of file diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 08a9dc8..3a346d7 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -319,7 +319,8 @@ def test_empty_list(self): network = load_instance("example_6_1") - network.nodes[0].products = [] + # Make sure node 0 has no products. + network.nodes[0].remove_products('all') self.assertFalse(network.nodes[0].is_multiproduct) @@ -330,35 +331,32 @@ def test_none(self): network = load_instance("example_6_1") - network.nodes[0].products = None + # Make sure node 0 has no products. + network.nodes[0].remove_products('all') self.assertFalse(network.nodes[0].is_multiproduct) def test_singleton(self): - """Test that is_multiproduct correctly returns ``False`` if ``products`` is a list with one element. + """Test that is_multiproduct correctly returns ``False`` if ``products`` has one element. """ print_status('TestIsMultiProduct', 'test_singleton()') network = load_instance("example_6_1") - network.nodes[0].products = [0] - network.nodes[1].products = [SupplyChainProduct(0)] + network.nodes[0].add_product(SupplyChainProduct(0)) self.assertFalse(network.nodes[0].is_multiproduct) - self.assertFalse(network.nodes[1].is_multiproduct) def test_multi(self): - """Test that is_multiproduct correctly returns ``False`` if ``products`` is a list with multiple elements. + """Test that is_multiproduct correctly returns ``False`` if ``products`` contains multiple elements. """ print_status('TestIsMultiProduct', 'test_multi()') network = load_instance("example_6_1") - network.nodes[0].products = [0, 1] - network.nodes[1].products = [SupplyChainProduct(0), SupplyChainProduct(1)] + network.nodes[0].add_products([SupplyChainProduct(0), SupplyChainProduct(1)]) self.assertTrue(network.nodes[0].is_multiproduct) - self.assertTrue(network.nodes[1].is_multiproduct) def test_multi_product_network7(self): """Test that is_multiproduct works correctly for 7-node multi-product instance. @@ -376,45 +374,42 @@ def test_multi_product_network7(self): self.assertFalse(network.get_node_from_index(6).is_multiproduct) -## STOPPED - - -class TestGetProductFromIndex(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestGetProductFromIndex', 'set_up_class()') +# class TestGetProductFromIndex(unittest.TestCase): +# @classmethod +# def set_up_class(cls): +# """Called once, before any tests.""" +# print_status('TestGetProductFromIndex', 'set_up_class()') - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestGetProductFromIndex', 'tear_down_class()') +# @classmethod +# def tear_down_class(cls): +# """Called once, after all tests, if set_up_class successful.""" +# print_status('TestGetProductFromIndex', 'tear_down_class()') - def test_basic(self): - """Basic test. - """ - print_status('TestGetProductFromIndex', 'test_basic()') +# def test_basic(self): +# """Basic test. +# """ +# print_status('TestGetProductFromIndex', 'test_basic()') - prod1 = SupplyChainProduct(index=0, local_holding_cost=1, stockout_cost=10) - prod2 = SupplyChainProduct(index=1, local_holding_cost=2, stockout_cost=50) - node = SupplyChainNode(index=0, products=[prod1, prod2]) +# prod1 = SupplyChainProduct(index=0, local_holding_cost=1, stockout_cost=10) +# prod2 = SupplyChainProduct(index=1, local_holding_cost=2, stockout_cost=50) +# node = SupplyChainNode(index=0, products=[prod1, prod2]) - self.assertEqual(node.get_product_from_index(0).index, 0) - self.assertEqual(node.get_product_from_index(1).index, 1) +# self.assertEqual(node.products[0].index, 0) +# self.assertEqual(node.products[1].index, 1) - def test_multi_product_network7(self): - """Test 7-node multiproduct instance. - """ - print_status('TestGetProductFromIndex', 'test_multi_product_network7()') +# def test_multi_product_network7(self): +# """Test 7-node multiproduct instance. +# """ +# print_status('TestGetProductFromIndex', 'test_multi_product_network7()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") +# network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") - self.assertIsNone(network.get_node_from_index(0).get_product_from_index(None)) - self.assertIsNone(network.get_node_from_index(0).get_product_from_index(44)) - self.assertEqual(network.get_node_from_index(1).get_product_from_index(1).index, 1) - self.assertEqual(network.get_node_from_index(2).get_product_from_index(2).index, 2) - self.assertEqual(network.get_node_from_index(2).get_product_from_index(3).index, 3) - self.assertIsNone(network.get_node_from_index(2).get_product_from_index(44)) +# self.assertIsNone(network.get_node_from_index(0).products[None]) +# self.assertIsNone(network.get_node_from_index(0).products[44]) +# self.assertEqual(network.get_node_from_index(1).products[1].index, 1) +# self.assertEqual(network.get_node_from_index(2).products[2].index, 2) +# self.assertEqual(network.get_node_from_index(2).products[3].index, 3) +# self.assertIsNone(network.get_node_from_index(2).products[44]) class TestSetGetBillOfMaterials(unittest.TestCase): @@ -435,9 +430,9 @@ def test_single_product(self): network = mwor_system(3) - network.nodes[1].products = [SupplyChainProduct(1), SupplyChainProduct(2)] - network.nodes[2].products = [SupplyChainProduct(2), SupplyChainProduct(3)] - network.nodes[3].products = [SupplyChainProduct(4), SupplyChainProduct(5)] + network.nodes[1].add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) + network.nodes[2].add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) + network.nodes[3].add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) network.nodes[0].set_bill_of_materials( 5, None, 1, 1) network.nodes[0].set_bill_of_materials( 7, None, 1, 2) @@ -460,10 +455,10 @@ def test_multi_product(self): network = mwor_system(3) - network.nodes[0].products = [SupplyChainProduct(10), SupplyChainProduct(11)] - network.nodes[1].products = [SupplyChainProduct(1), SupplyChainProduct(2)] - network.nodes[2].products = [SupplyChainProduct(2), SupplyChainProduct(3)] - network.nodes[3].products = [SupplyChainProduct(4), SupplyChainProduct(5)] + network.nodes[0].add_products([SupplyChainProduct(10), SupplyChainProduct(11)]) + network.nodes[1].add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) + network.nodes[2].add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) + network.nodes[3].add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) network.nodes[0].set_bill_of_materials(5, 10, 1, 1) network.nodes[0].set_bill_of_materials(7, 10, 1, 2) @@ -542,8 +537,8 @@ def test_default_value_mwor(self): network = mwor_system(3) - network.get_node_from_index(1).products = [SupplyChainProduct(1), SupplyChainProduct(2)] - network.get_node_from_index(2).products = [SupplyChainProduct(2)] + network.get_node_from_index(1).add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) + network.get_node_from_index(2).add_products([SupplyChainProduct(2)]) self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=1), 0) self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=2), 1) @@ -568,9 +563,9 @@ def test_mwor(self): network = mwor_system(3) - network.get_node_from_index(1).products = [SupplyChainProduct(1), SupplyChainProduct(2)] - network.get_node_from_index(2).products = [SupplyChainProduct(2), SupplyChainProduct(3)] - network.get_node_from_index(3).products = [SupplyChainProduct(4), SupplyChainProduct(5)] + network.get_node_from_index(1).add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) + network.get_node_from_index(2).add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) + network.get_node_from_index(3).add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) node0 = network.get_node_from_index(0) From 1597cac5898de2ce64f70a84ac8763b034195a72 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 30 Mar 2024 08:04:05 -0400 Subject: [PATCH 06/94] Add SupplyChainNode.products_by_index, update get_attribute() #136 --- src/stockpyl/supply_chain_network.py | 23 --- src/stockpyl/supply_chain_node.py | 21 ++- src/stockpyl/supply_chain_product.py | 2 +- tests/test_supply_chain_node.py | 225 +++++++++++++++++++++++++++ 4 files changed, 244 insertions(+), 27 deletions(-) diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 76adc94..895515f 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -316,29 +316,6 @@ def from_dict(cls, the_dict): return network - # # Non-object attributes. - # network.period = the_dict['period'] - # network.max_max_replenishment_time = the_dict['max_max_replenishment_time'] - - # # Nodes. - # for n_dict in the_dict['nodes']: - # network.add_node(SupplyChainNode.from_dict(n_dict)) - - # # Convert nodes' successors and predecessors back to node objects. (SupplyChainNode.to_dict() - # # replaces them with indices.) - # for n in network.nodes: - # preds = [] - # succs = [] - # for m in network.nodes: - # if m.index in n.predecessors(): - # preds.append(m) - # if m.index in n.successors(): - # succs.append(m) - # n._predecessors = preds - # n._successors = succs - - # return network - # Methods for node handling. def get_node_from_index(self, index): diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 217136e..ba46fde 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -38,7 +38,7 @@ * If the attribute is a dict, the node will first attempt to access the value of ``[]``. * Else, if the attribute is a dict but does not contain a value for a given product, the product's value - for the attribute is used. + for the attribute is used, if it exists. * Else the node's value of the attribute is used. (It should be a singleton in this case.) To add a product to the node, use :func:`add_product`. To retrieve the products at the node, use @@ -226,7 +226,8 @@ def get_attribute(self, attr, product=None): * If ``self.attr`` is a dict and contains the key ``product``, returns ``self.attr[product]``. (This returns a (node, product)-specific value of the attribute.) - * Else if ``self.attr`` is a dict but does not contain the key ``product``, returns + * Else if ``self.attr`` equals its default value (e.g., ``None``), + or is a dict but does not contain the key ``product``, returns ``self.products[product].attr``. (This returns a product-specific value of the attribute.) * Else (``self.attr`` is a singleton), returns ``self.attr``. (This returns a node-specific value of the attribute.) @@ -263,7 +264,21 @@ def get_attribute(self, attr, product=None): else: return getattr(product_obj, attr) else: - return self_attr + # Determine whether attr is set to its default value; if so, try to use product attribute. + # Settable properties that are aliases for attributes require special handling since there's no + # default value for properties. + # if attr == 'holding_cost': + # default_val = self.local_holding_cost + if attr == 'lead_time': + default_val = self.shipment_lead_time + elif attr == 'inventory_policy': + default_val = self.inventory_policy + else: + default_val = self._DEFAULT_VALUES[attr] + if (default_val is None and self_attr is None) or (self_attr == default_val): + return getattr(product_obj, attr) + else: + return self_attr # Properties and functions related to network structure. diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 1a5977a..0e63b6e 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -172,7 +172,7 @@ def __init__(self, index, name=None, network=None, **kwargs): # The key refers to an attribute that has "_" prepended to it. setattr(self, f"_{key}", value) else: - raise AttributeError(f"{key} is not an attribute of Policy") + raise AttributeError(f"{key} is not an attribute of SupplyChainProduct") _DEFAULT_VALUES = { 'index': None, diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 3a346d7..03caa4b 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -161,6 +161,58 @@ def test_list_contains(self): self.assertEqual(contains5, True) +class TestGetAttribute(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestGetAttribute', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestGetAttribute', 'tear_down_class()') + + def test_single_node(self): + """Test get_attribute() for single node with multiple products. + """ + print_status('TestGetAttribute', 'test_single_node()') + + node = SupplyChainNode(index=0, local_holding_cost=2) + prod0 = SupplyChainProduct(index=0, lead_time=1, revenue=100) + prod1 = SupplyChainProduct(index=1, lead_time=2, order_lead_time=4) + prod2 = SupplyChainProduct(index=2, lead_time=3, initial_orders=33) + node.add_products([prod0, prod1, prod2]) + node.initial_inventory_level = {0: 50, 1: 70, 2: 90} + node.revenue = {1: 200, 2: 300} + node.order_lead_time = {0: 5} + + self.assertEqual(node.get_attribute('local_holding_cost', 0), 2) + self.assertEqual(node.get_attribute('local_holding_cost', prod1), 2) + self.assertEqual(node.get_attribute('local_holding_cost', prod2), 2) + self.assertEqual(node.get_attribute('holding_cost', 0), 2) + self.assertEqual(node.get_attribute('holding_cost', prod1), 2) + self.assertEqual(node.get_attribute('holding_cost', prod2), 2) + self.assertEqual(node.get_attribute('lead_time', 0), 1) + self.assertEqual(node.get_attribute('lead_time', 1), 2) + self.assertEqual(node.get_attribute('lead_time', prod2), 3) + self.assertEqual(node.get_attribute('revenue', prod0), 100) + self.assertEqual(node.get_attribute('revenue', 1), 200) + self.assertEqual(node.get_attribute('revenue', 2), 300) + self.assertEqual(node.get_attribute('order_lead_time', prod0), 5) + self.assertEqual(node.get_attribute('order_lead_time', 1), 4) + self.assertEqual(node.get_attribute('order_lead_time', prod2), None) + self.assertEqual(node.get_attribute('initial_orders', 0), None) + self.assertEqual(node.get_attribute('initial_orders', 1), None) + self.assertEqual(node.get_attribute('initial_orders', 2), 33) + self.assertEqual(node.get_attribute('initial_inventory_level', 0), 50) + self.assertEqual(node.get_attribute('initial_inventory_level', prod1), 70) + self.assertEqual(node.get_attribute('initial_inventory_level', 2), 90) + self.assertEqual(node.get_attribute('revenue', prod0), 100) + self.assertEqual(node.get_attribute('revenue', 1), 200) + self.assertEqual(node.get_attribute('revenue', prod2), 300) + + + class TestDescendants(unittest.TestCase): @classmethod def set_up_class(cls): @@ -301,6 +353,179 @@ def test_multi_product_network7(self): self.assertEqual(anc[6], []) +class TestAddProduct(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestAddProduct', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestAddProduct', 'tear_down_class()') + + def test_basic(self): + """Basic test. + """ + print_status('TestAddProduct', 'test_basic()') + + network = load_instance("example_6_1") + + network.nodes[0].add_product(SupplyChainProduct(0)) + network.nodes[1].add_product(SupplyChainProduct(1)) + network.nodes[2].add_product(SupplyChainProduct(2)) + network.nodes[2].add_product(SupplyChainProduct(3)) + + self.assertEqual(network.nodes[0].product_indices, [0]) + self.assertEqual(network.nodes[1].product_indices, [1]) + self.assertEqual(network.nodes[2].product_indices, [2, 3]) + + +class TestAddProducts(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestAddProducts', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestAddProducts', 'tear_down_class()') + + def test_basic(self): + """Basic test. + """ + print_status('TestAddProducts', 'test_basic()') + + network = load_instance("example_6_1") + + network.nodes[0].add_products([SupplyChainProduct(0)]) + network.nodes[1].add_products([SupplyChainProduct(1)]) + network.nodes[2].add_products([SupplyChainProduct(2)]) + network.nodes[2].add_products([SupplyChainProduct(3)]) + + self.assertEqual(network.nodes[0].product_indices, [0]) + self.assertEqual(network.nodes[1].product_indices, [1]) + self.assertEqual(network.nodes[2].product_indices, [2, 3]) + + +class TestRemoveProduct(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestRemoveProduct', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestRemoveProduct', 'tear_down_class()') + + def test_basic(self): + """Basic test. + """ + print_status('TestRemoveProduct', 'test_basic()') + + network = load_instance("example_6_1") + + network.nodes[0].add_product(SupplyChainProduct(0)) + network.nodes[1].add_product(SupplyChainProduct(1)) + network.nodes[2].add_product(SupplyChainProduct(2)) + network.nodes[2].add_product(SupplyChainProduct(3)) + + network.nodes[0].remove_product(0) + network.nodes[1].remove_product(1) + network.nodes[2].remove_product(network.nodes[2].products_by_index[2]) + + self.assertEqual(network.nodes[0].product_indices, [None]) + self.assertEqual(network.nodes[1].product_indices, [None]) + self.assertEqual(network.nodes[2].product_indices, [3]) + + def test_multi_product_7node(self): + """Test remove_product() for 7-node multi-product instance. + """ + print_status('TestIsMultiProduct', 'test_multi_product_7node()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + network.get_node_from_index(1).remove_product(1) + network.get_node_from_index(2).remove_product(network.get_node_from_index(2).products_by_index[2]) + + self.assertEqual(network.get_node_from_index(0).product_indices, [None]) + self.assertEqual(network.get_node_from_index(1).product_indices, [None]) + self.assertEqual(network.get_node_from_index(2).product_indices, [3]) + + def test_product_does_not_exist(self): + """Test that remove_product() correctly does nothing if product doesn't exist. + """ + print_status('TestIsMultiProduct', 'test_product_does_not_exist()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + network.get_node_from_index(0).remove_product(7) + network.get_node_from_index(1).remove_product(7) + + self.assertEqual(network.get_node_from_index(0).product_indices, [None]) + self.assertEqual(network.get_node_from_index(1).product_indices, [1]) + +class TestRemoveProducts(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestRemoveProducts', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestRemoveProducts', 'tear_down_class()') + + def test_basic(self): + """Basic test. + """ + print_status('TestRemoveProducts', 'test_basic()') + + network = load_instance("example_6_1") + + network.nodes[0].add_product(SupplyChainProduct(0)) + network.nodes[1].add_product(SupplyChainProduct(1)) + network.nodes[2].add_product(SupplyChainProduct(2)) + network.nodes[2].add_product(SupplyChainProduct(3)) + + network.nodes[0].remove_products([0]) + network.nodes[1].remove_products([1]) + network.nodes[2].remove_products([network.nodes[2].products_by_index[2], 3]) + + self.assertEqual(network.nodes[0].product_indices, [None]) + self.assertEqual(network.nodes[1].product_indices, [None]) + self.assertEqual(network.nodes[2].product_indices, [None]) + + def test_multi_product_7node(self): + """Test remove_product() for 7-node multi-product instance. + """ + print_status('TestIsMultiProduct', 'test_multi_product_7node()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + network.get_node_from_index(1).remove_products([1]) + network.get_node_from_index(2).remove_products([3, network.get_node_from_index(2).products_by_index[2]]) + + self.assertEqual(network.get_node_from_index(0).product_indices, [None]) + self.assertEqual(network.get_node_from_index(1).product_indices, [None]) + self.assertEqual(network.get_node_from_index(2).product_indices, [None]) + + def test_product_does_not_exist(self): + """Test that remove_product() correctly does nothing if product doesn't exist. + """ + print_status('TestIsMultiProduct', 'test_product_does_not_exist()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + network.get_node_from_index(0).remove_products([7]) + network.get_node_from_index(2).remove_products([3, 7]) + + self.assertEqual(network.get_node_from_index(0).product_indices, [None]) + self.assertEqual(network.get_node_from_index(2).product_indices, [2]) + + class TestIsMultiProduct(unittest.TestCase): @classmethod def set_up_class(cls): From 53f463965a1f98f71144d3da74f8418bca002b8f Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 30 Mar 2024 11:39:51 -0400 Subject: [PATCH 07/94] About to switch to dummy product instead of None --- src/stockpyl/sim.py | 114 +++++++------ src/stockpyl/supply_chain_node.py | 238 +++++++++++++-------------- src/stockpyl/supply_chain_product.py | 3 - 3 files changed, 173 insertions(+), 182 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 307bf4a..b3c8ab0 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -343,11 +343,14 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Get the node. node = network.get_node_from_index(node_index) - # Does node have external demand? - if node.demand_source is not None and node.demand_source.type is not None: - # Generate demand and fill it in inbound_order_pipeline. - node.state_vars_current.inbound_order_pipeline[None][0] = \ - node.demand_source.generate_demand(period) + # Loop through products (including None). + for prod_index in node.product_indices: + # Does node/product have external demand? + dem_src = node.get_attribute('demand_source', prod_index) + if dem_src is not None and dem_src.type is not None: + # Generate demand and fill it in inbound_order_pipeline. + node.state_vars_current.inbound_order_pipeline[None][prod_index][0] = \ + dem_src.generate_demand(period) # Call generate_downstream_orders() for all non-visited successors. for s in node.successors(): @@ -358,58 +361,61 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Receive inbound orders. _receive_inbound_orders(node) - # Get lead times (for convenience). - order_lead_time = node.order_lead_time or 0 - shipment_lead_time = node.shipment_lead_time or 0 - - # Place orders to all predecessors. - for p in node.predecessors(include_external=True): - if p is not None: - # Was an override order quantity provided? - if order_quantity_override is not None and node in order_quantity_override \ - and order_quantity_override[node] is not None: - order_quantity = order_quantity_override[node] - # Is there an order-pausing disruption? - elif node.disrupted and node.disruption_process.disruption_type == 'OP': - order_quantity = 0 - else: - # Calculate order quantity. - if node.inventory_policy is None: - raise AttributeError( - f"The inventory_policy attribute for {node.index} is None. You must provide a Policy object in order for the simulation to set order quantities.") - - # Apply node's order capacity if there is one (NEW - 11/9/23): - if node.order_capacity is None: - order_capac = 1.0e300 + # Loop through products at this node. + for prod in node.products: + + # Get lead times (for convenience). + order_lead_time = node.get_attribute('order_lead_time', prod) or 0 + shipment_lead_time = node.get_attribute('shipment_lead_time', prod) or 0 + + # Place orders to all predecessors. + for p in node.predecessors(include_external=True): + if p is not None: + # Was an override order quantity provided? + if order_quantity_override is not None and node in order_quantity_override \ + and order_quantity_override[node] is not None: + order_quantity = order_quantity_override[node] + # Is there an order-pausing disruption? + elif node.disrupted and node.disruption_process.disruption_type == 'OP': + order_quantity = 0 else: - order_capac = node.order_capacity - order_quantity = min(order_capac, node.inventory_policy.get_order_quantity(predecessor_index=p.index)) - - # Place order in predecessor's order pipeline. - p.state_vars_current.inbound_order_pipeline[node_index][order_lead_time] = order_quantity - p_index = p.index - else: - # Was an override order quantity provided? - if order_quantity_override is not None and node in order_quantity_override \ - and order_quantity_override[node] is not None: - order_quantity = order_quantity_override[node] - # Is there an order-pausing disruption? - elif node.disrupted and node.disruption_process.disruption_type == 'OP': - order_quantity = 0 + # Calculate order quantity. + if node.inventory_policy is None: + raise AttributeError( + f"The inventory_policy attribute for {node.index} is None. You must provide a Policy object in order for the simulation to set order quantities.") + + # Apply node's order capacity if there is one (NEW - 11/9/23): + if node.order_capacity is None: + order_capac = 1.0e300 + else: + order_capac = node.order_capacity + order_quantity = min(order_capac, node.inventory_policy.get_order_quantity(predecessor_index=p.index)) + + # Place order in predecessor's order pipeline. + p.state_vars_current.inbound_order_pipeline[node_index][order_lead_time] = order_quantity + p_index = p.index else: - # Calculate order quantity. - if node.order_capacity is None: - order_capac = 1.0e300 + # Was an override order quantity provided? + if order_quantity_override is not None and node in order_quantity_override \ + and order_quantity_override[node] is not None: + order_quantity = order_quantity_override[node] + # Is there an order-pausing disruption? + elif node.disrupted and node.disruption_process.disruption_type == 'OP': + order_quantity = 0 else: - order_capac = node.order_capacity - order_quantity = min(order_capac, node.inventory_policy.get_order_quantity(predecessor_index=None)) - - # Place order to external supplier. - # (For now, this just means adding to inbound shipment pipeline.) - node.state_vars_current.inbound_shipment_pipeline[None][ - (order_lead_time or 0) + (shipment_lead_time or 0)] += \ - order_quantity - p_index = None + # Calculate order quantity. + if node.order_capacity is None: + order_capac = 1.0e300 + else: + order_capac = node.order_capacity + order_quantity = min(order_capac, node.inventory_policy.get_order_quantity(predecessor_index=None)) + + # Place order to external supplier. + # (For now, this just means adding to inbound shipment pipeline.) + node.state_vars_current.inbound_shipment_pipeline[None][ + (order_lead_time or 0) + (shipment_lead_time or 0)] += \ + order_quantity + p_index = None if order_quantity is None: order_quantity = None diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index ba46fde..d56615d 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -219,66 +219,40 @@ def __init__(self, index, name=None, network=None, **kwargs): 'state_vars': [] } - def get_attribute(self, attr, product=None): - """Return the value of the attribute ``attr`` for ``product``. This is a way to - easily access an attribute without knowing ahead of time whether it is a singleton - or a product-keyed dict. ``product`` may be either a |class_product| object or the index of the product. - - * If ``self.attr`` is a dict and contains the key ``product``, returns ``self.attr[product]``. - (This returns a (node, product)-specific value of the attribute.) - * Else if ``self.attr`` equals its default value (e.g., ``None``), - or is a dict but does not contain the key ``product``, returns - ``self.products[product].attr``. (This returns a product-specific value of the attribute.) - * Else (``self.attr`` is a singleton), returns ``self.attr``. (This returns a node-specific value - of the attribute.) - (Here, we are assuming ``product`` is an index. If it is a |class_product| object, replace ``product`` - with ``product.index``.) - - Parameters - ---------- - attr : str - The name of the attribute to get. - product : |class_product| or int, optional - The product to get the attribute for, either as a |class_product| object or as an index. - Set to ``None`` or omit for single-product models. + # Properties related to input parameters. - Returns - ------- - any - The value of the attribute for the product (if any). + @property + def holding_cost(self): + """An alias for ``local_holding_cost``. Read only. """ - # Get self.attr and the product and index. - self_attr = getattr(self, attr) - if isinstance(product, SupplyChainProduct): - product_obj = product - product_ind = product.index - else: - product_obj = self.products[product] - product_ind = product + return self.local_holding_cost - # Is self.attr a dict? - if is_dict(self_attr): - if product_ind in self_attr: - return self_attr[product_ind] - else: - return getattr(product_obj, attr) - else: - # Determine whether attr is set to its default value; if so, try to use product attribute. - # Settable properties that are aliases for attributes require special handling since there's no - # default value for properties. - # if attr == 'holding_cost': - # default_val = self.local_holding_cost - if attr == 'lead_time': - default_val = self.shipment_lead_time - elif attr == 'inventory_policy': - default_val = self.inventory_policy - else: - default_val = self._DEFAULT_VALUES[attr] - if (default_val is None and self_attr is None) or (self_attr == default_val): - return getattr(product_obj, attr) + @property + def lead_time(self): + return self.shipment_lead_time + + @lead_time.setter + def lead_time(self, value): + self.shipment_lead_time = value + + @property + def inventory_policy(self): + return self._inventory_policy + + @inventory_policy.setter + def inventory_policy(self, value): + # Set ``_inventory_policy``, and also set ``_inventory_policy``'s ``node`` attribute to self. + # If ``value`` is a dict (for multi-product), set ``node`` and ``product`` attributes of the policy + # for each product in the dict. + self._inventory_policy = value + if self._inventory_policy is not None: + if is_dict(value): + for prod, _ in value.items(): + self._inventory_policy[prod].node = self + self._inventory_policy[prod].product = prod else: - return self_attr + self._inventory_policy.node = self # Properties and functions related to network structure. @@ -396,8 +370,12 @@ def neighbor_indices(self): @property def products(self): - """A list containing products handled by the node. Read only. """ - return list(self._products_by_index.values()) + """A list containing products handled by the node. Always returns a list, even if the + node is single-product. (In that case, the list equals ``[None]``.) Read only. """ + if self._products_by_index: + return list(self._products_by_index.values()) + else: + return [None] @property def products_by_index(self): @@ -407,6 +385,20 @@ def products_by_index(self): with index 4. Read only. """ return self._products_by_index + @property + def is_multiproduct(self): + """Returns ``True`` if the node handles multiple products, ``False`` otherwise. Read only.""" + return (self.products is not None and (len(self.products) > 1)) + + @property + def product_indices(self): + """A list of indices of all products handled at the node. Always returns a list, even if the + node is single-product. (In that case, the list equals ``[None]``.) Read only.""" + if self.products: + return list(self._products_by_index.keys()) + else: + return [None] + def add_product(self, product): """Add ``product`` to the node. If ``product`` is already in the node (as determined by the index), do nothing. @@ -468,40 +460,6 @@ def remove_products(self, list_of_products): for prod in list_of_products: self.remove_product(prod) - @property - def is_multiproduct(self): - """Returns ``True`` if the node handles multiple products, ``False`` otherwise. Read only.""" - return (self.products is not None and (len(self.products) > 1)) - - @property - def product_indices(self): - """A list of indices of all products handled at the node. Always returns a list, even if the - node is single-product. (In that case, the list equals ``[None]``.) Read only.""" - if self.products: - return list(self._products_by_index.keys()) - else: - return [None] - - # def get_product_from_index(self, index): - # """Return |class_product| object from ``self.products`` with the specified index, - # or ``None`` if no matching product is found. - - # Parameters - # ---------- - # index : int - # Index of product to find. - - # Returns - # ------- - # |class_product| - # The product whose index is ``index``, or ``None`` if none. - # """ - # for product in self.products: - # if product.index == index: - # return product - - # return None - def set_bill_of_materials(self, num_needed=1.0, product_index=None, predecessor_index=None, rm_index=None): """Specify that ``num_needed`` units of raw material product ``rm_index`` are required from ``predecessor_index`` in order to make one unit of ``product_index`` at this node. If this is a single-product node, set ``product_index`` to ``None``. @@ -607,6 +565,8 @@ def bill_of_materials(self): even if it has not been set explicitly. If the BOM number is something other than 1, it must be set using ``set_bill_of_materials()``. + It is normally easier to access the bill of materials using :func:`get_bill_of_materials`. + Read only. """ bom = [] @@ -665,40 +625,7 @@ def raw_material_supplier_indices(self, product_index=None): return supplier_indices - - # Properties related to input parameters. - - @property - def holding_cost(self): - """An alias for ``local_holding_cost``. Read only. - """ - return self.local_holding_cost - - @property - def lead_time(self): - return self.shipment_lead_time - - @lead_time.setter - def lead_time(self, value): - self.shipment_lead_time = value - - @property - def inventory_policy(self): - return self._inventory_policy - - @inventory_policy.setter - def inventory_policy(self, value): - # Set ``_inventory_policy``, and also set ``_inventory_policy``'s ``node`` attribute to self. - # If ``value`` is a dict (for multi-product), set ``node`` and ``product`` attributes of the policy - # for each product in the dict. - self._inventory_policy = value - if self._inventory_policy is not None: - if is_dict(value): - for prod, _ in value.items(): - self._inventory_policy[prod].node = self - self._inventory_policy[prod].product = prod - else: - self._inventory_policy.node = self + # Properties related to lead times. @property def forward_echelon_lead_time(self): @@ -1161,6 +1088,67 @@ def get_one_predecessor(self): # Attribute management. + def get_attribute(self, attr, product=None): + """Return the value of the attribute ``attr`` for ``product``. This is a way to + easily access an attribute without knowing ahead of time whether it is a singleton + or a product-keyed dict. ``product`` may be either a |class_product| object or the index of the product. + + * If ``self.attr`` is a dict and contains the key ``product``, returns ``self.attr[product]``. + (This returns a (node, product)-specific value of the attribute.) + * Else if ``self.attr`` equals its default value (e.g., ``None``), + or is a dict but does not contain the key ``product``, returns + ``self.products[product].attr``. (This returns a product-specific value of the attribute.) + * Else (``self.attr`` is a singleton), returns ``self.attr``. (This returns a node-specific value + of the attribute.) + + (Here, we are assuming ``product`` is an index. If it is a |class_product| object, replace ``product`` + with ``product.index``.) + + Parameters + ---------- + attr : str + The name of the attribute to get. + product : |class_product| or int, optional + The product to get the attribute for, either as a |class_product| object or as an index. + Set to ``None`` or omit for single-product models. + + Returns + ------- + any + The value of the attribute for the product (if any). + """ + # Get self.attr and the product and index. + self_attr = getattr(self, attr) + if isinstance(product, SupplyChainProduct): + product_obj = product + product_ind = product.index + else: + product_obj = self.products[product] + product_ind = product + + # Is self.attr a dict? + if is_dict(self_attr): + if product_ind in self_attr: + return self_attr[product_ind] + else: + return getattr(product_obj, attr) + else: + # Determine whether attr is set to its default value; if so, try to use product attribute. + # Settable properties that are aliases for attributes require special handling since there's no + # default value for properties. + # if attr == 'holding_cost': + # default_val = self.local_holding_cost + if attr == 'lead_time': + default_val = self.shipment_lead_time + elif attr == 'inventory_policy': + default_val = self.inventory_policy + else: + default_val = self._DEFAULT_VALUES[attr] + if (default_val is None and self_attr is None) or (self_attr == default_val): + return getattr(product_obj, attr) + else: + return self_attr + def _get_attribute_total(self, attribute, period, product_index=None, include_external=True): """Return total of ``attribute`` in the node's ``state_vars`` for the period and product specified, for an attribute that is indexed by successor or predecessor, i.e., diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 0e63b6e..c43a2af 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -123,8 +123,6 @@ class SupplyChainProduct(object): Disruption process object (if any). order_capacity : float Maximum size of an order. - bill_of_materials : dict - # TODO: write description and figure out how this will be handled state_vars : list of |class_state_vars| List of |class_state_vars|, one for each period in a simulation. problem_specific_data : object @@ -366,7 +364,6 @@ def deep_equal_to(self, other, rel_tol=1e-8): if not isclose(getattr(self, attr) or 0, getattr(other, attr) or 0, rel_tol=rel_tol): viol_attr = attr eq = False -# TODO: bill_of_materials elif attr in ('demand_source', 'disruption_process'): # Check for None in object or object type. if (getattr(self, attr) is None and getattr(other, attr) is not None) or \ From e84e7a6dbfdbf53630d6e5477186df9424ef5aa6 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 30 Mar 2024 14:15:45 -0400 Subject: [PATCH 08/94] Add raw_material_suppliers() and raw_material_supplier_indices() and unit tests --- src/stockpyl/sim.py | 4 +- src/stockpyl/supply_chain_node.py | 175 ++++++++++++++----- tests/test_supply_chain_node.py | 274 ++++++++++++++++++++++++++++-- 3 files changed, 387 insertions(+), 66 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index b3c8ab0..2de1e73 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -361,8 +361,8 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Receive inbound orders. _receive_inbound_orders(node) - # Loop through products at this node. - for prod in node.products: + # Loop through products at this node. (If no products, use None.) + for prod in node.products or [None]: # Get lead times (for convenience). order_lead_time = node.get_attribute('order_lead_time', prod) or 0 diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index d56615d..eaeab57 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -370,12 +370,12 @@ def neighbor_indices(self): @property def products(self): - """A list containing products handled by the node. Always returns a list, even if the - node is single-product. (In that case, the list equals ``[None]``.) Read only. """ - if self._products_by_index: - return list(self._products_by_index.values()) - else: - return [None] + """A list containing products handled by the node. Read only. """ + return list(self._products_by_index.values()) + # if self._products_by_index: + # return list(self._products_by_index.values()) + # else: + # return [None] @property def products_by_index(self): @@ -388,16 +388,21 @@ def products_by_index(self): @property def is_multiproduct(self): """Returns ``True`` if the node handles multiple products, ``False`` otherwise. Read only.""" - return (self.products is not None and (len(self.products) > 1)) + return len(self.products) > 1 + + @property + def is_singleproduct(self): + """Returns ``True`` if the node handles a single product, ``False`` otherwise. Read only.""" + return not self.is_multiproduct @property def product_indices(self): - """A list of indices of all products handled at the node. Always returns a list, even if the - node is single-product. (In that case, the list equals ``[None]``.) Read only.""" - if self.products: - return list(self._products_by_index.keys()) - else: - return [None] + """A list of indices of all products handled at the node. Read only.""" + return list(self._products_by_index.keys()) + # if self.products: + # return list(self._products_by_index.keys()) + # else: + # return [None] def add_product(self, product): """Add ``product`` to the node. If ``product`` is already in the node (as determined by the index), @@ -462,9 +467,12 @@ def remove_products(self, list_of_products): def set_bill_of_materials(self, num_needed=1.0, product_index=None, predecessor_index=None, rm_index=None): """Specify that ``num_needed`` units of raw material product ``rm_index`` are required from ``predecessor_index`` in order - to make one unit of ``product_index`` at this node. If this is a single-product node, set ``product_index`` to ``None``. - If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. If the predecessor is a - single-product node, set ``rm_index`` to ``None``. + to make one unit of ``product_index`` at this node. + + * If this is a single-product node and a |class_product| object has been added to the node, + set ``product_index`` to the index of the product; if no product has been added, set ``product_index`` to ``None``. + * If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. + * If the predecessor is a single-product node, set ``rm_index`` to ``None``. To remove a BOM relationship, call this function again, setting ``num_needed = 0`` or ``num_needed = None``. If ``num_needed = 0`` or ``None`` and a BOM relationship does not already exist for the specified product, @@ -477,7 +485,8 @@ def set_bill_of_materials(self, num_needed=1.0, product_index=None, predecessor_ Parameters ---------- product_index : int, optional - Index of product at this node, or ``None`` if this is a single-product node. + Index of product at this node, or ``None`` if this is a single-product node and no |class_product| object + has been added to the node. predecessor_index : int, optional Index of predecessor node, or ``None`` if the predecessor is the external supplier. rm_index : int, optional @@ -513,9 +522,12 @@ def set_bill_of_materials(self, num_needed=1.0, product_index=None, predecessor_ def get_bill_of_materials(self, product_index=None, predecessor_index=None, rm_index=None): """Get the number of units of raw material product ``rm_index`` that are required from ``predecessor_index`` in order - to make one unit of ``product_index`` at this node. If this is a single-product node, set ``product_index`` to ``None``. - If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. If the predecessor is a - single-product node, set ``rm_index`` to ``None``. + to make one unit of ``product_index`` at this node. + + * If this is a single-product node and a |class_product| object has been added to the node, + set ``product_index`` to the index of the product; if no product has been added, set ``product_index`` to ``None``. + * If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. + * If the predecessor is a single-product node, set ``rm_index`` to ``None``. Returns 1 if the node and the predecessor are both single-product (or the predecessor is the external supplier and the node does not have ``supply_type`` ``None``) and there is no BOM relationship specified for this pair. Node(/product) pairs are @@ -591,6 +603,62 @@ def bill_of_materials(self): return bom + def raw_material_suppliers(self, product_index=None): + """Return a list of all predecessors, from which a raw material must be ordered in order to + make ``product_index`` at this node, according to the bill of materials. Suppliers in list are + |class_node| objects, plus ``None`` for the external supplier, if appropriate. + + Set ``product_index`` to ``None`` + if this is a single-product node and no |class_product| object has been added. + + Parameters + ---------- + product_index : int, optional + Index of product at this node, or ``None`` if this is a single-product node with no |class_product| object added. + + Returns + ------- + list + List of all predecessors, as |class_node| objects, from which a raw material must be ordered in order to + make ``product_index`` at this node, according to the bill of materials. + # TODO: unit tests + + Raises + ------ + ValueError + If ``product_index`` is not found among the node's products, and it's not the case that this is a single-product + node with no |class_product| added. + """ + # If product index is not in product indices for node, AND it's not the case that this is a single-prdouct node without + # a product object and product_index is None, raise exception. + if not (self.is_singleproduct and len(self.products) == 0 and product_index is None) and product_index not in self.product_indices: + raise ValueError(f'{product_index} is not a product index in this SupplyChainNode') + + suppliers = [] + for p in self.predecessors(include_external=True): + # Determine whether p provides a raw material for the product. + # if self.is_singleproduct and p.is_singleproduct and \ + # self.get_bill_of_materials(predecessor_index=p.index) > 0: + # # The node and predecessor are both single-product, and the predecessor provides a raw material. + # provides_rm = True + # else: + provides_rm = False + if p is None: + p_ind = None + rm_ind_list = [None] + else: + p_ind = p.index + rm_ind_list = p.product_indices if p.product_indices != [] else [None] + for rm_ind in rm_ind_list: + if self.get_bill_of_materials(product_index=product_index, predecessor_index=p_ind, rm_index=rm_ind) > 0: + # Predecessor provides a raw material. + provides_rm = True + # Add p to list if it provides a raw material. + if provides_rm: + suppliers.append(p) + + return suppliers + def raw_material_supplier_indices(self, product_index=None): """Return a list of all indices of predecessors from which a raw material must be ordered in order to make ``product_index`` at this node, according to the bill of materials. @@ -605,25 +673,33 @@ def raw_material_supplier_indices(self, product_index=None): list List of all indices of predecessors from which a raw material must be ordered in order to make ``product_index`` at this node, according to the bill of materials. - """ - supplier_indices = [] - for p in self.predecessors: - # Determine whether p provides a raw material for the product. - if not self.is_multiproduct and not p.is_multiproduct and \ - self.get_bill_of_materials(predecessor_index=p.index) > 0: - # The node and predecessor are both single-product, and the predecessor provides a raw material. - provides_rm = True - else: - provides_rm = False - for rm_ind in p.product_indices: - if self.get_bill_of_materials(product_index=product_index, predecessor_index=p.index, rm_index=rm_ind) > 0: - # Predecessor provides a raw material. - provides_rm = True - # Add p to list if it provides a raw material. - if provides_rm: - supplier_indices.append(p.index) + # TODO: unit tests + + Raises + ------ + ValueError + If ``product_index`` is not found among the node's products, and it's not the case that this is a single-product + node with no |class_product| added. + """ + return [(s.index if s is not None else None) for s in self.raw_material_suppliers(product_index=product_index)] + # supplier_indices = [] + # for p in self.predecessors: + # # Determine whether p provides a raw material for the product. + # if not self.is_multiproduct and not p.is_multiproduct and \ + # self.get_bill_of_materials(predecessor_index=p.index) > 0: + # # The node and predecessor are both single-product, and the predecessor provides a raw material. + # provides_rm = True + # else: + # provides_rm = False + # for rm_ind in p.product_indices: + # if self.get_bill_of_materials(product_index=product_index, predecessor_index=p.index, rm_index=rm_ind) > 0: + # # Predecessor provides a raw material. + # provides_rm = True + # # Add p to list if it provides a raw material. + # if provides_rm: + # supplier_indices.append(p.index) - return supplier_indices + # return supplier_indices # Properties related to lead times. @@ -725,7 +801,7 @@ def __eq__(self, other): True if the nodes are equal, False otherwise. """ - return self.index == other.index + return other is not None and self.index == other.index def __ne__(self, other): """Determine whether ``other`` is not equal to the node. Two nodes are @@ -1119,7 +1195,10 @@ def get_attribute(self, attr, product=None): """ # Get self.attr and the product and index. self_attr = getattr(self, attr) - if isinstance(product, SupplyChainProduct): + if product is None: + product_obj = None + product_ind = None + elif isinstance(product, SupplyChainProduct): product_obj = product product_ind = product.index else: @@ -1134,17 +1213,19 @@ def get_attribute(self, attr, product=None): return getattr(product_obj, attr) else: # Determine whether attr is set to its default value; if so, try to use product attribute. - # Settable properties that are aliases for attributes require special handling since there's no + # Properties that are aliases for attributes require special handling since there's no # default value for properties. - # if attr == 'holding_cost': - # default_val = self.local_holding_cost - if attr == 'lead_time': - default_val = self.shipment_lead_time + if attr == 'holding_cost': + default_val = self._DEFAULT_VALUES['local_holding_cost'] + elif attr == 'lead_time': + default_val = self._DEFAULT_VALUES['shipment_lead_time'] elif attr == 'inventory_policy': - default_val = self.inventory_policy + default_val = self._DEFAULT_VALUES['_inventory_policy'] + # TODO: other '_' properties? else: default_val = self._DEFAULT_VALUES[attr] - if (default_val is None and self_attr is None) or (self_attr == default_val): + if product_obj is not None and ((default_val is None and self_attr is None) or (self_attr == default_val)): + # Product exists and attr at node is set to default value--use attr at product. return getattr(product_obj, attr) else: return self_attr diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 03caa4b..824f17c 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -172,10 +172,24 @@ def tear_down_class(cls): """Called once, after all tests, if set_up_class successful.""" print_status('TestGetAttribute', 'tear_down_class()') - def test_single_node(self): + def test_singleproduct_node(self): + """Test get_attribute() for single node with single product. + """ + print_status('TestGetAttribute', 'test_singleproduct_node()') + + node = SupplyChainNode(index=0, local_holding_cost=2, lead_time=1, revenue=100) + + self.assertEqual(node.get_attribute('local_holding_cost'), 2) + self.assertEqual(node.get_attribute('holding_cost', None), 2) + self.assertEqual(node.get_attribute('lead_time'), 1) + self.assertEqual(node.get_attribute('revenue'), 100) + self.assertEqual(node.get_attribute('stockout_cost', None), None) + self.assertEqual(node.get_attribute('stockout_cost'), None) + + def test_multiproduct_node(self): """Test get_attribute() for single node with multiple products. """ - print_status('TestGetAttribute', 'test_single_node()') + print_status('TestGetAttribute', 'test_multiproduct_node()') node = SupplyChainNode(index=0, local_holding_cost=2) prod0 = SupplyChainProduct(index=0, lead_time=1, revenue=100) @@ -207,9 +221,9 @@ def test_single_node(self): self.assertEqual(node.get_attribute('initial_inventory_level', 0), 50) self.assertEqual(node.get_attribute('initial_inventory_level', prod1), 70) self.assertEqual(node.get_attribute('initial_inventory_level', 2), 90) - self.assertEqual(node.get_attribute('revenue', prod0), 100) - self.assertEqual(node.get_attribute('revenue', 1), 200) - self.assertEqual(node.get_attribute('revenue', prod2), 300) + self.assertEqual(node.get_attribute('stockout_cost', prod0), None) + self.assertEqual(node.get_attribute('stockout_cost', 1), None) + self.assertEqual(node.get_attribute('stockout_cost', prod2), None) @@ -436,8 +450,8 @@ def test_basic(self): network.nodes[1].remove_product(1) network.nodes[2].remove_product(network.nodes[2].products_by_index[2]) - self.assertEqual(network.nodes[0].product_indices, [None]) - self.assertEqual(network.nodes[1].product_indices, [None]) + self.assertEqual(network.nodes[0].product_indices, []) + self.assertEqual(network.nodes[1].product_indices, []) self.assertEqual(network.nodes[2].product_indices, [3]) def test_multi_product_7node(self): @@ -450,8 +464,8 @@ def test_multi_product_7node(self): network.get_node_from_index(1).remove_product(1) network.get_node_from_index(2).remove_product(network.get_node_from_index(2).products_by_index[2]) - self.assertEqual(network.get_node_from_index(0).product_indices, [None]) - self.assertEqual(network.get_node_from_index(1).product_indices, [None]) + self.assertEqual(network.get_node_from_index(0).product_indices, []) + self.assertEqual(network.get_node_from_index(1).product_indices, []) self.assertEqual(network.get_node_from_index(2).product_indices, [3]) def test_product_does_not_exist(self): @@ -464,7 +478,7 @@ def test_product_does_not_exist(self): network.get_node_from_index(0).remove_product(7) network.get_node_from_index(1).remove_product(7) - self.assertEqual(network.get_node_from_index(0).product_indices, [None]) + self.assertEqual(network.get_node_from_index(0).product_indices, []) self.assertEqual(network.get_node_from_index(1).product_indices, [1]) class TestRemoveProducts(unittest.TestCase): @@ -494,9 +508,9 @@ def test_basic(self): network.nodes[1].remove_products([1]) network.nodes[2].remove_products([network.nodes[2].products_by_index[2], 3]) - self.assertEqual(network.nodes[0].product_indices, [None]) - self.assertEqual(network.nodes[1].product_indices, [None]) - self.assertEqual(network.nodes[2].product_indices, [None]) + self.assertEqual(network.nodes[0].product_indices, []) + self.assertEqual(network.nodes[1].product_indices, []) + self.assertEqual(network.nodes[2].product_indices, []) def test_multi_product_7node(self): """Test remove_product() for 7-node multi-product instance. @@ -508,9 +522,9 @@ def test_multi_product_7node(self): network.get_node_from_index(1).remove_products([1]) network.get_node_from_index(2).remove_products([3, network.get_node_from_index(2).products_by_index[2]]) - self.assertEqual(network.get_node_from_index(0).product_indices, [None]) - self.assertEqual(network.get_node_from_index(1).product_indices, [None]) - self.assertEqual(network.get_node_from_index(2).product_indices, [None]) + self.assertEqual(network.get_node_from_index(0).product_indices, []) + self.assertEqual(network.get_node_from_index(1).product_indices, []) + self.assertEqual(network.get_node_from_index(2).product_indices, []) def test_product_does_not_exist(self): """Test that remove_product() correctly does nothing if product doesn't exist. @@ -522,7 +536,7 @@ def test_product_does_not_exist(self): network.get_node_from_index(0).remove_products([7]) network.get_node_from_index(2).remove_products([3, 7]) - self.assertEqual(network.get_node_from_index(0).product_indices, [None]) + self.assertEqual(network.get_node_from_index(0).product_indices, []) self.assertEqual(network.get_node_from_index(2).product_indices, [2]) @@ -846,6 +860,232 @@ def test_multi_product_network7(self): {(1, 6, None, None, None)} ) +class TestRawMaterialSuppliers(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestRawMaterialSuppliers', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestRawMaterialSuppliers', 'tear_down_class()') + + def test_mwor_no_product(self): + """Test that raw_material_suppliers works correctly on MWOR network with no product added at retailer. + """ + print_status('TestRawMaterialSuppliers', 'test_mwor_no_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + nodes[0].set_bill_of_materials( 5, None, 1, 1) + nodes[0].set_bill_of_materials( 7, None, 1, 2) + nodes[0].set_bill_of_materials( 3, None, 2, 2) + nodes[0].set_bill_of_materials(15, None, 2, 3) + nodes[0].set_bill_of_materials( 6, None, 3, 4) + nodes[0].set_bill_of_materials(16, None, 3, 5) + + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=None), [nodes[1], nodes[2], nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_suppliers(product_index=77) + + def test_mwor_one_product(self): + """Test that raw_material_suppliers works correctly on MWOR network with one product added at retailer. + """ + print_status('TestRawMaterialSuppliers', 'test_mwor_one_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + nodes[0].add_product(SupplyChainProduct(10)) + + nodes[0].set_bill_of_materials( 5, 10, 1, 1) + nodes[0].set_bill_of_materials( 7, 10, 1, 2) + nodes[0].set_bill_of_materials( 3, 10, 2, 2) + nodes[0].set_bill_of_materials(15, 10, 2, 3) + nodes[0].set_bill_of_materials( 6, 10, 3, 4) + nodes[0].set_bill_of_materials(16, 10, 3, 5) + + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10), [nodes[1], nodes[2], nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_suppliers(product_index=None) + _ = nodes[0].raw_material_suppliers(product_index=77) + + def test_mwor_multiple_products(self): + """Test that raw_material_suppliers works correctly on MWOR network with multiple products added at retailer. + """ + print_status('TestRawMaterialSuppliers', 'test_mwor_multiple_products()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + network.get_node_from_index(1).add_products([prods[1], prods[2]]) + network.get_node_from_index(2).add_products([prods[2], prods[3]]) + network.get_node_from_index(3).add_products([prods[4], prods[5]]) + + nodes[0].add_products([SupplyChainProduct(10), SupplyChainProduct(11), SupplyChainProduct(12)]) + + nodes[0].set_bill_of_materials( 5, 10, 1, 1) + nodes[0].set_bill_of_materials( 7, 11, 1, 2) + nodes[0].set_bill_of_materials( 3, 10, 2, 2) + nodes[0].set_bill_of_materials(15, 10, 2, 3) + nodes[0].set_bill_of_materials( 6, 12, 3, 4) + nodes[0].set_bill_of_materials(16, 12, 3, 5) + + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=11), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=12), [nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_suppliers(product_index=None) + _ = nodes[0].raw_material_suppliers(product_index=77) + + def test_multi_product_network7(self): + """Test that bill_of_materials works correctly on 7-node network. + """ + print_status('TestRawMaterialSuppliers', 'test_multi_product_network7()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=None), [nodes[3], nodes[4]]) + self.assertListEqual(nodes[1].raw_material_suppliers(product_index=1), [nodes[4], nodes[5]]) + self.assertListEqual(nodes[2].raw_material_suppliers(product_index=2), [nodes[5]]) + self.assertListEqual(nodes[2].raw_material_suppliers(product_index=3), [nodes[5], nodes[6], None]) + self.assertListEqual(nodes[3].raw_material_suppliers(product_index=None), [None]) + self.assertListEqual(nodes[4].raw_material_suppliers(product_index=None), [None]) + self.assertListEqual(nodes[5].raw_material_suppliers(product_index=4), [None]) + self.assertListEqual(nodes[5].raw_material_suppliers(product_index=5), [None]) + self.assertListEqual(nodes[6].raw_material_suppliers(product_index=None), [None]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_suppliers(product_index=None) + _ = nodes[0].raw_material_suppliers(product_index=77) + + +class TestRawMaterialSupplierIndices(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestRawMaterialSupplierIndices', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestRawMaterialSupplierIndices', 'tear_down_class()') + + def test_mwor_no_product(self): + """Test that raw_material_supplier_indices works correctly on MWOR network with no product added at retailer. + """ + print_status('TestRawMaterialSupplierIndices', 'test_mwor_no_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + nodes[0].set_bill_of_materials( 5, None, 1, 1) + nodes[0].set_bill_of_materials( 7, None, 1, 2) + nodes[0].set_bill_of_materials( 3, None, 2, 2) + nodes[0].set_bill_of_materials(15, None, 2, 3) + nodes[0].set_bill_of_materials( 6, None, 3, 4) + nodes[0].set_bill_of_materials(16, None, 3, 5) + + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=None), [1, 2, 3]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices(product_index=77) + + def test_mwor_one_product(self): + """Test that raw_material_supplier_indices works correctly on MWOR network with one product added at retailer. + """ + print_status('TestRawMaterialSupplierIndices', 'test_mwor_one_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + nodes[0].add_product(SupplyChainProduct(10)) + + nodes[0].set_bill_of_materials( 5, 10, 1, 1) + nodes[0].set_bill_of_materials( 7, 10, 1, 2) + nodes[0].set_bill_of_materials( 3, 10, 2, 2) + nodes[0].set_bill_of_materials(15, 10, 2, 3) + nodes[0].set_bill_of_materials( 6, 10, 3, 4) + nodes[0].set_bill_of_materials(16, 10, 3, 5) + + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10), [1, 2, 3]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices(product_index=None) + _ = nodes[0].raw_material_supplier_indices(product_index=77) + + def test_mwor_multiple_products(self): + """Test that raw_material_supplier_indices works correctly on MWOR network with multiple products added at retailer. + """ + print_status('TestRawMaterialSupplierIndices', 'test_mwor_multiple_products()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + network.get_node_from_index(1).add_products([prods[1], prods[2]]) + network.get_node_from_index(2).add_products([prods[2], prods[3]]) + network.get_node_from_index(3).add_products([prods[4], prods[5]]) + + nodes[0].add_products([SupplyChainProduct(10), SupplyChainProduct(11), SupplyChainProduct(12)]) + + nodes[0].set_bill_of_materials( 5, 10, 1, 1) + nodes[0].set_bill_of_materials( 7, 11, 1, 2) + nodes[0].set_bill_of_materials( 3, 10, 2, 2) + nodes[0].set_bill_of_materials(15, 10, 2, 3) + nodes[0].set_bill_of_materials( 6, 12, 3, 4) + nodes[0].set_bill_of_materials(16, 12, 3, 5) + + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=11), [1]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=12), [3]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices(product_index=None) + _ = nodes[0].raw_material_supplier_indices(product_index=77) + + def test_multi_product_network7(self): + """Test that bill_of_materials works correctly on 7-node network. + """ + print_status('TestRawMaterialSupplierIndices', 'test_multi_product_network7()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=None), [3, 4]) + self.assertListEqual(nodes[1].raw_material_supplier_indices(product_index=1), [4, 5]) + self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=2), [5]) + self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=3), [5, 6, None]) + self.assertListEqual(nodes[3].raw_material_supplier_indices(product_index=None), [None]) + self.assertListEqual(nodes[4].raw_material_supplier_indices(product_index=None), [None]) + self.assertListEqual(nodes[5].raw_material_supplier_indices(product_index=4), [None]) + self.assertListEqual(nodes[5].raw_material_supplier_indices(product_index=5), [None]) + self.assertListEqual(nodes[6].raw_material_supplier_indices(product_index=None), [None]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices(product_index=None) + _ = nodes[0].raw_material_supplier_indices(product_index=77) + + class TestLeadTime(unittest.TestCase): @classmethod def set_up_class(cls): From cbd796f64bb664ffe353d358e8d24be8c4020497 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 30 Mar 2024 14:18:16 -0400 Subject: [PATCH 09/94] Add unit tests for is_singleproduct --- tests/test_supply_chain_node.py | 79 +++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 4 deletions(-) diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 824f17c..dba93fc 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -457,7 +457,7 @@ def test_basic(self): def test_multi_product_7node(self): """Test remove_product() for 7-node multi-product instance. """ - print_status('TestIsMultiProduct', 'test_multi_product_7node()') + print_status('TestRemoveProduct', 'test_multi_product_7node()') network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") @@ -471,7 +471,7 @@ def test_multi_product_7node(self): def test_product_does_not_exist(self): """Test that remove_product() correctly does nothing if product doesn't exist. """ - print_status('TestIsMultiProduct', 'test_product_does_not_exist()') + print_status('TestRemoveProduct', 'test_product_does_not_exist()') network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") @@ -515,7 +515,7 @@ def test_basic(self): def test_multi_product_7node(self): """Test remove_product() for 7-node multi-product instance. """ - print_status('TestIsMultiProduct', 'test_multi_product_7node()') + print_status('TestRemoveProducts', 'test_multi_product_7node()') network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") @@ -529,7 +529,7 @@ def test_multi_product_7node(self): def test_product_does_not_exist(self): """Test that remove_product() correctly does nothing if product doesn't exist. """ - print_status('TestIsMultiProduct', 'test_product_does_not_exist()') + print_status('TestRemoveProducts', 'test_product_does_not_exist()') network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") @@ -613,6 +613,77 @@ def test_multi_product_network7(self): self.assertFalse(network.get_node_from_index(6).is_multiproduct) +class TestIsSingleProduct(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestIsSingleProduct', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestIsSingleProduct', 'tear_down_class()') + + def test_empty_list(self): + """Test that is_singleproduct correctly returns ``True`` if ``products = []``. + """ + print_status('TestIsSingleProduct', 'test_empty_list()') + + network = load_instance("example_6_1") + + # Make sure node 0 has no products. + network.nodes[0].remove_products('all') + + self.assertTrue(network.nodes[0].is_singleproduct) + + def test_none(self): + """Test that is_singleproduct correctly returns ``True`` if ``products is None``. + """ + print_status('TestIsSingleProduct', 'test_none()') + + network = load_instance("example_6_1") + + # Make sure node 0 has no products. + network.nodes[0].remove_products('all') + + self.assertTrue(network.nodes[0].is_singleproduct) + + def test_singleton(self): + """Test that is_singleproduct correctly returns ``True`` if ``products`` has one element. + """ + print_status('TestIsSingleProduct', 'test_singleton()') + + network = load_instance("example_6_1") + + network.nodes[0].add_product(SupplyChainProduct(0)) + + self.assertTrue(network.nodes[0].is_singleproduct) + + def test_multi(self): + """Test that is_singleproduct correctly returns ``False`` if ``products`` contains multiple elements. + """ + print_status('TestIsSingleProduct', 'test_multi()') + + network = load_instance("example_6_1") + + network.nodes[0].add_products([SupplyChainProduct(0), SupplyChainProduct(1)]) + + self.assertFalse(network.nodes[0].is_singleproduct) + + def test_multi_product_network7(self): + """Test that is_singleproduct works correctly for 7-node multi-product instance. + """ + print_status('TestIsSingleProduct', 'test_multi_product_network7()') + + network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + + self.assertTrue(network.get_node_from_index(0).is_singleproduct) + self.assertTrue(network.get_node_from_index(1).is_singleproduct) + self.assertFalse(network.get_node_from_index(2).is_singleproduct) + self.assertTrue(network.get_node_from_index(3).is_singleproduct) + self.assertTrue(network.get_node_from_index(4).is_singleproduct) + self.assertFalse(network.get_node_from_index(5).is_singleproduct) + self.assertTrue(network.get_node_from_index(6).is_singleproduct) # class TestGetProductFromIndex(unittest.TestCase): # @classmethod # def set_up_class(cls): From 827df7a676dc3dd38fce6210febc17d5302a4194 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 1 Apr 2024 08:07:13 -0400 Subject: [PATCH 10/94] Working on updates to sim for multi-product --- src/stockpyl/sim.py | 102 ++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 52 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 2de1e73..e973523 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -33,7 +33,7 @@ #from stockpyl.supply_chain_network import SupplyChainNetwork from stockpyl.supply_chain_node import NodeStateVars from stockpyl.sim_io import write_instance_and_states -from stockpyl import helpers +from stockpyl.helpers import BIG_FLOAT #from tests.instances_ssm_serial import * from stockpyl.instances import load_instance @@ -325,7 +325,9 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan Dictionary indicating whether each node in network has already been visited by the depth-first search. order_quantity_override : dict, optional - Dictionary indicating an order quantity (or ``None``) for each node in network (specified as |class_node| objects). + Dictionary indicating an order quantity (or ``None``) for each node and product in network + (specified as |class_node| and |class_product| objects, or ``None`` for single-product nodes). + e.g., ``order_quantity_override[node][product]`` is the order quantity to use for ``product`` at ``node``. If provided, these order quantity will override the order quantities that would otherwise be calculated for the nodes. If ``order_quantity_override`` is provided but its value is ``None`` for a given node, an order quantity will be calculated for that node as usual. (This option is mostly used @@ -364,68 +366,64 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Loop through products at this node. (If no products, use None.) for prod in node.products or [None]: - # Get lead times (for convenience). + # Get lead times and product index (for convenience). order_lead_time = node.get_attribute('order_lead_time', prod) or 0 shipment_lead_time = node.get_attribute('shipment_lead_time', prod) or 0 + prod_index = prod.index if prod is not None else None - # Place orders to all predecessors. - for p in node.predecessors(include_external=True): - if p is not None: - # Was an override order quantity provided? - if order_quantity_override is not None and node in order_quantity_override \ - and order_quantity_override[node] is not None: - order_quantity = order_quantity_override[node] - # Is there an order-pausing disruption? - elif node.disrupted and node.disruption_process.disruption_type == 'OP': - order_quantity = 0 + # Determine order quantity. + # Was an override order quantity provided? + try: + qty_override = order_quantity_override[node][prod] + except: + qty_override = None + if qty_override is not None: + order_quantity = qty_override + # if order_quantity_override is not None and node in order_quantity_override \ + # and order_quantity_override[node] is not None : + # order_quantity = order_quantity_override[node] + # Is there an order-pausing disruption? + elif node.disrupted and node.disruption_process.disruption_type == 'OP': + order_quantity = 0 + else: + # Calculate order quantity. + policy = node.get_attribute('inventory_policy', product=prod) + if policy is None: + if prod_index: + err_str = f'The inventory_policy attribute for node {node.index} and product {prod_index} is None. You must provide a Policy object in one or both objects in order for the simulation to set order quantities.' else: - # Calculate order quantity. - if node.inventory_policy is None: - raise AttributeError( - f"The inventory_policy attribute for {node.index} is None. You must provide a Policy object in order for the simulation to set order quantities.") - - # Apply node's order capacity if there is one (NEW - 11/9/23): - if node.order_capacity is None: - order_capac = 1.0e300 - else: - order_capac = node.order_capacity - order_quantity = min(order_capac, node.inventory_policy.get_order_quantity(predecessor_index=p.index)) + err_str = f'The inventory_policy attribute for node {node.index} is None. You must provide a Policy object in order for the simulation to set order quantities.' + raise AttributeError(err_str) + + # Determine node/product's order capacity. + order_capac = node.get_attribute('order_capacity', product=prod) or BIG_FLOAT + + # Place orders to all raw material suppliers (predecessors that provide this product/node with + # a raw material). + for p in node.raw_material_suppliers(product_index=prod_index): + p_index = p.index if p is not None else None + + # Calculate order quantity from policy. + order_quantity = min(order_capac, policy.get_order_quantity(predecessor_index=p_index)) # Place order in predecessor's order pipeline. - p.state_vars_current.inbound_order_pipeline[node_index][order_lead_time] = order_quantity - p_index = p.index - else: - # Was an override order quantity provided? - if order_quantity_override is not None and node in order_quantity_override \ - and order_quantity_override[node] is not None: - order_quantity = order_quantity_override[node] - # Is there an order-pausing disruption? - elif node.disrupted and node.disruption_process.disruption_type == 'OP': - order_quantity = 0 + if p is not None: + p.state_vars_current.inbound_order_pipeline[node_index][prod_index][order_lead_time] = order_quantity else: - # Calculate order quantity. - if node.order_capacity is None: - order_capac = 1.0e300 - else: - order_capac = node.order_capacity - order_quantity = min(order_capac, node.inventory_policy.get_order_quantity(predecessor_index=None)) - - # Place order to external supplier. - # (For now, this just means adding to inbound shipment pipeline.) - node.state_vars_current.inbound_shipment_pipeline[None][ - (order_lead_time or 0) + (shipment_lead_time or 0)] += \ - order_quantity - p_index = None - - if order_quantity is None: - order_quantity = None + # Place order to external supplier. (For now, this just means adding to inbound shipment pipeline.) + node.state_vars_current.inbound_shipment_pipeline[None][order_lead_time + shipment_lead_time] += order_quantity + + # if order_quantity is None: + # order_quantity = None # Record order quantity. - node.state_vars_current.order_quantity[p_index] = order_quantity + node.state_vars_current.order_quantity[p_index][prod_index] = order_quantity # Add order to on_order_by_predecessor. - node.state_vars_current.on_order_by_predecessor[p_index] += order_quantity + node.state_vars_current.on_order_by_predecessor[p_index][prod_index] += order_quantity +## STOPPED + def _generate_downstream_shipments(node_index, network, period, visited, consistency_checks='W'): """Generate shipments to all downstream nodes using depth-first-search. Ignore nodes for which visited=True. From 2c15d7f7a7534b8e5321488544ab8117b5082884 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Tue, 2 Apr 2024 18:35:03 -0400 Subject: [PATCH 11/94] About to change so that BOM is not predecessor-specific --- src/stockpyl/sim.py | 314 +++++++++++++++++------------- src/stockpyl/supply_chain_node.py | 19 +- 2 files changed, 194 insertions(+), 139 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index e973523..a0969b9 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -421,8 +421,6 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Add order to on_order_by_predecessor. node.state_vars_current.on_order_by_predecessor[p_index][prod_index] += order_quantity - -## STOPPED def _generate_downstream_shipments(node_index, network, period, visited, consistency_checks='W'): """Generate shipments to all downstream nodes using depth-first-search. @@ -502,29 +500,33 @@ def _initialize_state_vars(network): # Initialize inventory levels and other quantities. for n in network.nodes: - # Initialize inventory_level to initial_inventory_level (or to BS level, etc., if None). - if n.initial_inventory_level is not None: - init_IL = n.initial_inventory_level - else: - init_IL = n.inventory_policy.get_order_quantity(inventory_position=0) - n.state_vars[0].inventory_level = init_IL - - # Initialize inbound shipment pipeline and on-order quantities. - for p_index in n.predecessor_indices(include_external=True): - for l in range(n.shipment_lead_time or 0): - n.state_vars[0].inbound_shipment_pipeline[p_index][l] = n.initial_shipments or 0 - n.state_vars[0].on_order_by_predecessor[p_index] = \ - (n.initial_shipments or 0) * (n.shipment_lead_time or 0) + (n.initial_orders or 0) * ( - n.order_lead_time or 0) - - # Initialize inbound order pipeline. (Exclude external demand.) - for s in n.successors(): - for l in range(s.order_lead_time or 0): - n.state_vars[0].inbound_order_pipeline[s.index][l] = s.initial_orders or 0 - - # Initialize raw material inventory. - for p in n.predecessor_indices(include_external=True): - n.state_vars[0].raw_material_inventory[p_index] = 0 + # Loop through products. + for prod in n.products: + # Shortcut to product index. + prod_index = prod.index if prod is not None else None + + # Initialize inventory_level to initial_inventory_level (or to BS level, etc., if None). + init_IL = n.get_attribute('initial_inventory_level', prod) + if init_IL is None: + init_IL = n.get_attribute('inventory_policy', prod).get_order_quantity(inventory_position=0) + n.state_vars[0][prod_index].inventory_level = init_IL + + # Initialize inbound shipment pipeline and on-order quantities. + for p_index in n.predecessor_indices(include_external=True): + for l in range(n.shipment_lead_time or 0): + n.state_vars[0].inbound_shipment_pipeline[p_index][prod_index][l] = n.get_attribute('initial_shipments', prod) or 0 + n.state_vars[0].on_order_by_predecessor[p_index][prod_index] = \ + (n.get_attribute('initial_shipments', prod) or 0) * (n.get_attribute('shipment_lead_time', prod) or 0) \ + + (n.get_attribute('initial_orders', prod) or 0) * (n.get_attribute('order_lead_time', prod) or 0) + + # Initialize inbound order pipeline. (Exclude external demand.) + for s in n.successors(): + for l in range(s.get_attribute('order_lead_time') or 0): + n.state_vars[0].inbound_order_pipeline[s.index][prod_index][l] = s.get_attribute('initial_orders', prod) or 0 + + # Initialize raw material inventory. + for p_index in n.predecessor_indices(include_external=True): + n.state_vars[0].raw_material_inventory[p_index][prod_index] = 0 def _receive_inbound_orders(node): @@ -539,14 +541,20 @@ def _receive_inbound_orders(node): node : |class_node| The supply chain node. """ - for s_index in node.successor_indices(include_external=True): - # Set inbound_order from pipeline. - node.state_vars_current.inbound_order[s_index] = \ - node.state_vars_current.inbound_order_pipeline[s_index][0] - # Remove order from pipeline. - node.state_vars_current.inbound_order_pipeline[s_index][0] = 0 - # Update demand_cumul. - node.state_vars_current.demand_cumul += node.state_vars_current.inbound_order[s_index] + # Loop through successor nodes. + for s in node.successors(include_external=True): + # Shortcut to successor node index. + s_index = s.index if s is not None else None + + # Loop through products at this node. + for prod_index in node.product_indices: + # Set inbound_order from pipeline. + node.state_vars_current.inbound_order[s_index][prod_index] = \ + node.state_vars_current.inbound_order_pipeline[s_index][prod_index][0] + # Remove order from pipeline. + node.state_vars_current.inbound_order_pipeline[s_index][prod_index][0] = 0 + # Update demand_cumul. + node.state_vars_current.demand_cumul[prod_index] += node.state_vars_current.inbound_order[s_index][prod_index] def _initialize_next_period_state_vars(network, period): @@ -569,52 +577,67 @@ def _initialize_next_period_state_vars(network, period): The current time period. """ + # Loop through nodes. for n in network.nodes: - # Update pipelines. - for p in n.predecessor_indices(include_external=True): - # Is there a transit-pausing disruption? - if n.disrupted and n.disruption_process.disruption_type == 'TP': - # Yes; items in shipment pipeline stay where they are. - n.state_vars[period + 1].inbound_shipment_pipeline[p] = \ - n.state_vars[period].inbound_shipment_pipeline[p].copy() - else: - # No; items in shipment pipeline advance by 1 slot. - # Copy items from slot 0 in period t to t+1. (Normally, this will equal 0, but it can - # be non-zero if there was a type-RP disruption.) - n.state_vars[period + 1].inbound_shipment_pipeline[p][0] = \ - n.state_vars[period].inbound_shipment_pipeline[p][0] - # Add items from slot s+1 in period t to slot s in period t+1. - for s in range(len(n.state_vars[period].inbound_shipment_pipeline[p]) - 1): - n.state_vars[period + 1].inbound_shipment_pipeline[p][s] += \ - n.state_vars[period].inbound_shipment_pipeline[p][s + 1] - - # n.state_vars[period+1].inbound_shipment_pipeline[p] = \ - # n.state_vars[period].inbound_shipment_pipeline[p][1:] + [0] + # Loop through predecessors. + for p in n.predecessors(include_external=True): + # Shortcut to predecessor index. + p_index = p.index if p is not None else None + # Loop through products at predecessor. + for prod_index in (p.products if p is not None else [None]): + + # Is there a transit-pausing disruption? + if n.disrupted and n.get_attribute('disruption_process', prod_index).disruption_type == 'TP': + # Yes; items in shipment pipeline stay where they are. + n.state_vars[period + 1].inbound_shipment_pipeline[p_index][prod_index] = \ + n.state_vars[period].inbound_shipment_pipeline[p_index][prod_index].copy() + else: + # No; items in shipment pipeline advance by 1 slot. + # Copy items from slot 0 in period t to t+1. (Normally, this will equal 0, but it can + # be non-zero if there was a type-RP disruption.) + n.state_vars[period + 1].inbound_shipment_pipeline[p_index][prod_index][0] = \ + n.state_vars[period].inbound_shipment_pipeline[p_index][prod_index][0] + # Add items from slot s+1 in period t to slot s in period t+1. + for s in range(len(n.state_vars[period].inbound_shipment_pipeline[p]) - 1): + n.state_vars[period + 1].inbound_shipment_pipeline[p_index][prod_index][s] += \ + n.state_vars[period].inbound_shipment_pipeline[p_index][prod_index][s + 1] + + # Loop through successors. for s in n.successor_indices(include_external=True): - n.state_vars[period + 1].inbound_order_pipeline[s] = \ - n.state_vars[period].inbound_order_pipeline[s][1:] + [0] + # Loop through products at this node. + for prod_index in n.product_indices: + n.state_vars[period + 1].inbound_order_pipeline[s][prod_index] = \ + n.state_vars[period].inbound_order_pipeline[s][prod_index][1:] + [0] # Set next period's starting IL, BO, IDI, ODI, RM, and OO. - n.state_vars[period + 1].inventory_level = n.state_vars[period].inventory_level - for s_index in n.successor_indices(include_external=True): - n.state_vars[period + 1].backorders_by_successor[s_index] = \ - n.state_vars[period].backorders_by_successor[s_index] - for s_index in n.successor_indices(include_external=False): - n.state_vars[period + 1].outbound_disrupted_items[s_index] = \ - n.state_vars[period].outbound_disrupted_items[s_index] - for p_index in n.predecessor_indices(include_external=True): - n.state_vars[period + 1].on_order_by_predecessor[p_index] = \ - n.state_vars[period].on_order_by_predecessor[p_index] - n.state_vars[period + 1].raw_material_inventory[p_index] = \ - n.state_vars[period].raw_material_inventory[p_index] - n.state_vars[period + 1].inbound_disrupted_items[p_index] = \ - n.state_vars[period].inbound_disrupted_items[p_index] + # Loop through products at node. + for prod_index in n.product_indices: + n.state_vars[period + 1].inventory_level[prod_index] = n.state_vars[period].inventory_level[prod_index] + # Loop through successors. + for s_index in n.successor_indices(include_external=True): + n.state_vars[period + 1].backorders_by_successor[s_index][prod_index] = \ + n.state_vars[period].backorders_by_successor[s_index][prod_index] + for s_index in n.successor_indices(include_external=False): + n.state_vars[period + 1].outbound_disrupted_items[s_index][prod_index] = \ + n.state_vars[period].outbound_disrupted_items[s_index][prod_index] + # Loop through predecessors. + for p in n.predecessors(include_external=True): + p_index = p.index if p is not None else None + # Loop through products at predecessor. + for prod_index in (p.products if p is not None else [None]): + n.state_vars[period + 1].on_order_by_predecessor[p_index][prod_index] = \ + n.state_vars[period].on_order_by_predecessor[p_index][prod_index] + n.state_vars[period + 1].raw_material_inventory[p_index][prod_index] = \ + n.state_vars[period].raw_material_inventory[p_index][prod_index] + n.state_vars[period + 1].inbound_disrupted_items[p_index][prod_index] = \ + n.state_vars[period].inbound_disrupted_items[p_index][prod_index] # Set demand_met_from_stock_cumul and demand_cumul. - n.state_vars[period + 1].demand_met_from_stock_cumul = \ - n.state_vars[period].demand_met_from_stock_cumul - n.state_vars[period + 1].demand_cumul = \ - n.state_vars[period].demand_cumul + for prod_index in n.product_indices: + n.state_vars[period + 1].demand_met_from_stock_cumul[prod_index] = \ + n.state_vars[period].demand_met_from_stock_cumul[prod_index] + n.state_vars[period + 1].demand_cumul[prod_index] = \ + n.state_vars[period].demand_cumul[prod_index] def _calculate_period_costs(network, period): @@ -628,38 +651,47 @@ def _calculate_period_costs(network, period): The time period. """ + # Loop through nodes. for n in network.nodes: - # Finished goods holding cost. - items_held = max(0, n.state_vars[period].inventory_level) + n._get_attribute_total('outbound_disrupted_items', - period) - try: - n.state_vars[period].holding_cost_incurred = n.local_holding_cost_function(items_held) - except TypeError: - n.state_vars[period].holding_cost_incurred = (n.local_holding_cost or 0) * items_held - # Raw materials holding cost. - for p in n.predecessors(include_external=False): - n.state_vars[period].holding_cost_incurred += \ - (p.local_holding_cost or 0) * \ - (n.state_vars[period].raw_material_inventory[p.index] + n.state_vars[period].inbound_disrupted_items[ - p.index]) - # Stockout cost. - try: - n.state_vars[period].stockout_cost_incurred = \ - n.stockout_cost_function(n.state_vars[period].inventory_level) - except TypeError: - n.state_vars[period].stockout_cost_incurred = \ - (n.stockout_cost or 0) * max(0, -n.state_vars[period].inventory_level) - # In-transit holding cost. - if n.in_transit_holding_cost is None: - h = n.local_holding_cost or 0 - else: - h = n.in_transit_holding_cost or 0 - n.state_vars[period].in_transit_holding_cost_incurred = \ - h * float(np.sum([n.state_vars[period].in_transit_to(s) for s in n.successors()])) - # Revenue. - n.state_vars[period].revenue_earned = (n.revenue or 0) * \ - float(np.sum([n.state_vars[period].outbound_shipment[s_index] \ - for s_index in n.successor_indices(include_external=True)])) + # Initialize costs. + n.state_vars[period].holding_cost_incurred = 0 + n.state_vars[period].stockout_cost_incurred = 0 + n.state_vars[period].in_transit_holding_cost_incurred = 0 + n.state_vars[period].revenue_earned = 0 + + # Loop through products at node. + for prod_index in n.product_indices: + # Finished goods holding cost. + items_held = max(0, n.state_vars[period].inventory_level[prod_index]) + + n._get_attribute_total('outbound_disrupted_items', period, product_index=prod_index) + try: + n.state_vars[period].holding_cost_incurred += n.get_attribute('local_holding_cost_function', prod_index).(items_held) + except TypeError: + n.state_vars[period].holding_cost_incurred += (n.get_attribute('local_holding_cost', prod_index) or 0) * items_held + # Raw materials holding cost. + for p in n.predecessors(include_external=False): + n.state_vars[period].holding_cost_incurred += \ + (p.get_attribute('local_holding_cost', prod_index) or 0) * \ + (n.state_vars[period].raw_material_inventory[p.index][prod_index] \ + + n.state_vars[period].inbound_disrupted_items[p.index][prod_index]) + # Stockout cost. + try: + n.state_vars[period].stockout_cost_incurred += \ + n.get_attribute('stockout_cost_function', prod_index)(n.state_vars[period].inventory_level[prod_index]) + except TypeError: + n.state_vars[period].stockout_cost_incurred += \ + (n.get_attribute('stockout_cost', prod_index) or 0) * max(0, -n.state_vars[period].inventory_level[prod_index]) + # In-transit holding cost. + if n.get_attribute('in_transit_holding_cost', prod_index) is None: + h = n.get_attribute('local_holding_cost', prod_index) or 0 + else: + h = n.get_attribute('in_transit_holding_cost', prod_index) or 0 + n.state_vars[period].in_transit_holding_cost_incurred = \ + h * float(np.sum([n.state_vars[period].in_transit_to(s, prod_index) for s in n.successors()])) + # Revenue. + n.state_vars[period].revenue_earned = (n.get_attribute('revenue', prod_index) or 0) * \ + float(np.sum([n.state_vars[period].outbound_shipment[s_index][prod_index] \ + for s_index in n.successor_indices(include_external=True)])) # Total cost. n.state_vars[period].total_cost_incurred = \ @@ -686,35 +718,40 @@ def _receive_inbound_shipments(node): The supply chain node. """ # Loop through predecessors. - for p_index in node.predecessor_indices(include_external=True): - # Determine number of items that will be received from p (if there is no disruption), - # not including inbound disrupted items waiting to be received. - ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][0] - - # Is there a receipt-pausing disruption? - if node.disrupted and node.disruption_process.disruption_type == 'RP': - # Yes: Don't receive anything. - IS = 0 - # Increase inbound disrupted items by the items that would have been received, if - # there were no disruption. - IDI = ready_to_receive - else: - # No: Inbound shipment from p = ready_to_receive + IDI from p. - IS = ready_to_receive + node.state_vars_current.inbound_disrupted_items[p_index] - # Decrease inbound disrupted items by its whole amount. (This will zero out - # inbound_disrupted_items below.) - IDI = -node.state_vars_current.inbound_disrupted_items[p_index] - - # Set inbound_shipment attribute. - node.state_vars_current.inbound_shipment[p_index] = IS - # Remove shipment from pipeline. - node.state_vars_current.inbound_shipment_pipeline[p_index][0] = 0 - # Add shipment to raw material inventory. - node.state_vars_current.raw_material_inventory[p_index] += IS - # Update on-order inventory. - node.state_vars_current.on_order_by_predecessor[p_index] -= ready_to_receive - # Update inbound_disrupted_items. - node.state_vars_current.inbound_disrupted_items[p_index] += IDI + for p in node.predecessors(include_external=True): + # Shortcut to predecessor index. + p_index = p.index if p is not None else None + + # Loop through products at predecessor. + for prod_index in (p.products if p is not None else [None]): + # Determine number of items that will be received from p (if there is no disruption), + # not including inbound disrupted items waiting to be received. + ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][prod_index][0] + + # Is there a receipt-pausing disruption? + if node.disrupted and node.get_attribute('disruption_process', prod_index).disruption_type == 'RP': + # Yes: Don't receive anything. + IS = 0 + # Increase inbound disrupted items by the items that would have been received, if + # there were no disruption. + IDI = ready_to_receive + else: + # No: Inbound shipment from p = ready_to_receive + IDI from p. + IS = ready_to_receive + node.state_vars_current.inbound_disrupted_items[p_index][prod_index] + # Decrease inbound disrupted items by its whole amount. (This will zero out + # inbound_disrupted_items below.) + IDI = -node.state_vars_current.inbound_disrupted_items[p_index][prod_index] + + # Set inbound_shipment attribute. + node.state_vars_current.inbound_shipment[p_index][prod_index] = IS + # Remove shipment from pipeline. + node.state_vars_current.inbound_shipment_pipeline[p_index][prod_index][0] = 0 + # Add shipment to raw material inventory. + node.state_vars_current.raw_material_inventory[p_index][prod_index] += IS + # Update on-order inventory. + node.state_vars_current.on_order_by_predecessor[p_index][prod_index] -= ready_to_receive + # Update inbound_disrupted_items. + node.state_vars_current.inbound_disrupted_items[p_index][prod_index] += IDI def _raw_materials_to_finished_goods(node): @@ -734,7 +771,16 @@ def _raw_materials_to_finished_goods(node): Number of new finished goods added to inventory this period. """ - # Determine number of units that can be processed. + # Determine number of units of each product that can be processed. + new_finished_goods = {} + for prod_index in node.product_indices: + # Determine number of available units of each raw material for this product. + # in units of the product. + avail_rm = {} + for p in node.raw_material_suppliers(prod_index): + p_index = p.index if p is not None else None + for rm_index in p.products: + avail_rm[p_index] = node.state_vars_current.raw_material_inventory[p_index][] new_finished_goods = float(np.min([node.state_vars_current.raw_material_inventory[p_index] for p_index in node.predecessor_indices(include_external=True)])) diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index eaeab57..b6ee239 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1250,6 +1250,8 @@ def _get_attribute_total(self, attribute, period, product_index=None, include_ex inbound shipment, from all predecessor nodes (including the external supply, if any), in period 5. + # TODO: rename this to _get_state_var_total ? + Parameters ---------- attribute : str @@ -1271,26 +1273,33 @@ def _get_attribute_total(self, attribute, period, product_index=None, include_ex if attribute in ('inbound_shipment', 'on_order_by_predecessor', 'raw_material_inventory', 'inbound_disrupted_items'): # These attributes are indexed by predecessor. if period is None: - return float(np.sum([self.state_vars[t].__dict__[attribute][p_index] + return float(np.sum([self.state_vars[t].__dict__[attribute][p_index][product_index] for t in range(len(self.state_vars)) for p_index in self.predecessor_indices(include_external=include_external)])) else: - return float(np.sum([self.state_vars[period].__dict__[attribute][p_index] + return float(np.sum([self.state_vars[period].__dict__[attribute][p_index][product_index] for p_index in self.predecessor_indices(include_external=include_external)])) elif attribute in ('inbound_order', 'outbound_shipment', 'backorders_by_successor', 'outbound_disrupted_items'): # These attributes are indexed by successor. if period is None: - return float(np.sum([self.state_vars[t].__dict__[attribute][s_index] + return float(np.sum([self.state_vars[t].__dict__[attribute][s_index][product_index] for t in range(len(self.state_vars)) for s_index in self.successor_indices(include_external=include_external)])) else: - return float(np.sum([self.state_vars[period].__dict__[attribute][s_index] + return float(np.sum([self.state_vars[period].__dict__[attribute][s_index][product_index] for s_index in self.successor_indices(include_external=include_external)])) - else: + elif attribute in ('disrupted', 'holding_cost_incurred', 'stockout_cost_incurred', 'in_transit_holding_cost_incurred', + 'revenue_earned', 'total_cost_incurred'): + # These attributes are not indexed by product. if period is None: return np.sum([self.state_vars[:].__dict__[attribute]]) else: return self.state_vars[period].__dict__[attribute] + else: + if period is None: + return np.sum([self.state_vars[:].__dict__[attribute][product_index]]) + else: + return self.state_vars[period].__dict__[attribute][product_index] def reindex_all_state_variables(self, old_to_new_dict): """Change indices of all keys in all state variables using ``old_to_new_dict``. From 676826286565873e2f5bfd48c0a2390501bd13d1 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Thu, 4 Apr 2024 13:57:19 -0400 Subject: [PATCH 12/94] Trying to fix breakpoint issue --- src/stockpyl/sim.py | 11 +- src/stockpyl/supply_chain_network.py | 103 ++++- src/stockpyl/supply_chain_node.py | 287 +++++++------ src/stockpyl/supply_chain_product.py | 97 ++++- src/stockpyl/temp.py | 6 + .../multi_product_instance.json | 2 +- .../test_multiproduct_5_7.json | 1 + tests/test_sim.py | 1 - tests/test_sim_io.py | 2 +- tests/test_supply_chain_network.py | 152 +++++++ tests/test_supply_chain_node.py | 380 +++++++++--------- tests/test_supply_chain_product.py | 77 ++++ tests/test_temp.py | 7 + 13 files changed, 775 insertions(+), 351 deletions(-) create mode 100644 src/stockpyl/temp.py create mode 100644 tests/additional_files/test_multiproduct_5_7.json create mode 100644 tests/test_temp.py diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index a0969b9..71ee6ca 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -662,10 +662,10 @@ def _calculate_period_costs(network, period): # Loop through products at node. for prod_index in n.product_indices: # Finished goods holding cost. - items_held = max(0, n.state_vars[period].inventory_level[prod_index]) + + items_held = max(0, n.state_vars[period].inventory_level[prod_index]) + \ n._get_attribute_total('outbound_disrupted_items', period, product_index=prod_index) try: - n.state_vars[period].holding_cost_incurred += n.get_attribute('local_holding_cost_function', prod_index).(items_held) + n.state_vars[period].holding_cost_incurred += n.get_attribute('local_holding_cost_function', prod_index)(items_held) except TypeError: n.state_vars[period].holding_cost_incurred += (n.get_attribute('local_holding_cost', prod_index) or 0) * items_held # Raw materials holding cost. @@ -780,9 +780,10 @@ def _raw_materials_to_finished_goods(node): for p in node.raw_material_suppliers(prod_index): p_index = p.index if p is not None else None for rm_index in p.products: - avail_rm[p_index] = node.state_vars_current.raw_material_inventory[p_index][] - new_finished_goods = float(np.min([node.state_vars_current.raw_material_inventory[p_index] - for p_index in node.predecessor_indices(include_external=True)])) + pass ## STOPPED + # avail_rm[p_index] = node.state_vars_current.raw_material_inventory[p_index][] + # new_finished_goods = float(np.min([node.state_vars_current.raw_material_inventory[p_index] + # for p_index in node.predecessor_indices(include_external=True)])) # Process units: remove from raw material inventory and add to finished goods. for p_index in node.predecessor_indices(include_external=True): diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 895515f..d7136b8 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -12,7 +12,8 @@ -------- This module contains the |class_network| class, which is a network consisting of -one or more nodes. The network and nodes together specify a problem instance. +one or more nodes and, optionally, one or more products. The network, nodes, and +products together specify a problem instance. .. note:: |node_stage| @@ -20,7 +21,7 @@ A |class_network| is used primarily for :ref:`multi-echelon inventory optimization (MEIO) ` or :ref:`simulation `. Most data for the problem instance is specified -in the |class_node| objects contained within the |class_network|, rather than in +in the |class_node| and |class_product| objects contained within the |class_network|, rather than in the network itself. @@ -40,10 +41,11 @@ #import supply_chain_node from stockpyl.supply_chain_node import SupplyChainNode +from stockpyl.supply_chain_product import SupplyChainProduct from stockpyl.demand_source import DemandSource from stockpyl.policy import Policy from stockpyl.disruption_process import DisruptionProcess -from stockpyl.helpers import is_list, is_iterable, ensure_dict_for_nodes, ensure_list_for_nodes +from stockpyl.helpers import is_list, is_dict, is_iterable, ensure_dict_for_nodes, ensure_list_for_nodes from stockpyl.helpers import build_node_data_dict @@ -95,6 +97,7 @@ def __init__(self, **kwargs): _DEFAULT_VALUES = { '_nodes': [], + '_products': [], '_period': 0, 'max_max_replenishment_time': None } @@ -114,6 +117,41 @@ def node_indices(self): """ return [node.index for node in self.nodes] + @property + def products(self): + """List of all products in the network, as |class_product| objects. Includes products + that have been explicitly added to the network via :func:`add_product` as well as products + that are handled by the nodes in the network. Read only. + """ + product_set = set(self._products) + for node in self.nodes: + product_set |= set(node.products) + return list(product_set) + + @property + def product_indices(self): + """List of indices of all products in the network. Includes products + that have been explicitly added to the network via :func:`add_product` as well as products + that are handled by the nodes in the network. Read only. + """ + return [prod.index for prod in self.products] + + @property + def products_by_index(self): + """A dict containing products in the network. Includes products that have been explicitly + added to the network via :func:`add_product` as well as products that are handled by the nodes + in the network. + + The keys of the dict are + product indices and the values are the corresponding |class_product| objects. + For example, ``self.products_by_index[4]`` returns a |class_product| object for the product + with index 4. + + Read only. + """ + # Include all products in network (including in nodes). + return {prod.index: prod for prod in self.products} + @property def period(self): return self._period @@ -185,7 +223,7 @@ def initialize(self): """ # Loop through attributes. Special handling for list attributes. for attr in self._DEFAULT_VALUES.keys(): - if is_list(self._DEFAULT_VALUES[attr]): + if is_list(self._DEFAULT_VALUES[attr]) or is_dict(self._DEFAULT_VALUES[attr]): setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) else: setattr(self, attr, self._DEFAULT_VALUES[attr]) @@ -224,6 +262,8 @@ def deep_equal_to(self, other, rel_tol=1e-8): if sorted(self.node_indices) != sorted(other.node_indices): eq = False + elif sorted(self.product_indices) != sorted(other.product_indices): + eq = False else: # Special handling for some attributes. for attr in self._DEFAULT_VALUES.keys(): @@ -234,6 +274,13 @@ def deep_equal_to(self, other, rel_tol=1e-8): eq = False elif not self.get_node_from_index(n_ind).deep_equal_to(other_node, rel_tol=rel_tol): eq = False + elif attr == '_products': + for prod_ind in sorted(self.product_indices): + other_product = other.products_by_index[prod_ind] + if other_product is None: + eq = False + elif not self.products_by_index[prod_ind].deep_equal_to(other_product, rel_tol=rel_tol): + eq = False else: if getattr(self, attr) != getattr(other, attr): eq = False @@ -260,6 +307,8 @@ def to_dict(self): network_dict['nodes'] = [] for n in self.nodes: network_dict['nodes'].append(n.to_dict()) + elif attr == '_products': + network_dict[attr] = [prod.to_dict() for prod in self.products] else: network_dict[prop] = getattr(self, prop) @@ -305,6 +354,9 @@ def from_dict(cls, the_dict): succs.append(m) n._predecessors = preds n._successors = succs + elif attr == '_products': + if attr not in the_dict: + value = copy.deepcopy(cls._DEFAULT_VALUES['_products']) else: # Remove leading '_' to get property names. prop = attr[1:] if attr[0] == '_' else attr @@ -525,6 +577,49 @@ def networkx_digraph(self): digraph.add_edge(p.index, n.index) return digraph + + # Functions related to product management. + + def add_product(self, product): + """Add ``product`` to the network. ``product`` will not automatically be contained in any + nodes that might be in the network already. + If ``product`` is already in the network (as determined by the index), + do nothing. + + It is not necessary to add products using this function if they are handled by nodes + in the network. The only reason to use this function is to add a product to a network + that is not handled by any node in the network, which is not typical. + + Parameters + ---------- + product : |class_product| + The product to add to the network. + """ + + # Check whether product is already in network. + if product not in self._products: + self._products.append(product) + product.network = self + + def remove_product(self, product): + """Remove a product from the network. If ``product`` is not in the network (as + determined by the index), do nothing. + + The product is removed from the network itself + but is not removed from any nodes within the network. If the product is handled by + any of those nodes, it will still be included in ``self.products``. + + + Parameters + ---------- + product : |class_product| + The product to remove. + """ + + # Check whether product is in network. + if product in self._products: + # Remove product from network. + self._products.remove(product) # =============================================================================== diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index b6ee239..57651e6 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -187,7 +187,6 @@ def __init__(self, index, name=None, network=None, **kwargs): '_products_by_index': {}, '_predecessors': [], '_successors': [], - '_bill_of_materials': {}, 'local_holding_cost': None, 'echelon_holding_cost': None, 'local_holding_cost_function': None, @@ -465,143 +464,143 @@ def remove_products(self, list_of_products): for prod in list_of_products: self.remove_product(prod) - def set_bill_of_materials(self, num_needed=1.0, product_index=None, predecessor_index=None, rm_index=None): - """Specify that ``num_needed`` units of raw material product ``rm_index`` are required from ``predecessor_index`` in order - to make one unit of ``product_index`` at this node. + # def set_bill_of_materials(self, num_needed=1.0, product_index=None, rm_index=None): + # """Specify that ``num_needed`` units of raw material product ``rm_index`` are required from ``predecessor_index`` in order + # to make one unit of ``product_index`` at this node. - * If this is a single-product node and a |class_product| object has been added to the node, - set ``product_index`` to the index of the product; if no product has been added, set ``product_index`` to ``None``. - * If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. - * If the predecessor is a single-product node, set ``rm_index`` to ``None``. - - To remove a BOM relationship, call this function again, setting ``num_needed = 0`` or ``num_needed = None``. - If ``num_needed = 0`` or ``None`` and a BOM relationship does not already exist for the specified product, - predecessory, and raw material, does nothing. - - **Note:** If the node and a predecessor are both single-product (or if the predecessor is the external supplier - and the node's ``supply_type`` is not ``None``), their BOM number is assumed to equal 1, even if it has not been - set explicitly. If the BOM number is something other than 1, it must be set using ``set_bill_of_materials()``. - - Parameters - ---------- - product_index : int, optional - Index of product at this node, or ``None`` if this is a single-product node and no |class_product| object - has been added to the node. - predecessor_index : int, optional - Index of predecessor node, or ``None`` if the predecessor is the external supplier. - rm_index : int, optional - Index of raw material product, or ``None`` if the predecessor is the external supplier or - is single-product. - num_needed : float, optional - The number of units required. Set to 0 or ``None`` to remove the BOM relationship. - """ - - # Are we adding a BOM relationship? - if num_needed: - # Does self._bill_of_materials[product_index] already exist? - if product_index not in self._bill_of_materials: - self._bill_of_materials[product_index] = {} - # Does self._bill_of_materials[product_index][predecessor_index] already exist? - if predecessor_index not in self._bill_of_materials[product_index]: - self._bill_of_materials[product_index][predecessor_index] = {} - # Set self._bill_of_materials[product_index][predecessor_index][rm_index]. - self._bill_of_materials[product_index][predecessor_index][rm_index] = num_needed - else: - # We are removing a BOM relationship. - if product_index in self._bill_of_materials: - if predecessor_index in self._bill_of_materials[product_index]: - if rm_index in self._bill_of_materials[product_index][predecessor_index]: - del self._bill_of_materials[product_index][predecessor_index][rm_index] - # If there are now no raw materials from predecessor_index, remove predecessor_index from - # self._bill_of_materials[product_index]. - if not self._bill_of_materials[product_index][predecessor_index]: - del self._bill_of_materials[product_index][predecessor_index] - # If there are now no predecessors for this product, remove product_index from self._bill_of_materials. - if not self._bill_of_materials[product_index]: - del self._bill_of_materials[product_index] + # * If this is a single-product node and a |class_product| object has been added to the node, + # set ``product_index`` to the index of the product; if no product has been added, set ``product_index`` to ``None``. + # * If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. + # * If the predecessor is a single-product node, set ``rm_index`` to ``None``. + + # To remove a BOM relationship, call this function again, setting ``num_needed = 0`` or ``num_needed = None``. + # If ``num_needed = 0`` or ``None`` and a BOM relationship does not already exist for the specified product, + # predecessory, and raw material, does nothing. + + # **Note:** If the node and a predecessor are both single-product (or if the predecessor is the external supplier + # and the node's ``supply_type`` is not ``None``), their BOM number is assumed to equal 1, even if it has not been + # set explicitly. If the BOM number is something other than 1, it must be set using ``set_bill_of_materials()``. + + # Parameters + # ---------- + # product_index : int, optional + # Index of product at this node, or ``None`` if this is a single-product node and no |class_product| object + # has been added to the node. + # predecessor_index : int, optional + # Index of predecessor node, or ``None`` if the predecessor is the external supplier. + # rm_index : int, optional + # Index of raw material product, or ``None`` if the predecessor is the external supplier or + # is single-product. + # num_needed : float, optional + # The number of units required. Set to 0 or ``None`` to remove the BOM relationship. + # """ + + # # Are we adding a BOM relationship? + # if num_needed: + # # Does self._bill_of_materials[product_index] already exist? + # if product_index not in self._bill_of_materials: + # self._bill_of_materials[product_index] = {} + # # Does self._bill_of_materials[product_index][predecessor_index] already exist? + # if predecessor_index not in self._bill_of_materials[product_index]: + # self._bill_of_materials[product_index][predecessor_index] = {} + # # Set self._bill_of_materials[product_index][predecessor_index][rm_index]. + # self._bill_of_materials[product_index][predecessor_index][rm_index] = num_needed + # else: + # # We are removing a BOM relationship. + # if product_index in self._bill_of_materials: + # if predecessor_index in self._bill_of_materials[product_index]: + # if rm_index in self._bill_of_materials[product_index][predecessor_index]: + # del self._bill_of_materials[product_index][predecessor_index][rm_index] + # # If there are now no raw materials from predecessor_index, remove predecessor_index from + # # self._bill_of_materials[product_index]. + # if not self._bill_of_materials[product_index][predecessor_index]: + # del self._bill_of_materials[product_index][predecessor_index] + # # If there are now no predecessors for this product, remove product_index from self._bill_of_materials. + # if not self._bill_of_materials[product_index]: + # del self._bill_of_materials[product_index] - def get_bill_of_materials(self, product_index=None, predecessor_index=None, rm_index=None): - """Get the number of units of raw material product ``rm_index`` that are required from ``predecessor_index`` in order - to make one unit of ``product_index`` at this node. + # def get_bill_of_materials(self, product_index=None, predecessor_index=None, rm_index=None): + # """Get the number of units of raw material product ``rm_index`` that are required from ``predecessor_index`` in order + # to make one unit of ``product_index`` at this node. - * If this is a single-product node and a |class_product| object has been added to the node, - set ``product_index`` to the index of the product; if no product has been added, set ``product_index`` to ``None``. - * If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. - * If the predecessor is a single-product node, set ``rm_index`` to ``None``. - - Returns 1 if the node and the predecessor are both single-product (or the predecessor is the external supplier and the node - does not have ``supply_type`` ``None``) and there is no BOM relationship specified for this pair. Node(/product) pairs are - assumed to have a BOM number of 1 in this case, unless specified otherwise in the BOM. - - Otherwise, returns 0 if there is no BOM relationship for this product, predecessor, and raw material. - - Parameters - ---------- - product_index : int, optional - Index of product at this node, or ``None`` if this is a single-product node. - predecessor_index : int, optional - Index of predecessor node, or ``None`` if the predecessor is the external supplier. - rm_index : int, optional - Index of raw material product, or ``None`` if the predecessor is the external supplier or - is single-product. - """ - try: - # Return BOM number, if BOM entry exists. - return self._bill_of_materials[product_index][predecessor_index][rm_index] - except: - # Treat supply_type as not None if it's not None in either the node or the product. - supply_type = self.supply_type - if product_index in self.product_indices: - if product_index is not None: - supply_type = supply_type or self.products_by_index[product_index].supply_type - # Default to 1 if predecessor is external and supply_type is not None, or if - # node and predecessor are both single-product. - if (predecessor_index is None and supply_type is not None) \ - or (not self.is_multiproduct and not self.network.get_node_from_index(predecessor_index).is_multiproduct): - return 1 - else: - # No BOM relationship exists; return 0. - return 0 - - @property - def bill_of_materials(self): - """A list of all non-zero bill-of-materials relationships for products at this node. - Relationships are represented as tuples ``(num, n, prod, p, rm)``, where ``num`` is the - number of units required, ``n`` is the index of this node, - ``prod`` is the index of a product (or ``None`` if ``n`` is single-product), - ``p`` is the index of a predecessor node (or ``None`` for external supplier), and ``rm`` is the index - of a product at ``p`` (or ``None`` if ``p`` is single-product or the external supplier). - - **Note:** If the node and a predecessor are both single-product (or if the predecessor is the external supplier - and the node's ``supply_type`` is not ``None``), their BOM number is assumed to equal 1, - even if it has not been set explicitly. If the BOM number is something - other than 1, it must be set using ``set_bill_of_materials()``. - - It is normally easier to access the bill of materials using :func:`get_bill_of_materials`. - - Read only. - """ - bom = [] - - # Build list of product indices, including None if single-product. - prod_indices = self.product_indices or [None] - - # Loop through products, predecessors, and raw materials. - for prod in prod_indices: - for p in self.predecessors(include_external=True): - # Build list of raw materials, including None if single-product - if p: - rm_indices = p.product_indices or [None] - p_ind = p.index - else: - rm_indices = [None] - p_ind = None - for rm in rm_indices: - bom_value = self.get_bill_of_materials(product_index=prod, predecessor_index=p_ind, rm_index=rm) - if bom_value > 0: - bom.append((bom_value, self.index, prod, p_ind, rm)) - - return bom + # * If this is a single-product node and a |class_product| object has been added to the node, + # set ``product_index`` to the index of the product; if no product has been added, set ``product_index`` to ``None``. + # * If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. + # * If the predecessor is a single-product node, set ``rm_index`` to ``None``. + + # Returns 1 if the node and the predecessor are both single-product (or the predecessor is the external supplier and the node + # does not have ``supply_type`` ``None``) and there is no BOM relationship specified for this pair. Node(/product) pairs are + # assumed to have a BOM number of 1 in this case, unless specified otherwise in the BOM. + + # Otherwise, returns 0 if there is no BOM relationship for this product, predecessor, and raw material. + + # Parameters + # ---------- + # product_index : int, optional + # Index of product at this node, or ``None`` if this is a single-product node. + # predecessor_index : int, optional + # Index of predecessor node, or ``None`` if the predecessor is the external supplier. + # rm_index : int, optional + # Index of raw material product, or ``None`` if the predecessor is the external supplier or + # is single-product. + # """ + # try: + # # Return BOM number, if BOM entry exists. + # return self._bill_of_materials[product_index][predecessor_index][rm_index] + # except: + # # Treat supply_type as not None if it's not None in either the node or the product. + # supply_type = self.supply_type + # if product_index in self.product_indices: + # if product_index is not None: + # supply_type = supply_type or self.products_by_index[product_index].supply_type + # # Default to 1 if predecessor is external and supply_type is not None, or if + # # node and predecessor are both single-product. + # if (predecessor_index is None and supply_type is not None) \ + # or (not self.is_multiproduct and not self.network.get_node_from_index(predecessor_index).is_multiproduct): + # return 1 + # else: + # # No BOM relationship exists; return 0. + # return 0 + + # @property + # def bill_of_materials(self): + # """A list of all non-zero bill-of-materials relationships for products at this node. + # Relationships are represented as tuples ``(num, n, prod, p, rm)``, where ``num`` is the + # number of units required, ``n`` is the index of this node, + # ``prod`` is the index of a product (or ``None`` if ``n`` is single-product), + # ``p`` is the index of a predecessor node (or ``None`` for external supplier), and ``rm`` is the index + # of a product at ``p`` (or ``None`` if ``p`` is single-product or the external supplier). + + # **Note:** If the node and a predecessor are both single-product (or if the predecessor is the external supplier + # and the node's ``supply_type`` is not ``None``), their BOM number is assumed to equal 1, + # even if it has not been set explicitly. If the BOM number is something + # other than 1, it must be set using ``set_bill_of_materials()``. + + # It is normally easier to access the bill of materials using :func:`get_bill_of_materials`. + + # Read only. + # """ + # bom = [] + + # # Build list of product indices, including None if single-product. + # prod_indices = self.product_indices or [None] + + # # Loop through products, predecessors, and raw materials. + # for prod in prod_indices: + # for p in self.predecessors(include_external=True): + # # Build list of raw materials, including None if single-product + # if p: + # rm_indices = p.product_indices or [None] + # p_ind = p.index + # else: + # rm_indices = [None] + # p_ind = None + # for rm in rm_indices: + # bom_value = self.get_bill_of_materials(product_index=prod, predecessor_index=p_ind, rm_index=rm) + # if bom_value > 0: + # bom.append((bom_value, self.index, prod, p_ind, rm)) + + # return bom def raw_material_suppliers(self, product_index=None): """Return a list of all predecessors, from which a raw material must be ordered in order to @@ -1016,15 +1015,15 @@ def from_dict(cls, the_dict): value = {} for prod_dict in (the_dict['_products_by_index'].values() or []): value[prod_dict['index']] = SupplyChainProduct.from_dict(prod_dict) - elif attr == '_bill_of_materials': - if attr in the_dict: - bom = copy.deepcopy(the_dict[attr]) - else: - bom = copy.deepcopy(cls._DEFAULT_VALUES[attr]) - # Convert 'null' to None and string-wrapped ints to ints in dictionary keys. - # (Note that JSON encoding/decoding onverts correctly between None and 'null' - # for dictionary values but not keys. Similarly, it leaves ints as strings.) - value = replace_dict_numeric_string_keys(replace_dict_null_keys(bom)) + # elif attr == '_bill_of_materials': + # if attr in the_dict: + # bom = copy.deepcopy(the_dict[attr]) + # else: + # bom = copy.deepcopy(cls._DEFAULT_VALUES[attr]) + # # Convert 'null' to None and string-wrapped ints to ints in dictionary keys. + # # (Note that JSON encoding/decoding onverts correctly between None and 'null' + # # for dictionary values but not keys. Similarly, it leaves ints as strings.) + # value = replace_dict_numeric_string_keys(replace_dict_null_keys(bom)) elif attr == 'demand_source': if attr in the_dict: value = demand_source.DemandSource.from_dict(the_dict[attr]) diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index c43a2af..97bb4f1 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -30,6 +30,30 @@ you are using. +Game plan for BOM: +# TODO: delete this later +- BOM lives at product level, and does not indicate node for either product or raw material +- If a node has no product, a dummy product gets added automatically before the simulation runs +- If a node and a predecessor each have a single product but no BOM relationship is specified for + the two products, a BOM number of 1 is assigned to the product/RM pair before the simulation runs. + This is true whether the node or predecessor have an actual product loaded, or a dummy product. +- To set the BOM number to something other than 1, both nodes must have an actual product loaded and the + BOM needs to be set for that product/RM. +- If a node or its predecessor has more than one product, a BOM relationship must be specified for + at least one product at the node and at least one RM at the predecessor. +- If a node has supply_type 'U', the external supplier is assumed to provide a dummy raw material, + which is not loaded into the external supplier (since a node doesn't exist for that supplier), + but raw material inventory is allocated at the node for the external supplier's dummy product at + the start of the simulation. + The BOM number is 1 in this case. If there are multiple products at the node, they each order + 1 unit of the dummy product. +- To have an external supplier with a BOM number other than 1, you have to create a node to represent + the external supplier. It can have zero costs and LT, etc., but must have the RM product loaded. +- _bill_of_materials[rm_index] = # of units of raw material rm_index required to make 1 unit of product. +- In general, I'm ensuring that everything works if _all_ nodes have products loaded or _no_ nodes have + products loaded, but I'm less sure about the case in which some do and some don't. + + API Reference ------------- @@ -49,7 +73,7 @@ from stockpyl import policy from stockpyl import demand_source from stockpyl import disruption_process -from stockpyl.helpers import change_dict_key, is_integer, is_list +from stockpyl.helpers import is_list, is_dict # =============================================================================== @@ -72,7 +96,7 @@ class SupplyChainProduct(object): name : str A string to identify the product. network : |class_network| - The network that contains node(s) that handle this product. + The network that contains this product. local_holding_cost : float Local holding cost, per unit per period. [:math:`h'`] echelon_holding_cost : float @@ -141,7 +165,7 @@ def __init__(self, index, name=None, network=None, **kwargs): name : str, optional A string to identify the product. network : |class_network|, optional - The network that contains node(s) that handle this product. + The network that contains this product. kwargs : optional Optional keyword arguments to specify node attributes. @@ -176,6 +200,7 @@ def __init__(self, index, name=None, network=None, **kwargs): 'index': None, 'name': None, 'network': None, + '_bill_of_materials': {}, 'local_holding_cost': None, 'echelon_holding_cost': None, 'local_holding_cost_function': None, @@ -197,6 +222,69 @@ def __init__(self, index, name=None, network=None, **kwargs): } + # Properties and functions related to bill of materials. + + def set_bill_of_materials(self, num_needed=1.0, rm_index=None): + """Specify that ``num_needed`` units of raw material product ``rm_index`` are required in order + to make one unit of this product. + + To remove a BOM relationship, call this function again, setting ``num_needed = 0`` or ``num_needed = None``. + If ``num_needed = 0`` or ``None`` and a BOM relationship does not already exist for the specified product + and raw material, does nothing. + + Parameters + ---------- + num_needed : float, optional + The number of units required, by default 1.0. Set to 0 or ``None`` to remove the BOM relationship. + rm_index : int, optional + Index of raw material product, or ``None`` (the default) if the predecessor is the external supplier or + is single-product. + """ + + # Are we adding a BOM relationship? + if num_needed: + # Set self._bill_of_materials[rm_index]. + self._bill_of_materials[rm_index] = num_needed + else: + # We are removing a BOM relationship. + self._bill_of_materials.pop(rm_index, None) + + def get_bill_of_materials(self, rm_index): + """Get the number of units of raw material product ``rm_index`` that are required in order + to make one unit of this product. + + Returns 0 if there is no BOM relationship for this product and ``rm_index``. + + Parameters + ---------- + rm_index : int + Index of raw material product. + """ + try: + # Return BOM number, if BOM entry exists. + return self._bill_of_materials[rm_index] + except: + # No BOM relationship exists; return 0. + return 0 + + def BOM(self, rm_index): + """A shortcut to :func:`~get_bill_of_materials`.""" + return self.get_bill_of_materials(rm_index) + + @property + def bill_of_materials_dict(self): + """A dict containing all non-zero bill-of-materials relationships for this product. + ``bill_of_materials_dict[rm_index]`` is the number of units of raw material ``rm_index`` + required to make one unit of this product. + + It is normally easier to access the bill of materials using :func:`get_bill_of_materials` + (or the shortcut :func:`BOM`). + + Read only. + """ + return self._bill_of_materials + + # Properties and functions related to network structure. @property @@ -243,7 +331,6 @@ def inventory_policy(self, value): # TODO: handle setting product and node attributes - # Special methods. def __eq__(self, other): @@ -313,7 +400,7 @@ def initialize(self): self.disruption_process = disruption_process.DisruptionProcess() elif attr == '_inventory_policy': self.inventory_policy = policy.Policy(node=self) - elif is_list(self._DEFAULT_VALUES[attr]): + elif is_list(self._DEFAULT_VALUES[attr]) or is_dict(self._DEFAULT_VALUES[attr]): setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) else: setattr(self, attr, self._DEFAULT_VALUES[attr]) diff --git a/src/stockpyl/temp.py b/src/stockpyl/temp.py new file mode 100644 index 0000000..2e19678 --- /dev/null +++ b/src/stockpyl/temp.py @@ -0,0 +1,6 @@ +def sq(x): + return x**2 + + +# if __name__ == "__main__": +# print(sq(4)) diff --git a/tests/additional_files/multi_product_instance.json b/tests/additional_files/multi_product_instance.json index 1188500..a6f33ab 100644 --- a/tests/additional_files/multi_product_instance.json +++ b/tests/additional_files/multi_product_instance.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_products_by_index": {}, "_predecessors": [null], "_successors": [0], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "_products_by_index": {}, "_predecessors": [3, 4], "_successors": [], "_bill_of_materials": {"null": {"3": {"null": 4}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 4, "name": null, "network": null, "_products_by_index": {}, "_predecessors": [null], "_successors": [0, 1], "_bill_of_materials": {"null": {"null": {"null": 3}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_products_by_index": {"1": {"index": 1, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [4, 5], "_successors": [], "_bill_of_materials": {"1": {"5": {"4": 2.6, "5": 5.1}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 5, "name": null, "network": null, "_products_by_index": {"4": {"index": 4, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "5": {"index": 5, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "order_capacity": null, "state_vars": []}}, "_predecessors": [null], "_successors": [1, 2], "_bill_of_materials": {"5": {"null": {"null": 16}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_products_by_index": {"2": {"index": 2, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "3": {"index": 3, "name": null, "network": null, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "order_capacity": null, "state_vars": []}}, "_predecessors": [5, 6, null], "_successors": [], "_bill_of_materials": {"2": {"5": {"5": 3.8}}, "3": {"5": {"5": 6}, "6": {"null": 1}, "null": {"null": 5}}}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 6, "name": null, "network": null, "_products_by_index": {}, "_predecessors": [null], "_successors": [2], "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-03-28 07:44:24.573504"} \ No newline at end of file +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"index": 4, "name": null, "network": null, "_products_by_index": {"5": {"index": 5, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "6": {"index": 6, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_products_by_index": {"2": {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "3": {"index": 3, "name": null, "network": null, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "4": {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_products_by_index": {"2": {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "4": {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "_products_by_index": {"0": {"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [2], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_products_by_index": {"0": {"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "1": {"index": 1, "name": null, "network": null, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [2, 3], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 1, "name": null, "network": null, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 3, "name": null, "network": null, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 5, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 6, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-03 07:41:41.297766"} \ No newline at end of file diff --git a/tests/additional_files/test_multiproduct_5_7.json b/tests/additional_files/test_multiproduct_5_7.json new file mode 100644 index 0000000..e544845 --- /dev/null +++ b/tests/additional_files/test_multiproduct_5_7.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"index": 4, "name": null, "network": null, "_products_by_index": {"5": {"index": 5, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "6": {"index": 6, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_products_by_index": {"2": {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "3": {"index": 3, "name": null, "network": null, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "4": {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_products_by_index": {"2": {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "4": {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "_products_by_index": {"0": {"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [2], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_products_by_index": {"0": {"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "1": {"index": 1, "name": null, "network": null, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [2, 3], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 1, "name": null, "network": null, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 3, "name": null, "network": null, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 5, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 6, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-03 07:44:32.514426"} \ No newline at end of file diff --git a/tests/test_sim.py b/tests/test_sim.py index 3eeec95..e08c1b8 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -270,7 +270,6 @@ def test_assembly_3_stage(self): print_status('TestSimulation', 'test_assembly_3_stage()') network = load_instance("assembly_3_stage") - # network = load_instance_old("assembly_3_stage", "/Users/larry/Documents/GitHub/stockpyl/src/stockpyl/datasets/stockpyl_instances_old.json") total_cost = simulation(network, 100, rand_seed=17, progress_bar=False, consistency_checks='E') diff --git a/tests/test_sim_io.py b/tests/test_sim_io.py index dbaade7..1961dda 100644 --- a/tests/test_sim_io.py +++ b/tests/test_sim_io.py @@ -44,7 +44,7 @@ def test_example_6_1(self): # Build network. network = load_instance("example_6_1") -# network = load_instance_old("example_6_1", "/Users/larry/Documents/GitHub/stockpyl/src/stockpyl/datasets/stockpyl_instances_old.json") + # reindex nodes to 2 -> 1 -> 0 network.reindex_nodes({1: 0, 2: 1, 3: 2}) diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index d8389c6..fb7ffa0 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -8,6 +8,7 @@ #from supply_chain_node import * from stockpyl.supply_chain_network import * +from stockpyl.supply_chain_product import * from stockpyl.supply_chain_node import SupplyChainNode from stockpyl.demand_source import DemandSource from stockpyl.instances import * @@ -87,10 +88,16 @@ def test_3_node_serial(self): node1 = SupplyChainNode(1) node2 = SupplyChainNode(2) + prod0 = SupplyChainProduct(0) + prod1 = SupplyChainProduct(1) + network.add_node(node2) network.add_successor(node2, node1) network.add_successor(node1, node0) + network.add_product(prod0) + network.add_product(prod1) + # Equal networks. network2 = copy.deepcopy(network) self.assertTrue(network.deep_equal_to(network2)) @@ -104,6 +111,10 @@ def test_3_node_serial(self): network2.max_max_replenishment_time = 99 self.assertFalse(network.deep_equal_to(network2)) self.assertFalse(network2.deep_equal_to(network)) + network2 = copy.deepcopy(network) + network2.products[0].stockout_cost = 99 + self.assertFalse(network.deep_equal_to(network2)) + self.assertFalse(network2.deep_equal_to(network)) # Unequal networks due to missing node. network2 = copy.deepcopy(network) @@ -111,6 +122,12 @@ def test_3_node_serial(self): self.assertFalse(network.deep_equal_to(network2)) self.assertFalse(network2.deep_equal_to(network)) + # Unequal networks due to missing product. + network2 = copy.deepcopy(network) + network2.remove_product(network2.products[0]) + self.assertFalse(network.deep_equal_to(network2)) + self.assertFalse(network2.deep_equal_to(network)) + def test_4_node_owmr(self): """Test deep_equal_to() on 4-node OWMR system. """ @@ -148,6 +165,38 @@ def test_4_node_owmr(self): self.assertFalse(network.deep_equal_to(network2)) self.assertFalse(network2.deep_equal_to(network)) + def test_multiproduct_5_7(self): + """Test deep_equal_to() on 5-node, 7-product system. + """ + print_status('TestDeepEqualTo', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + + # Equal networks. + network2 = copy.deepcopy(network) + self.assertTrue(network.deep_equal_to(network2)) + self.assertTrue(network2.deep_equal_to(network)) + + # Unequal networks due to parameter. + network2.get_node_from_index(1).in_transit_holding_cost = 99 + self.assertFalse(network.deep_equal_to(network2)) + self.assertFalse(network2.deep_equal_to(network)) + network2 = copy.deepcopy(network) + network2.max_max_replenishment_time = 99 + self.assertFalse(network.deep_equal_to(network2)) + self.assertFalse(network2.deep_equal_to(network)) + + # Unequal networks due to missing node. + network2 = copy.deepcopy(network) + network2.remove_node(network2.nodes[2]) + self.assertFalse(network.deep_equal_to(network2)) + self.assertFalse(network2.deep_equal_to(network)) + + # Unequal networks due to missing product. + network2 = copy.deepcopy(network) + network2.get_node_from_index(0).remove_product(0) + self.assertFalse(network.deep_equal_to(network2)) + self.assertFalse(network2.deep_equal_to(network)) class TestInitialize(unittest.TestCase): @classmethod @@ -603,6 +652,92 @@ def test_4_node_owmr(self): self.assertEqual(node3succ, []) +class TestAddRemoveProduct(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestAddRemoveProduct', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestAddRemoveProduct', 'tear_down_class()') + + def test_basic(self): + """Test remove_product() on product-only system. + """ + print_status('TestAddRemoveProduct', 'test_basic()') + + network = SupplyChainNetwork() + + prod0 = SupplyChainProduct(0) + prod1 = SupplyChainProduct(1) + + network.add_product(prod0) + network.add_product(prod1) + + network.remove_product(network.products_by_index[1]) + + self.assertEqual(network.product_indices, [0]) + + def test_multiproduct_5_7(self): + """Test remove_product() on 5-node, 7-product system. + """ + print_status('TestAddRemoveProduct', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + network.add_product(SupplyChainProduct(10)) + network.add_product(SupplyChainProduct(11)) + + network.remove_product(network.products_by_index[10]) + + self.assertEqual(network.product_indices, [0, 1, 2, 3, 4, 5, 6, 11]) + + +class TestProductLists(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestProductLists', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestProductLists', 'tear_down_class()') + + def test_basic(self): + """Test product-only system. + """ + print_status('TestProductLists', 'test_basic()') + + network = SupplyChainNetwork() + + prod0 = SupplyChainProduct(0) + prod1 = SupplyChainProduct(1) + + network.add_product(prod0) + network.add_product(prod1) + + self.assertEqual(network.products, [prod0, prod1]) + self.assertEqual(network.product_indices, [0, 1]) + self.assertDictEqual(network.products_by_index, {0: prod0, 1: prod1}) + + def test_multiproduct_5_7(self): + """Test 5-node, 7-product system. + """ + print_status('TestProductLists', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + network.add_product(SupplyChainProduct(10)) + network.add_product(SupplyChainProduct(11)) + products = {i: network.products_by_index[i] for i in [0, 1, 2, 3, 4, 5, 6, 10, 11]} + + self.assertEqual(network.products, products) + self.assertEqual(network.product_indices, [0, 1, 2, 3, 4, 5, 6, 10, 11]) + self.assertDictEqual(network.products_by_index, {i: products[i] for i in products.keys()}) + + + class TestReindexNodes(unittest.TestCase): @classmethod def set_up_class(cls): @@ -1793,6 +1928,23 @@ def test_assembly_3_stage(self): # Compare. self.assertTrue(network.deep_equal_to(dict_network)) + def test_multiproduct_5_7(self): + """Test that to_dict() and from_dict() correctly convert SupplyChainNetwork object to and from dict + in 5-node, 7-product system. + """ + print_status('TestToFromDict', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + + # Convert network to dict. + network_dict = network.to_dict() + + # Convert dict back to network. + dict_network = SupplyChainNetwork.from_dict(network_dict) + + # Compare. + self.assertTrue(network.deep_equal_to(dict_network)) + def test_example_6_1_per_22(self): """Test that to_dict() and from_dict() correctly convert SupplyChainNetwork object to and from dict in Example 6.1 per 22. diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index dba93fc..ba07571 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -285,7 +285,7 @@ def test_multi_product_network7(self): """ print_status('TestDescendants', 'test_multi_product_network7()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") desc = {i: network.get_node_from_index(i).descendants for i in network.node_indices} @@ -354,7 +354,7 @@ def test_multi_product_network7(self): """ print_status('TestAncestors', 'test_multi_product_network7()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") anc = {i: network.get_node_from_index(i).ancestors for i in network.node_indices} @@ -459,7 +459,7 @@ def test_multi_product_7node(self): """ print_status('TestRemoveProduct', 'test_multi_product_7node()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") network.get_node_from_index(1).remove_product(1) network.get_node_from_index(2).remove_product(network.get_node_from_index(2).products_by_index[2]) @@ -473,7 +473,7 @@ def test_product_does_not_exist(self): """ print_status('TestRemoveProduct', 'test_product_does_not_exist()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") network.get_node_from_index(0).remove_product(7) network.get_node_from_index(1).remove_product(7) @@ -517,7 +517,7 @@ def test_multi_product_7node(self): """ print_status('TestRemoveProducts', 'test_multi_product_7node()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") network.get_node_from_index(1).remove_products([1]) network.get_node_from_index(2).remove_products([3, network.get_node_from_index(2).products_by_index[2]]) @@ -531,7 +531,7 @@ def test_product_does_not_exist(self): """ print_status('TestRemoveProducts', 'test_product_does_not_exist()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") network.get_node_from_index(0).remove_products([7]) network.get_node_from_index(2).remove_products([3, 7]) @@ -602,7 +602,7 @@ def test_multi_product_network7(self): """ print_status('TestIsMultiProduct', 'test_multi_product_network7()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") self.assertFalse(network.get_node_from_index(0).is_multiproduct) self.assertFalse(network.get_node_from_index(1).is_multiproduct) @@ -675,7 +675,7 @@ def test_multi_product_network7(self): """ print_status('TestIsSingleProduct', 'test_multi_product_network7()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") self.assertTrue(network.get_node_from_index(0).is_singleproduct) self.assertTrue(network.get_node_from_index(1).is_singleproduct) @@ -712,7 +712,7 @@ def test_multi_product_network7(self): # """ # print_status('TestGetProductFromIndex', 'test_multi_product_network7()') -# network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") +# network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") # self.assertIsNone(network.get_node_from_index(0).products[None]) # self.assertIsNone(network.get_node_from_index(0).products[44]) @@ -722,214 +722,214 @@ def test_multi_product_network7(self): # self.assertIsNone(network.get_node_from_index(2).products[44]) -class TestSetGetBillOfMaterials(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestSetGetBillOfMaterials', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestSetGetBillOfMaterials', 'tear_down_class()') - - def test_single_product(self): - """Test that set_ and get_bill_of_materials() work correctly when the node is single-product. - """ - print_status('TestSetGetBillOfMaterials', 'test_single_product()') - - network = mwor_system(3) +# class TestSetGetBillOfMaterials(unittest.TestCase): +# @classmethod +# def set_up_class(cls): +# """Called once, before any tests.""" +# print_status('TestSetGetBillOfMaterials', 'set_up_class()') - network.nodes[1].add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) - network.nodes[2].add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) - network.nodes[3].add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) +# @classmethod +# def tear_down_class(cls): +# """Called once, after all tests, if set_up_class successful.""" +# print_status('TestSetGetBillOfMaterials', 'tear_down_class()') - network.nodes[0].set_bill_of_materials( 5, None, 1, 1) - network.nodes[0].set_bill_of_materials( 7, None, 1, 2) - network.nodes[0].set_bill_of_materials( 3, None, 2, 2) - network.nodes[0].set_bill_of_materials(15, None, 2, 3) - network.nodes[0].set_bill_of_materials( 6, None, 3, 4) - network.nodes[0].set_bill_of_materials(16, None, 3, 5) +# def test_single_product(self): +# """Test that set_ and get_bill_of_materials() work correctly when the node is single-product. +# """ +# print_status('TestSetGetBillOfMaterials', 'test_single_product()') + +# network = mwor_system(3) + +# network.nodes[1].add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) +# network.nodes[2].add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) +# network.nodes[3].add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) + +# network.nodes[0].set_bill_of_materials( 5, None, 1, 1) +# network.nodes[0].set_bill_of_materials( 7, None, 1, 2) +# network.nodes[0].set_bill_of_materials( 3, None, 2, 2) +# network.nodes[0].set_bill_of_materials(15, None, 2, 3) +# network.nodes[0].set_bill_of_materials( 6, None, 3, 4) +# network.nodes[0].set_bill_of_materials(16, None, 3, 5) + +# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 1, 1), 5) +# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 1, 2), 7) +# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 2, 2), 3) +# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 2, 3), 15) +# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 3, 4), 6) +# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 3, 5), 16) + +# def test_multi_product(self): +# """Test that set_ and get_bill_of_materials() work correctly when the node is multi-product. +# """ +# print_status('TestSetGetBillOfMaterials', 'test_multi_product()') - self.assertEqual(network.nodes[0].get_bill_of_materials(None, 1, 1), 5) - self.assertEqual(network.nodes[0].get_bill_of_materials(None, 1, 2), 7) - self.assertEqual(network.nodes[0].get_bill_of_materials(None, 2, 2), 3) - self.assertEqual(network.nodes[0].get_bill_of_materials(None, 2, 3), 15) - self.assertEqual(network.nodes[0].get_bill_of_materials(None, 3, 4), 6) - self.assertEqual(network.nodes[0].get_bill_of_materials(None, 3, 5), 16) +# network = mwor_system(3) - def test_multi_product(self): - """Test that set_ and get_bill_of_materials() work correctly when the node is multi-product. - """ - print_status('TestSetGetBillOfMaterials', 'test_multi_product()') +# network.nodes[0].add_products([SupplyChainProduct(10), SupplyChainProduct(11)]) +# network.nodes[1].add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) +# network.nodes[2].add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) +# network.nodes[3].add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) - network = mwor_system(3) +# network.nodes[0].set_bill_of_materials(5, 10, 1, 1) +# network.nodes[0].set_bill_of_materials(7, 10, 1, 2) +# network.nodes[0].set_bill_of_materials(3, 11, 2, 2) +# network.nodes[0].set_bill_of_materials(15, 10, 2, 3) +# network.nodes[0].set_bill_of_materials(6, 11, 3, 4) +# network.nodes[0].set_bill_of_materials(16, 11, 3, 5) - network.nodes[0].add_products([SupplyChainProduct(10), SupplyChainProduct(11)]) - network.nodes[1].add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) - network.nodes[2].add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) - network.nodes[3].add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) - - network.nodes[0].set_bill_of_materials(5, 10, 1, 1) - network.nodes[0].set_bill_of_materials(7, 10, 1, 2) - network.nodes[0].set_bill_of_materials(3, 11, 2, 2) - network.nodes[0].set_bill_of_materials(15, 10, 2, 3) - network.nodes[0].set_bill_of_materials(6, 11, 3, 4) - network.nodes[0].set_bill_of_materials(16, 11, 3, 5) - - self.assertEqual(network.nodes[0].get_bill_of_materials(10, 1, 1), 5) - self.assertEqual(network.nodes[0].get_bill_of_materials(10, 1, 2), 7) - self.assertEqual(network.nodes[0].get_bill_of_materials(11, 2, 2), 3) - self.assertEqual(network.nodes[0].get_bill_of_materials(10, 2, 3), 15) - self.assertEqual(network.nodes[0].get_bill_of_materials(11, 3, 4), 6) - self.assertEqual(network.nodes[0].get_bill_of_materials(11, 3, 5), 16) +# self.assertEqual(network.nodes[0].get_bill_of_materials(10, 1, 1), 5) +# self.assertEqual(network.nodes[0].get_bill_of_materials(10, 1, 2), 7) +# self.assertEqual(network.nodes[0].get_bill_of_materials(11, 2, 2), 3) +# self.assertEqual(network.nodes[0].get_bill_of_materials(10, 2, 3), 15) +# self.assertEqual(network.nodes[0].get_bill_of_materials(11, 3, 4), 6) +# self.assertEqual(network.nodes[0].get_bill_of_materials(11, 3, 5), 16) - def test_multi_product_network7(self): - """Test that set_ and get_bill_of_materials() work correctly on 7-node multi-product instance. - """ - print_status('TestSetGetBillOfMaterials', 'test_multi_product_network7()') +# def test_multi_product_network7(self): +# """Test that set_ and get_bill_of_materials() work correctly on 7-node multi-product instance. +# """ +# print_status('TestSetGetBillOfMaterials', 'test_multi_product_network7()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") +# network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") - self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 3, None), 4) - self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 4, None), 1) - self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 5, 4), 2.6) - self.assertEqual(network.get_node_from_index(2).get_bill_of_materials(3, 5, 5), 6) - self.assertEqual(network.get_node_from_index(2).get_bill_of_materials(3, None, None), 5) - self.assertEqual(network.get_node_from_index(6).get_bill_of_materials(None, None, None), 1) +# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 3, None), 4) +# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 4, None), 1) +# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 5, 4), 2.6) +# self.assertEqual(network.get_node_from_index(2).get_bill_of_materials(3, 5, 5), 6) +# self.assertEqual(network.get_node_from_index(2).get_bill_of_materials(3, None, None), 5) +# self.assertEqual(network.get_node_from_index(6).get_bill_of_materials(None, None, None), 1) - network.get_node_from_index(0).set_bill_of_materials(500, None, 6, None) - network.get_node_from_index(0).set_bill_of_materials(600, None, 5, 4) - network.get_node_from_index(1).set_bill_of_materials(700, 1, 6, None) - network.get_node_from_index(1).set_bill_of_materials(800, 1, None, None) - - self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 6, None), 500) - self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 5, 4), 600) - self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 6, None), 700) - self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, None, None), 800) - - def test_default_value_1node(self): - """Test that get_bill_of_materials() works correctly in a single-node system - with a single product, in which case the BOM number for the node and the external - supplier defaults to 1. - """ - print_status('TestSetGetBillOfMaterials', 'test_default_value()') +# network.get_node_from_index(0).set_bill_of_materials(500, None, 6, None) +# network.get_node_from_index(0).set_bill_of_materials(600, None, 5, 4) +# network.get_node_from_index(1).set_bill_of_materials(700, 1, 6, None) +# network.get_node_from_index(1).set_bill_of_materials(800, 1, None, None) + +# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 6, None), 500) +# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 5, 4), 600) +# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 6, None), 700) +# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, None, None), 800) + +# def test_default_value_1node(self): +# """Test that get_bill_of_materials() works correctly in a single-node system +# with a single product, in which case the BOM number for the node and the external +# supplier defaults to 1. +# """ +# print_status('TestSetGetBillOfMaterials', 'test_default_value()') - network = single_stage_system() +# network = single_stage_system() - self.assertEqual(network.nodes[0].get_bill_of_materials(), 1) +# self.assertEqual(network.nodes[0].get_bill_of_materials(), 1) - # Now set BOM number explicitly. - network.nodes[0].set_bill_of_materials(num_needed=6.3) - self.assertEqual(network.nodes[0].get_bill_of_materials(), 6.3) +# # Now set BOM number explicitly. +# network.nodes[0].set_bill_of_materials(num_needed=6.3) +# self.assertEqual(network.nodes[0].get_bill_of_materials(), 6.3) - def test_default_value_2node(self): - """Test that get_bill_of_materials() works correctly in a 2-node system - when both the node and its predecessor are single product, in which case the - BOM number defaults to 1. - """ - print_status('TestSetGetBillOfMaterials', 'test_default_value()') +# def test_default_value_2node(self): +# """Test that get_bill_of_materials() works correctly in a 2-node system +# when both the node and its predecessor are single product, in which case the +# BOM number defaults to 1. +# """ +# print_status('TestSetGetBillOfMaterials', 'test_default_value()') - network = serial_system(2) +# network = serial_system(2) - self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(predecessor_index=0), 1) +# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(predecessor_index=0), 1) - # Now set BOM number explicitly. - network.get_node_from_index(1).set_bill_of_materials(predecessor_index=0, num_needed=6.3) - self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(predecessor_index=0), 6.3) +# # Now set BOM number explicitly. +# network.get_node_from_index(1).set_bill_of_materials(predecessor_index=0, num_needed=6.3) +# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(predecessor_index=0), 6.3) - def test_default_value_mwor(self): - """Test that get_bill_of_materials() works correctly in a MWOR system - when both the downstream node and one of its predecessors are single product, in which case the - BOM number defaults to 1. - """ - print_status('TestSetGetBillOfMaterials', 'test_default_value()') - - network = mwor_system(3) +# def test_default_value_mwor(self): +# """Test that get_bill_of_materials() works correctly in a MWOR system +# when both the downstream node and one of its predecessors are single product, in which case the +# BOM number defaults to 1. +# """ +# print_status('TestSetGetBillOfMaterials', 'test_default_value()') - network.get_node_from_index(1).add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) - network.get_node_from_index(2).add_products([SupplyChainProduct(2)]) +# network = mwor_system(3) - self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=1), 0) - self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=2), 1) - self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=3), 1) +# network.get_node_from_index(1).add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) +# network.get_node_from_index(2).add_products([SupplyChainProduct(2)]) +# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=1), 0) +# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=2), 1) +# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=3), 1) -class TestBillOfMaterialsList(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestBillOfMaterialsList', 'set_up_class()') - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestBillOfMaterialsList', 'tear_down_class()') +# class TestBillOfMaterialsList(unittest.TestCase): +# @classmethod +# def set_up_class(cls): +# """Called once, before any tests.""" +# print_status('TestBillOfMaterialsList', 'set_up_class()') - def test_mwor(self): - """Test that bill_of_materials works correctly on MWOR network. - """ - print_status('TestBillOfMaterialsList', 'test_mwor()') +# @classmethod +# def tear_down_class(cls): +# """Called once, after all tests, if set_up_class successful.""" +# print_status('TestBillOfMaterialsList', 'tear_down_class()') - network = mwor_system(3) +# def test_mwor(self): +# """Test that bill_of_materials works correctly on MWOR network. +# """ +# print_status('TestBillOfMaterialsList', 'test_mwor()') - network.get_node_from_index(1).add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) - network.get_node_from_index(2).add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) - network.get_node_from_index(3).add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) +# network = mwor_system(3) - node0 = network.get_node_from_index(0) +# network.get_node_from_index(1).add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) +# network.get_node_from_index(2).add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) +# network.get_node_from_index(3).add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) - node0.set_bill_of_materials( 5, None, 1, 1) - node0.set_bill_of_materials( 7, None, 1, 2) - node0.set_bill_of_materials( 3, None, 2, 2) - node0.set_bill_of_materials(15, None, 2, 3) - node0.set_bill_of_materials( 6, None, 3, 4) - node0.set_bill_of_materials(16, None, 3, 5) - - bom0 = node0.bill_of_materials - self.assertListEqual(bom0, [(5, 0, None, 1, 1), (7, 0, None, 1, 2), (3, 0, None, 2, 2), (15, 0, None, 2, 3), (6, 0, None, 3, 4), (16, 0, None, 3, 5)]) - bom1 = network.get_node_from_index(1).bill_of_materials - self.assertListEqual(bom1, [(1, 1, 1, None, None), (1, 1, 2, None, None)]) - bom2 = network.get_node_from_index(2).bill_of_materials - self.assertListEqual(bom2, [(1, 2, 2, None, None), (1, 2, 3, None, None)]) - bom3 = network.get_node_from_index(3).bill_of_materials - self.assertListEqual(bom3, [(1, 3, 4, None, None), (1, 3, 5, None, None)]) +# node0 = network.get_node_from_index(0) - def test_multi_product_network7(self): - """Test that bill_of_materials works correctly on 7-node network. - """ - print_status('TestBillOfMaterialsList', 'test_multi_product()') +# node0.set_bill_of_materials( 5, None, 1, 1) +# node0.set_bill_of_materials( 7, None, 1, 2) +# node0.set_bill_of_materials( 3, None, 2, 2) +# node0.set_bill_of_materials(15, None, 2, 3) +# node0.set_bill_of_materials( 6, None, 3, 4) +# node0.set_bill_of_materials(16, None, 3, 5) - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") +# bom0 = node0.bill_of_materials +# self.assertListEqual(bom0, [(5, 0, None, 1, 1), (7, 0, None, 1, 2), (3, 0, None, 2, 2), (15, 0, None, 2, 3), (6, 0, None, 3, 4), (16, 0, None, 3, 5)]) +# bom1 = network.get_node_from_index(1).bill_of_materials +# self.assertListEqual(bom1, [(1, 1, 1, None, None), (1, 1, 2, None, None)]) +# bom2 = network.get_node_from_index(2).bill_of_materials +# self.assertListEqual(bom2, [(1, 2, 2, None, None), (1, 2, 3, None, None)]) +# bom3 = network.get_node_from_index(3).bill_of_materials +# self.assertListEqual(bom3, [(1, 3, 4, None, None), (1, 3, 5, None, None)]) - self.assertSetEqual( - set(network.get_node_from_index(0).bill_of_materials), - {(1, 0, None, 4, None), (4, 0, None, 3, None)} - ) - self.assertSetEqual( - set(network.get_node_from_index(1).bill_of_materials), - {(1, 1, 1, 4, None), (2.6, 1, 1, 5, 4), (5.1, 1, 1, 5, 5)} - ) - self.assertSetEqual( - set(network.get_node_from_index(2).bill_of_materials), - {(3.8, 2, 2, 5, 5), (6, 2, 3, 5, 5), (1, 2, 3, 6, None), (5, 2, 3, None, None)} - ) - self.assertSetEqual( - set(network.get_node_from_index(3).bill_of_materials), - {(1, 3, None, None, None)} - ) - self.assertSetEqual( - set(network.get_node_from_index(4).bill_of_materials), - {(3, 4, None, None, None)} - ) - self.assertSetEqual( - set(network.get_node_from_index(5).bill_of_materials), - {(16, 5, 5, None, None), (1, 5, 4, None, None)} - ) - self.assertSetEqual( - set(network.get_node_from_index(6).bill_of_materials), - {(1, 6, None, None, None)} - ) +# def test_multi_product_network7(self): +# """Test that bill_of_materials works correctly on 7-node network. +# """ +# print_status('TestBillOfMaterialsList', 'test_multi_product()') + +# network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + +# self.assertSetEqual( +# set(network.get_node_from_index(0).bill_of_materials), +# {(1, 0, None, 4, None), (4, 0, None, 3, None)} +# ) +# self.assertSetEqual( +# set(network.get_node_from_index(1).bill_of_materials), +# {(1, 1, 1, 4, None), (2.6, 1, 1, 5, 4), (5.1, 1, 1, 5, 5)} +# ) +# self.assertSetEqual( +# set(network.get_node_from_index(2).bill_of_materials), +# {(3.8, 2, 2, 5, 5), (6, 2, 3, 5, 5), (1, 2, 3, 6, None), (5, 2, 3, None, None)} +# ) +# self.assertSetEqual( +# set(network.get_node_from_index(3).bill_of_materials), +# {(1, 3, None, None, None)} +# ) +# self.assertSetEqual( +# set(network.get_node_from_index(4).bill_of_materials), +# {(3, 4, None, None, None)} +# ) +# self.assertSetEqual( +# set(network.get_node_from_index(5).bill_of_materials), +# {(16, 5, 5, None, None), (1, 5, 4, None, None)} +# ) +# self.assertSetEqual( +# set(network.get_node_from_index(6).bill_of_materials), +# {(1, 6, None, None, None)} +# ) class TestRawMaterialSuppliers(unittest.TestCase): @classmethod @@ -1027,7 +1027,7 @@ def test_multi_product_network7(self): """ print_status('TestRawMaterialSuppliers', 'test_multi_product_network7()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") nodes = {i: network.get_node_from_index(i) for i in network.node_indices} self.assertListEqual(nodes[0].raw_material_suppliers(product_index=None), [nodes[3], nodes[4]]) @@ -1140,7 +1140,7 @@ def test_multi_product_network7(self): """ print_status('TestRawMaterialSupplierIndices', 'test_multi_product_network7()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") nodes = {i: network.get_node_from_index(i) for i in network.node_indices} self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=None), [3, 4]) @@ -1517,7 +1517,7 @@ def test_multi_product_network7(self): """ print_status('TestDeepEqualTo', 'test_multi_product_network7()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") node_copies = [copy.deepcopy(n) for n in network.nodes] @@ -1726,7 +1726,7 @@ def test_multi_product_network7(self): """ print_status('TestNodeToFromDict', 'test_multi_product_network7()') - network = load_instance("bom_structure", "/Users/larry/Documents/GitHub/stockpyl/tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") # Convert nodes to dicts. node_dicts = [n.to_dict() for n in network.nodes] diff --git a/tests/test_supply_chain_product.py b/tests/test_supply_chain_product.py index 99b15fe..9132159 100644 --- a/tests/test_supply_chain_product.py +++ b/tests/test_supply_chain_product.py @@ -6,6 +6,7 @@ from stockpyl.policy import Policy from stockpyl.instances import * from stockpyl.sim import * +from tests.settings import RUN_ALL_TESTS # Module-level functions. @@ -75,6 +76,80 @@ def test_bad_params(self): _ = SupplyChainProduct(index=4, foo=7) +class TestSetGetBillOfMaterials(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestSetGetBillOfMaterials', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestSetGetBillOfMaterials', 'tear_down_class()') + + def test_basic(self): + """Test that set_ and get_bill_of_materials() work correctly. + """ + print_status('TestSetGetBillOfMaterials', 'test_basic()') + + prod = {i: SupplyChainProduct(index=i) for i in range(7)} + + prod[0].set_bill_of_materials(2.5, 2) + prod[0].set_bill_of_materials(7, 3) + prod[1].set_bill_of_materials(10, 3) + prod[1].set_bill_of_materials(3.8, 4) + prod[2].set_bill_of_materials(0.2, 5) + prod[3].set_bill_of_materials(2, 5) + prod[4].set_bill_of_materials(50, 6) + + self.assertEqual(prod[0].get_bill_of_materials(2), 2.5) + self.assertEqual(prod[0].get_bill_of_materials(3), 7) + self.assertEqual(prod[1].get_bill_of_materials(3), 10) + self.assertEqual(prod[1].get_bill_of_materials(4), 3.8) + self.assertEqual(prod[2].get_bill_of_materials(5), 0.2) + self.assertEqual(prod[3].get_bill_of_materials(5), 2) + self.assertEqual(prod[4].get_bill_of_materials(6), 50) + + self.assertEqual(prod[0].get_bill_of_materials(5), 0) + self.assertEqual(prod[4].get_bill_of_materials(655), 0) + + +class TestBillOfMaterialsDict(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestBillOfMaterialsDict', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestBillOfMaterialsDict', 'tear_down_class()') + + def test_basic(self): + """Test that bill_of_materials works correctly on MWOR network. + """ + print_status('TestBillOfMaterialsDict', 'test_basic()') + + prod = {i: SupplyChainProduct(index=i) for i in range(7)} + + prod[0].set_bill_of_materials(2.5, 2) + prod[0].set_bill_of_materials(7, 3) + prod[1].set_bill_of_materials(10, 3) + prod[1].set_bill_of_materials(3.8, 4) + prod[2].set_bill_of_materials(0.2, 5) + prod[3].set_bill_of_materials(2, 5) + prod[4].set_bill_of_materials(50, 6) + + self.assertDictEqual(prod[0].bill_of_materials_dict, {2: 2.5, 3: 7}) + self.assertDictEqual(prod[1].bill_of_materials_dict, {3: 10, 4: 3.8}) + self.assertDictEqual(prod[2].bill_of_materials_dict, {5: 0.2}) + self.assertDictEqual(prod[3].bill_of_materials_dict, {5: 2}) + self.assertDictEqual(prod[4].bill_of_materials_dict, {6: 50}) + self.assertDictEqual(prod[5].bill_of_materials_dict, {}) + self.assertDictEqual(prod[6].bill_of_materials_dict, {}) + + + class TestSupplyChainProductEq(unittest.TestCase): @classmethod def set_up_class(cls): @@ -155,6 +230,8 @@ def test_list_contains(self): self.assertEqual(contains5, True) +## STOPPED + class TestDeepEqualTo(unittest.TestCase): @classmethod def set_up_class(cls): diff --git a/tests/test_temp.py b/tests/test_temp.py new file mode 100644 index 0000000..3ddceb4 --- /dev/null +++ b/tests/test_temp.py @@ -0,0 +1,7 @@ +import unittest +from stockpyl.temp import sq +from tests.settings import * + +class TestSq(unittest.TestCase): + def test_sq(self): + self.assertEqual(sq(2), 4) From 24e577a212b85d9b59f5892a97fedd29d1fc86a3 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Thu, 4 Apr 2024 20:14:31 -0400 Subject: [PATCH 13/94] BOM now lives in products, not nodes --- src/stockpyl/supply_chain_network.py | 49 +- src/stockpyl/supply_chain_node.py | 201 +-- src/stockpyl/supply_chain_product.py | 52 +- src/stockpyl/temp.py | 6 - .../multi_product_instance.json | 1104 ++++++++++++++++- tests/test_supply_chain_network.py | 7 +- tests/test_supply_chain_node.py | 449 +++---- tests/test_supply_chain_product.py | 29 +- tests/test_temp.py | 7 - 9 files changed, 1386 insertions(+), 518 deletions(-) delete mode 100644 src/stockpyl/temp.py delete mode 100644 tests/test_temp.py diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index d7136b8..032c7df 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -262,28 +262,39 @@ def deep_equal_to(self, other, rel_tol=1e-8): if sorted(self.node_indices) != sorted(other.node_indices): eq = False - elif sorted(self.product_indices) != sorted(other.product_indices): + elif (None in self.product_indices and None not in other.product_indices) or \ + (None not in self.product_indices and None in other.product_indices): + # None is in one node's product indices but not the other's. eq = False else: - # Special handling for some attributes. - for attr in self._DEFAULT_VALUES.keys(): - if attr == '_nodes': - for n_ind in sorted(self.node_indices): - other_node = other.get_node_from_index(n_ind) - if other_node is None: - eq = False - elif not self.get_node_from_index(n_ind).deep_equal_to(other_node, rel_tol=rel_tol): - eq = False - elif attr == '_products': - for prod_ind in sorted(self.product_indices): - other_product = other.products_by_index[prod_ind] - if other_product is None: - eq = False - elif not self.products_by_index[prod_ind].deep_equal_to(other_product, rel_tol=rel_tol): + # Replace None with -1 in both node's product indices because None can't be sorted. + self_indices = [prod_ind if prod_ind is not None else -1 for prod_ind in self.product_indices] + other_indices = [prod_ind if prod_ind is not None else -1 for prod_ind in other.product_indices] + if sorted(self_indices) != sorted(other_indices): + eq = False + else: + # Special handling for some attributes. + for attr in self._DEFAULT_VALUES.keys(): + if attr == '_nodes': + for n_ind in sorted(self.node_indices): + other_node = other.get_node_from_index(n_ind) + if other_node is None: + eq = False + elif not self.get_node_from_index(n_ind).deep_equal_to(other_node, rel_tol=rel_tol): + eq = False + elif attr == '_products': + for prod_ind in sorted(self_indices): + if prod_ind == -1: + # Replace -1 with None again. + prod_ind = None + other_product = other.products_by_index[prod_ind] + if other_product is None: + eq = False + elif not self.products_by_index[prod_ind].deep_equal_to(other_product, rel_tol=rel_tol): + eq = False + else: + if getattr(self, attr) != getattr(other, attr): eq = False - else: - if getattr(self, attr) != getattr(other, attr): - eq = False return eq diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 57651e6..2870f6f 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -414,8 +414,12 @@ def add_product(self, product): """ # Check whether product is already in node. - if product not in self.products: + if product.index is None: + self._products_by_index[None] = product + elif product not in self.products: self._products_by_index[product.index] = product + # Remove dummy product (if any). + self._remove_dummy_product() def add_products(self, list_of_products): """Add each product in ``list_of_products`` to the node. If a given product is already in the @@ -444,6 +448,10 @@ def remove_product(self, product): self._products_by_index.pop(product.index, None) else: self._products_by_index.pop(product, None) + + if len(self._products_by_index) == 0: + # No real products in the node. Add dummy product. + self._add_dummy_product() def remove_products(self, list_of_products): """Remove each product in ``list_of_products`` from the node. Products in ``list_of_products`` @@ -453,8 +461,8 @@ def remove_products(self, list_of_products): Parameters ---------- - list_of_products : list of |class_product| objects - The list of products to remove from the node. + list_of_products : list of |class_product| objects, or string + The list of products to remove from the node, or ``'all'`` to remove all products. """ if list_of_products == 'all': @@ -463,144 +471,18 @@ def remove_products(self, list_of_products): else: for prod in list_of_products: self.remove_product(prod) + + def _add_dummy_product(self): + """Add a dummy product to the node. Typically this happens when the node is initialized and/or + when all "real" products are removed from the node. + """ + self.add_product(SupplyChainProduct(None)) - # def set_bill_of_materials(self, num_needed=1.0, product_index=None, rm_index=None): - # """Specify that ``num_needed`` units of raw material product ``rm_index`` are required from ``predecessor_index`` in order - # to make one unit of ``product_index`` at this node. - - # * If this is a single-product node and a |class_product| object has been added to the node, - # set ``product_index`` to the index of the product; if no product has been added, set ``product_index`` to ``None``. - # * If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. - # * If the predecessor is a single-product node, set ``rm_index`` to ``None``. - - # To remove a BOM relationship, call this function again, setting ``num_needed = 0`` or ``num_needed = None``. - # If ``num_needed = 0`` or ``None`` and a BOM relationship does not already exist for the specified product, - # predecessory, and raw material, does nothing. - - # **Note:** If the node and a predecessor are both single-product (or if the predecessor is the external supplier - # and the node's ``supply_type`` is not ``None``), their BOM number is assumed to equal 1, even if it has not been - # set explicitly. If the BOM number is something other than 1, it must be set using ``set_bill_of_materials()``. - - # Parameters - # ---------- - # product_index : int, optional - # Index of product at this node, or ``None`` if this is a single-product node and no |class_product| object - # has been added to the node. - # predecessor_index : int, optional - # Index of predecessor node, or ``None`` if the predecessor is the external supplier. - # rm_index : int, optional - # Index of raw material product, or ``None`` if the predecessor is the external supplier or - # is single-product. - # num_needed : float, optional - # The number of units required. Set to 0 or ``None`` to remove the BOM relationship. - # """ - - # # Are we adding a BOM relationship? - # if num_needed: - # # Does self._bill_of_materials[product_index] already exist? - # if product_index not in self._bill_of_materials: - # self._bill_of_materials[product_index] = {} - # # Does self._bill_of_materials[product_index][predecessor_index] already exist? - # if predecessor_index not in self._bill_of_materials[product_index]: - # self._bill_of_materials[product_index][predecessor_index] = {} - # # Set self._bill_of_materials[product_index][predecessor_index][rm_index]. - # self._bill_of_materials[product_index][predecessor_index][rm_index] = num_needed - # else: - # # We are removing a BOM relationship. - # if product_index in self._bill_of_materials: - # if predecessor_index in self._bill_of_materials[product_index]: - # if rm_index in self._bill_of_materials[product_index][predecessor_index]: - # del self._bill_of_materials[product_index][predecessor_index][rm_index] - # # If there are now no raw materials from predecessor_index, remove predecessor_index from - # # self._bill_of_materials[product_index]. - # if not self._bill_of_materials[product_index][predecessor_index]: - # del self._bill_of_materials[product_index][predecessor_index] - # # If there are now no predecessors for this product, remove product_index from self._bill_of_materials. - # if not self._bill_of_materials[product_index]: - # del self._bill_of_materials[product_index] - - # def get_bill_of_materials(self, product_index=None, predecessor_index=None, rm_index=None): - # """Get the number of units of raw material product ``rm_index`` that are required from ``predecessor_index`` in order - # to make one unit of ``product_index`` at this node. - - # * If this is a single-product node and a |class_product| object has been added to the node, - # set ``product_index`` to the index of the product; if no product has been added, set ``product_index`` to ``None``. - # * If the predecessor is the external supplier, set ``predecessor_index`` to ``None``. - # * If the predecessor is a single-product node, set ``rm_index`` to ``None``. - - # Returns 1 if the node and the predecessor are both single-product (or the predecessor is the external supplier and the node - # does not have ``supply_type`` ``None``) and there is no BOM relationship specified for this pair. Node(/product) pairs are - # assumed to have a BOM number of 1 in this case, unless specified otherwise in the BOM. - - # Otherwise, returns 0 if there is no BOM relationship for this product, predecessor, and raw material. - - # Parameters - # ---------- - # product_index : int, optional - # Index of product at this node, or ``None`` if this is a single-product node. - # predecessor_index : int, optional - # Index of predecessor node, or ``None`` if the predecessor is the external supplier. - # rm_index : int, optional - # Index of raw material product, or ``None`` if the predecessor is the external supplier or - # is single-product. - # """ - # try: - # # Return BOM number, if BOM entry exists. - # return self._bill_of_materials[product_index][predecessor_index][rm_index] - # except: - # # Treat supply_type as not None if it's not None in either the node or the product. - # supply_type = self.supply_type - # if product_index in self.product_indices: - # if product_index is not None: - # supply_type = supply_type or self.products_by_index[product_index].supply_type - # # Default to 1 if predecessor is external and supply_type is not None, or if - # # node and predecessor are both single-product. - # if (predecessor_index is None and supply_type is not None) \ - # or (not self.is_multiproduct and not self.network.get_node_from_index(predecessor_index).is_multiproduct): - # return 1 - # else: - # # No BOM relationship exists; return 0. - # return 0 - - # @property - # def bill_of_materials(self): - # """A list of all non-zero bill-of-materials relationships for products at this node. - # Relationships are represented as tuples ``(num, n, prod, p, rm)``, where ``num`` is the - # number of units required, ``n`` is the index of this node, - # ``prod`` is the index of a product (or ``None`` if ``n`` is single-product), - # ``p`` is the index of a predecessor node (or ``None`` for external supplier), and ``rm`` is the index - # of a product at ``p`` (or ``None`` if ``p`` is single-product or the external supplier). - - # **Note:** If the node and a predecessor are both single-product (or if the predecessor is the external supplier - # and the node's ``supply_type`` is not ``None``), their BOM number is assumed to equal 1, - # even if it has not been set explicitly. If the BOM number is something - # other than 1, it must be set using ``set_bill_of_materials()``. - - # It is normally easier to access the bill of materials using :func:`get_bill_of_materials`. - - # Read only. - # """ - # bom = [] - - # # Build list of product indices, including None if single-product. - # prod_indices = self.product_indices or [None] - - # # Loop through products, predecessors, and raw materials. - # for prod in prod_indices: - # for p in self.predecessors(include_external=True): - # # Build list of raw materials, including None if single-product - # if p: - # rm_indices = p.product_indices or [None] - # p_ind = p.index - # else: - # rm_indices = [None] - # p_ind = None - # for rm in rm_indices: - # bom_value = self.get_bill_of_materials(product_index=prod, predecessor_index=p_ind, rm_index=rm) - # if bom_value > 0: - # bom.append((bom_value, self.index, prod, p_ind, rm)) - - # return bom + def _remove_dummy_product(self): + """Remove the dummy product from the node. Typically this happens when a "real" product is added + to the node. + """ + self.remove_product(None) def raw_material_suppliers(self, product_index=None): """Return a list of all predecessors, from which a raw material must be ordered in order to @@ -620,38 +502,36 @@ def raw_material_suppliers(self, product_index=None): list List of all predecessors, as |class_node| objects, from which a raw material must be ordered in order to make ``product_index`` at this node, according to the bill of materials. - # TODO: unit tests Raises ------ ValueError - If ``product_index`` is not found among the node's products, and it's not the case that this is a single-product - node with no |class_product| added. + If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and + this is a single-product node with no |class_product| added. """ # If product index is not in product indices for node, AND it's not the case that this is a single-prdouct node without # a product object and product_index is None, raise exception. if not (self.is_singleproduct and len(self.products) == 0 and product_index is None) and product_index not in self.product_indices: raise ValueError(f'{product_index} is not a product index in this SupplyChainNode') + prod = self.products_by_index[product_index] suppliers = [] for p in self.predecessors(include_external=True): # Determine whether p provides a raw material for the product. - # if self.is_singleproduct and p.is_singleproduct and \ - # self.get_bill_of_materials(predecessor_index=p.index) > 0: - # # The node and predecessor are both single-product, and the predecessor provides a raw material. - # provides_rm = True - # else: - provides_rm = False - if p is None: - p_ind = None - rm_ind_list = [None] + if product_index is None: + # Every product has a BOM number of 1 with a dummy product, so predecessor is + # automatically a raw material supplier. + provides_rm = True + elif p is None: + # Predecessor is external supplier, which is automatically a raw material supplier. + provides_rm = True else: - p_ind = p.index - rm_ind_list = p.product_indices if p.product_indices != [] else [None] - for rm_ind in rm_ind_list: - if self.get_bill_of_materials(product_index=product_index, predecessor_index=p_ind, rm_index=rm_ind) > 0: - # Predecessor provides a raw material. - provides_rm = True + provides_rm = False + for rm_ind in p.product_indices: + if prod.get_bill_of_materials(rm_ind) > 0: + # rm_ind is a raw material for product. + provides_rm = True + # Add p to list if it provides a raw material. if provides_rm: suppliers.append(p) @@ -856,6 +736,9 @@ def initialize(self): setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) else: setattr(self, attr, self._DEFAULT_VALUES[attr]) + + # Add dummy node. + self._add_dummy_product() def deep_equal_to(self, other, rel_tol=1e-8): """Check whether node "deeply equals" ``other``, i.e., if all attributes are @@ -1201,7 +1084,7 @@ def get_attribute(self, attr, product=None): product_obj = product product_ind = product.index else: - product_obj = self.products[product] + product_obj = self.products_by_index[product] product_ind = product # Is self.attr a dict? diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 97bb4f1..b23cd50 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -33,14 +33,20 @@ Game plan for BOM: # TODO: delete this later - BOM lives at product level, and does not indicate node for either product or raw material -- If a node has no product, a dummy product gets added automatically before the simulation runs +- Every node has a dummy product with index None when it is created. When a product is loaded into the + node, the dummy product is removed. If all "real" products are unloaded, a dummy product is added back. +- A dummy product is always assumed to have a BOM number of 1 with every product at every predecessor and + successor, including both dummy and real products. product.get_bill_of_materials(None) returns 1 for every + product, and product.get_bill_of_materials(rm_index) returns 1 if product is a dummy product, regardless of what + rm_index is. - If a node and a predecessor each have a single product but no BOM relationship is specified for - the two products, a BOM number of 1 is assigned to the product/RM pair before the simulation runs. + the two products, a BOM number of 1 is assumed for the product/RM pair. This is true whether the node or predecessor have an actual product loaded, or a dummy product. -- To set the BOM number to something other than 1, both nodes must have an actual product loaded and the - BOM needs to be set for that product/RM. +- To set the BOM number to something other than 1, both the product and the RM must be actual products, + not dummy. - If a node or its predecessor has more than one product, a BOM relationship must be specified for - at least one product at the node and at least one RM at the predecessor. + at least one product at the node and at least one RM at the predecessor (otherwise no items will be + ordered/shipped even though there is an edge between the nodes) - If a node has supply_type 'U', the external supplier is assumed to provide a dummy raw material, which is not loaded into the external supplier (since a node doesn't exist for that supplier), but raw material inventory is allocated at the node for the external supplier's dummy product at @@ -224,7 +230,7 @@ def __init__(self, index, name=None, network=None, **kwargs): # Properties and functions related to bill of materials. - def set_bill_of_materials(self, num_needed=1.0, rm_index=None): + def set_bill_of_materials(self, rm_index, num_needed=1.0): """Specify that ``num_needed`` units of raw material product ``rm_index`` are required in order to make one unit of this product. @@ -232,15 +238,25 @@ def set_bill_of_materials(self, num_needed=1.0, rm_index=None): If ``num_needed = 0`` or ``None`` and a BOM relationship does not already exist for the specified product and raw material, does nothing. + Raises an exception if the product's index is ``None`` or rm_index is ``None``, since + dummy products always have a BOM number of 1 with every other product. + Parameters ---------- + rm_index : int + Index of raw material product. num_needed : float, optional The number of units required, by default 1.0. Set to 0 or ``None`` to remove the BOM relationship. - rm_index : int, optional - Index of raw material product, or ``None`` (the default) if the predecessor is the external supplier or - is single-product. + + Raises + ------ + ValueError + If ``self.index is None`` or ``rm_index is None``. """ + if self.index is None or rm_index is None: + raise ValueError('You cannot set the BOM for dummy products (products with index=None).') + # Are we adding a BOM relationship? if num_needed: # Set self._bill_of_materials[rm_index]. @@ -253,6 +269,8 @@ def get_bill_of_materials(self, rm_index): """Get the number of units of raw material product ``rm_index`` that are required in order to make one unit of this product. + Returns 1 if ``self.index is None`` or ``rm_index is None``, because dummy products always have + a BOM number of 1 with every other product. Returns 0 if there is no BOM relationship for this product and ``rm_index``. Parameters @@ -260,6 +278,9 @@ def get_bill_of_materials(self, rm_index): rm_index : int Index of raw material product. """ + if self.index is None or rm_index is None: + return 1 + try: # Return BOM number, if BOM entry exists. return self._bill_of_materials[rm_index] @@ -277,6 +298,9 @@ def bill_of_materials_dict(self): ``bill_of_materials_dict[rm_index]`` is the number of units of raw material ``rm_index`` required to make one unit of this product. + Dummy products always have a BOM number of 1 with every other product, but this is not + reflected in the dict returned; the dict does not have entries for dummy products. + It is normally easier to access the bill of materials using :func:`get_bill_of_materials` (or the shortcut :func:`BOM`). @@ -369,10 +393,10 @@ def __ne__(self, other): def __hash__(self): """ - Return the hash for the product, which equals its index. + Return the hash for the product, which equals its index, or -1 if its index is ``None``. """ - return self.index + return self.index or -1 def __repr__(self): """ @@ -540,6 +564,12 @@ def from_dict(cls, the_dict): value = policy.Policy.from_dict(None) # Remove "_" from attr so we are setting the property, not the attribute. attr = 'inventory_policy' + elif attr == '_bill_of_materials': + # If keys are integers as strings (this happens if loading from a file), replace with integers. + if attr in the_dict: + value = {int(k): v for k, v in the_dict[attr].items()} + else: + value = copy.deepcopy(cls._DEFAULT_VALUES[attr]) else: if attr in the_dict: value = the_dict[attr] diff --git a/src/stockpyl/temp.py b/src/stockpyl/temp.py deleted file mode 100644 index 2e19678..0000000 --- a/src/stockpyl/temp.py +++ /dev/null @@ -1,6 +0,0 @@ -def sq(x): - return x**2 - - -# if __name__ == "__main__": -# print(sq(4)) diff --git a/tests/additional_files/multi_product_instance.json b/tests/additional_files/multi_product_instance.json index a6f33ab..2f22a11 100644 --- a/tests/additional_files/multi_product_instance.json +++ b/tests/additional_files/multi_product_instance.json @@ -1 +1,1103 @@ -{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"index": 4, "name": null, "network": null, "_products_by_index": {"5": {"index": 5, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "6": {"index": 6, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_products_by_index": {"2": {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "3": {"index": 3, "name": null, "network": null, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "4": {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_products_by_index": {"2": {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "4": {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "_products_by_index": {"0": {"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [2], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_products_by_index": {"0": {"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "1": {"index": 1, "name": null, "network": null, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [2, 3], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 1, "name": null, "network": null, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 3, "name": null, "network": null, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 5, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 6, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-03 07:41:41.297766"} \ No newline at end of file +{ + "_id": "", + "instances": [ + { + "name": "bom_structure", + "description": "", + "data": { + "nodes": [ + { + "index": 4, + "name": null, + "network": null, + "_products_by_index": { + "5": { + "index": 5, + "name": null, + "network": null, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + "6": { + "index": 6, + "name": null, + "network": null, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + }, + "_predecessors": [ + null + ], + "_successors": [ + 2, + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 2, + "name": null, + "network": null, + "_products_by_index": { + "2": { + "index": 2, + "name": null, + "network": null, + "_bill_of_materials": { + "5": 0.2 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + "3": { + "index": 3, + "name": null, + "network": null, + "_bill_of_materials": { + "5": 2 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + "4": { + "index": 4, + "name": null, + "network": null, + "_bill_of_materials": { + "6": 50 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + }, + "_predecessors": [ + 4 + ], + "_successors": [ + 0, + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 3, + "name": null, + "network": null, + "_products_by_index": { + "2": { + "index": 2, + "name": null, + "network": null, + "_bill_of_materials": { + "5": 0.2 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + "4": { + "index": 4, + "name": null, + "network": null, + "_bill_of_materials": { + "6": 50 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + }, + "_predecessors": [ + 4 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 0, + "name": null, + "network": null, + "_products_by_index": { + "0": { + "index": 0, + "name": null, + "network": null, + "_bill_of_materials": { + "2": 2.5, + "3": 7 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 0, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + }, + "_predecessors": [ + 2 + ], + "_successors": [], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 0, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "index": 1, + "name": null, + "network": null, + "_products_by_index": { + "0": { + "index": 0, + "name": null, + "network": null, + "_bill_of_materials": { + "2": 2.5, + "3": 7 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 0, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + "1": { + "index": 1, + "name": null, + "network": null, + "_bill_of_materials": { + "3": 10, + "4": 3.8 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + }, + "_predecessors": [ + 2, + 3 + ], + "_successors": [], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "index": 0, + "name": null, + "network": null, + "_bill_of_materials": { + "2": 2.5, + "3": 7 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 0, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "index": 1, + "name": null, + "network": null, + "_bill_of_materials": { + "3": 10, + "4": 3.8 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "index": 2, + "name": null, + "network": null, + "_bill_of_materials": { + "5": 0.2 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "index": 3, + "name": null, + "network": null, + "_bill_of_materials": { + "5": 2 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "index": 4, + "name": null, + "network": null, + "_bill_of_materials": { + "6": 50 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "index": 5, + "name": null, + "network": null, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "index": 6, + "name": null, + "network": null, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + } + ], + "last_updated": "2024-04-03 07:41:41.297766" +} \ No newline at end of file diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index fb7ffa0..a4e5b52 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -13,8 +13,8 @@ from stockpyl.demand_source import DemandSource from stockpyl.instances import * from stockpyl.sim import * -from tests.settings import * - +#from tests.settings import * +RUN_ALL_TESTS = False # Module-level functions. @@ -732,12 +732,11 @@ def test_multiproduct_5_7(self): network.add_product(SupplyChainProduct(11)) products = {i: network.products_by_index[i] for i in [0, 1, 2, 3, 4, 5, 6, 10, 11]} - self.assertEqual(network.products, products) + self.assertEqual(network.products, list(products.values())) self.assertEqual(network.product_indices, [0, 1, 2, 3, 4, 5, 6, 10, 11]) self.assertDictEqual(network.products_by_index, {i: products[i] for i in products.keys()}) - class TestReindexNodes(unittest.TestCase): @classmethod def set_up_class(cls): diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index ba07571..99162ae 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -280,22 +280,21 @@ def test_4_node_owmr(self): self.assertEqual(desc[2], []) self.assertEqual(desc[3], []) - def test_multi_product_network7(self): + def test_multiproduct_5_7(self): """Test descendants for 7-node multi-product system. """ - print_status('TestDescendants', 'test_multi_product_network7()') + print_status('TestDescendants', 'test_multiproduct_5_7()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") desc = {i: network.get_node_from_index(i).descendants for i in network.node_indices} self.assertEqual(desc[0], []) self.assertEqual(desc[1], []) - self.assertEqual(desc[2], []) - self.assertEqual(desc[3], [network.get_node_from_index(0)]) - self.assertEqual(desc[4], [network.get_node_from_index(0), network.get_node_from_index(1)]) - self.assertEqual(desc[5], [network.get_node_from_index(1), network.get_node_from_index(2)]) - self.assertEqual(desc[6], [network.get_node_from_index(2)]) + self.assertEqual(desc[2], [network.get_node_from_index(0), network.get_node_from_index(1)]) + self.assertEqual(desc[3], [network.get_node_from_index(1)]) + self.assertEqual(desc[4], [network.get_node_from_index(0), network.get_node_from_index(1), network.get_node_from_index(2), network.get_node_from_index(3)]) + class TestAncestors(unittest.TestCase): @@ -349,22 +348,20 @@ def test_4_node_owmr(self): self.assertEqual(anc[2], [nodes[0]]) self.assertEqual(anc[3], [nodes[0]]) - def test_multi_product_network7(self): - """Test ancestors for 7-node multi-product system. + def test_multiproduct_5_7(self): + """Test ancestors for 5-node, 7-product system. """ - print_status('TestAncestors', 'test_multi_product_network7()') + print_status('TestAncestors', 'test_multiproduct_5_7()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") anc = {i: network.get_node_from_index(i).ancestors for i in network.node_indices} - self.assertEqual(anc[0], [network.get_node_from_index(3), network.get_node_from_index(4)]) - self.assertEqual(anc[1], [network.get_node_from_index(4), network.get_node_from_index(5)]) - self.assertEqual(anc[2], [network.get_node_from_index(5), network.get_node_from_index(6)]) - self.assertEqual(anc[3], []) + self.assertEqual(anc[0], [network.get_node_from_index(2), network.get_node_from_index(4)]) + self.assertEqual(anc[1], [network.get_node_from_index(2), network.get_node_from_index(3), network.get_node_from_index(4)]) + self.assertEqual(anc[2], [network.get_node_from_index(4)]) + self.assertEqual(anc[3], [network.get_node_from_index(4)]) self.assertEqual(anc[4], []) - self.assertEqual(anc[5], []) - self.assertEqual(anc[6], []) class TestAddProduct(unittest.TestCase): @@ -450,36 +447,58 @@ def test_basic(self): network.nodes[1].remove_product(1) network.nodes[2].remove_product(network.nodes[2].products_by_index[2]) - self.assertEqual(network.nodes[0].product_indices, []) - self.assertEqual(network.nodes[1].product_indices, []) + self.assertEqual(network.nodes[0].product_indices, [None]) + self.assertEqual(network.nodes[1].product_indices, [None]) self.assertEqual(network.nodes[2].product_indices, [3]) - def test_multi_product_7node(self): - """Test remove_product() for 7-node multi-product instance. + def test_multiproduct_5_7(self): + """Test remove_product() for 5-node 7-product instance. """ - print_status('TestRemoveProduct', 'test_multi_product_7node()') + print_status('TestRemoveProduct', 'test_multiproduct_5_7()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + network.get_node_from_index(0).remove_product(network.get_node_from_index(0).products_by_index[0]) network.get_node_from_index(1).remove_product(1) network.get_node_from_index(2).remove_product(network.get_node_from_index(2).products_by_index[2]) - self.assertEqual(network.get_node_from_index(0).product_indices, []) - self.assertEqual(network.get_node_from_index(1).product_indices, []) - self.assertEqual(network.get_node_from_index(2).product_indices, [3]) + self.assertEqual(network.get_node_from_index(0).product_indices, [None]) + self.assertEqual(network.get_node_from_index(1).product_indices, [0]) + self.assertEqual(network.get_node_from_index(2).product_indices, [3, 4]) def test_product_does_not_exist(self): """Test that remove_product() correctly does nothing if product doesn't exist. """ print_status('TestRemoveProduct', 'test_product_does_not_exist()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") network.get_node_from_index(0).remove_product(7) network.get_node_from_index(1).remove_product(7) - self.assertEqual(network.get_node_from_index(0).product_indices, []) - self.assertEqual(network.get_node_from_index(1).product_indices, [1]) + self.assertEqual(network.get_node_from_index(0).product_indices, [0]) + self.assertEqual(network.get_node_from_index(1).product_indices, [0, 1]) + + +class TestAddRemoveDummyProduct(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestAddRemoveDummyProduct', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestAddRemoveDummyProduct', 'tear_down_class()') + + def test_basic(self): + """Basic test. + """ + print_status('TestAddRemoveDummyProduct', 'test_basic()') + + node = SupplyChainNode(0) + self.assertEqual(node.product_indices, [None]) + class TestRemoveProducts(unittest.TestCase): @classmethod @@ -508,39 +527,40 @@ def test_basic(self): network.nodes[1].remove_products([1]) network.nodes[2].remove_products([network.nodes[2].products_by_index[2], 3]) - self.assertEqual(network.nodes[0].product_indices, []) - self.assertEqual(network.nodes[1].product_indices, []) - self.assertEqual(network.nodes[2].product_indices, []) + self.assertEqual(network.nodes[0].product_indices, [None]) + self.assertEqual(network.nodes[1].product_indices, [None]) + self.assertEqual(network.nodes[2].product_indices, [None]) - def test_multi_product_7node(self): - """Test remove_product() for 7-node multi-product instance. + def test_multiproduct_5_7(self): + """Test remove_product() for 5-node 7-product instance. """ - print_status('TestRemoveProducts', 'test_multi_product_7node()') + print_status('TestRemoveProducts', 'test_multiproduct_5_7()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + network.get_node_from_index(0).remove_products([network.get_node_from_index(0).products_by_index[0]]) network.get_node_from_index(1).remove_products([1]) network.get_node_from_index(2).remove_products([3, network.get_node_from_index(2).products_by_index[2]]) - self.assertEqual(network.get_node_from_index(0).product_indices, []) - self.assertEqual(network.get_node_from_index(1).product_indices, []) - self.assertEqual(network.get_node_from_index(2).product_indices, []) + self.assertEqual(network.get_node_from_index(0).product_indices, [None]) + self.assertEqual(network.get_node_from_index(1).product_indices, [0]) + self.assertEqual(network.get_node_from_index(2).product_indices, [4]) def test_product_does_not_exist(self): """Test that remove_product() correctly does nothing if product doesn't exist. """ print_status('TestRemoveProducts', 'test_product_does_not_exist()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") network.get_node_from_index(0).remove_products([7]) network.get_node_from_index(2).remove_products([3, 7]) - self.assertEqual(network.get_node_from_index(0).product_indices, []) - self.assertEqual(network.get_node_from_index(2).product_indices, [2]) + self.assertEqual(network.get_node_from_index(0).product_indices, [0]) + self.assertEqual(network.get_node_from_index(2).product_indices, [2, 4]) -class TestIsMultiProduct(unittest.TestCase): +class TestIsSingleMultiProduct(unittest.TestCase): @classmethod def set_up_class(cls): """Called once, before any tests.""" @@ -551,22 +571,10 @@ def tear_down_class(cls): """Called once, after all tests, if set_up_class successful.""" print_status('TestIsMultiProduct', 'tear_down_class()') - def test_empty_list(self): - """Test that is_multiproduct correctly returns ``False`` if ``products = []``. - """ - print_status('TestIsMultiProduct', 'test_empty_list()') - - network = load_instance("example_6_1") - - # Make sure node 0 has no products. - network.nodes[0].remove_products('all') - - self.assertFalse(network.nodes[0].is_multiproduct) - - def test_none(self): - """Test that is_multiproduct correctly returns ``False`` if ``products is None``. + def test_dummy(self): + """Test that is_multiproduct and is_singleproduct return correct results if node only has dummy product. """ - print_status('TestIsMultiProduct', 'test_none()') + print_status('TestIsMultiProduct', 'test_dummy()') network = load_instance("example_6_1") @@ -574,9 +582,10 @@ def test_none(self): network.nodes[0].remove_products('all') self.assertFalse(network.nodes[0].is_multiproduct) + self.assertTrue(network.nodes[0].is_singleproduct) def test_singleton(self): - """Test that is_multiproduct correctly returns ``False`` if ``products`` has one element. + """Test that is_multiproduct and is_singleproduct return correct results if node has one real product. """ print_status('TestIsMultiProduct', 'test_singleton()') @@ -585,9 +594,10 @@ def test_singleton(self): network.nodes[0].add_product(SupplyChainProduct(0)) self.assertFalse(network.nodes[0].is_multiproduct) + self.assertTrue(network.nodes[0].is_singleproduct) def test_multi(self): - """Test that is_multiproduct correctly returns ``False`` if ``products`` contains multiple elements. + """Test that is_multiproduct and is_singleproduct return correct results if node has multiple products. """ print_status('TestIsMultiProduct', 'test_multi()') @@ -596,94 +606,36 @@ def test_multi(self): network.nodes[0].add_products([SupplyChainProduct(0), SupplyChainProduct(1)]) self.assertTrue(network.nodes[0].is_multiproduct) + self.assertFalse(network.nodes[0].is_singleproduct) - def test_multi_product_network7(self): - """Test that is_multiproduct works correctly for 7-node multi-product instance. + def test_multiproduct_5_7(self): + """Test that is_multiproduct and is_singleproduct work correctly for 5-node, 7-product instance. """ - print_status('TestIsMultiProduct', 'test_multi_product_network7()') + print_status('TestIsMultiProduct', 'test_multiproduct_5_7()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") self.assertFalse(network.get_node_from_index(0).is_multiproduct) - self.assertFalse(network.get_node_from_index(1).is_multiproduct) + self.assertTrue(network.get_node_from_index(1).is_multiproduct) self.assertTrue(network.get_node_from_index(2).is_multiproduct) - self.assertFalse(network.get_node_from_index(3).is_multiproduct) - self.assertFalse(network.get_node_from_index(4).is_multiproduct) - self.assertTrue(network.get_node_from_index(5).is_multiproduct) - self.assertFalse(network.get_node_from_index(6).is_multiproduct) - + self.assertTrue(network.get_node_from_index(3).is_multiproduct) + self.assertTrue(network.get_node_from_index(4).is_multiproduct) -class TestIsSingleProduct(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestIsSingleProduct', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestIsSingleProduct', 'tear_down_class()') - - def test_empty_list(self): - """Test that is_singleproduct correctly returns ``True`` if ``products = []``. - """ - print_status('TestIsSingleProduct', 'test_empty_list()') - - network = load_instance("example_6_1") - - # Make sure node 0 has no products. - network.nodes[0].remove_products('all') - - self.assertTrue(network.nodes[0].is_singleproduct) - - def test_none(self): - """Test that is_singleproduct correctly returns ``True`` if ``products is None``. - """ - print_status('TestIsSingleProduct', 'test_none()') - - network = load_instance("example_6_1") - - # Make sure node 0 has no products. - network.nodes[0].remove_products('all') - - self.assertTrue(network.nodes[0].is_singleproduct) - - def test_singleton(self): - """Test that is_singleproduct correctly returns ``True`` if ``products`` has one element. - """ - print_status('TestIsSingleProduct', 'test_singleton()') - - network = load_instance("example_6_1") - - network.nodes[0].add_product(SupplyChainProduct(0)) - - self.assertTrue(network.nodes[0].is_singleproduct) - - def test_multi(self): - """Test that is_singleproduct correctly returns ``False`` if ``products`` contains multiple elements. - """ - print_status('TestIsSingleProduct', 'test_multi()') - - network = load_instance("example_6_1") - - network.nodes[0].add_products([SupplyChainProduct(0), SupplyChainProduct(1)]) + self.assertTrue(network.get_node_from_index(0).is_singleproduct) + self.assertFalse(network.get_node_from_index(1).is_singleproduct) + self.assertFalse(network.get_node_from_index(2).is_singleproduct) + self.assertFalse(network.get_node_from_index(3).is_singleproduct) + self.assertFalse(network.get_node_from_index(4).is_singleproduct) - self.assertFalse(network.nodes[0].is_singleproduct) + # Add a node with no product loaded. + network.add_node(SupplyChainNode(20)) + self.assertFalse(network.get_node_from_index(20).is_multiproduct) + self.assertTrue(network.get_node_from_index(20).is_singleproduct) - def test_multi_product_network7(self): - """Test that is_singleproduct works correctly for 7-node multi-product instance. - """ - print_status('TestIsSingleProduct', 'test_multi_product_network7()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") - self.assertTrue(network.get_node_from_index(0).is_singleproduct) - self.assertTrue(network.get_node_from_index(1).is_singleproduct) - self.assertFalse(network.get_node_from_index(2).is_singleproduct) - self.assertTrue(network.get_node_from_index(3).is_singleproduct) - self.assertTrue(network.get_node_from_index(4).is_singleproduct) - self.assertFalse(network.get_node_from_index(5).is_singleproduct) - self.assertTrue(network.get_node_from_index(6).is_singleproduct) + + # class TestGetProductFromIndex(unittest.TestCase): # @classmethod # def set_up_class(cls): @@ -712,7 +664,7 @@ def test_multi_product_network7(self): # """ # print_status('TestGetProductFromIndex', 'test_multi_product_network7()') -# network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") +# network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") # self.assertIsNone(network.get_node_from_index(0).products[None]) # self.assertIsNone(network.get_node_from_index(0).products[44]) @@ -789,7 +741,7 @@ def test_multi_product_network7(self): # """ # print_status('TestSetGetBillOfMaterials', 'test_multi_product_network7()') -# network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") +# network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") # self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 3, None), 4) # self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 4, None), 1) @@ -896,11 +848,11 @@ def test_multi_product_network7(self): # self.assertListEqual(bom3, [(1, 3, 4, None, None), (1, 3, 5, None, None)]) # def test_multi_product_network7(self): -# """Test that bill_of_materials works correctly on 7-node network. +# """Test that bill_of_materials works correctly on 5-node, 7-product network. # """ # print_status('TestBillOfMaterialsList', 'test_multi_product()') -# network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") +# network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") # self.assertSetEqual( # set(network.get_node_from_index(0).bill_of_materials), @@ -931,6 +883,7 @@ def test_multi_product_network7(self): # {(1, 6, None, None, None)} # ) + class TestRawMaterialSuppliers(unittest.TestCase): @classmethod def set_up_class(cls): @@ -943,7 +896,7 @@ def tear_down_class(cls): print_status('TestRawMaterialSuppliers', 'tear_down_class()') def test_mwor_no_product(self): - """Test that raw_material_suppliers works correctly on MWOR network with no product added at retailer. + """Test that raw_material_suppliers and raw_material_supplier_indices work correctly on MWOR network with no product added at retailer. """ print_status('TestRawMaterialSuppliers', 'test_mwor_no_product()') @@ -955,19 +908,14 @@ def test_mwor_no_product(self): nodes[2].add_products([prods[2], prods[3]]) nodes[3].add_products([prods[4], prods[5]]) - nodes[0].set_bill_of_materials( 5, None, 1, 1) - nodes[0].set_bill_of_materials( 7, None, 1, 2) - nodes[0].set_bill_of_materials( 3, None, 2, 2) - nodes[0].set_bill_of_materials(15, None, 2, 3) - nodes[0].set_bill_of_materials( 6, None, 3, 4) - nodes[0].set_bill_of_materials(16, None, 3, 5) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=None), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=None), [1, 2, 3]) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers(product_index=77) + _ = nodes[0].raw_material_supplier_indices(product_index=77) def test_mwor_one_product(self): - """Test that raw_material_suppliers works correctly on MWOR network with one product added at retailer. + """Test that raw_material_suppliers and raw_material_supplier_indices work correctly on MWOR network with one product added at retailer. """ print_status('TestRawMaterialSuppliers', 'test_mwor_one_product()') @@ -980,21 +928,22 @@ def test_mwor_one_product(self): nodes[3].add_products([prods[4], prods[5]]) nodes[0].add_product(SupplyChainProduct(10)) - - nodes[0].set_bill_of_materials( 5, 10, 1, 1) - nodes[0].set_bill_of_materials( 7, 10, 1, 2) - nodes[0].set_bill_of_materials( 3, 10, 2, 2) - nodes[0].set_bill_of_materials(15, 10, 2, 3) - nodes[0].set_bill_of_materials( 6, 10, 3, 4) - nodes[0].set_bill_of_materials(16, 10, 3, 5) + nodes[0].products[0].set_bill_of_materials(1, 5) + nodes[0].products[0].set_bill_of_materials(2, 7) + nodes[0].products[0].set_bill_of_materials(3, 3) + nodes[0].products[0].set_bill_of_materials(4, 15) + nodes[0].products[0].set_bill_of_materials(5, 6) self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10), [1, 2, 3]) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers(product_index=None) _ = nodes[0].raw_material_suppliers(product_index=77) + _ = nodes[0].raw_material_supplier_indices(product_index=None) + _ = nodes[0].raw_material_supplier_indices(product_index=77) def test_mwor_multiple_products(self): - """Test that raw_material_suppliers works correctly on MWOR network with multiple products added at retailer. + """Test that raw_material_suppliers and raw_material_supplier_indices work correctly on MWOR network with multiple products added at retailer. """ print_status('TestRawMaterialSuppliers', 'test_mwor_multiple_products()') @@ -1008,151 +957,55 @@ def test_mwor_multiple_products(self): nodes[0].add_products([SupplyChainProduct(10), SupplyChainProduct(11), SupplyChainProduct(12)]) - nodes[0].set_bill_of_materials( 5, 10, 1, 1) - nodes[0].set_bill_of_materials( 7, 11, 1, 2) - nodes[0].set_bill_of_materials( 3, 10, 2, 2) - nodes[0].set_bill_of_materials(15, 10, 2, 3) - nodes[0].set_bill_of_materials( 6, 12, 3, 4) - nodes[0].set_bill_of_materials(16, 12, 3, 5) + nodes[0].products_by_index[10].set_bill_of_materials(1, 5) + nodes[0].products_by_index[10].set_bill_of_materials(2, 7) + nodes[0].products_by_index[11].set_bill_of_materials(3, 3) + nodes[0].products_by_index[11].set_bill_of_materials(4, 15) + nodes[0].products_by_index[12].set_bill_of_materials(5, 6) self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=11), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=11), [nodes[2], nodes[3]]) self.assertListEqual(nodes[0].raw_material_suppliers(product_index=12), [nodes[3]]) - with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers(product_index=None) - _ = nodes[0].raw_material_suppliers(product_index=77) - - def test_multi_product_network7(self): - """Test that bill_of_materials works correctly on 7-node network. - """ - print_status('TestRawMaterialSuppliers', 'test_multi_product_network7()') - - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") - nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=None), [nodes[3], nodes[4]]) - self.assertListEqual(nodes[1].raw_material_suppliers(product_index=1), [nodes[4], nodes[5]]) - self.assertListEqual(nodes[2].raw_material_suppliers(product_index=2), [nodes[5]]) - self.assertListEqual(nodes[2].raw_material_suppliers(product_index=3), [nodes[5], nodes[6], None]) - self.assertListEqual(nodes[3].raw_material_suppliers(product_index=None), [None]) - self.assertListEqual(nodes[4].raw_material_suppliers(product_index=None), [None]) - self.assertListEqual(nodes[5].raw_material_suppliers(product_index=4), [None]) - self.assertListEqual(nodes[5].raw_material_suppliers(product_index=5), [None]) - self.assertListEqual(nodes[6].raw_material_suppliers(product_index=None), [None]) - with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers(product_index=None) - _ = nodes[0].raw_material_suppliers(product_index=77) - - -class TestRawMaterialSupplierIndices(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestRawMaterialSupplierIndices', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestRawMaterialSupplierIndices', 'tear_down_class()') - - def test_mwor_no_product(self): - """Test that raw_material_supplier_indices works correctly on MWOR network with no product added at retailer. - """ - print_status('TestRawMaterialSupplierIndices', 'test_mwor_no_product()') - - network = mwor_system(3) - nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - - prods = {i: SupplyChainProduct(i) for i in range(1, 6)} - nodes[1].add_products([prods[1], prods[2]]) - nodes[2].add_products([prods[2], prods[3]]) - nodes[3].add_products([prods[4], prods[5]]) - - nodes[0].set_bill_of_materials( 5, None, 1, 1) - nodes[0].set_bill_of_materials( 7, None, 1, 2) - nodes[0].set_bill_of_materials( 3, None, 2, 2) - nodes[0].set_bill_of_materials(15, None, 2, 3) - nodes[0].set_bill_of_materials( 6, None, 3, 4) - nodes[0].set_bill_of_materials(16, None, 3, 5) - - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=None), [1, 2, 3]) - with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices(product_index=77) - - def test_mwor_one_product(self): - """Test that raw_material_supplier_indices works correctly on MWOR network with one product added at retailer. - """ - print_status('TestRawMaterialSupplierIndices', 'test_mwor_one_product()') - - network = mwor_system(3) - nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - - prods = {i: SupplyChainProduct(i) for i in range(1, 6)} - nodes[1].add_products([prods[1], prods[2]]) - nodes[2].add_products([prods[2], prods[3]]) - nodes[3].add_products([prods[4], prods[5]]) - - nodes[0].add_product(SupplyChainProduct(10)) - - nodes[0].set_bill_of_materials( 5, 10, 1, 1) - nodes[0].set_bill_of_materials( 7, 10, 1, 2) - nodes[0].set_bill_of_materials( 3, 10, 2, 2) - nodes[0].set_bill_of_materials(15, 10, 2, 3) - nodes[0].set_bill_of_materials( 6, 10, 3, 4) - nodes[0].set_bill_of_materials(16, 10, 3, 5) - - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10), [1, 2, 3]) - with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices(product_index=None) - _ = nodes[0].raw_material_supplier_indices(product_index=77) - - def test_mwor_multiple_products(self): - """Test that raw_material_supplier_indices works correctly on MWOR network with multiple products added at retailer. - """ - print_status('TestRawMaterialSupplierIndices', 'test_mwor_multiple_products()') - - network = mwor_system(3) - nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - - prods = {i: SupplyChainProduct(i) for i in range(1, 6)} - network.get_node_from_index(1).add_products([prods[1], prods[2]]) - network.get_node_from_index(2).add_products([prods[2], prods[3]]) - network.get_node_from_index(3).add_products([prods[4], prods[5]]) - - nodes[0].add_products([SupplyChainProduct(10), SupplyChainProduct(11), SupplyChainProduct(12)]) - - nodes[0].set_bill_of_materials( 5, 10, 1, 1) - nodes[0].set_bill_of_materials( 7, 11, 1, 2) - nodes[0].set_bill_of_materials( 3, 10, 2, 2) - nodes[0].set_bill_of_materials(15, 10, 2, 3) - nodes[0].set_bill_of_materials( 6, 12, 3, 4) - nodes[0].set_bill_of_materials(16, 12, 3, 5) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=11), [1]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=11), [2, 3]) self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=12), [3]) with self.assertRaises(ValueError): + _ = nodes[0].raw_material_suppliers(product_index=None) + _ = nodes[0].raw_material_suppliers(product_index=77) _ = nodes[0].raw_material_supplier_indices(product_index=None) _ = nodes[0].raw_material_supplier_indices(product_index=77) - def test_multi_product_network7(self): - """Test that bill_of_materials works correctly on 7-node network. + def test_multiproduct_5_7(self): + """Test that raw_material_suppliers and raw_material_supplier_indices work correctly on 5-node, 7-product network. """ - print_status('TestRawMaterialSupplierIndices', 'test_multi_product_network7()') + print_status('TestRawMaterialSuppliers', 'test_multiproduct_5_7()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=None), [3, 4]) - self.assertListEqual(nodes[1].raw_material_supplier_indices(product_index=1), [4, 5]) - self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=2), [5]) - self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=3), [5, 6, None]) - self.assertListEqual(nodes[3].raw_material_supplier_indices(product_index=None), [None]) - self.assertListEqual(nodes[4].raw_material_supplier_indices(product_index=None), [None]) - self.assertListEqual(nodes[5].raw_material_supplier_indices(product_index=4), [None]) - self.assertListEqual(nodes[5].raw_material_supplier_indices(product_index=5), [None]) - self.assertListEqual(nodes[6].raw_material_supplier_indices(product_index=None), [None]) + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=0), [nodes[2]]) + self.assertListEqual(nodes[1].raw_material_suppliers(product_index=0), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[1].raw_material_suppliers(product_index=1), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[2].raw_material_suppliers(product_index=2), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers(product_index=3), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers(product_index=4), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers(product_index=2), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers(product_index=4), [nodes[4]]) + self.assertListEqual(nodes[4].raw_material_suppliers(product_index=5), [None]) + self.assertListEqual(nodes[4].raw_material_suppliers(product_index=6), [None]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=0), [2]) + self.assertListEqual(nodes[1].raw_material_supplier_indices(product_index=0), [2, 3]) + self.assertListEqual(nodes[1].raw_material_supplier_indices(product_index=1), [2, 3]) + self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=2), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=3), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=4), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices(product_index=2), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices(product_index=4), [4]) + self.assertListEqual(nodes[4].raw_material_supplier_indices(product_index=5), [None]) + self.assertListEqual(nodes[4].raw_material_supplier_indices(product_index=6), [None]) with self.assertRaises(ValueError): + _ = nodes[0].raw_material_suppliers(product_index=None) + _ = nodes[0].raw_material_suppliers(product_index=77) _ = nodes[0].raw_material_supplier_indices(product_index=None) _ = nodes[0].raw_material_supplier_indices(product_index=77) @@ -1512,12 +1365,12 @@ def test_rong_atan_snyder_figure_1a(self): self.assertFalse(node6copy.deep_equal_to(node6)) self.assertFalse(node6.deep_equal_to(node6copy)) - def test_multi_product_network7(self): - """Test deep_equal_to() for nodes in 7-node multi-product network. + def test_multiproduct_5_7(self): + """Test deep_equal_to() for nodes in 5-node, 7-product network. """ - print_status('TestDeepEqualTo', 'test_multi_product_network7()') + print_status('TestDeepEqualTo', 'test_multiproduct_5_7()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") node_copies = [copy.deepcopy(n) for n in network.nodes] @@ -1535,9 +1388,9 @@ def test_multi_product_network7(self): self.assertFalse(network.nodes[2].deep_equal_to(node_copies[2])) # Unequal networks due to missing policy. - node_copies[6].inventory_policy = None - self.assertFalse(node_copies[6].deep_equal_to(network.nodes[6])) - self.assertFalse(network.nodes[6].deep_equal_to(node_copies[6])) + node_copies[2].inventory_policy = None + self.assertFalse(node_copies[2].deep_equal_to(network.nodes[2])) + self.assertFalse(network.nodes[2].deep_equal_to(node_copies[2])) class TestNodeToFromDict(unittest.TestCase): @@ -2110,11 +1963,13 @@ def test_initialize(self): n2 = SupplyChainNode(index=None) n1.initialize() self.assertTrue(n1.deep_equal_to(n2)) + self.assertEqual(n1.products, [None]) n1 = SupplyChainNode(index=None, local_holding_cost=2, stockout_cost=50, shipment_lead_time=3) n2 = SupplyChainNode(index=None) n1.initialize() self.assertTrue(n1.deep_equal_to(n2)) + self.assertEqual(n1.products, [None]) class TestNodeStateVarsToFromDict(unittest.TestCase): diff --git a/tests/test_supply_chain_product.py b/tests/test_supply_chain_product.py index 9132159..a879d70 100644 --- a/tests/test_supply_chain_product.py +++ b/tests/test_supply_chain_product.py @@ -94,13 +94,13 @@ def test_basic(self): prod = {i: SupplyChainProduct(index=i) for i in range(7)} - prod[0].set_bill_of_materials(2.5, 2) - prod[0].set_bill_of_materials(7, 3) - prod[1].set_bill_of_materials(10, 3) - prod[1].set_bill_of_materials(3.8, 4) - prod[2].set_bill_of_materials(0.2, 5) - prod[3].set_bill_of_materials(2, 5) - prod[4].set_bill_of_materials(50, 6) + prod[0].set_bill_of_materials(2, 2.5) + prod[0].set_bill_of_materials(3, 7) + prod[1].set_bill_of_materials(3, 10) + prod[1].set_bill_of_materials(4, 3.8) + prod[2].set_bill_of_materials(5, 0.2) + prod[3].set_bill_of_materials(5, 2) + prod[4].set_bill_of_materials(6, 50) self.assertEqual(prod[0].get_bill_of_materials(2), 2.5) self.assertEqual(prod[0].get_bill_of_materials(3), 7) @@ -132,13 +132,14 @@ def test_basic(self): prod = {i: SupplyChainProduct(index=i) for i in range(7)} - prod[0].set_bill_of_materials(2.5, 2) - prod[0].set_bill_of_materials(7, 3) - prod[1].set_bill_of_materials(10, 3) - prod[1].set_bill_of_materials(3.8, 4) - prod[2].set_bill_of_materials(0.2, 5) - prod[3].set_bill_of_materials(2, 5) - prod[4].set_bill_of_materials(50, 6) + prod[0].set_bill_of_materials(2, 2.5) + prod[0].set_bill_of_materials(3, 7) + prod[1].set_bill_of_materials(3, 10) + prod[1].set_bill_of_materials(4, 3.8) + prod[2].set_bill_of_materials(5, 0.2) + prod[3].set_bill_of_materials(5, 2) + prod[4].set_bill_of_materials(6, 50) + self.assertDictEqual(prod[0].bill_of_materials_dict, {2: 2.5, 3: 7}) self.assertDictEqual(prod[1].bill_of_materials_dict, {3: 10, 4: 3.8}) diff --git a/tests/test_temp.py b/tests/test_temp.py deleted file mode 100644 index 3ddceb4..0000000 --- a/tests/test_temp.py +++ /dev/null @@ -1,7 +0,0 @@ -import unittest -from stockpyl.temp import sq -from tests.settings import * - -class TestSq(unittest.TestCase): - def test_sq(self): - self.assertEqual(sq(2), 4) From 7dda43868ac229114f9c027f8363a6f19273bf20 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 6 Apr 2024 19:23:07 -0400 Subject: [PATCH 14/94] Implement network BOM --- src/stockpyl/sim.py | 91 ++++---- src/stockpyl/supply_chain_network.py | 2 + src/stockpyl/supply_chain_node.py | 204 +++++++++++++++-- src/stockpyl/supply_chain_product.py | 28 ++- tests/test_supply_chain_node.py | 320 +++++++++++++++++++++++++++ tests/test_supply_chain_product.py | 51 ++++- 6 files changed, 622 insertions(+), 74 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 71ee6ca..9c53186 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -403,23 +403,24 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan for p in node.raw_material_suppliers(product_index=prod_index): p_index = p.index if p is not None else None - # Calculate order quantity from policy. - order_quantity = min(order_capac, policy.get_order_quantity(predecessor_index=p_index)) + # Loop through products at predecessor and determine which ones are raw materials for prod. + for rm_index in(p.product_indices if p is not None else [None]): + if prod.BOM(rm_index) > 0: - # Place order in predecessor's order pipeline. - if p is not None: - p.state_vars_current.inbound_order_pipeline[node_index][prod_index][order_lead_time] = order_quantity - else: - # Place order to external supplier. (For now, this just means adding to inbound shipment pipeline.) - node.state_vars_current.inbound_shipment_pipeline[None][order_lead_time + shipment_lead_time] += order_quantity + # Calculate order quantity from policy. + order_quantity = min(order_capac, policy.get_order_quantity(predecessor_index=p_index, predecessor_product_index=rm_index)) - # if order_quantity is None: - # order_quantity = None + # Place order in predecessor's order pipeline. + if p is not None: + p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] = order_quantity + else: + # Place order to external supplier. (For now, this just means adding to inbound shipment pipeline.) + node.state_vars_current.inbound_shipment_pipeline[None][rm_index][order_lead_time + shipment_lead_time] += order_quantity - # Record order quantity. - node.state_vars_current.order_quantity[p_index][prod_index] = order_quantity - # Add order to on_order_by_predecessor. - node.state_vars_current.on_order_by_predecessor[p_index][prod_index] += order_quantity + # Record order quantity. + node.state_vars_current.order_quantity[p_index][rm_index] = order_quantity + # Add order to on_order_by_predecessor. + node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += order_quantity def _generate_downstream_shipments(node_index, network, period, visited, consistency_checks='W'): @@ -525,8 +526,10 @@ def _initialize_state_vars(network): n.state_vars[0].inbound_order_pipeline[s.index][prod_index][l] = s.get_attribute('initial_orders', prod) or 0 # Initialize raw material inventory. - for p_index in n.predecessor_indices(include_external=True): - n.state_vars[0].raw_material_inventory[p_index][prod_index] = 0 + for rm_index in n.raw_material_indices: + n.state_vars[0].raw_material_inventory[rm_index] = 0 + # for p_index in n.predecessor_indices(include_external=True): + # n.state_vars[0].raw_material_inventory[p_index][prod_index] = 0 def _receive_inbound_orders(node): @@ -583,24 +586,24 @@ def _initialize_next_period_state_vars(network, period): for p in n.predecessors(include_external=True): # Shortcut to predecessor index. p_index = p.index if p is not None else None - # Loop through products at predecessor. - for prod_index in (p.products if p is not None else [None]): + # Loop through raw materials at predecessor. + for rm_index in (p.products if p is not None else [None]): # Is there a transit-pausing disruption? - if n.disrupted and n.get_attribute('disruption_process', prod_index).disruption_type == 'TP': + if n.disrupted and n.get_attribute('disruption_process', rm_index).disruption_type == 'TP': # Yes; items in shipment pipeline stay where they are. - n.state_vars[period + 1].inbound_shipment_pipeline[p_index][prod_index] = \ - n.state_vars[period].inbound_shipment_pipeline[p_index][prod_index].copy() + n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index] = \ + n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index].copy() else: # No; items in shipment pipeline advance by 1 slot. # Copy items from slot 0 in period t to t+1. (Normally, this will equal 0, but it can # be non-zero if there was a type-RP disruption.) - n.state_vars[period + 1].inbound_shipment_pipeline[p_index][prod_index][0] = \ - n.state_vars[period].inbound_shipment_pipeline[p_index][prod_index][0] + n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index][0] = \ + n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index][0] # Add items from slot s+1 in period t to slot s in period t+1. for s in range(len(n.state_vars[period].inbound_shipment_pipeline[p]) - 1): - n.state_vars[period + 1].inbound_shipment_pipeline[p_index][prod_index][s] += \ - n.state_vars[period].inbound_shipment_pipeline[p_index][prod_index][s + 1] + n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index][s] += \ + n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index][s + 1] # Loop through successors. for s in n.successor_indices(include_external=True): @@ -623,14 +626,14 @@ def _initialize_next_period_state_vars(network, period): # Loop through predecessors. for p in n.predecessors(include_external=True): p_index = p.index if p is not None else None - # Loop through products at predecessor. - for prod_index in (p.products if p is not None else [None]): - n.state_vars[period + 1].on_order_by_predecessor[p_index][prod_index] = \ - n.state_vars[period].on_order_by_predecessor[p_index][prod_index] - n.state_vars[period + 1].raw_material_inventory[p_index][prod_index] = \ - n.state_vars[period].raw_material_inventory[p_index][prod_index] - n.state_vars[period + 1].inbound_disrupted_items[p_index][prod_index] = \ - n.state_vars[period].inbound_disrupted_items[p_index][prod_index] + # Loop through raw materials at predecessor. + for rm_index in (p.products if p is not None else [None]): + n.state_vars[period + 1].on_order_by_predecessor[p_index][rm_index] = \ + n.state_vars[period].on_order_by_predecessor[p_index][rm_index] + n.state_vars[period + 1].raw_material_inventory[p_index][rm_index] = \ + n.state_vars[period].raw_material_inventory[p_index][rm_index] + n.state_vars[period + 1].inbound_disrupted_items[p_index][rm_index] = \ + n.state_vars[period].inbound_disrupted_items[p_index][rm_index] # Set demand_met_from_stock_cumul and demand_cumul. for prod_index in n.product_indices: @@ -722,14 +725,14 @@ def _receive_inbound_shipments(node): # Shortcut to predecessor index. p_index = p.index if p is not None else None - # Loop through products at predecessor. - for prod_index in (p.products if p is not None else [None]): + # Loop through raw materials at predecessor. + for rm_index in (p.products if p is not None else [None]): # Determine number of items that will be received from p (if there is no disruption), # not including inbound disrupted items waiting to be received. - ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][prod_index][0] + ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][rm_index][0] # Is there a receipt-pausing disruption? - if node.disrupted and node.get_attribute('disruption_process', prod_index).disruption_type == 'RP': + if node.disrupted and node.get_attribute('disruption_process', rm_index).disruption_type == 'RP': # Yes: Don't receive anything. IS = 0 # Increase inbound disrupted items by the items that would have been received, if @@ -737,21 +740,21 @@ def _receive_inbound_shipments(node): IDI = ready_to_receive else: # No: Inbound shipment from p = ready_to_receive + IDI from p. - IS = ready_to_receive + node.state_vars_current.inbound_disrupted_items[p_index][prod_index] + IS = ready_to_receive + node.state_vars_current.inbound_disrupted_items[p_index][rm_index] # Decrease inbound disrupted items by its whole amount. (This will zero out # inbound_disrupted_items below.) - IDI = -node.state_vars_current.inbound_disrupted_items[p_index][prod_index] + IDI = -node.state_vars_current.inbound_disrupted_items[p_index][rm_index] # Set inbound_shipment attribute. - node.state_vars_current.inbound_shipment[p_index][prod_index] = IS + node.state_vars_current.inbound_shipment[p_index][rm_index] = IS # Remove shipment from pipeline. - node.state_vars_current.inbound_shipment_pipeline[p_index][prod_index][0] = 0 + node.state_vars_current.inbound_shipment_pipeline[p_index][rm_index][0] = 0 # Add shipment to raw material inventory. - node.state_vars_current.raw_material_inventory[p_index][prod_index] += IS + node.state_vars_current.raw_material_inventory[p_index][rm_index] += IS # Update on-order inventory. - node.state_vars_current.on_order_by_predecessor[p_index][prod_index] -= ready_to_receive + node.state_vars_current.on_order_by_predecessor[p_index][rm_index] -= ready_to_receive # Update inbound_disrupted_items. - node.state_vars_current.inbound_disrupted_items[p_index][prod_index] += IDI + node.state_vars_current.inbound_disrupted_items[p_index][rm_index] += IDI def _raw_materials_to_finished_goods(node): diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 032c7df..52f73a5 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -446,6 +446,8 @@ def add_node(self, node): if node not in self.nodes: self.nodes.append(node) node.network = self + for prod in node.products: + prod.network = self def add_edge(self, from_index, to_index): """Add an edge to the network to and from the nodes with the specified indices. diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 2870f6f..83a42bf 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -413,7 +413,7 @@ def add_product(self, product): The product to add to the node. """ - # Check whether product is already in node. + product.network = self.network if product.index is None: self._products_by_index[None] = product elif product not in self.products: @@ -483,10 +483,152 @@ def _remove_dummy_product(self): to the node. """ self.remove_product(None) + + def get_network_bill_of_materials(self, product=None, predecessor=None, raw_material=None): + """Return the "network bill of materials," i.e., the number of units of ``raw_material`` + from ``predecessor`` that are required to make one unit of ``product`` at this node, + accounting for network structure. In particular, if _no_ raw materials at the predecessor + have a BOM relationship with _any_ product at the node, then _every_ raw material at the predecessor is assigned a BOM + number of 1 for _every_ product at the node. (In particular, this allows single-product networks to + be constructed without adding any products to the network.) + + ``product``, ``predecessor``, and ``raw_material`` may be indices or objects. + + Raises a ``ValueError`` if ``product`` is not a product at the node, ``raw_material`` is + not a product at ``predecessor``, or ``predecessor`` is not a predecessor of the node. + + :func:`NBOM` is a shortcut to this function. + + Parameters + ---------- + product : |class_product| or int, optional + The product to get the BOM for, as a |class_object| or index. Set to ``None`` (the default) for + the dummy product. + predecessor : |class_node| or int, optional + The predecessor to get the BOM for, as a |class_node| object or index. Set to + ``None`` (the default) for the external supplier. + raw_material : |class_product| or int, optional + The raw material to get the BOM for, as a |class_object| or index. Set to ``None`` (the default) for + the dummy product. + + Returns + ------- + int + The network BOM number for the (raw material, product) pair at these nodes. + + Raises + ------ + ValueError + If ``product`` is not a product at the node or ``raw_material`` is + not a product at ``predecessor``. + ValueError + If ``predecessor`` is not a predecessor of the node. + """ + + # TODO: would be better to pre-build this, plus raw_materials, raw_material_suppliers, etc., + # in SCNode and SCProduct. Rebuild it each time the product or node structure changes. + + # Get objects and indices for parameters. + if isinstance(product, SupplyChainProduct): + prod = product + prod_ind = product.index + else: + prod = None if product is None else self.network.products_by_index[product] + prod_ind = product + if isinstance(predecessor, SupplyChainNode): + pred = predecessor + pred_ind = predecessor.index + else: + pred = None if predecessor is None else self.network.get_node_from_index(predecessor) + pred_ind = predecessor + if isinstance(raw_material, SupplyChainProduct): + rm = raw_material + rm_ind = raw_material.index + else: + rm = None if raw_material is None else self.network.products_by_index[raw_material] + rm_ind = raw_material + + # Validate parameters. + if prod_ind not in self.product_indices: + raise ValueError(f'Product {prod_ind} is not a product in node {self.index}.') + if (rm_ind is not None or pred is not None) and (rm_ind not in pred.product_indices): + raise ValueError(f'Product {rm_ind} is not a product in node {pred_ind}.') + if pred_ind not in self.predecessor_indices(include_external=True): + raise ValueError(f'Node {pred_ind} is not a predecessor of node {self.index}.') + + # Do any raw materials at predecessor have a BOM relationship with any products at the node? + found = False + for prod1 in self.products: + for prod2 in prod1.raw_materials: + if prod2 in pred.products: + found = True + break + + # Were any BOM relationships found? + if found: + # Yes--return BOM relationship for this (product, raw material) pair (even if it's 0). + return prod.BOM(rm_ind) + else: + # No--return 1, regardless of the product and raw material. + return 1 - def raw_material_suppliers(self, product_index=None): - """Return a list of all predecessors, from which a raw material must be ordered in order to - make ``product_index`` at this node, according to the bill of materials. Suppliers in list are + def NBOM(self, product=None, predecessor=None, raw_material=None): + """A shortcut to :func:`~get_network_bill_of_materials`.""" + return self.get_network_bill_of_materials(product, predecessor, raw_material) + + def raw_materials(self, network_BOM=True): + """A list of all raw materials required to make all products at the node. + If ``network_BOM`` is ``True``, includes raw materials that don't have a + BOM relationship specified but are implied by the network structure. + (See :func:`get_network_bill_of_materials`.) Read only. + + Parameters + ---------- + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. + + Returns + ------- + list + List of all raw materials required to make all products at the node. + """ + rms = set() + for prod in self.products: + if network_BOM: + for pred in self.predecessors(include_external=True): + for rm in pred.products: + if self.NBOM(product=prod, predecessor=pred, raw_material=rm) > 0: + rms.add(rm) + else: + rms |= set(prod.raw_materials) + return list(rms) + + def raw_material_indices(self, network_BOM=True): + """A list of indices of all raw materials required to make all products at the node. + If ``network_BOM`` is ``True``, includes raw materials that don't have a + BOM relationship specified but are implied by the network structure. + (See :func:`get_network_bill_of_materials`.) Read only. + + Parameters + ---------- + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. + + Returns + ------- + list + List of indices of all raw materials required to make all products at the node. + """ + return [rm.index for rm in self.raw_materials(network_BOM=network_BOM)] + + def raw_material_suppliers(self, product_index=None, network_BOM=True): + """Return a list of all predecessors from which a raw material must be ordered in order to + make ``product_index`` at this node, according to the bill of materials. + If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a + BOM relationship specified but are implied by the network structure. + (See :func:`get_network_bill_of_materials`.) Read only. + + Suppliers in list are |class_node| objects, plus ``None`` for the external supplier, if appropriate. Set ``product_index`` to ``None`` @@ -496,6 +638,8 @@ def raw_material_suppliers(self, product_index=None): ---------- product_index : int, optional Index of product at this node, or ``None`` if this is a single-product node with no |class_product| object added. + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. Returns ------- @@ -518,19 +662,25 @@ def raw_material_suppliers(self, product_index=None): suppliers = [] for p in self.predecessors(include_external=True): # Determine whether p provides a raw material for the product. - if product_index is None: - # Every product has a BOM number of 1 with a dummy product, so predecessor is - # automatically a raw material supplier. - provides_rm = True - elif p is None: - # Predecessor is external supplier, which is automatically a raw material supplier. - provides_rm = True - else: - provides_rm = False - for rm_ind in p.product_indices: - if prod.get_bill_of_materials(rm_ind) > 0: - # rm_ind is a raw material for product. - provides_rm = True + provides_rm = False + for rm in p.products if p is not None else [None]: + if (network_BOM and self.NBOM(product=prod, predecessor=p, raw_material=rm) > 0) \ + or (not network_BOM and prod.BOM(rm.index if rm is not None else None) > 0): + provides_rm = True + break + + # if product_index is None: + # # Every product has a BOM number of 1 with a dummy product, so predecessor is + # # automatically a raw material supplier. + # provides_rm = True + # elif p is None: + # # Predecessor is external supplier, which is automatically a raw material supplier. + # provides_rm = True + # else: + # for rm_ind in p.product_indices: + # if prod.get_bill_of_materials(rm_ind) > 0: + # # rm_ind is a raw material for product. + # provides_rm = True # Add p to list if it provides a raw material. if provides_rm: @@ -538,14 +688,19 @@ def raw_material_suppliers(self, product_index=None): return suppliers - def raw_material_supplier_indices(self, product_index=None): + def raw_material_supplier_indices(self, product_index=None, network_BOM=True): """Return a list of all indices of predecessors from which a raw material must be ordered in order to make ``product_index`` at this node, according to the bill of materials. - + If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a + BOM relationship specified but are implied by the network structure. + (See :func:`get_network_bill_of_materials`.) Read only. + Parameters ---------- product_index : int, optional Index of product at this node, or ``None`` if this is a single-product node. + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. Returns ------- @@ -560,7 +715,7 @@ def raw_material_supplier_indices(self, product_index=None): If ``product_index`` is not found among the node's products, and it's not the case that this is a single-product node with no |class_product| added. """ - return [(s.index if s is not None else None) for s in self.raw_material_suppliers(product_index=product_index)] + return [(s.index if s is not None else None) for s in self.raw_material_suppliers(product_index=product_index, network_BOM=network_BOM)] # supplier_indices = [] # for p in self.predecessors: # # Determine whether p provides a raw material for the product. @@ -1262,9 +1417,8 @@ class NodeStateVars(object): being held before receipt due to a type-RP disruption at the node. If ``p`` is external supplier or single-product, ``prod=None``. raw_material_inventory : dict - ``raw_material_inventory[p][prod]`` = number of units of product ``prod`` from predecessor ``p`` - in raw-material inventory at node. If ``p`` is ``None``, refers to external supply. If ``p`` is external - supplier or single-product, ``prod=None``. + ``raw_material_inventory[prod]`` = number of units of product ``prod`` from _all_ predecessors + in raw-material inventory at node. disrupted : bool ``True`` if the node was disrupted in the period, ``False`` otherwise. holding_cost_incurred : float @@ -1525,6 +1679,7 @@ def in_transit(self): return 0 else: return total_in_transit / len(self.node.predecessors(include_external=True)) + # TODO: this should be by rm, not by predecessor @property def on_order(self): @@ -1540,6 +1695,7 @@ def on_order(self): return 0 else: return total_on_order / len(self.node.predecessors(include_external=True)) + # TODO: this should be by rm, not by predecessor @property def raw_material_aggregate(self): @@ -1554,6 +1710,7 @@ def raw_material_aggregate(self): return 0 else: return total_raw_material / len(self.node.predecessors(include_external=True)) + # TODO: this should be by rm, not by predecessor @property def inbound_disrupted_items_aggregate(self): @@ -1568,6 +1725,7 @@ def inbound_disrupted_items_aggregate(self): return 0 else: return total_raw_material / len(self.node.predecessors(include_external=True)) + # TODO: this should be by rm, not by predecessor def inventory_position(self, predecessor_index=None): """Current local inventory position at node. Equals inventory level plus diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index b23cd50..e986419 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -39,14 +39,16 @@ successor, including both dummy and real products. product.get_bill_of_materials(None) returns 1 for every product, and product.get_bill_of_materials(rm_index) returns 1 if product is a dummy product, regardless of what rm_index is. -- If a node and a predecessor each have a single product but no BOM relationship is specified for - the two products, a BOM number of 1 is assumed for the product/RM pair. +- If a node and a predecessor have no BOM relationship specified for all (rm, product) pairs, + a BOM number of 1 is assumed for every product/RM pair. This is true whether the node or predecessor have an actual product loaded, or a dummy product. + # TODO: how to implement this? - To set the BOM number to something other than 1, both the product and the RM must be actual products, not dummy. - If a node or its predecessor has more than one product, a BOM relationship must be specified for at least one product at the node and at least one RM at the predecessor (otherwise no items will be ordered/shipped even though there is an edge between the nodes) + # TODO: add a check and warning for this - If a node has supply_type 'U', the external supplier is assumed to provide a dummy raw material, which is not loaded into the external supplier (since a node doesn't exist for that supplier), but raw material inventory is allocated at the node for the external supplier's dummy product at @@ -266,17 +268,24 @@ def set_bill_of_materials(self, rm_index, num_needed=1.0): self._bill_of_materials.pop(rm_index, None) def get_bill_of_materials(self, rm_index): - """Get the number of units of raw material product ``rm_index`` that are required in order + """Return the number of units of raw material product ``rm_index`` that are required in order to make one unit of this product. Returns 1 if ``self.index is None`` or ``rm_index is None``, because dummy products always have a BOM number of 1 with every other product. Returns 0 if there is no BOM relationship for this product and ``rm_index``. + :func:`BOM` is a shortcut to this function. + Parameters ---------- rm_index : int Index of raw material product. + + Returns + ------- + int + The BOM number for the (raw material, product) pair. """ if self.index is None or rm_index is None: return 1 @@ -308,6 +317,17 @@ def bill_of_materials_dict(self): """ return self._bill_of_materials + @property + def raw_materials(self): + """A list of all raw materials required to make this product. Read only.""" + if self.network is None: + raise ValueError('self.network cannot be None when calling raw_materials.') + return [self.network.products_by_index[rm_index] for rm_index in self.bill_of_materials_dict.keys() if self.BOM(rm_index) > 0 ] + + @property + def raw_material_indices(self): + """A list of the indices of all raw materials required to make this product. Read only.""" + return [rm.index for rm in self.raw_materials] # Properties and functions related to network structure. @@ -372,7 +392,7 @@ def __eq__(self, other): True if the products are equal, False otherwise. """ - return self.index == other.index + return self.index == (other.index if other is not None else None) def __ne__(self, other): """Determine whether ``other`` is not equal to the product. Two products are diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 99162ae..7d7d7b7 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -1010,6 +1010,326 @@ def test_multiproduct_5_7(self): _ = nodes[0].raw_material_supplier_indices(product_index=77) +class TestGetNetworkBillOfMaterials(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestGetNetworkBillOfMaterials', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestGetNetworkBillOfMaterials', 'tear_down_class()') + + def test_mwor_no_product(self): + """Test that get_network_bill_of_materials and NBOM work correctly on MWOR network with no product added at retailer. + """ + print_status('TestGetNetworkBillOfMaterials', 'test_mwor_no_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + self.assertEqual(nodes[0].get_network_bill_of_materials(None, 1, 1), 1) + self.assertEqual(nodes[0].get_network_bill_of_materials(None, nodes[1], 2), 1) + self.assertEqual(nodes[0].NBOM(None, nodes[2], prods[2]), 1) + self.assertEqual(nodes[0].get_network_bill_of_materials(None, 2, prods[3]), 1) + self.assertEqual(nodes[0].NBOM(None, 3, 4), 1) + self.assertEqual(nodes[0].get_network_bill_of_materials(None, nodes[3], prods[5]), 1) + + self.assertEqual(nodes[1].get_network_bill_of_materials(1, None, None), 1) + self.assertEqual(nodes[1].NBOM(prods[2], None, None), 1) + self.assertEqual(nodes[2].NBOM(2, None, None), 1) + self.assertEqual(nodes[2].get_network_bill_of_materials(prods[3], None, None), 1) + self.assertEqual(nodes[3].get_network_bill_of_materials(4, None, None), 1) + self.assertEqual(nodes[3].NBOM(prods[5], None, None), 1) + + with self.assertRaises(ValueError): + _ = nodes[0].get_network_bill_of_materials(3, 1, 1) + _ = nodes[0].get_network_bill_of_materials(None, 1, 7) + _ = nodes[1].get_network_bill_of_materials(1, 0, None) + _ = nodes[0].NBOM(None, 1, 7) + + def test_mwor_one_product(self): + """Test that get_network_bill_of_materials and NBOM work correctly on MWOR network with one product added at retailer. + """ + print_status('TestGetNetworkBillOfMaterials', 'test_mwor_one_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + prods[10] = SupplyChainProduct(10) + nodes[0].add_product(prods[10]) + + # First test without BOM. + self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], 1, 1), 1) + self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], nodes[1], 2), 1) + self.assertEqual(nodes[0].NBOM(prods[10], nodes[2], prods[2]), 1) + self.assertEqual(nodes[0].get_network_bill_of_materials(10, 2, prods[3]), 1) + self.assertEqual(nodes[0].NBOM(10, 3, 4), 1) + self.assertEqual(nodes[0].get_network_bill_of_materials(10, nodes[3], prods[5]), 1) + + # Then test with product and BOM. + nodes[0].products[0].set_bill_of_materials(1, 5) + nodes[0].products[0].set_bill_of_materials(2, 7) + nodes[0].products[0].set_bill_of_materials(3, 3) + nodes[0].products[0].set_bill_of_materials(4, 15) + nodes[0].products[0].set_bill_of_materials(5, 6) + + self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], 1, 1), 5) + self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], nodes[1], 2), 7) + self.assertEqual(nodes[0].NBOM(prods[10], nodes[2], prods[2]), 7) + self.assertEqual(nodes[0].get_network_bill_of_materials(10, 2, prods[3]), 3) + self.assertEqual(nodes[0].NBOM(10, 3, 4), 15) + self.assertEqual(nodes[0].get_network_bill_of_materials(10, nodes[3], prods[5]), 6) + + self.assertEqual(nodes[1].get_network_bill_of_materials(1, None, None), 1) + self.assertEqual(nodes[1].NBOM(prods[2], None, None), 1) + self.assertEqual(nodes[2].NBOM(2, None, None), 1) + self.assertEqual(nodes[2].get_network_bill_of_materials(prods[3], None, None), 1) + self.assertEqual(nodes[3].get_network_bill_of_materials(4, None, None), 1) + self.assertEqual(nodes[3].NBOM(prods[5], None, None), 1) + + with self.assertRaises(ValueError): + _ = nodes[0].get_network_bill_of_materials(3, 1, 1) + _ = nodes[0].get_network_bill_of_materials(None, 1, 7) + _ = nodes[1].get_network_bill_of_materials(1, 0, None) + _ = nodes[0].NBOM(None, 1, 7) + + def test_mwor_multiple_products(self): + """Test that get_network_bill_of_materials and NBOM work correctly on MWOR network with multiple products added at retailer. + """ + print_status('TestGetNetworkBillOfMaterials', 'test_mwor_multiple_products()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + network.get_node_from_index(1).add_products([prods[1], prods[2]]) + network.get_node_from_index(2).add_products([prods[2], prods[3]]) + network.get_node_from_index(3).add_products([prods[4], prods[5]]) + + prods[10] = SupplyChainProduct(10) + prods[11] = SupplyChainProduct(11) + prods[12] = SupplyChainProduct(12) + nodes[0].add_products([prods[10], prods[11], prods[12]]) + + # First test without BOM. + self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], 1, 1), 1) + self.assertEqual(nodes[0].get_network_bill_of_materials(prods[11], nodes[1], 2), 1) + self.assertEqual(nodes[0].NBOM(prods[10], nodes[2], prods[2]), 1) + self.assertEqual(nodes[0].get_network_bill_of_materials(12, 2, prods[3]), 1) + self.assertEqual(nodes[0].NBOM(10, 3, 4), 1) + self.assertEqual(nodes[0].get_network_bill_of_materials(12, nodes[3], prods[5]), 1) + + # Then test with products and BOM. + nodes[0].products_by_index[10].set_bill_of_materials(1, 5) + nodes[0].products_by_index[10].set_bill_of_materials(2, 7) + nodes[0].products_by_index[11].set_bill_of_materials(3, 3) + nodes[0].products_by_index[11].set_bill_of_materials(4, 15) + nodes[0].products_by_index[12].set_bill_of_materials(5, 6) + + self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], 1, 1), 5) + self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], nodes[1], 2), 7) + self.assertEqual(nodes[0].NBOM(prods[11], nodes[2], prods[3]), 3) + self.assertEqual(nodes[0].get_network_bill_of_materials(11, 3, prods[4]), 15) + self.assertEqual(nodes[0].NBOM(10, 2, 2), 7) + self.assertEqual(nodes[0].get_network_bill_of_materials(12, nodes[3], prods[5]), 6) + + self.assertEqual(nodes[1].get_network_bill_of_materials(1, None, None), 1) + self.assertEqual(nodes[1].NBOM(prods[2], None, None), 1) + self.assertEqual(nodes[2].NBOM(2, None, None), 1) + self.assertEqual(nodes[2].get_network_bill_of_materials(prods[3], None, None), 1) + self.assertEqual(nodes[3].get_network_bill_of_materials(4, None, None), 1) + self.assertEqual(nodes[3].NBOM(prods[5], None, None), 1) + + with self.assertRaises(ValueError): + _ = nodes[0].get_network_bill_of_materials(3, 1, 1) + _ = nodes[0].get_network_bill_of_materials(None, 1, 7) + _ = nodes[1].get_network_bill_of_materials(1, 0, None) + _ = nodes[0].NBOM(None, 1, 7) + + + def test_multiproduct_5_7(self): + """Test that get_network_bill_of_materials and NBOM work correctly on 5-node, 7-product network. + """ + print_status('TestGetNetworkBillOfMaterials', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + prods = {i: network.products_by_index[i] for i in network.product_indices} + + self.assertEqual(nodes[0].get_network_bill_of_materials(prods[0], 2, 2), 2.5) + self.assertEqual(nodes[0].get_network_bill_of_materials(0, nodes[2], prods[3]), 7) + self.assertEqual(nodes[1].get_network_bill_of_materials(prods[0], 2, 2), 2.5) + self.assertEqual(nodes[1].get_network_bill_of_materials(0, nodes[2], prods[3]), 7) + self.assertEqual(nodes[1].get_network_bill_of_materials(0, nodes[3], 4), 0) + self.assertEqual(nodes[1].get_network_bill_of_materials(1, nodes[2], prods[3]), 10) + self.assertEqual(nodes[1].get_network_bill_of_materials(1, 2, 4), 3.8) + self.assertEqual(nodes[1].get_network_bill_of_materials(prods[1], nodes[3], prods[4]), 3.8) + self.assertEqual(nodes[2].get_network_bill_of_materials(2, nodes[4], 5), 0.2) + self.assertEqual(nodes[2].get_network_bill_of_materials(2, 4, prods[6]), 0) + self.assertEqual(nodes[2].get_network_bill_of_materials(3, 4, prods[5]), 2) + self.assertEqual(nodes[3].get_network_bill_of_materials(prods[2], 4, 5), 0.2) + self.assertEqual(nodes[3].get_network_bill_of_materials(prods[2], 4, prods[6]), 0) + self.assertEqual(nodes[3].get_network_bill_of_materials(4, nodes[4], 5), 0) + self.assertEqual(nodes[3].get_network_bill_of_materials(4, nodes[4], 6), 50) + + self.assertEqual(nodes[4].get_network_bill_of_materials(5, None, None), 1) + self.assertEqual(nodes[4].get_network_bill_of_materials(6, None, None), 1) + + with self.assertRaises(ValueError): + _ = nodes[0].get_network_bill_of_materials(3, 1, 1) + _ = nodes[0].get_network_bill_of_materials(0, 2, 77) + +class TestRawMaterials(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestRawMaterials', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestRawMaterials', 'tear_down_class()') + + def test_mwor_no_product(self): + """Test that raw_materials and raw_material_indices work correctly on MWOR network with no product added at retailer. + """ + print_status('TestRawMaterials', 'test_mwor_no_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + self.assertListEqual(nodes[0].raw_materials(network_BOM=True), list(prods.values())) + self.assertListEqual(nodes[0].raw_material_indices(network_BOM=True), [prod.index for prod in prods.values()]) + + self.assertListEqual(nodes[0].raw_materials(network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_indices(network_BOM=False), []) + + def test_mwor_one_product(self): + """Test that raw_materials and raw_material_indices work correctly on MWOR network with one product added at retailer. + """ + print_status('TestRawMaterials', 'test_mwor_one_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + nodes[0].add_product(SupplyChainProduct(10)) + nodes[0].products[0].set_bill_of_materials(1, 5) + nodes[0].products[0].set_bill_of_materials(2, 7) + nodes[0].products[0].set_bill_of_materials(3, 3) + nodes[0].products[0].set_bill_of_materials(4, 15) + nodes[0].products[0].set_bill_of_materials(5, 6) + + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10, network_BOM=True), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10, network_BOM=True), [1, 2, 3]) + + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10, network_BOM=False), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10, network_BOM=False), [1, 2, 3]) + + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_suppliers(product_index=None) + _ = nodes[0].raw_material_suppliers(product_index=77) + _ = nodes[0].raw_material_supplier_indices(product_index=None) + _ = nodes[0].raw_material_supplier_indices(product_index=77) + + def test_mwor_multiple_products(self): + """Test that raw_materials and raw_material_indices work correctly on MWOR network with multiple products added at retailer. + """ + print_status('TestRawMaterials', 'test_mwor_multiple_products()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + network.get_node_from_index(1).add_products([prods[1], prods[2]]) + network.get_node_from_index(2).add_products([prods[2], prods[3]]) + network.get_node_from_index(3).add_products([prods[4], prods[5]]) + + nodes[0].add_products([SupplyChainProduct(10), SupplyChainProduct(11), SupplyChainProduct(12)]) + + nodes[0].products_by_index[10].set_bill_of_materials(1, 5) + nodes[0].products_by_index[10].set_bill_of_materials(2, 7) + nodes[0].products_by_index[11].set_bill_of_materials(3, 3) + nodes[0].products_by_index[11].set_bill_of_materials(4, 15) + nodes[0].products_by_index[12].set_bill_of_materials(5, 6) + + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10, network_BOM=True), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=11, network_BOM=True), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=12, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=11, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=12, network_BOM=True), [3]) + + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10, network_BOM=False), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=11, network_BOM=False), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=12, network_BOM=False), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10, network_BOM=False), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=11, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=12, network_BOM=False), [3]) + + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_suppliers(product_index=None) + _ = nodes[0].raw_material_suppliers(product_index=77) + _ = nodes[0].raw_material_supplier_indices(product_index=None) + _ = nodes[0].raw_material_supplier_indices(product_index=77) + + def test_multiproduct_5_7(self): + """Test that raw_materials and raw_material_indices work correctly on 5-node, 7-product network. + """ + print_status('TestRawMaterials', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + self.assertListEqual(nodes[0].raw_material_suppliers(product_index=0), [nodes[2]]) + self.assertListEqual(nodes[1].raw_material_suppliers(product_index=0), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[1].raw_material_suppliers(product_index=1), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[2].raw_material_suppliers(product_index=2), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers(product_index=3), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers(product_index=4), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers(product_index=2), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers(product_index=4), [nodes[4]]) + self.assertListEqual(nodes[4].raw_material_suppliers(product_index=5), [None]) + self.assertListEqual(nodes[4].raw_material_suppliers(product_index=6), [None]) + self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=0), [2]) + self.assertListEqual(nodes[1].raw_material_supplier_indices(product_index=0), [2, 3]) + self.assertListEqual(nodes[1].raw_material_supplier_indices(product_index=1), [2, 3]) + self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=2), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=3), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=4), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices(product_index=2), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices(product_index=4), [4]) + self.assertListEqual(nodes[4].raw_material_supplier_indices(product_index=5), [None]) + self.assertListEqual(nodes[4].raw_material_supplier_indices(product_index=6), [None]) + + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_suppliers(product_index=None) + _ = nodes[0].raw_material_suppliers(product_index=77) + _ = nodes[0].raw_material_supplier_indices(product_index=None) + _ = nodes[0].raw_material_supplier_indices(product_index=77) + + class TestLeadTime(unittest.TestCase): @classmethod def set_up_class(cls): diff --git a/tests/test_supply_chain_product.py b/tests/test_supply_chain_product.py index a879d70..1749e32 100644 --- a/tests/test_supply_chain_product.py +++ b/tests/test_supply_chain_product.py @@ -6,8 +6,8 @@ from stockpyl.policy import Policy from stockpyl.instances import * from stockpyl.sim import * -from tests.settings import RUN_ALL_TESTS - +#from tests.settings import RUN_ALL_TESTS +RUN_ALL_TESTS = False # Module-level functions. @@ -126,7 +126,7 @@ def tear_down_class(cls): print_status('TestBillOfMaterialsDict', 'tear_down_class()') def test_basic(self): - """Test that bill_of_materials works correctly on MWOR network. + """Basic test of bill_of_materials_dict. """ print_status('TestBillOfMaterialsDict', 'test_basic()') @@ -149,6 +149,51 @@ def test_basic(self): self.assertDictEqual(prod[5].bill_of_materials_dict, {}) self.assertDictEqual(prod[6].bill_of_materials_dict, {}) +class TestRawMaterials(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestRawMaterials', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestRawMaterials', 'tear_down_class()') + + def test_basic(self): + """Basic test of raw_materials and raw_material_indices. + """ + print_status('TestRawMaterials', 'test_basic()') + + prod = {i: SupplyChainProduct(index=i) for i in range(7)} + + prod[0].set_bill_of_materials(2, 2.5) + prod[0].set_bill_of_materials(3, 7) + prod[1].set_bill_of_materials(3, 10) + prod[1].set_bill_of_materials(4, 3.8) + prod[2].set_bill_of_materials(5, 0.2) + prod[3].set_bill_of_materials(5, 2) + prod[4].set_bill_of_materials(6, 50) + + network = SupplyChainNetwork() + for i in range(7): + network.add_product(prod[i]) + + self.assertListEqual(prod[0].raw_materials, [prod[2], prod[3]]) + self.assertListEqual(prod[1].raw_materials, [prod[3], prod[4]]) + self.assertListEqual(prod[2].raw_materials, [prod[5]]) + self.assertListEqual(prod[3].raw_materials, [prod[5]]) + self.assertListEqual(prod[4].raw_materials, [prod[6]]) + self.assertListEqual(prod[5].raw_materials, []) + self.assertListEqual(prod[6].raw_materials, []) + + self.assertListEqual(prod[0].raw_material_indices, [2, 3]) + self.assertListEqual(prod[1].raw_material_indices, [3, 4]) + self.assertListEqual(prod[2].raw_material_indices, [5]) + self.assertListEqual(prod[3].raw_material_indices, [5]) + self.assertListEqual(prod[4].raw_material_indices, [6]) + self.assertListEqual(prod[5].raw_material_indices, []) + self.assertListEqual(prod[6].raw_material_indices, []) class TestSupplyChainProductEq(unittest.TestCase): From 99470890c7ff18234bfc5316a5e4ea46838ce7a8 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 6 Apr 2024 19:33:35 -0400 Subject: [PATCH 15/94] Fix some unit tests --- src/stockpyl/supply_chain_node.py | 1 - tests/test_supply_chain_network.py | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 83a42bf..247fc87 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -707,7 +707,6 @@ def raw_material_supplier_indices(self, product_index=None, network_BOM=True): list List of all indices of predecessors from which a raw material must be ordered in order to make ``product_index`` at this node, according to the bill of materials. - # TODO: unit tests Raises ------ diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index a4e5b52..525dd19 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -691,7 +691,7 @@ def test_multiproduct_5_7(self): network.remove_product(network.products_by_index[10]) - self.assertEqual(network.product_indices, [0, 1, 2, 3, 4, 5, 6, 11]) + self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 11])) class TestProductLists(unittest.TestCase): @@ -718,8 +718,8 @@ def test_basic(self): network.add_product(prod0) network.add_product(prod1) - self.assertEqual(network.products, [prod0, prod1]) - self.assertEqual(network.product_indices, [0, 1]) + self.assertSetEqual(set(network.products), {prod0, prod1}) + self.assertSetEqual(set(network.product_indices), {0, 1}) self.assertDictEqual(network.products_by_index, {0: prod0, 1: prod1}) def test_multiproduct_5_7(self): @@ -732,8 +732,8 @@ def test_multiproduct_5_7(self): network.add_product(SupplyChainProduct(11)) products = {i: network.products_by_index[i] for i in [0, 1, 2, 3, 4, 5, 6, 10, 11]} - self.assertEqual(network.products, list(products.values())) - self.assertEqual(network.product_indices, [0, 1, 2, 3, 4, 5, 6, 10, 11]) + self.assertSetEqual(set(network.products), set(products.values())) + self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 10, 11])) self.assertDictEqual(network.products_by_index, {i: products[i] for i in products.keys()}) From 4b1a97bd376c39eb1989c750e4e5c8c7d5fd5d84 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 8 Apr 2024 23:56:14 -0400 Subject: [PATCH 16/94] Working on new strategy for dummy product --- src/stockpyl/supply_chain_network.py | 60 +- src/stockpyl/supply_chain_node.py | 193 +-- src/stockpyl/supply_chain_product.py | 64 +- .../multi_product_instance.json | 1103 ----------------- .../test_multiproduct_5_7.json | 2 +- tests/test_supply_chain_node.py | 120 +- tests/test_supply_chain_product.py | 24 + 7 files changed, 319 insertions(+), 1247 deletions(-) delete mode 100644 tests/additional_files/multi_product_instance.json diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 52f73a5..13f4e55 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -45,7 +45,7 @@ from stockpyl.demand_source import DemandSource from stockpyl.policy import Policy from stockpyl.disruption_process import DisruptionProcess -from stockpyl.helpers import is_list, is_dict, is_iterable, ensure_dict_for_nodes, ensure_list_for_nodes +from stockpyl.helpers import is_list, is_dict, is_integer, is_iterable, ensure_dict_for_nodes, ensure_list_for_nodes from stockpyl.helpers import build_node_data_dict @@ -262,15 +262,10 @@ def deep_equal_to(self, other, rel_tol=1e-8): if sorted(self.node_indices) != sorted(other.node_indices): eq = False - elif (None in self.product_indices and None not in other.product_indices) or \ - (None not in self.product_indices and None in other.product_indices): - # None is in one node's product indices but not the other's. - eq = False else: # Replace None with -1 in both node's product indices because None can't be sorted. self_indices = [prod_ind if prod_ind is not None else -1 for prod_ind in self.product_indices] - other_indices = [prod_ind if prod_ind is not None else -1 for prod_ind in other.product_indices] - if sorted(self_indices) != sorted(other_indices): + if sorted(self.product_indices) != sorted(other.product_indices): eq = False else: # Special handling for some attributes. @@ -283,10 +278,7 @@ def deep_equal_to(self, other, rel_tol=1e-8): elif not self.get_node_from_index(n_ind).deep_equal_to(other_node, rel_tol=rel_tol): eq = False elif attr == '_products': - for prod_ind in sorted(self_indices): - if prod_ind == -1: - # Replace -1 with None again. - prod_ind = None + for prod_ind in sorted(self.product_indices): other_product = other.products_by_index[prod_ind] if other_product is None: eq = False @@ -345,17 +337,32 @@ def from_dict(cls, the_dict): else: # Build empty SupplyChainNetwork. network = cls() - # Fill attributes. + # Fill products first, since these will be needed when filling nodes. + if '_products' not in the_dict: + network._products = copy.deepcopy(cls._DEFAULT_VALUES['_products']) + else: + network._products = [SupplyChainProduct.from_dict(prod_dict) for prod_dict in the_dict['_products']] + + # Fill attributes. for attr in cls._DEFAULT_VALUES.keys(): if attr == '_nodes': if 'nodes' not in the_dict: network._nodes = copy.deepcopy(cls._DEFAULT_VALUES['_nodes']) else: for n_dict in the_dict['nodes']: - network.add_node(SupplyChainNode.from_dict(n_dict)) - # Convert nodes' successors and predecessors back to node objects. (SupplyChainNode.to_dict() - # replaces them with indices.) + # Create node. + node = SupplyChainNode.from_dict(n_dict) + # Add products to node. This also replaces _products_by_index values with product objects. + # (SupplyChainNode.to_dict() stores them as ints.) + prod_indices = [int(k) for k in node._products_by_index.keys()] + node._products_by_index = {} + for prod_ind in prod_indices: + node.add_product(network.products_by_index[prod_ind]) + # Add node to network. + network.add_node(node) for n in network.nodes: + # Convert nodes' successors and predecessors back to node objects. (SupplyChainNode.to_dict() + # replaces them with indices.) preds = [] succs = [] for m in network.nodes: @@ -365,9 +372,11 @@ def from_dict(cls, the_dict): succs.append(m) n._predecessors = preds n._successors = succs - elif attr == '_products': - if attr not in the_dict: - value = copy.deepcopy(cls._DEFAULT_VALUES['_products']) + # elif attr == '_products': + # if attr not in the_dict: + # network._products = copy.deepcopy(cls._DEFAULT_VALUES['_products']) + # else: + # network._products = [SupplyChainProduct.from_dict(prod_dict) for prod_dict in the_dict['_products']] else: # Remove leading '_' to get property names. prop = attr[1:] if attr[0] == '_' else attr @@ -377,6 +386,15 @@ def from_dict(cls, the_dict): value = cls._DEFAULT_VALUES[attr] setattr(network, attr, value) + # # Convert nodes' products back to node objects by adding the products. This + # # also replaces each node's _products_by_index attribute with a dict. + # # (SupplyChainNode.to_dict() replaces it with a list of indices.) + # # (This has to be done at the end, to ensure that products have already been + # # filled into network object.) + # for n in network.nodes: + # for k in n._products_by_index.keys(): + # n._products_by_index[k] = network.products_by_index[k] + return network # Methods for node handling. @@ -447,7 +465,11 @@ def add_node(self, node): self.nodes.append(node) node.network = self for prod in node.products: - prod.network = self + # Fill network attribute, unless prod is an integer. + # (This can happen when building a network using from_dict(), because + # _product_by_index values are replaced with ints in to_dict().) + if not is_integer(prod): + prod.network = self def add_edge(self, from_index, to_index): """Add an edge to the network to and from the nodes with the specified indices. diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 247fc87..f7ad8ca 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -68,6 +68,8 @@ from stockpyl import disruption_process from stockpyl.helpers import change_dict_key, is_integer, is_list, is_dict, replace_dict_null_keys, replace_dict_numeric_string_keys +# This number gets added to product indices to avoid conflicts. +_INDEX_BUMP = 1000 # =============================================================================== # SupplyChainNode Class @@ -158,11 +160,10 @@ def __init__(self, index, name=None, network=None, **kwargs): AttributeError If an optional keyword argument does not match a |class_node| attribute. """ - # Initialize attributes. - self.initialize() + # Initialize attributes; set index; add dummy product. + self.initialize(index) - # Set named attributes. - self.index = index + # Set other named attributes. self.name = name self.network = network @@ -181,10 +182,12 @@ def __init__(self, index, name=None, network=None, **kwargs): raise AttributeError(f"{key} is not an attribute of SupplyChainNode") _DEFAULT_VALUES = { - 'index': None, + '_index': None, 'name': None, 'network': None, '_products_by_index': {}, + '_dummy_product': None, + '_external_supplier_dummy_product_index': None, '_predecessors': [], '_successors': [], 'local_holding_cost': None, @@ -218,6 +221,24 @@ def __init__(self, index, name=None, network=None, **kwargs): 'state_vars': [] } + @property + def index(self): + return self._index + + @index.setter + def index(self, value): + # Raise error if index is not a non-negative integer. + if not is_integer(value) or value < 0: + raise ValueError('Node index must be a non-negative integer.') + self._index = value + + # If node has a dummy product, replace it with a new one to update its index. + if self._dummy_product: + self._remove_dummy_product() + self._add_dummy_product() + self._external_supplier_dummy_product_index = self._dummy_product.index - 1 + # TODO: this is clumsy -- do these values really need to change if index changes? and if so, is this really the way to do it? + # Properties related to input parameters. @@ -273,7 +294,7 @@ def predecessors(self, include_external=False): supply_type = self.supply_type if not supply_type: for prod in self.products: - if prod is not None and prod.supply_type is not None: + if prod is not None and not is_integer(prod) and prod.supply_type is not None: supply_type = prod.supply_type # Include external supplier if include_external and supply_type is not None. if include_external and supply_type is not None: @@ -371,10 +392,6 @@ def neighbor_indices(self): def products(self): """A list containing products handled by the node. Read only. """ return list(self._products_by_index.values()) - # if self._products_by_index: - # return list(self._products_by_index.values()) - # else: - # return [None] @property def products_by_index(self): @@ -398,10 +415,6 @@ def is_singleproduct(self): def product_indices(self): """A list of indices of all products handled at the node. Read only.""" return list(self._products_by_index.keys()) - # if self.products: - # return list(self._products_by_index.keys()) - # else: - # return [None] def add_product(self, product): """Add ``product`` to the node. If ``product`` is already in the node (as determined by the index), @@ -414,12 +427,11 @@ def add_product(self, product): """ product.network = self.network - if product.index is None: - self._products_by_index[None] = product - elif product not in self.products: + if product not in self.products: self._products_by_index[product.index] = product - # Remove dummy product (if any). - self._remove_dummy_product() + if not product.is_dummy: + # Remove dummy product. (This also sets `dummy_product` to None.) + self._remove_dummy_product() def add_products(self, list_of_products): """Add each product in ``list_of_products`` to the node. If a given product is already in the @@ -476,13 +488,17 @@ def _add_dummy_product(self): """Add a dummy product to the node. Typically this happens when the node is initialized and/or when all "real" products are removed from the node. """ - self.add_product(SupplyChainProduct(None)) + prod_ind = -self.index if self.index > 0 else -_INDEX_BUMP + dummy = SupplyChainProduct(index=prod_ind, is_dummy=True) + self.add_product(dummy) + self._dummy_product = dummy def _remove_dummy_product(self): """Remove the dummy product from the node. Typically this happens when a "real" product is added to the node. """ - self.remove_product(None) + self.remove_product(self._dummy_product) + self._dummy_product = None def get_network_bill_of_materials(self, product=None, predecessor=None, raw_material=None): """Return the "network bill of materials," i.e., the number of units of ``raw_material`` @@ -509,7 +525,7 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate ``None`` (the default) for the external supplier. raw_material : |class_product| or int, optional The raw material to get the BOM for, as a |class_object| or index. Set to ``None`` (the default) for - the dummy product. + the dummy product at the external supplier. Returns ------- @@ -532,8 +548,11 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate if isinstance(product, SupplyChainProduct): prod = product prod_ind = product.index + elif product is None: + prod = self._dummy_product + prod_ind = self._dummy_product.index else: - prod = None if product is None else self.network.products_by_index[product] + prod = self.network.products_by_index[product] prod_ind = product if isinstance(predecessor, SupplyChainNode): pred = predecessor @@ -542,10 +561,10 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate pred = None if predecessor is None else self.network.get_node_from_index(predecessor) pred_ind = predecessor if isinstance(raw_material, SupplyChainProduct): - rm = raw_material +# rm = raw_material rm_ind = raw_material.index else: - rm = None if raw_material is None else self.network.products_by_index[raw_material] +# rm = None if raw_material is None else self.network.products_by_index[raw_material] rm_ind = raw_material # Validate parameters. @@ -645,7 +664,8 @@ def raw_material_suppliers(self, product_index=None, network_BOM=True): ------- list List of all predecessors, as |class_node| objects, from which a raw material must be ordered in order to - make ``product_index`` at this node, according to the bill of materials. + make ``product_index`` at this node, according to the bill of materials, including ``None`` for + the external supplier, if appropriate. Raises ------ @@ -658,30 +678,23 @@ def raw_material_suppliers(self, product_index=None, network_BOM=True): if not (self.is_singleproduct and len(self.products) == 0 and product_index is None) and product_index not in self.product_indices: raise ValueError(f'{product_index} is not a product index in this SupplyChainNode') - prod = self.products_by_index[product_index] + if product_index is None: + prod = self._dummy_product + else: + prod = self.products_by_index[product_index] suppliers = [] for p in self.predecessors(include_external=True): # Determine whether p provides a raw material for the product. provides_rm = False - for rm in p.products if p is not None else [None]: - if (network_BOM and self.NBOM(product=prod, predecessor=p, raw_material=rm) > 0) \ - or (not network_BOM and prod.BOM(rm.index if rm is not None else None) > 0): - provides_rm = True - break + if p is None: + provides_rm = True + else: + for rm in p.products: + if (network_BOM and self.NBOM(product=prod, predecessor=p, raw_material=rm) > 0) \ + or (not network_BOM and prod.BOM(rm.index if rm is not None else None) > 0): + provides_rm = True + break - # if product_index is None: - # # Every product has a BOM number of 1 with a dummy product, so predecessor is - # # automatically a raw material supplier. - # provides_rm = True - # elif p is None: - # # Predecessor is external supplier, which is automatically a raw material supplier. - # provides_rm = True - # else: - # for rm_ind in p.product_indices: - # if prod.get_bill_of_materials(rm_ind) > 0: - # # rm_ind is a raw material for product. - # provides_rm = True - # Add p to list if it provides a raw material. if provides_rm: suppliers.append(p) @@ -873,11 +886,38 @@ def __repr__(self): # Attribute management. - def initialize(self): - """Initialize the parameters in the object to their default values. - Also initializes attributes that are objects (``demand_source``, ``disruption_process``, ``_inventory_policy``): + def initialize(self, index=None): + """Initialize the parameters in the object to their default values and sets index attribute. + Initializes attributes that are objects (``demand_source``, ``disruption_process``, ``_inventory_policy``). + Adds dummy product and sets external supplier dummy product index, both of which are used in simulations. + + Set ``index`` to ``None`` to keep the current index, if any. If index is already ``None``, + a ``ValueError`` is raised. + + Parameters + ---------- + index : int, optional + The index for the node, or ``None`` (default) to keep the current index. + + Raises + ------ + ValueError + If ``index`` and ``self.index`` are both ``None``, or if ``index`` is not an integer. """ + # Raise error if index is None and current index is None. + if index is None and (not hasattr(self, 'index') or self.index is None): + raise ValueError('index parameter can only be set to None if node index is already set.') + # Raise error if index is not an integer. + if index is not None and not is_integer(index): + raise ValueError('Node index must be an integer.') + + # Remember current index. (Make sure it exists. If this is first initialization, it does not.) + if hasattr(self, 'index'): + curr_index = self.index + else: + curr_index = None + # Loop through attributes. Special handling for list and object attributes. for attr in self._DEFAULT_VALUES.keys(): if attr == 'demand_source': @@ -890,9 +930,20 @@ def initialize(self): setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) else: setattr(self, attr, self._DEFAULT_VALUES[attr]) - - # Add dummy node. + + # Set node index. This must be done after the 'for attr' loop, because default value + # of index is None in self._DEFAULT_VALUES. + if index is None: + self.index = curr_index + else: + self.index = index + + # Add dummy product. self._add_dummy_product() + + # Set external supplier dummy product index. (This is set even if the node does not and + # never will have an external supplier.) + self._external_supplier_dummy_product_index = self._dummy_product.index - 1 def deep_equal_to(self, other, rel_tol=1e-8): """Check whether node "deeply equals" ``other``, i.e., if all attributes are @@ -974,12 +1025,15 @@ def to_dict(self): calling ``to_dict()`` on each object that is an attribute of the node (|class_demand_source|, etc.). - Successors and predecessors are stored as their indices only, not |class_node| objects. - They should be replaced with the node objects if this function is called recursively - from a |class_network|'s ``from_dict()`` method. + The following substitutions are made: - Similarly, ``network`` object is not filled, but should be filled with the network object if this - function is called recursively from a |class_network|'s ``from_dict()`` method. + * Successors and predecessors are stored as their indices only, not |class_node| objects. + * Values in ``_products_by_index`` dict are replaced with indices only, not |class_product| objects. + (This means that the keys and values in the dict are the same.) + * ``network`` object is not filled. + + These should be replaced with the corresponding node objects if this function is called + recursively from a |class_network|'s ``from_dict()`` method. Returns ------- @@ -994,6 +1048,8 @@ def to_dict(self): # A few attributes need special handling. if attr == 'network': node_dict[attr] = None + elif attr == '_products_by_index': + node_dict[attr] = {prod_ind: prod_ind for prod_ind in self._products_by_index.keys()} elif attr == '_predecessors': node_dict[attr] = copy.deepcopy(self.predecessor_indices(include_external=True)) elif attr == '_successors': @@ -1019,6 +1075,10 @@ def from_dict(cls, the_dict): like they are in the dict, but should be converted to node objects if this function is called recursively from a |class_network|'s ``from_dict()`` method. + ``_products_by_index`` is set to a dict in which the keys and values are both product indices, + like they are in the dict, but should be converted to a dict if this function is + called recursively from a |class_network|'s ``from_dict()`` method. + Similarly, ``network`` object is not filled, but should be filled with the network object if this function is called recursively from a |class_network|'s ``from_dict()`` method. @@ -1040,27 +1100,18 @@ def from_dict(cls, the_dict): # Fill attributes. for attr in cls._DEFAULT_VALUES.keys(): # Some attributes require special handling. - if attr in ('_predecessors', '_successors'): + if attr in ('_products_by_index', '_predecessors', '_successors'): if attr in the_dict: value = copy.deepcopy(the_dict[attr]) else: value = copy.deepcopy(cls._DEFAULT_VALUES[attr]) - elif attr == '_products_by_index': - if attr not in the_dict: - value = copy.deepcopy(cls._DEFAULT_VALUES['_products_by_index']) - else: - value = {} - for prod_dict in (the_dict['_products_by_index'].values() or []): - value[prod_dict['index']] = SupplyChainProduct.from_dict(prod_dict) - # elif attr == '_bill_of_materials': - # if attr in the_dict: - # bom = copy.deepcopy(the_dict[attr]) + # elif attr == '_products_by_index': + # if attr not in the_dict: + # value = copy.deepcopy(cls._DEFAULT_VALUES['_products_by_index']) # else: - # bom = copy.deepcopy(cls._DEFAULT_VALUES[attr]) - # # Convert 'null' to None and string-wrapped ints to ints in dictionary keys. - # # (Note that JSON encoding/decoding onverts correctly between None and 'null' - # # for dictionary values but not keys. Similarly, it leaves ints as strings.) - # value = replace_dict_numeric_string_keys(replace_dict_null_keys(bom)) + # value = copy. + # for prod_dict in (the_dict['_products_by_index'].values() or []): + # value[prod_dict['index']] = SupplyChainProduct.from_dict(prod_dict) elif attr == 'demand_source': if attr in the_dict: value = demand_source.DemandSource.from_dict(the_dict[attr]) diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index e986419..42a8fda 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -33,16 +33,16 @@ Game plan for BOM: # TODO: delete this later - BOM lives at product level, and does not indicate node for either product or raw material -- Every node has a dummy product with index None when it is created. When a product is loaded into the +- Every node has a dummy product with negative index when it is created. When a product is loaded into the node, the dummy product is removed. If all "real" products are unloaded, a dummy product is added back. + Indices are generated automatically on the fly. Dummy products have their ``is_dummy`` attribute set to ``True``. - A dummy product is always assumed to have a BOM number of 1 with every product at every predecessor and - successor, including both dummy and real products. product.get_bill_of_materials(None) returns 1 for every - product, and product.get_bill_of_materials(rm_index) returns 1 if product is a dummy product, regardless of what + successor, including both dummy and real products. product.get_bill_of_materials(rm_ind) returns 1 if rm_ind < 0, + and product.get_bill_of_materials(rm_index) returns 1 if product is a dummy product, regardless of what rm_index is. - If a node and a predecessor have no BOM relationship specified for all (rm, product) pairs, a BOM number of 1 is assumed for every product/RM pair. This is true whether the node or predecessor have an actual product loaded, or a dummy product. - # TODO: how to implement this? - To set the BOM number to something other than 1, both the product and the RM must be actual products, not dummy. - If a node or its predecessor has more than one product, a BOM relationship must be specified for @@ -52,11 +52,14 @@ - If a node has supply_type 'U', the external supplier is assumed to provide a dummy raw material, which is not loaded into the external supplier (since a node doesn't exist for that supplier), but raw material inventory is allocated at the node for the external supplier's dummy product at - the start of the simulation. + the start of the simulation. The BOM number is 1 in this case. If there are multiple products at the node, they each order - 1 unit of the dummy product. + 1 unit of the dummy product. The dummy product at an external supplier also has a negative + index that is generated on the fly. - To have an external supplier with a BOM number other than 1, you have to create a node to represent the external supplier. It can have zero costs and LT, etc., but must have the RM product loaded. +- In some functions, setting a product parameter to None is a shortcut for setting it to the index + of the dummy product. - _bill_of_materials[rm_index] = # of units of raw material rm_index required to make 1 unit of product. - In general, I'm ensuring that everything works if _all_ nodes have products loaded or _no_ nodes have products loaded, but I'm less sure about the case in which some do and some don't. @@ -81,7 +84,7 @@ from stockpyl import policy from stockpyl import demand_source from stockpyl import disruption_process -from stockpyl.helpers import is_list, is_dict +from stockpyl.helpers import is_list, is_dict, is_integer # =============================================================================== @@ -100,7 +103,7 @@ class SupplyChainProduct(object): Attributes ---------- index : int - A numeric identifier for the product. + A numeric identifier for the product. Must be non-negative. name : str A string to identify the product. network : |class_network| @@ -185,6 +188,10 @@ def __init__(self, index, name=None, network=None, **kwargs): # Initialize attributes. self.initialize() + # If is_dummy is True, set this first to avoid an error when setting index to a negative number. + if 'is_dummy' in kwargs.keys() and kwargs['is_dummy']: + self.is_dummy = True + # Set named attributes. self.index = index self.name = name @@ -205,9 +212,10 @@ def __init__(self, index, name=None, network=None, **kwargs): raise AttributeError(f"{key} is not an attribute of SupplyChainProduct") _DEFAULT_VALUES = { - 'index': None, + '_index': None, 'name': None, 'network': None, + 'is_dummy': False, '_bill_of_materials': {}, 'local_holding_cost': None, 'echelon_holding_cost': None, @@ -229,6 +237,16 @@ def __init__(self, index, name=None, network=None, **kwargs): 'state_vars': [] } + @property + def index(self): + return self._index + + @index.setter + def index(self, value): + # Raise error if index is non-integer, or if it is negative and this is not a dummy product. + if (value < 0 and not self.is_dummy) or not is_integer(value): + raise ValueError('Product index must be a non-negative integer.') + self._index = value # Properties and functions related to bill of materials. @@ -240,8 +258,9 @@ def set_bill_of_materials(self, rm_index, num_needed=1.0): If ``num_needed = 0`` or ``None`` and a BOM relationship does not already exist for the specified product and raw material, does nothing. - Raises an exception if the product's index is ``None`` or rm_index is ``None``, since - dummy products always have a BOM number of 1 with every other product. + Raises an exception if the product's index or ``rm_index`` is negative. (Negative indices are reserved for + "dummy products" established by a simulation, and such products always have a BOM number of 1 with every + other product.) Parameters ---------- @@ -256,8 +275,8 @@ def set_bill_of_materials(self, rm_index, num_needed=1.0): If ``self.index is None`` or ``rm_index is None``. """ - if self.index is None or rm_index is None: - raise ValueError('You cannot set the BOM for dummy products (products with index=None).') + if self.index < 0 or rm_index < 0: + raise ValueError('You cannot set the BOM for dummy products (products with index < 0).') # Are we adding a BOM relationship? if num_needed: @@ -269,11 +288,10 @@ def set_bill_of_materials(self, rm_index, num_needed=1.0): def get_bill_of_materials(self, rm_index): """Return the number of units of raw material product ``rm_index`` that are required in order - to make one unit of this product. - - Returns 1 if ``self.index is None`` or ``rm_index is None``, because dummy products always have - a BOM number of 1 with every other product. - Returns 0 if there is no BOM relationship for this product and ``rm_index``. + to make one unit of this product. Returns 0 if there is no BOM relationship for this product and ``rm_index``. + + Returns 1 if ``self.index`` or ``rm_index`` is negative, because negative indices indicate + dummy products, which always have a BOM number of 1 with every other product. :func:`BOM` is a shortcut to this function. @@ -287,7 +305,7 @@ def get_bill_of_materials(self, rm_index): int The BOM number for the (raw material, product) pair. """ - if self.index is None or rm_index is None: + if self.index < 0 or rm_index < 0: return 1 try: @@ -307,12 +325,12 @@ def bill_of_materials_dict(self): ``bill_of_materials_dict[rm_index]`` is the number of units of raw material ``rm_index`` required to make one unit of this product. - Dummy products always have a BOM number of 1 with every other product, but this is not - reflected in the dict returned; the dict does not have entries for dummy products. - It is normally easier to access the bill of materials using :func:`get_bill_of_materials` (or the shortcut :func:`BOM`). + Dummy products (products with index < 0) always have a BOM number of 1 with every other product, but this is not + reflected in the dict returned; the dict does not have entries for dummy products. + Read only. """ return self._bill_of_materials @@ -561,7 +579,7 @@ def from_dict(cls, the_dict): product = cls() else: # Build empty SupplyChainProduct. - product = cls(the_dict['index']) + product = cls(the_dict['_index']) # Fill attributes. for attr in cls._DEFAULT_VALUES.keys(): # Some attributes require special handling. diff --git a/tests/additional_files/multi_product_instance.json b/tests/additional_files/multi_product_instance.json deleted file mode 100644 index 2f22a11..0000000 --- a/tests/additional_files/multi_product_instance.json +++ /dev/null @@ -1,1103 +0,0 @@ -{ - "_id": "", - "instances": [ - { - "name": "bom_structure", - "description": "", - "data": { - "nodes": [ - { - "index": 4, - "name": null, - "network": null, - "_products_by_index": { - "5": { - "index": 5, - "name": null, - "network": null, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - "6": { - "index": 6, - "name": null, - "network": null, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - }, - "_predecessors": [ - null - ], - "_successors": [ - 2, - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "index": 2, - "name": null, - "network": null, - "_products_by_index": { - "2": { - "index": 2, - "name": null, - "network": null, - "_bill_of_materials": { - "5": 0.2 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - "3": { - "index": 3, - "name": null, - "network": null, - "_bill_of_materials": { - "5": 2 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - "4": { - "index": 4, - "name": null, - "network": null, - "_bill_of_materials": { - "6": 50 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - }, - "_predecessors": [ - 4 - ], - "_successors": [ - 0, - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "index": 3, - "name": null, - "network": null, - "_products_by_index": { - "2": { - "index": 2, - "name": null, - "network": null, - "_bill_of_materials": { - "5": 0.2 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - "4": { - "index": 4, - "name": null, - "network": null, - "_bill_of_materials": { - "6": 50 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - }, - "_predecessors": [ - 4 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "index": 0, - "name": null, - "network": null, - "_products_by_index": { - "0": { - "index": 0, - "name": null, - "network": null, - "_bill_of_materials": { - "2": 2.5, - "3": 7 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 0, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - }, - "_predecessors": [ - 2 - ], - "_successors": [], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 0, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "index": 1, - "name": null, - "network": null, - "_products_by_index": { - "0": { - "index": 0, - "name": null, - "network": null, - "_bill_of_materials": { - "2": 2.5, - "3": 7 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 0, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - "1": { - "index": 1, - "name": null, - "network": null, - "_bill_of_materials": { - "3": 10, - "4": 3.8 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - }, - "_predecessors": [ - 2, - 3 - ], - "_successors": [], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "index": 0, - "name": null, - "network": null, - "_bill_of_materials": { - "2": 2.5, - "3": 7 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 0, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "index": 1, - "name": null, - "network": null, - "_bill_of_materials": { - "3": 10, - "4": 3.8 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "index": 2, - "name": null, - "network": null, - "_bill_of_materials": { - "5": 0.2 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "index": 3, - "name": null, - "network": null, - "_bill_of_materials": { - "5": 2 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "index": 4, - "name": null, - "network": null, - "_bill_of_materials": { - "6": 50 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "index": 5, - "name": null, - "network": null, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "index": 6, - "name": null, - "network": null, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2024-04-03 07:41:41.297766" -} \ No newline at end of file diff --git a/tests/additional_files/test_multiproduct_5_7.json b/tests/additional_files/test_multiproduct_5_7.json index e544845..b3fa24e 100644 --- a/tests/additional_files/test_multiproduct_5_7.json +++ b/tests/additional_files/test_multiproduct_5_7.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"index": 4, "name": null, "network": null, "_products_by_index": {"5": {"index": 5, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "6": {"index": 6, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_products_by_index": {"2": {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "3": {"index": 3, "name": null, "network": null, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "4": {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 3, "name": null, "network": null, "_products_by_index": {"2": {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "4": {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 0, "name": null, "network": null, "_products_by_index": {"0": {"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [2], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_products_by_index": {"0": {"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, "1": {"index": 1, "name": null, "network": null, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}}, "_predecessors": [2, 3], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"index": 0, "name": null, "network": null, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 1, "name": null, "network": null, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 2, "name": null, "network": null, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 3, "name": null, "network": null, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 4, "name": null, "network": null, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 5, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"index": 6, "name": null, "network": null, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-03 07:44:32.514426"} \ No newline at end of file +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product_index": -5, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -3, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -4, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product_index": -1001, "_predecessors": [2], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product_index": -2, "_predecessors": [2, 3], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-08 23:54:13.357651"} \ No newline at end of file diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 7d7d7b7..c9e1b0b 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -13,6 +13,7 @@ from stockpyl.instances import * from stockpyl.sim import * +from stockpyl.supply_chain_node import _INDEX_BUMP # Module-level functions. @@ -81,6 +82,38 @@ def test_bad_params(self): _ = SupplyChainNode(index=4, foo=7) +class TestIndex(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestIndex', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestIndex', 'tear_down_class()') + + def test_update_dummy(self): + """Test that changing index also changes the dummy product. + """ + print_status('TestIndex', 'test_bad_index()') + + node = SupplyChainNode(index=5) + self.assertEqual(node._dummy_product.index, -5) + + node.index = 10 + self.assertEqual(node._dummy_product.index, -10) + + def test_bad_index(self): + """Test that index property correctly raises error when appropriate. + """ + print_status('TestIndex', 'test_bad_index()') + + with self.assertRaises(ValueError): + _ = SupplyChainNode(index=5.5) + _ = SupplyChainProduct(index=-10) + + class TestSupplyChainNodeEq(unittest.TestCase): @classmethod def set_up_class(cls): @@ -437,19 +470,20 @@ def test_basic(self): print_status('TestRemoveProduct', 'test_basic()') network = load_instance("example_6_1") + nodes = {n.index: n for n in network.nodes} - network.nodes[0].add_product(SupplyChainProduct(0)) - network.nodes[1].add_product(SupplyChainProduct(1)) - network.nodes[2].add_product(SupplyChainProduct(2)) - network.nodes[2].add_product(SupplyChainProduct(3)) + nodes[1].add_product(SupplyChainProduct(0)) + nodes[2].add_product(SupplyChainProduct(1)) + nodes[3].add_product(SupplyChainProduct(2)) + nodes[3].add_product(SupplyChainProduct(3)) - network.nodes[0].remove_product(0) - network.nodes[1].remove_product(1) - network.nodes[2].remove_product(network.nodes[2].products_by_index[2]) + nodes[1].remove_product(0) + nodes[2].remove_product(1) + nodes[3].remove_product(nodes[3].products_by_index[2]) - self.assertEqual(network.nodes[0].product_indices, [None]) - self.assertEqual(network.nodes[1].product_indices, [None]) - self.assertEqual(network.nodes[2].product_indices, [3]) + self.assertEqual(nodes[1].product_indices, [-1]) + self.assertEqual(nodes[2].product_indices, [-2]) + self.assertEqual(nodes[3].product_indices, [3]) def test_multiproduct_5_7(self): """Test remove_product() for 5-node 7-product instance. @@ -462,7 +496,7 @@ def test_multiproduct_5_7(self): network.get_node_from_index(1).remove_product(1) network.get_node_from_index(2).remove_product(network.get_node_from_index(2).products_by_index[2]) - self.assertEqual(network.get_node_from_index(0).product_indices, [None]) + self.assertEqual(network.get_node_from_index(0).product_indices, [-_INDEX_BUMP]) self.assertEqual(network.get_node_from_index(1).product_indices, [0]) self.assertEqual(network.get_node_from_index(2).product_indices, [3, 4]) @@ -496,9 +530,29 @@ def test_basic(self): """ print_status('TestAddRemoveDummyProduct', 'test_basic()') - node = SupplyChainNode(0) - self.assertEqual(node.product_indices, [None]) + node = SupplyChainNode(4) + self.assertEqual(node.product_indices, [-4]) + self.assertTrue(node.products[0].is_dummy) + + def test_add_remove(self): + """Basic test. + """ + print_status('TestAddRemoveDummyProduct', 'test_add_remove()') + + node = SupplyChainNode(4) + self.assertEqual(node.product_indices, [-4]) + self.assertTrue(node.products[0].is_dummy) + self.assertEqual(node._dummy_product, node.products[0]) + node.add_product(SupplyChainProduct(5)) + self.assertNotIn(-4, node.product_indices) + self.assertFalse(node.products[0].is_dummy) + self.assertIsNone(node._dummy_product) + + node.remove_product(5) + self.assertEqual(node.product_indices, [-4]) + self.assertTrue(node.products[0].is_dummy) + self.assertEqual(node._dummy_product, node.products[0]) class TestRemoveProducts(unittest.TestCase): @classmethod @@ -517,19 +571,20 @@ def test_basic(self): print_status('TestRemoveProducts', 'test_basic()') network = load_instance("example_6_1") + nodes = {n.index: n for n in network.nodes} - network.nodes[0].add_product(SupplyChainProduct(0)) - network.nodes[1].add_product(SupplyChainProduct(1)) - network.nodes[2].add_product(SupplyChainProduct(2)) - network.nodes[2].add_product(SupplyChainProduct(3)) + nodes[1].add_product(SupplyChainProduct(0)) + nodes[2].add_product(SupplyChainProduct(1)) + nodes[3].add_product(SupplyChainProduct(2)) + nodes[3].add_product(SupplyChainProduct(3)) - network.nodes[0].remove_products([0]) - network.nodes[1].remove_products([1]) - network.nodes[2].remove_products([network.nodes[2].products_by_index[2], 3]) + nodes[1].remove_products([0]) + nodes[2].remove_products([1]) + nodes[3].remove_products([nodes[3].products_by_index[2], 3]) - self.assertEqual(network.nodes[0].product_indices, [None]) - self.assertEqual(network.nodes[1].product_indices, [None]) - self.assertEqual(network.nodes[2].product_indices, [None]) + self.assertEqual(nodes[1].product_indices, [-1]) + self.assertEqual(nodes[2].product_indices, [-2]) + self.assertEqual(nodes[3].product_indices, [-3]) def test_multiproduct_5_7(self): """Test remove_product() for 5-node 7-product instance. @@ -2279,17 +2334,22 @@ def test_initialize(self): """ print_status('TestInitialize', 'test_copy()') - n1 = SupplyChainNode(index=None) - n2 = SupplyChainNode(index=None) - n1.initialize() + n1 = SupplyChainNode(index=1) + n2 = SupplyChainNode(index=1) + n1.initialize(index=None) self.assertTrue(n1.deep_equal_to(n2)) - self.assertEqual(n1.products, [None]) + self.assertEqual(n1.products, [n1._dummy_product]) - n1 = SupplyChainNode(index=None, local_holding_cost=2, stockout_cost=50, shipment_lead_time=3) - n2 = SupplyChainNode(index=None) + n1 = SupplyChainNode(index=1, local_holding_cost=2, stockout_cost=50, shipment_lead_time=3) + n2 = SupplyChainNode(index=1) n1.initialize() self.assertTrue(n1.deep_equal_to(n2)) - self.assertEqual(n1.products, [None]) + self.assertEqual(n1.products, [n1._dummy_product]) + + with self.assertRaises(ValueError): + n1.initialize(index=-5) + n1.index = None + n1.initialize(index=None) class TestNodeStateVarsToFromDict(unittest.TestCase): diff --git a/tests/test_supply_chain_product.py b/tests/test_supply_chain_product.py index 1749e32..16100e7 100644 --- a/tests/test_supply_chain_product.py +++ b/tests/test_supply_chain_product.py @@ -76,6 +76,30 @@ def test_bad_params(self): _ = SupplyChainProduct(index=4, foo=7) +class TestIndex(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestIndex', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestIndex', 'tear_down_class()') + + def test_bad_index(self): + """Test that index property correctly raises error when appropriate. + """ + print_status('TestIndex', 'test_bad_index()') + + with self.assertRaises(ValueError): + _ = SupplyChainProduct(index=5.5) + _ = SupplyChainProduct(index=-10) + + # Make sure no error raised here. + _ = SupplyChainProduct(index=-10, is_dummy=True) + + class TestSetGetBillOfMaterials(unittest.TestCase): @classmethod def set_up_class(cls): From 3503009505b9f856d401ff7dbece6a3ccf53c69e Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Tue, 9 Apr 2024 11:55:01 -0400 Subject: [PATCH 17/94] Fix bug that shallow-copied network default product list --- src/stockpyl/supply_chain_network.py | 5 ++++- src/stockpyl/supply_chain_node.py | 11 +++++++++-- tests/additional_files/test_multiproduct_5_7.json | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 13f4e55..a008c0b 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -221,7 +221,7 @@ def __repr__(self): def initialize(self): """Initialize the parameters in the object to their default values. """ - # Loop through attributes. Special handling for list attributes. + # Loop through attributes. Special handling for list and dict attributes. for attr in self._DEFAULT_VALUES.keys(): if is_list(self._DEFAULT_VALUES[attr]) or is_dict(self._DEFAULT_VALUES[attr]): setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) @@ -377,6 +377,9 @@ def from_dict(cls, the_dict): # network._products = copy.deepcopy(cls._DEFAULT_VALUES['_products']) # else: # network._products = [SupplyChainProduct.from_dict(prod_dict) for prod_dict in the_dict['_products']] + elif attr == '_products': + # Already set this--do nothing. + pass else: # Remove leading '_' to get property names. prop = attr[1:] if attr[0] == '_' else attr diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index f7ad8ca..196ddb9 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1095,12 +1095,19 @@ def from_dict(cls, the_dict): if the_dict is None: node = cls() else: + # Determine index for new node. The attribute could be stored in the dict as + # index or _index: Older saved files use index, but the attribute was changed + # to _index subsequently. Allow exception to be raised if neither is in the dict. + index = the_dict['index'] if 'index' in the_dict else the_dict['_index'] # Build empty SupplyChainNode. - node = cls(the_dict['index']) + node = cls(index) # Fill attributes. for attr in cls._DEFAULT_VALUES.keys(): # Some attributes require special handling. - if attr in ('_products_by_index', '_predecessors', '_successors'): + if attr == '_index': + # This has no effect--we already set the index--but is needed for setattr() below. + value = index + elif attr in ('_products_by_index', '_predecessors', '_successors'): if attr in the_dict: value = copy.deepcopy(the_dict[attr]) else: diff --git a/tests/additional_files/test_multiproduct_5_7.json b/tests/additional_files/test_multiproduct_5_7.json index b3fa24e..267c6e2 100644 --- a/tests/additional_files/test_multiproduct_5_7.json +++ b/tests/additional_files/test_multiproduct_5_7.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product_index": -5, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -3, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -4, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product_index": -1001, "_predecessors": [2], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product_index": -2, "_predecessors": [2, 3], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-08 23:54:13.357651"} \ No newline at end of file +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product_index": -5, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -3, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -4, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product_index": -1001, "_predecessors": [2], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product_index": -2, "_predecessors": [2, 3], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-09 00:00:12.319991"} \ No newline at end of file From 379fbb152f7aca5dd9e808564beccb45b4bb61a3 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Tue, 9 Apr 2024 13:17:25 -0400 Subject: [PATCH 18/94] More bug hunting --- src/stockpyl/supply_chain_network.py | 14 -------------- src/stockpyl/supply_chain_node.py | 6 +++--- src/stockpyl/supply_chain_product.py | 6 +++--- .../additional_files/test_multiproduct_5_7.json | 2 +- tests/test_supply_chain_node.py | 16 +++++++++++----- tests/test_supply_chain_product.py | 8 ++++---- 6 files changed, 22 insertions(+), 30 deletions(-) diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index a008c0b..90c1352 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -372,11 +372,6 @@ def from_dict(cls, the_dict): succs.append(m) n._predecessors = preds n._successors = succs - # elif attr == '_products': - # if attr not in the_dict: - # network._products = copy.deepcopy(cls._DEFAULT_VALUES['_products']) - # else: - # network._products = [SupplyChainProduct.from_dict(prod_dict) for prod_dict in the_dict['_products']] elif attr == '_products': # Already set this--do nothing. pass @@ -388,15 +383,6 @@ def from_dict(cls, the_dict): else: value = cls._DEFAULT_VALUES[attr] setattr(network, attr, value) - - # # Convert nodes' products back to node objects by adding the products. This - # # also replaces each node's _products_by_index attribute with a dict. - # # (SupplyChainNode.to_dict() replaces it with a list of indices.) - # # (This has to be done at the end, to ensure that products have already been - # # filled into network object.) - # for n in network.nodes: - # for k in n._products_by_index.keys(): - # n._products_by_index[k] = network.products_by_index[k] return network diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 196ddb9..b533565 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -673,9 +673,9 @@ def raw_material_suppliers(self, product_index=None, network_BOM=True): If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and this is a single-product node with no |class_product| added. """ - # If product index is not in product indices for node, AND it's not the case that this is a single-prdouct node without - # a product object and product_index is None, raise exception. - if not (self.is_singleproduct and len(self.products) == 0 and product_index is None) and product_index not in self.product_indices: + # If product index is not in product indices for node, AND it's not the case that this is a single-product node without + # a product object (i.e., with a dummy product) and product_index is None, raise exception. + if not (self.is_singleproduct and self._dummy_product is not None and product_index is None) and product_index not in self.product_indices: raise ValueError(f'{product_index} is not a product index in this SupplyChainNode') if product_index is None: diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 42a8fda..f303e6b 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -103,7 +103,7 @@ class SupplyChainProduct(object): Attributes ---------- index : int - A numeric identifier for the product. Must be non-negative. + A numeric identifier for the product. Must be a non-negative integer. name : str A string to identify the product. network : |class_network| @@ -212,7 +212,7 @@ def __init__(self, index, name=None, network=None, **kwargs): raise AttributeError(f"{key} is not an attribute of SupplyChainProduct") _DEFAULT_VALUES = { - '_index': None, + '_index': 0, 'name': None, 'network': None, 'is_dummy': False, @@ -244,7 +244,7 @@ def index(self): @index.setter def index(self, value): # Raise error if index is non-integer, or if it is negative and this is not a dummy product. - if (value < 0 and not self.is_dummy) or not is_integer(value): + if not is_integer(value) or (value < 0 and not self.is_dummy): raise ValueError('Product index must be a non-negative integer.') self._index = value diff --git a/tests/additional_files/test_multiproduct_5_7.json b/tests/additional_files/test_multiproduct_5_7.json index 267c6e2..7243190 100644 --- a/tests/additional_files/test_multiproduct_5_7.json +++ b/tests/additional_files/test_multiproduct_5_7.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product_index": -5, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -3, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -4, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product_index": -1001, "_predecessors": [2], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product_index": -2, "_predecessors": [2, 3], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-09 00:00:12.319991"} \ No newline at end of file +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product_index": -5, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -3, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -4, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product_index": -1001, "_predecessors": [2], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product_index": -2, "_predecessors": [2, 3], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-09 12:49:39.272815"} \ No newline at end of file diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index c9e1b0b..297900b 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -597,7 +597,7 @@ def test_multiproduct_5_7(self): network.get_node_from_index(1).remove_products([1]) network.get_node_from_index(2).remove_products([3, network.get_node_from_index(2).products_by_index[2]]) - self.assertEqual(network.get_node_from_index(0).product_indices, [None]) + self.assertEqual(network.get_node_from_index(0).product_indices, [-_INDEX_BUMP]) self.assertEqual(network.get_node_from_index(1).product_indices, [0]) self.assertEqual(network.get_node_from_index(2).product_indices, [4]) @@ -1948,13 +1948,13 @@ def test_missing_values(self): n2.disruption_process.recovery_probability = DisruptionProcess._DEFAULT_VALUES['_recovery_probability'] self.assertTrue(n1.deep_equal_to(n2)) - def test_multi_product_network7(self): + def test_multiproduct_5_7(self): """Test that to_dict() and from_dict() correctly convert SupplyChainNode object to and from dict - in 7-stage multi-product network. + in 5-stage 7-product network. """ - print_status('TestNodeToFromDict', 'test_multi_product_network7()') + print_status('TestNodeToFromDict', 'test_multiproduct_5_7()') - network = load_instance("bom_structure", "tests/additional_files/multi_product_instance.json") + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") # Convert nodes to dicts. node_dicts = [n.to_dict() for n in network.nodes] @@ -1963,6 +1963,7 @@ def test_multi_product_network7(self): dict_nodes = [SupplyChainNode.from_dict(d) for d in node_dicts] # Convert successors and predecessors back to node objects. Replace network objects. + # Fill products. for n in dict_nodes: preds = [] succs = [] @@ -1974,6 +1975,11 @@ def test_multi_product_network7(self): n._predecessors = preds n._successors = succs n.network = network + + prods = n.products + n.remove_products('all') + for prod in prods: + n.add_product(network.products_by_index[prod]) # Compare. for i in range(len(network.nodes)): diff --git a/tests/test_supply_chain_product.py b/tests/test_supply_chain_product.py index 16100e7..f4a4a94 100644 --- a/tests/test_supply_chain_product.py +++ b/tests/test_supply_chain_product.py @@ -518,13 +518,13 @@ def test_initialize(self): """ print_status('TestInitialize', 'test_copy()') - prod1 = SupplyChainProduct(index=None) - prod2 = SupplyChainProduct(index=None) + prod1 = SupplyChainProduct(index=0) + prod2 = SupplyChainProduct(index=0) prod1.initialize() self.assertTrue(prod1.deep_equal_to(prod2)) - prod1 = SupplyChainProduct(index=None, local_holding_cost=2, stockout_cost=50, shipment_lead_time=3) - prod2 = SupplyChainProduct(index=None) + prod1 = SupplyChainProduct(index=0, local_holding_cost=2, stockout_cost=50, shipment_lead_time=3) + prod2 = SupplyChainProduct(index=0) prod1.initialize() self.assertTrue(prod1.deep_equal_to(prod2)) From b0997457a53ede1e27be15f1091fb5367ab20908 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 12 Apr 2024 10:18:12 -0400 Subject: [PATCH 19/94] Working on NodeStateVars properties and functions --- src/stockpyl/instances.py | 22 +- src/stockpyl/policy.py | 2 +- src/stockpyl/sim.py | 49 +- src/stockpyl/supply_chain_network.py | 3 + src/stockpyl/supply_chain_node.py | 748 ++++++++++++++++++++------- src/stockpyl/supply_chain_product.py | 9 +- tests/test_supply_chain_node.py | 460 +++++++++++++--- 7 files changed, 1021 insertions(+), 272 deletions(-) diff --git a/src/stockpyl/instances.py b/src/stockpyl/instances.py index d6592ff..f63783d 100644 --- a/src/stockpyl/instances.py +++ b/src/stockpyl/instances.py @@ -78,8 +78,6 @@ def load_instance(instance_name, filepath=None, ignore_state_vars=True): # TODO: convert 'null' to None - - # Determine filepath. if filepath is None: filepath = _stockpyl_instances_json_path() @@ -121,8 +119,6 @@ def load_instance(instance_name, filepath=None, ignore_state_vars=True): if ignore_state_vars: for n in instance.nodes: n.state_vars = [] - - return instance else: # As a dict. Leave in place. But: # If the instance contains any dicts with integer keys, they will have @@ -131,7 +127,23 @@ def load_instance(instance_name, filepath=None, ignore_state_vars=True): if 'demand_pmf' in instance.keys(): instance['demand_pmf'] = {int(k): v for k, v in instance['demand_pmf'].items()} - return instance + # Ensure that all nodes have dummy product fields set correctly. This is to maintain backward + # compatitbility with earlier versions, which did not save product info (including dummy products). + for n in instance.nodes: + # Does node already have dummy product? + if n._dummy_product is None: + # Add a dummy product, whether or not it needs one (mainly to assign the index). + n._add_dummy_product() + # Assign external supplier dummy product. + n._external_supplier_dummy_product = SupplyChainProduct(n._dummy_product.index - 1, is_dummy=True) + # Does node have "real" products? (This will probably never happen, since products were introduced + # in the same version as dummy products--so if a node has products, it probably has dummy products + # correctly handled already.) + if len(n.products_by_index) > 1: + # Remove dummy product. + n._remove_dummy_product() + + return instance def save_instance(instance_name, instance_data, instance_description='', filepath=None, replace=True, create_if_none=True, omit_state_vars=True): diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index 29c9b99..7c4471d 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -412,7 +412,7 @@ def get_order_quantity(self, predecessor_index=None, predecessor_product_index=N # TODO: adjust error message for multi-product? if self.node is None: raise AttributeError("You must either provide inventory_position or set the node attribute of the Policy object to the node that it refers to. (Usually this should be done when you first create the Policy object.)") - if self.node.is_multproduct and self.product is None: + if self.node.is_multiproduct and self.product is None: raise AttributeError("You must either provide inventory_position or set the product attribute of the Policy object to the product that it refers to (since the node is multi-product). (Usually this shoudl be done when you first creat the Policy object.)") # TODO: stopped here diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 9c53186..9f23941 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -345,7 +345,7 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Get the node. node = network.get_node_from_index(node_index) - # Loop through products (including None). + # Loop through products (including dummy product). for prod_index in node.product_indices: # Does node/product have external demand? dem_src = node.get_attribute('demand_source', prod_index) @@ -363,14 +363,13 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Receive inbound orders. _receive_inbound_orders(node) - # Loop through products at this node. (If no products, use None.) - for prod in node.products or [None]: + # Loop through products at this node (possibly including dummy). + for prod in node.products: # Get lead times and product index (for convenience). order_lead_time = node.get_attribute('order_lead_time', prod) or 0 shipment_lead_time = node.get_attribute('shipment_lead_time', prod) or 0 - prod_index = prod.index if prod is not None else None - + # Determine order quantity. # Was an override order quantity provided? try: @@ -389,8 +388,8 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Calculate order quantity. policy = node.get_attribute('inventory_policy', product=prod) if policy is None: - if prod_index: - err_str = f'The inventory_policy attribute for node {node.index} and product {prod_index} is None. You must provide a Policy object in one or both objects in order for the simulation to set order quantities.' + if prod.index: + err_str = f'The inventory_policy attribute for node {node.index} and product {prod.index} is None. You must provide a Policy object in one or both objects in order for the simulation to set order quantities.' else: err_str = f'The inventory_policy attribute for node {node.index} is None. You must provide a Policy object in order for the simulation to set order quantities.' raise AttributeError(err_str) @@ -400,7 +399,7 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Place orders to all raw material suppliers (predecessors that provide this product/node with # a raw material). - for p in node.raw_material_suppliers(product_index=prod_index): + for p in node.raw_material_suppliers(product_index=prod.index): p_index = p.index if p is not None else None # Loop through products at predecessor and determine which ones are raw materials for prod. @@ -501,35 +500,37 @@ def _initialize_state_vars(network): # Initialize inventory levels and other quantities. for n in network.nodes: - # Loop through products. - for prod in n.products: - # Shortcut to product index. - prod_index = prod.index if prod is not None else None + # State variables indexed by product at this node. + for prod in n.products: + # Initialize inventory_level to initial_inventory_level (or to BS level, etc., if None). init_IL = n.get_attribute('initial_inventory_level', prod) if init_IL is None: init_IL = n.get_attribute('inventory_policy', prod).get_order_quantity(inventory_position=0) - n.state_vars[0][prod_index].inventory_level = init_IL + n.state_vars[0].inventory_level[prod.index] = init_IL - # Initialize inbound shipment pipeline and on-order quantities. - for p_index in n.predecessor_indices(include_external=True): + # Initialize inbound order pipeline. (Exclude external demand.) + for s in n.successors(): + for l in range(s.get_attribute('order_lead_time') or 0): + n.state_vars[0].inbound_order_pipeline[s.index][prod.index][l] = s.get_attribute('initial_orders', prod) or 0 + + # State variables indexed by product at predecessor nodes. + for p in n.predecessors(include_external=True): + p_index = p.index if p is not None else None + for prod_index in p.product_indices if p is not None else [n._external_supplier_dummy_product.index]: + + # Initialize inbound shipment pipeline and on-order quantities. for l in range(n.shipment_lead_time or 0): n.state_vars[0].inbound_shipment_pipeline[p_index][prod_index][l] = n.get_attribute('initial_shipments', prod) or 0 n.state_vars[0].on_order_by_predecessor[p_index][prod_index] = \ (n.get_attribute('initial_shipments', prod) or 0) * (n.get_attribute('shipment_lead_time', prod) or 0) \ + (n.get_attribute('initial_orders', prod) or 0) * (n.get_attribute('order_lead_time', prod) or 0) - # Initialize inbound order pipeline. (Exclude external demand.) - for s in n.successors(): - for l in range(s.get_attribute('order_lead_time') or 0): - n.state_vars[0].inbound_order_pipeline[s.index][prod_index][l] = s.get_attribute('initial_orders', prod) or 0 + # Initialize raw material inventory. + for rm_index in n.raw_material_indices(network_BOM=True): + n.state_vars[0].raw_material_inventory[rm_index] = 0 - # Initialize raw material inventory. - for rm_index in n.raw_material_indices: - n.state_vars[0].raw_material_inventory[rm_index] = 0 - # for p_index in n.predecessor_indices(include_external=True): - # n.state_vars[0].raw_material_inventory[p_index][prod_index] = 0 def _receive_inbound_orders(node): diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 90c1352..908e49f 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -146,6 +146,9 @@ def products_by_index(self): product indices and the values are the corresponding |class_product| objects. For example, ``self.products_by_index[4]`` returns a |class_product| object for the product with index 4. + + Includes "dummy products" that are added internally to nodes that do not have a |class_product| + object added. Dummy products are identifiable by their index, which is always negative. Read only. """ diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index b533565..7a71e57 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -187,7 +187,7 @@ def __init__(self, index, name=None, network=None, **kwargs): 'network': None, '_products_by_index': {}, '_dummy_product': None, - '_external_supplier_dummy_product_index': None, + '_external_supplier_dummy_product': None, '_predecessors': [], '_successors': [], 'local_holding_cost': None, @@ -236,7 +236,7 @@ def index(self, value): if self._dummy_product: self._remove_dummy_product() self._add_dummy_product() - self._external_supplier_dummy_product_index = self._dummy_product.index - 1 + self._external_supplier_dummy_product = SupplyChainProduct(self._dummy_product.index - 1) # TODO: this is clumsy -- do these values really need to change if index changes? and if so, is this really the way to do it? @@ -570,7 +570,7 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate # Validate parameters. if prod_ind not in self.product_indices: raise ValueError(f'Product {prod_ind} is not a product in node {self.index}.') - if (rm_ind is not None or pred is not None) and (rm_ind not in pred.product_indices): + if pred is not None and rm_ind not in pred.product_indices: raise ValueError(f'Product {rm_ind} is not a product in node {pred_ind}.') if pred_ind not in self.predecessor_indices(include_external=True): raise ValueError(f'Node {pred_ind} is not a predecessor of node {self.index}.') @@ -595,14 +595,22 @@ def NBOM(self, product=None, predecessor=None, raw_material=None): """A shortcut to :func:`~get_network_bill_of_materials`.""" return self.get_network_bill_of_materials(product, predecessor, raw_material) - def raw_materials(self, network_BOM=True): - """A list of all raw materials required to make all products at the node. + def raw_materials_by_product(self, product_index=None, network_BOM=True): + """A list of all raw materials required to make product with index ``product_index`` + at the node, as as |class_prod| objects. If the node is single-product, either set + ``product_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. Set ``product_index`` to ``'all'`` + to include all raw materials required to make all products at the node. + If ``network_BOM`` is ``True``, includes raw materials that don't have a BOM relationship specified but are implied by the network structure. (See :func:`get_network_bill_of_materials`.) Read only. Parameters ---------- + product_index : int, optional + The product index, or ``None`` if the node is single-product, or ``'all'`` to + get raw materials for all products. network_BOM : bool, optional If ``True`` (default), function uses network BOM instead of product-only BOM. @@ -610,26 +618,54 @@ def raw_materials(self, network_BOM=True): ------- list List of all raw materials required to make all products at the node. + + Raises + ------ + ValueError + If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and + this is a single-product node with no |class_product| added. """ + # If product index is not in product indices for node, AND it's not the case that this is a single-product node + # and product_index is None, raise exception. + if not (self.is_singleproduct and product_index is None) \ + and product_index != 'all' and product_index not in self.product_indices: + raise ValueError(f'{product_index} is not a product index in this SupplyChainNode') + + # Determine which products to get raw materials for. + if product_index == 'all': + products = self.products + elif product_index == None: + products = [self.products[0]] + else: + products = [self.products_by_index[product_index]] + rms = set() - for prod in self.products: + for prod in products: if network_BOM: for pred in self.predecessors(include_external=True): - for rm in pred.products: + for rm in pred.products if pred is not None else [self._external_supplier_dummy_product]: if self.NBOM(product=prod, predecessor=pred, raw_material=rm) > 0: rms.add(rm) else: rms |= set(prod.raw_materials) return list(rms) - def raw_material_indices(self, network_BOM=True): - """A list of indices of all raw materials required to make all products at the node. + def raw_material_indices_by_product(self, product_index=None, network_BOM=True): + """A list of indices of all raw materials required to make product with index ``product_index`` + at the node, as as |class_prod| objects. If the node is single-product, either set + ``product_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. Set ``product_index`` to ``'all'`` + to include all raw materials required to make all products at the node. + If ``network_BOM`` is ``True``, includes raw materials that don't have a BOM relationship specified but are implied by the network structure. (See :func:`get_network_bill_of_materials`.) Read only. Parameters ---------- + product_index : int, optional + The product index, or ``None`` if node is single-product, or ``'all'`` to + get raw materials for all products. network_BOM : bool, optional If ``True`` (default), function uses network BOM instead of product-only BOM. @@ -637,12 +673,22 @@ def raw_material_indices(self, network_BOM=True): ------- list List of indices of all raw materials required to make all products at the node. + + Raises + ------ + ValueError + If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and + this is a single-product node with no |class_product| added. """ - return [rm.index for rm in self.raw_materials(network_BOM=network_BOM)] + return [rm.index for rm in self.raw_materials_by_product(product_index=product_index, network_BOM=network_BOM)] - def raw_material_suppliers(self, product_index=None, network_BOM=True): + def raw_material_suppliers_by_product(self, product_index=None, network_BOM=True): """Return a list of all predecessors from which a raw material must be ordered in order to make ``product_index`` at this node, according to the bill of materials. + If the node is single-product, either set + ``product_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a BOM relationship specified but are implied by the network structure. (See :func:`get_network_bill_of_materials`.) Read only. @@ -650,13 +696,10 @@ def raw_material_suppliers(self, product_index=None, network_BOM=True): Suppliers in list are |class_node| objects, plus ``None`` for the external supplier, if appropriate. - Set ``product_index`` to ``None`` - if this is a single-product node and no |class_product| object has been added. - Parameters ---------- product_index : int, optional - Index of product at this node, or ``None`` if this is a single-product node with no |class_product| object added. + The product index, or ``None`` if node is single-product. network_BOM : bool, optional If ``True`` (default), function uses network BOM instead of product-only BOM. @@ -673,17 +716,21 @@ def raw_material_suppliers(self, product_index=None, network_BOM=True): If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and this is a single-product node with no |class_product| added. """ - # If product index is not in product indices for node, AND it's not the case that this is a single-product node without - # a product object (i.e., with a dummy product) and product_index is None, raise exception. - if not (self.is_singleproduct and self._dummy_product is not None and product_index is None) and product_index not in self.product_indices: + # If product index is not in product indices for node, AND it's not the case that this is a single-product node + # and product_index is None, raise exception. + if not (self.is_singleproduct and product_index is None) and product_index not in self.product_indices: raise ValueError(f'{product_index} is not a product index in this SupplyChainNode') if product_index is None: - prod = self._dummy_product + if len(self.products) == 0: + return [] + else: + prod = self.products[0] else: prod = self.products_by_index[product_index] suppliers = [] - for p in self.predecessors(include_external=True): + # Only include external supplier if network_BOM is True. + for p in self.predecessors(include_external=network_BOM): # Determine whether p provides a raw material for the product. provides_rm = False if p is None: @@ -701,9 +748,13 @@ def raw_material_suppliers(self, product_index=None, network_BOM=True): return suppliers - def raw_material_supplier_indices(self, product_index=None, network_BOM=True): + def raw_material_supplier_indices_by_product(self, product_index=None, network_BOM=True): """Return a list of all indices of predecessors from which a raw material must be ordered in order to make ``product_index`` at this node, according to the bill of materials. + If the node is single-product, either set + ``product_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a BOM relationship specified but are implied by the network structure. (See :func:`get_network_bill_of_materials`.) Read only. @@ -711,7 +762,7 @@ def raw_material_supplier_indices(self, product_index=None, network_BOM=True): Parameters ---------- product_index : int, optional - Index of product at this node, or ``None`` if this is a single-product node. + The product index, or ``None`` if ``predecessor`` is single-product. network_BOM : bool, optional If ``True`` (default), function uses network BOM instead of product-only BOM. @@ -727,25 +778,118 @@ def raw_material_supplier_indices(self, product_index=None, network_BOM=True): If ``product_index`` is not found among the node's products, and it's not the case that this is a single-product node with no |class_product| added. """ - return [(s.index if s is not None else None) for s in self.raw_material_suppliers(product_index=product_index, network_BOM=network_BOM)] - # supplier_indices = [] - # for p in self.predecessors: - # # Determine whether p provides a raw material for the product. - # if not self.is_multiproduct and not p.is_multiproduct and \ - # self.get_bill_of_materials(predecessor_index=p.index) > 0: - # # The node and predecessor are both single-product, and the predecessor provides a raw material. - # provides_rm = True - # else: - # provides_rm = False - # for rm_ind in p.product_indices: - # if self.get_bill_of_materials(product_index=product_index, predecessor_index=p.index, rm_index=rm_ind) > 0: - # # Predecessor provides a raw material. - # provides_rm = True - # # Add p to list if it provides a raw material. - # if provides_rm: - # supplier_indices.append(p.index) + return [(s.index if s is not None else None) for s in self.raw_material_suppliers_by_product(product_index=product_index, network_BOM=network_BOM)] + + def raw_material_suppliers_by_raw_material(self, rm_index=None, network_BOM=True): + """Return a list of all predecessors that supply the node with the raw material + with index ``rm_index``. Every predecessor that _can_ supply the raw material, including + the external supplier, is included in the list, regardless of whether the BOM + requires it, and regardless of whether the node actually orders the raw material + from the supplier. + + If the node has only a single raw material that is required according to its + BOM, ``rm_index`` can be set to the index of that raw material, or to ``None`` and + the function will determine th eindex automatically. + + If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a + BOM relationship specified but are implied by the network structure. + (See :func:`get_network_bill_of_materials`.) Read only. + + Suppliers in list are + |class_node| objects, plus ``None`` for the external supplier, if appropriate. + + Parameters + ---------- + rm_index : int, optional + The raw material index, or ``None`` if the node requires a single raw material. + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. + + Returns + ------- + list + List of all predecessors, as |class_node| objects, that can supply the node + with the raw material with index ``rm_index``, according to the bill of materials, + including ``None`` for the external supplier, if appropriate. + + Raises + ------ + ValueError + If ``rm_index`` is not found among the node's raw materials (and is not ``None``). + ValueError + If ``rm_index is None`` and the node requires more than one raw material. + """ + rms = self.raw_materials_by_product('all', network_BOM=network_BOM) + rm_indices = self.raw_material_indices_by_product('all', network_BOM=network_BOM) + # If rm_index is None and the node requires more than one raw material, raise exception. + if len(rms) > 1 and rm_index is None: + raise ValueError(f'rm_index cannot be None if node requires more than 1 raw material.') + # If rm_index is not in product indices for node and is not None, raise exception. + if rm_index is not None and rm_index not in rm_indices: + raise ValueError(f'{rm_index} is not a raw material required by this SupplyChainNode') + + if rm_index is None: + # rm_index is None and there is at most a single raw material at this node (otherwise an exception + # would have been raised). + if len(rms) == 0: + return [] + else: + rm = rms[0] + elif rm_index == self._external_supplier_dummy_product.index: + rm = self._external_supplier_dummy_product + else: + rm = self.network.products_by_index[rm_index] + + suppliers = [] + # Only include external supplier if network_BOM is True. + for p in self.predecessors(include_external=network_BOM): + if p is None and rm.index == self._external_supplier_dummy_product.index: + # This is the external supplier, and rm_index matches the index of the + # external supplier dummy product. + suppliers.append(p) + elif p is not None and rm.index in p.product_indices: + # This is a "real" supplier, and it handles rm_index. + suppliers.append(p) - # return supplier_indices + return suppliers + + def raw_material_supplier_indices_by_raw_material(self, rm_index=None, network_BOM=True): + """Return a list of indices of all predecessors that supply the node with the raw material + with index ``rm_index``. Every predecessor that _can_ supply the raw material, including + the external supplier, is included in the list, regardless of whether the BOM + requires it, and regardless of whether the node actually orders the raw material + from the supplier. + + If the node has only a single raw material that is required according to its + BOM, ``rm_index`` can be set to the index of that raw material, or to ``None`` and + the function will determine the index automatically. + + If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a + BOM relationship specified but are implied by the network structure. + (See :func:`get_network_bill_of_materials`.) Read only. + + Parameters + ---------- + rm_index : int, optional + The raw material index, or ``None`` if the node requires a single raw material. + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. + + Returns + ------- + list + List of indicies of all predecessors that can supply the node + with the raw material with index ``rm_index``, according to the bill of materials, + including ``None`` for the external supplier, if appropriate. + + Raises + ------ + ValueError + If ``rm_index`` is not found among the node's raw materials (and is not ``None``). + ValueError + If ``rm_index is None`` and the node requires more than one raw material. + """ + return [(s.index if s is not None else None) for s in self.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=network_BOM)] # Properties related to lead times. @@ -941,9 +1085,9 @@ def initialize(self, index=None): # Add dummy product. self._add_dummy_product() - # Set external supplier dummy product index. (This is set even if the node does not and + # Set external supplier dummy product. (This is set even if the node does not and # never will have an external supplier.) - self._external_supplier_dummy_product_index = self._dummy_product.index - 1 + self._external_supplier_dummy_product = SupplyChainProduct(self._dummy_product.index - 1, is_dummy=True) def deep_equal_to(self, other, rel_tol=1e-8): """Check whether node "deeply equals" ``other``, i.e., if all attributes are @@ -1363,7 +1507,19 @@ def _get_attribute_total(self, attribute, period, product_index=None, include_ex float The total value of the attribute. + Raises + ------ + ValueError + If ``product_index is None`` and the node is not single-product. + """ + if product_index is None and self.is_multiproduct: + raise ValueError('product_index cannot be None for multi-product nodes.') + + # Reset product_index to index of (possibly dummy) product if this is a single-product node. + if product_index is None: + product_index = self.product_indices[0] + if attribute in ('inbound_shipment', 'on_order_by_predecessor', 'raw_material_inventory', 'inbound_disrupted_items'): # These attributes are indexed by predecessor. if period is None: @@ -1528,40 +1684,48 @@ def __init__(self, node=None, period=None): if node: + # Build some shortcuts. + p_index = {p: p.index if p is not None else None for p in self.node.predecessors(include_external=True)} + s_index = {s: s.index if s is not None else None for s in self.node.successors(include_external=True)} + rm_indices = {p: (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]) \ + for p in self.node.predecessors(include_external=True)} + # Initialize dicts with appropriate keys. (inbound_shipment_pipeline gets # order_lead_time+shipment_lead_time slots for orders to external supplier) - self.inbound_shipment_pipeline = {p.index: + self.inbound_shipment_pipeline = {p_index[p]: {prod_index: [0] * ((self.node.order_lead_time or 0) + ( self.node.shipment_lead_time or 0) + 1) - for prod_index in p.product_indices} + for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.inbound_shipment = {p.index: - {prod_index: 0 for prod_index in p.product_indices} + self.inbound_shipment = {p_index[p]: + {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.inbound_order_pipeline = {s.index: + self.inbound_order_pipeline = {s_index[s]: {prod_index: [0] * ((s.order_lead_time or 0) + 1) - for prod_index in s.product_indices} + for prod_index in node.product_indices} for s in node.successors()} # Add external customer to inbound_order_pipeline. (Must be done # separately since external customer does not have its own node, # or its own order lead time.) if node.demand_source is not None and node.demand_source.type is not None: - self.inbound_order_pipeline[None][None] = [0] - self.inbound_order = {s.index: {prod_index: 0 for prod_index in s.product_indices} for s in self.node.successors(include_external=True)} - self.outbound_shipment = {s.index: {prod_index: 0 for prod_index in s.product_indices} for s in self.node.successors(include_external=True)} - self.on_order_by_predecessor = {p.index: {prod_index: 0 for prod_index in p.product_indices} + self.inbound_order_pipeline[None] = {prod_index: [0] for prod_index in node.product_indices} + # for prod_index in node.product_indices: + # self.inbound_order_pipeline[None][prod_index] = [0] + self.inbound_order = {s_index[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} + self.outbound_shipment = {s_index[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} + self.on_order_by_predecessor = {p_index[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.backorders_by_successor = {s.index: {prod_index: 0 for prod_index in s.product_indices} + self.backorders_by_successor = {s_index[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.outbound_disrupted_items = {s.index: {prod_index: 0 for prod_index in s.product_indices} + self.outbound_disrupted_items = {s_index[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.inbound_disrupted_items = {p.index: {prod_index: 0 for prod_index in p.product_indices} + self.inbound_disrupted_items = {p_index[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.order_quantity = {p.index: {prod_index: 0 for prod_index in p.product_indices} + self.order_quantity = {p_index[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.raw_material_inventory = {p.index: {prod_index: 0 for prod_index in p.product_indices} + self.raw_material_inventory = {p_index[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} else: @@ -1638,7 +1802,8 @@ def __ne__(self, other): @property def on_hand(self): - """Current on-hand inventory. If node is multi-product, returns dict whose + """Current on-hand inventory at node. If node is single-product, returns the on-hand inventory as a singleton. + If node is multi-product, returns dict whose keys are product indices and whose values are the corresponding on-hand inventory levels. Read only. """ if self.node.is_multiproduct: @@ -1649,7 +1814,8 @@ def on_hand(self): @property def backorders(self): """Current number of backorders. Should always equal sum over all successors ``s`` - of ``backorders_by_successor[s]`` + ``outbound_disrupted_items[s]``. If node is + of ``backorders_by_successor[s]`` + ``outbound_disrupted_items[s]``. If node is single-product, + returns the backorders as a singleton. If node is multi-product, returns dict whose keys are product indices and whose values are the corresponding numbers of backorders. Read only. """ @@ -1662,211 +1828,445 @@ def in_transit_to(self, successor, prod_index=None): """Return current total inventory of product ``prod_index`` in transit to a given successor. Includes items that will be/have been delivered during the current period. + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + Parameters ---------- successor : |class_node| The successor node. - prod_index : int - The product index, or ``None`` if ``successor`` is single-product. + prod_index : int, optional + The outbound product index, or ``None`` if ``successor`` is single-product. Returns ------- + float The current inventory in transit to the successor. """ + # Determine product index. # TODO: validate parameters + prod_index = prod_index or self.node._dummy_product.index + return np.sum([successor.state_vars[self.period].inbound_shipment_pipeline[self.node.index][prod_index][:]]) - def in_transit_from(self, predecessor, prod_index=None): + def in_transit_from(self, predecessor=None, prod_index=None): """Return current total inventory of product ``prod_index`` in transit from a given predecessor. Includes items that will be/have been delivered during the current period. + Set ``predecessor`` to ``None`` if the predecessor is the external supplier. + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + Parameters ---------- predecessor : |class_node| - The predecessor node (or ``None`` for external supplier). - prod_index : int - The product index, or ``None`` if ``predecessor`` is single-product or external supplier. + The predecessor node. + prod_index : int, optional + The inbound product index, or ``None`` if ``predecessor`` is single-product or external supplier. Returns ------- + float The current inventory in transit from the predecessor. """ if predecessor is None: - p = None + p_ind = None else: - p = predecessor.index + p_ind = predecessor.index + # Determine product index. # TODO: validate parameters + prod_index = prod_index or self.node._dummy_product.index - return np.sum(self.inbound_shipment_pipeline[p][prod_index][:]) + return np.sum(self.inbound_shipment_pipeline[p_ind][prod_index][:]) - @property - def in_transit(self): - """Current total inventory in transit to the node. If node is multi-product, - returns dict whose keys are product indices and whose values are the corresponding - in-transit quantities. Read only. + def in_transit(self, prod_index=None): + """Current inventory of raw materials for product ``prod_index`` that is in transit to the node. Read only. - If node (or node-product pair) has - more than 1 predecessor (it is an assembly node), including external supplier, - in-transit items are counted using the "units" of the node (or node-product pair) itself. + In-transit items are counted using the "units" of the node (or node-product pair) itself. That is, each in-transit quantity is divided by the number of units of the inbound item - required to make one unit of the item at this node, according to the bill of materials; and then - those quantities are averaged over all predecessor nodes whose products are required as raw - materials for this node. - + required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). + For example, if the bill of materials specifies that to make one unit at the node requires 2 units from predecessor node A and 6 units from predecessor node B, and if there are 10 in-transit units from A and 18 from B, then ``in_transit`` equals .. math:: - \\frac{1}{2}\\left[\\frac{10}{2} + \\frac{18}{6} \\right] = 4 + \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + + If the node has multiple products that use the same raw material, this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + To get the number of units in transit by predecessor and/or product, use :func:`in_transit_from`. + + **Note:** This was a property prior to version [VERSION] and is now a function. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + Returns + ------- + float + The current inventory in transit from predecessors. """ - if self.node.is_multproduct: - total_in_transit = {} - for prod_index in self.node.product_indices: - # TODO - total_in_transit[prod_index] + # Determine product index. # TODO: validate parameters + prod_index = prod_index or self.node.product_indices[0] + + total_in_transit = np.sum([ + self.in_transit_from(p, rm_index) + * self.node.NBOM(product_index=prod_index, predecessor_index=p, rm_index=rm_index) + for rm_index in self.node.raw_material_indices(product_index=prod_index, network_BOM=True) + for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) + ]) + + if total_in_transit == 0: + return 0 else: - total_in_transit = np.sum([ - self.in_transit_from(p, prod_index) - * self.node.get_bill_of_materials(product_index=None, predecessor_index=p, rm_index=prod_index) - for p in self.node.predecessors(include_external=True) - for prod_index in p.product_indices]) - - if total_in_transit == 0: - return 0 - else: - return total_in_transit / len(self.node.predecessors(include_external=True)) - # TODO: this should be by rm, not by predecessor + return total_in_transit / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + + def on_order(self, prod_index=None): + """Current inventory of raw materials for product ``prod_index`` that is on order to the node. Read only. + + On-order items are counted using the "units" of the node (or node-product pair) itself. + That is, each on-order quantity is divided by the number of units of the inbound item + required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). + + For example, if the bill of materials specifies that to make one unit at the node requires + 2 units from predecessor node A and 6 units from predecessor node B, and if there are + 10 on-order units from A and 18 from B, then ``on_order`` equals + + .. math:: + + \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + + If the node has multiple products that use the same raw material, this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + **Note:** This was a property prior to version [VERSION] and is now a function. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + + Returns + ------- + float + The current inventory on order from predecessors. + """ + # Determine product index. # TODO: validate parameters + prod_index = prod_index or self.node.product_indices[0] + + total_on_order = np.sum([ + self.on_order_by_predecessor[p][rm_index] + * self.node.NBOM(product_index=prod_index, predecessor_index=p, rm_index=rm_index) + for rm_index in self.node.raw_material_indices(product_index=prod_index, network_BOM=True) + for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) + ]) - @property - def on_order(self): - """Current total on-order quantity. If node has more than 1 - predecessor (it is an assembly node), including external supplier, - on-order items are counted using the "units" of the node itself. - That is, they are divided by the total number of predecessors. Read only. - """ - total_on_order = self.node._get_attribute_total('on_order_by_predecessor', - self.period, - include_external=True) if total_on_order == 0: return 0 else: - return total_on_order / len(self.node.predecessors(include_external=True)) - # TODO: this should be by rm, not by predecessor + return total_on_order / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + + def raw_material_aggregate(self, prod_index=None): + """Current raw materials for product ``prod_index`` that in raw-material inventory at the node. Read only. + + Raw materials are counted using the "units" of the node (or node-product pair) itself. + That is, each raw material quantity is divided by the number of units of the raw material + required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). + + For example, if the bill of materials specifies that to make one unit at the node requires + 2 units from predecessor node A and 6 units from predecessor node B, and if there are + 10 node-A units and 18 node-B units in raw material inventory at the node, then ``raw_material_aggregate`` equals + + .. math:: + + \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + + If the node has multiple products that use the same raw material, this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + **Note:** This was a property prior to version [VERSION] and is now a function. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + + Returns + ------- + float + The current raw material inventory. + """ + # Determine product index. # TODO: validate parameters + prod_index = prod_index or self.node.product_indices[0] + prod = self.node.products_by_index[prod_index] + + total_raw_material = 0 + for rm_index in self.node.raw_material_indices(product_index=prod_index, network_BOM=True): + BOM = prod.BOM(rm_index) + if BOM == 0: + # rm_index has no BOM relationship, so it is only in the network BOM; therefore, + # its BOM number is 1. + BOM = 1 + + total_raw_material += self.raw_material_inventory[rm_index] * BOM - @property - def raw_material_aggregate(self): - """Total raw materials at the node. Raw materials - are counted using the "units" of the node itself. That is, they are - divided by the total number of predecessors. Read only. - """ - total_raw_material = self.node._get_attribute_total('raw_material_inventory', - self.period, - include_external=True) if total_raw_material == 0: return 0 else: - return total_raw_material / len(self.node.predecessors(include_external=True)) - # TODO: this should be by rm, not by predecessor + return total_raw_material / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) - @property - def inbound_disrupted_items_aggregate(self): - """Total inbound disrupted items at the node. Inbound disrupted items - are counted using the "units" of the node itself. That is, they are - divided by the total number of predecessors. Read only. - """ - total_raw_material = self.node._get_attribute_total('inbound_disrupted_items', - self.period, - include_external=True) - if total_raw_material == 0: + def inbound_disrupted_items_aggregate(self, prod_index=None): + """Current total inbound disrupted inventory of raw materials for product ``prod_index``. Read only. + + Inbound items are counted using the "units" of the node (or node-product pair) itself. + That is, each inbound quantity is divided by the number of units of the inbound item + required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). + + For example, if the bill of materials specifies that to make one unit at the node requires + 2 units from predecessor node A and 6 units from predecessor node B, and if there are + 10 inbound disrupted units from A and 18 from B, then ``inbound_disrupted_items_aggregate`` equals + + .. math:: + + \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + + If the node has multiple products that use the same raw material, this function includes all disrupted units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + **Note:** This was a property prior to version [VERSION] and is now a function. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + + Returns + ------- + float + The current disrupted inventory from predecessors. + """ + # Determine product index. # TODO: validate parameters + prod_index = prod_index or self.node.product_indices[0] + + total_disrupted_items = np.sum([ + self.inbound_disrupted_items[p][rm_index] + * self.node.NBOM(product_index=prod_index, predecessor_index=p, rm_index=rm_index) + for rm_index in self.node.raw_material_indices(product_index=prod_index, network_BOM=True) + for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) + ]) + + if total_disrupted_items == 0: return 0 else: - return total_raw_material / len(self.node.predecessors(include_external=True)) - # TODO: this should be by rm, not by predecessor + return total_disrupted_items / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + + def inventory_position(self, prod_index=None, predecessor_index=None, rm_index=None): + """Current local inventory position at node for product with index ``prod_index``. + Equals inventory level plus on-order inventory. - def inventory_position(self, predecessor_index=None): - """Current local inventory position at node. Equals inventory level plus - on-order inventory. On-order includes raw material inventory that has not yet been processed, as well as inbound disrupted items due to type-RP disruptions. - If the node has more than one predecessor (including external supplier), - set ``predecessor_index`` for predecessor-specific inventory position, or set to ``None`` - to use aggregate on-order and raw material inventory (counting such - items using the "units" of the node itself). + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. If the node is multi-product, ``prod_index`` must be + set to the index of a single product at the node. + + If the node has a single predecessor, which provides a single raw material, either set ``predecessor_index`` + and ``rm_index`` to the appropriate indicies, or to ``None`` and the function will determine the indices + automatically. + If the node has multiple predecessors and/or raw materials, either set ``predecessor_index`` and ``rm_index`` + to the indices of a single predecessor and raw material (to get the raw-material-specific inventory position) + or set both to ``None`` to use the aggregate on-order and raw material inventory for all predecessors and + raw materials (counting such items using the "units" of the node itself; see documentation for :func:`on_order` for more details). + ``predecessor_index`` and ``rm_index`` must both either be ``None`` or not ``None``. # TODO: handle case where only one is None? + + If the node has multiple products that use the same raw material, this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. Parameters ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. predecessor_index : int, optional - Predecessor to consider in inventory position calculation (excluding all others), - or ``None`` to include all predecessors. + Predecessor to consider in inventory position calculation (including all others), or ``None`` to + include all predecessors. + rm_index : int, optional + Raw material to consider in inventory position calculation (excluding all others), + or ``None`` to include all raw materials. Returns ------- float The inventory position. + + Raises + ------ + ValueError + If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. """ + # Validate parameters. + if predecessor_index is None and rm_index is not None: + raise ValueError('If predecessor_index is None, then rm_index must also be None.') + if predecessor_index is not None and rm_index is None: + raise ValueError('If rm_index is None, then predecessor_index must also be None.') + + # Determine product index. # TODO: validate parameters + prod_index = prod_index or self.node.product_indices[0] + if predecessor_index is not None: - return self.inventory_level \ - + self.on_order_by_predecessor[predecessor_index] \ - + self.raw_material_inventory[predecessor_index] \ - + self.inbound_disrupted_items[predecessor_index] + return self.inventory_level[prod_index] \ + + self.on_order_by_predecessor[predecessor_index][rm_index] \ + + self.raw_material_inventory[rm_index] \ + + self.inbound_disrupted_items[predecessor_index][rm_index] else: - # Note: If <=1 predecessor, raw_material_inventory should always = 0. - return self.inventory_level + self.on_order + self.raw_material_aggregate \ - + self.inbound_disrupted_items_aggregate + # Note: If <=1 predecessor, raw_material_inventory should always = 0 + # (because raw materials are processed right away). + return self.inventory_level \ + + self.on_order(prod_index=prod_index) \ + + self.raw_material_aggregate(prod_index=prod_index) \ + + self.inbound_disrupted_items_aggregate(prod_index=prod_index) @property def echelon_on_hand_inventory(self): """Current echelon on-hand inventory at node. Equals on-hand inventory at node - and at or in transit to all of its downstream nodes. Read only. + and at or in transit to all of its downstream nodes. If node is single-product, + returns the echelon on-hand inventory as a singleton. If node is multi-product, returns dict + whose keys are product indices and whose values are the corresponding echelon on-hand inventory levels. Read only. """ EOHI = self.on_hand - for d in self.node.descendants: - EOHI += d.state_vars[self.period].on_hand - # Add in-transit quantity from predecessors that are descendents - # of self (or equal to self). - for p in d.predecessors(): - if p.index == self.node.index or p in self.node.descendants: - EOHI += d.state_vars[self.period].in_transit_from(p) + + if self.node.is_singleproduct: + for d in self.node.descendants: + # Add on-hand inventory at descendant. + EOHI += d.state_vars[self.period].on_hand + # Add in-transit quantity from predecessors that are descendents + # of self (or equal to self). + for p in d.predecessors(): + if p.index == self.node.index or p in self.node.descendants: + EOHI += d.state_vars[self.period].in_transit_from(predecessor=p, prod_index=None) + else: + for d in self.node.descendants: + # Add on-hand inventory at descendant. + on_hand = d.state_vars[self.period].on_hand + for prod_index in self.node.product_indices: + EOHI[prod_index] += on_hand[prod_index] + # Add in-transit quantity from predecessors that are descendants + # of self (or equal to self). + for p in d.predecessors(): + if p.index == self.node.index or p in self.node.descendants: + EOHI[prod_index] += d.state_vars[self.period].in_transit_from(predecessor=p, prod_index=prod_index) + return EOHI @property def echelon_inventory_level(self): """Current echelon inventory level at node. Equals echelon on-hand inventory - minus backorders at terminal node(s) downstream from node. Read only. + minus backorders at terminal node(s) downstream from node. If node is single-product, + returns the echelon inventory level as a singleton. If node is multi-product, returns dict + whose keys are product indices and whose values are the corresponding echelon inventory levels. Read only. """ EIL = self.echelon_on_hand_inventory - for d in self.node.descendants + [self.node]: - if d in self.node.network.sink_nodes: - EIL -= d.state_vars[self.period].backorders + + if self.node.is_singleproduct: + for d in self.node.descendants + [self.node]: + if d in self.node.network.sink_nodes: + EIL -= d.state_vars[self.period].backorders + else: + for d in self.node.descendants + [self.node]: + backorders = d.state_vars[self.periods].backorders + for prod_index in self.node.product_indices: + if d in self.node.network.sink_nodes: + EIL[prod_index] -= backorders[prod_index] + return EIL - def echelon_inventory_position(self, predecessor_index=None): - """Current echelon inventory position at node. Equals echelon inventory level plus - on order items. On-order includes raw material inventory that has not yet been processed. - If the node has more than one predecessor (including external supplier), - set ``predecessor_index`` for predecessor-specific inventory position, or set to ``None`` - to use aggregate on-order and raw material inventory (counting such - items using the "units" of the node itself). + def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm_index=None): + """Current echelon inventory position at node for product with index ``prod_index``. + Equals echelon inventory level plus + on order items. + + On-order includes raw material inventory that has not yet been processed, as well as + inbound disrupted items due to type-RP disruptions. + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. If the node is multi-product, ``prod_index`` must be + set to the index of a single product at the node. + + If the node has a single predecessor, which provides a single raw material, either set ``predecessor_index`` + and ``rm_index`` to the appropriate indicies, or to ``None`` and the function will determine the indices + automatically. + If the node has multiple predecessors and/or raw materials, either set ``predecessor_index`` and ``rm_index`` + to the indices of a single predecessor and raw material (to get the raw-material-specific inventory position) + or set both to ``None`` to use the aggregate on-order and raw material inventory for all predecessors and + raw materials (counting such items using the "units" of the node itself; see documentation for :func:`on_order` for more details). + ``predecessor_index`` and ``rm_index`` must both either be ``None`` or not ``None``. # TODO: handle case where only one is None? + + If the node has multiple products that use the same raw material, this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. Parameters ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. predecessor_index : int, optional - Predecessor to consider in inventory position calculation (excluding all others), - or ``None`` to include all predecessors. + Predecessor to consider in inventory position calculation (including all others), or ``None`` to + include all predecessors. + rm_index : int, optional + Raw material to consider in inventory position calculation (excluding all others), + or ``None`` to include all raw materials. Returns ------- float The echelon inventory position. + + Raises + ------ + ValueError + If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. """ + # Validate parameters. + if predecessor_index is None and rm_index is not None: + raise ValueError('If predecessor_index is None, then rm_index must also be None.') + if predecessor_index is not None and rm_index is None: + raise ValueError('If rm_index is None, then predecessor_index must also be None.') + + # Determine product index. # TODO: validate parameters + prod_index = prod_index or self.node.product_indices[0] + if predecessor_index is not None: - return self.echelon_inventory_level \ - + self.on_order_by_predecessor[predecessor_index] \ - + self.raw_material_inventory[predecessor_index] + return self.echelon_inventory_level[prod_index] \ + + self.on_order_by_predecessor[predecessor_index][rm_index] \ + + self.raw_material_inventory[predecessor_index][rm_index] \ + + self.inbound_disrupted_items[predecessor_index][rm_index] else: - # Note: If <=1 predecessor, raw_material_inventory should always = 0. - return self.echelon_inventory_level + self.on_order + self.raw_material_aggregate + # Note: If <=1 predecessor, raw_material_inventory should always = 0 + # (because raw materials are processed right away). + return self.echelon_inventory_level \ + + self.on_order(prod_index=prod_index) \ + + self.raw_material_aggregate(prod_index=prod_index) \ + + self.inbound_disrupted_items_aggregate(prod_index=prod_index) + +## STOPPED def _echelon_inventory_position_adjusted(self): """Calculate the adjusted echelon inventory position. Equals the current echelon inventory position diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index f303e6b..6fea158 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -290,9 +290,6 @@ def get_bill_of_materials(self, rm_index): """Return the number of units of raw material product ``rm_index`` that are required in order to make one unit of this product. Returns 0 if there is no BOM relationship for this product and ``rm_index``. - Returns 1 if ``self.index`` or ``rm_index`` is negative, because negative indices indicate - dummy products, which always have a BOM number of 1 with every other product. - :func:`BOM` is a shortcut to this function. Parameters @@ -305,8 +302,8 @@ def get_bill_of_materials(self, rm_index): int The BOM number for the (raw material, product) pair. """ - if self.index < 0 or rm_index < 0: - return 1 + # if self.index < 0 or rm_index < 0: + # return 1 try: # Return BOM number, if BOM entry exists. @@ -337,7 +334,7 @@ def bill_of_materials_dict(self): @property def raw_materials(self): - """A list of all raw materials required to make this product. Read only.""" + """A list of all raw materials required to make this product, as |class_prod| objects. Read only.""" if self.network is None: raise ValueError('self.network cannot be None when calling raw_materials.') return [self.network.products_by_index[rm_index] for rm_index in self.bill_of_materials_dict.keys() if self.BOM(rm_index) > 0 ] diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 297900b..5917571 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -1247,6 +1247,8 @@ def test_multiproduct_5_7(self): _ = nodes[0].get_network_bill_of_materials(0, 2, 77) class TestRawMaterials(unittest.TestCase): + """This class tests all of the various raw material functions for SupplyChainNode. + """ @classmethod def set_up_class(cls): """Called once, before any tests.""" @@ -1258,7 +1260,7 @@ def tear_down_class(cls): print_status('TestRawMaterials', 'tear_down_class()') def test_mwor_no_product(self): - """Test that raw_materials and raw_material_indices work correctly on MWOR network with no product added at retailer. + """Test that raw_materials_by_product and raw_material_indices_by_product work correctly on MWOR network with no product added at retailer. """ print_status('TestRawMaterials', 'test_mwor_no_product()') @@ -1270,14 +1272,78 @@ def test_mwor_no_product(self): nodes[2].add_products([prods[2], prods[3]]) nodes[3].add_products([prods[4], prods[5]]) - self.assertListEqual(nodes[0].raw_materials(network_BOM=True), list(prods.values())) - self.assertListEqual(nodes[0].raw_material_indices(network_BOM=True), [prod.index for prod in prods.values()]) + # Raw materials by product, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=True), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=True), list(prods.values())) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=True) + + # Raw materials by product, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=False), []) + self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=False), []) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), []) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=False), []) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=False) + + # Raw material suppliers by product, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=True), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), [nodes[1], nodes[2], nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=True) + + # Raw material suppliers by product, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), []) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=False) + + # Raw material suppliers by raw_material, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=True), [1]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=True), [2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=True), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=True), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=True), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=True), [nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=True) - self.assertListEqual(nodes[0].raw_materials(network_BOM=False), []) - self.assertListEqual(nodes[0].raw_material_indices(network_BOM=False), []) + # Raw material suppliers by raw_material, network_BOM=False. + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=False) + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=False) + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=False) + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=False) + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=False) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=False), []) def test_mwor_one_product(self): - """Test that raw_materials and raw_material_indices work correctly on MWOR network with one product added at retailer. + """Test that raw_materials_by_product and raw_material_indices_by_product work correctly on MWOR network with one product added at retailer. """ print_status('TestRawMaterials', 'test_mwor_one_product()') @@ -1296,20 +1362,78 @@ def test_mwor_one_product(self): nodes[0].products[0].set_bill_of_materials(4, 15) nodes[0].products[0].set_bill_of_materials(5, 6) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10, network_BOM=True), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10, network_BOM=True), [1, 2, 3]) - - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10, network_BOM=False), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10, network_BOM=False), [1, 2, 3]) - + # Raw materials by product, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=True), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=True), list(prods.values())) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers(product_index=None) - _ = nodes[0].raw_material_suppliers(product_index=77) - _ = nodes[0].raw_material_supplier_indices(product_index=None) - _ = nodes[0].raw_material_supplier_indices(product_index=77) + _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=True) + + # Raw materials by product, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=False), list(prods.keys())) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), list(prods.keys())) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=False), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=False), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=False), list(prods.values())) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=False) + + # Raw material suppliers by product, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=True), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), [nodes[1], nodes[2], nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=True) + + # Raw material suppliers by product, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=False), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=False), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), [nodes[1], nodes[2], nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=False) + + # Raw material suppliers by raw_material, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=True), [1]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=True), [2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=True), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=True), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=True), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=True), [nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=True) + + # Raw material suppliers by raw_material, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=False), [1]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=False), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=False), [2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=False), [3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=False), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=False), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=False), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=False), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=False), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=False), [nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=False) def test_mwor_multiple_products(self): - """Test that raw_materials and raw_material_indices work correctly on MWOR network with multiple products added at retailer. + """Test that raw_materials_by_product and raw_material_indices_by_product work correctly on MWOR network with multiple products added at retailer. """ print_status('TestRawMaterials', 'test_mwor_multiple_products()') @@ -1329,60 +1453,272 @@ def test_mwor_multiple_products(self): nodes[0].products_by_index[11].set_bill_of_materials(4, 15) nodes[0].products_by_index[12].set_bill_of_materials(5, 6) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10, network_BOM=True), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=11, network_BOM=True), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=12, network_BOM=True), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=11, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=12, network_BOM=True), [3]) - - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10, network_BOM=False), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=11, network_BOM=False), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=12, network_BOM=False), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10, network_BOM=False), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=11, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=12, network_BOM=False), [3]) - + # Raw materials by product, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=10, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=11, network_BOM=True), [3, 4]) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=12, network_BOM=True), [5]) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=True), [1, 2, 3, 4, 5]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=10, network_BOM=True), [prods[1], prods[2]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=11, network_BOM=True), [prods[3], prods[4]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=12, network_BOM=True), [prods[5]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=True), [prods[1], prods[2], prods[3], prods[4], prods[5]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers(product_index=None) - _ = nodes[0].raw_material_suppliers(product_index=77) - _ = nodes[0].raw_material_supplier_indices(product_index=None) - _ = nodes[0].raw_material_supplier_indices(product_index=77) + _ = nodes[0].raw_material_indices_by_product(network_BOM=True) + _ = nodes[0].raw_materials_by_product(network_BOM=True) + _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=True) + + # Raw materials by product, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=10, network_BOM=False), [1, 2]) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=11, network_BOM=False), [3, 4]) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=12, network_BOM=False), [5]) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=False), [1, 2, 3, 4, 5]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=10, network_BOM=False), [prods[1], prods[2]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=11, network_BOM=False), [prods[3], prods[4]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=12, network_BOM=False), [prods[5]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=False), [prods[1], prods[2], prods[3], prods[4], prods[5]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_indices_by_product(network_BOM=False) + _ = nodes[0].raw_materials_by_product(network_BOM=False) + _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=False) + + # Raw material suppliers by product, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=10, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=11, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=12, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=10, network_BOM=True), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=11, network_BOM=True), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=12, network_BOM=True), [nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_product(network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(network_BOM=True) + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=True) + + # Raw material suppliers by product, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=10, network_BOM=False), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=11, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=12, network_BOM=False), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=10, network_BOM=False), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=11, network_BOM=False), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=12, network_BOM=False), [nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_product(network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(network_BOM=False) + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=False) + + # Raw material suppliers by raw_material, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=True), [1]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=True), [2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=True), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=True), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=True), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=True), [nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=True) + + # Raw material suppliers by raw_material, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=False), [1]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=False), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=False), [2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=False), [3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=False), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=False), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=False), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=False), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=False), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=False), [nodes[3]]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=False) def test_multiproduct_5_7(self): - """Test that raw_materials and raw_material_indices work correctly on 5-node, 7-product network. + """Test that raw_materials_by_product and raw_material_indices_by_product work correctly on 5-node, 7-product network. """ print_status('TestRawMaterials', 'test_multiproduct_5_7()') network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=0), [nodes[2]]) - self.assertListEqual(nodes[1].raw_material_suppliers(product_index=0), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[1].raw_material_suppliers(product_index=1), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[2].raw_material_suppliers(product_index=2), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers(product_index=3), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers(product_index=4), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers(product_index=2), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers(product_index=4), [nodes[4]]) - self.assertListEqual(nodes[4].raw_material_suppliers(product_index=5), [None]) - self.assertListEqual(nodes[4].raw_material_suppliers(product_index=6), [None]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=0), [2]) - self.assertListEqual(nodes[1].raw_material_supplier_indices(product_index=0), [2, 3]) - self.assertListEqual(nodes[1].raw_material_supplier_indices(product_index=1), [2, 3]) - self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=2), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=3), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=4), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices(product_index=2), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices(product_index=4), [4]) - self.assertListEqual(nodes[4].raw_material_supplier_indices(product_index=5), [None]) - self.assertListEqual(nodes[4].raw_material_supplier_indices(product_index=6), [None]) - + prods = network.products_by_index + + # Raw materials by product, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=True), [2, 3]) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=0, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=True), [2, 3]) + self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index=0, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index=1, network_BOM=True), [3, 4]) + self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index='all', network_BOM=True), [2, 3, 4]) + self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=2, network_BOM=True), [5]) + self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=3, network_BOM=True), [5]) + self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=4, network_BOM=True), [6]) + self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index='all', network_BOM=True), [5, 6]) + self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index=2, network_BOM=True), [5]) + self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index=4, network_BOM=True), [6]) + self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index='all', network_BOM=True), [5, 6]) + self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index=5, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) + self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index=6, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) + self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index='all', network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) + self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=True), [prods[2], prods[3]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=0, network_BOM=True), [prods[2], prods[3]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=True), [prods[2], prods[3]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product_index=0, network_BOM=True), [prods[2], prods[3]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product_index=1, network_BOM=True), [prods[3], prods[4]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product_index='all', network_BOM=True), [prods[2], prods[3], prods[4]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product_index=2, network_BOM=True), [prods[5]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product_index=3, network_BOM=True), [prods[5]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product_index=4, network_BOM=True), [prods[6]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product_index='all', network_BOM=True), [prods[5], prods[6]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product_index=2, network_BOM=True), [prods[5]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product_index=4, network_BOM=True), [prods[6]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product_index='all', network_BOM=True), [prods[5], prods[6]]) + self.assertListEqual(nodes[4].raw_materials_by_product(product_index=5, network_BOM=True), [nodes[4]._external_supplier_dummy_product]) + self.assertListEqual(nodes[4].raw_materials_by_product(product_index=6, network_BOM=True), [nodes[4]._external_supplier_dummy_product]) + self.assertListEqual(nodes[4].raw_materials_by_product(product_index='all', network_BOM=True), [nodes[4]._external_supplier_dummy_product]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers(product_index=None) - _ = nodes[0].raw_material_suppliers(product_index=77) - _ = nodes[0].raw_material_supplier_indices(product_index=None) - _ = nodes[0].raw_material_supplier_indices(product_index=77) + _ = nodes[1].raw_material_indices_by_product(network_BOM=True) + _ = nodes[1].raw_materials_by_product(network_BOM=True) + _ = nodes[1].raw_material_indices_by_product(product_index=77, network_BOM=True) + _ = nodes[1].raw_materials_by_product(product_index=77, network_BOM=True) + + # Raw materials by product, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=False), [2, 3]) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=0, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=False), [2, 3]) + self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index=0, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index=1, network_BOM=False), [3, 4]) + self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index='all', network_BOM=False), [2, 3, 4]) + self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=2, network_BOM=False), [5]) + self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=3, network_BOM=False), [5]) + self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=4, network_BOM=False), [6]) + self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index='all', network_BOM=False), [5, 6]) + self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index=2, network_BOM=False), [5]) + self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index=4, network_BOM=False), [6]) + self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index='all', network_BOM=False), [5, 6]) + self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=False), [prods[2], prods[3]]) + self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index=5, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index=6, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index='all', network_BOM=False), []) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index=0, network_BOM=False), [prods[2], prods[3]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=False), [prods[2], prods[3]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product_index=0, network_BOM=False), [prods[2], prods[3]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product_index=1, network_BOM=False), [prods[3], prods[4]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product_index='all', network_BOM=False), [prods[2], prods[3], prods[4]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product_index=2, network_BOM=False), [prods[5]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product_index=3, network_BOM=False), [prods[5]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product_index=4, network_BOM=False), [prods[6]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product_index='all', network_BOM=False), [prods[5], prods[6]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product_index=2, network_BOM=False), [prods[5]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product_index=4, network_BOM=False), [prods[6]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product_index='all', network_BOM=False), [prods[5], prods[6]]) + self.assertListEqual(nodes[4].raw_materials_by_product(product_index=5, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_materials_by_product(product_index=6, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_materials_by_product(product_index='all', network_BOM=False), []) + with self.assertRaises(ValueError): + _ = nodes[1].raw_material_indices_by_product(network_BOM=False) + _ = nodes[1].raw_materials_by_product(network_BOM=False) + _ = nodes[1].raw_material_indices_by_product(product_index=77, network_BOM=False) + _ = nodes[1].raw_materials_by_product(product_index=77, network_BOM=False) + + # Raw material suppliers by product, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=True), [2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=0, network_BOM=True), [2]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=0, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=1, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=2, network_BOM=True), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=3, network_BOM=True), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=4, network_BOM=True), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=2, network_BOM=True), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=4, network_BOM=True), [4]) + self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=5, network_BOM=True), [None]) + self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=6, network_BOM=True), [None]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=0, network_BOM=True), [nodes[2]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=0, network_BOM=True), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=1, network_BOM=True), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=2, network_BOM=True), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=3, network_BOM=True), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=4, network_BOM=True), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=2, network_BOM=True), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=4, network_BOM=True), [nodes[4]]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=5, network_BOM=True), [None]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=6, network_BOM=True), [None]) + with self.assertRaises(ValueError): + _ = nodes[1].raw_material_supplier_indices_by_product(network_BOM=True) + _ = nodes[1].raw_material_suppliers_by_product(network_BOM=True) + _ = nodes[1].raw_material_supplier_indices_by_product(product_index=77, network_BOM=True) + _ = nodes[1].raw_material_suppliers_by_product(product_index=77, network_BOM=True) + + # # Raw material suppliers by product, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=False), [2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=0, network_BOM=False), [2]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=0, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=1, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=2, network_BOM=False), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=3, network_BOM=False), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=4, network_BOM=False), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=2, network_BOM=False), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=4, network_BOM=False), [4]) + self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=5, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=6, network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=False), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=0, network_BOM=False), [nodes[2]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=0, network_BOM=False), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=1, network_BOM=False), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=2, network_BOM=False), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=3, network_BOM=False), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=4, network_BOM=False), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=2, network_BOM=False), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=4, network_BOM=False), [nodes[4]]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=5, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=6, network_BOM=False), []) + with self.assertRaises(ValueError): + _ = nodes[1].raw_material_supplier_indices_by_product(network_BOM=False) + _ = nodes[1].raw_material_suppliers_by_product(network_BOM=False) + _ = nodes[1].raw_material_supplier_indices_by_product(product_index=77, network_BOM=False) + _ = nodes[1].raw_material_suppliers_by_product(product_index=77, network_BOM=False) + + # # Raw material suppliers by raw_material, network_BOM=True. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=True), [2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=True), [2]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=True), [2]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=True), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_raw_material(rm_index=6, network_BOM=True), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=True), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices_by_raw_material(rm_index=6, network_BOM=True), [4]) + self.assertListEqual(nodes[4].raw_material_supplier_indices_by_raw_material(rm_index=nodes[4]._external_supplier_dummy_product.index, network_BOM=True), [None]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=True) + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=True) + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=77, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=77, network_BOM=True) + + # # Raw material suppliers by raw_material, network_BOM=False. + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=False), [2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=False), [2]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=False), [2]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=False), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_raw_material(rm_index=6, network_BOM=False), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=False), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices_by_raw_material(rm_index=6, network_BOM=False), [4]) + with self.assertRaises(ValueError): + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=False) + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=False) + _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=77, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=77, network_BOM=False) + _ = nodes[4].raw_material_supplier_indices_by_raw_material(rm_index=nodes[4]._external_supplier_dummy_product.index, network_BOM=False) class TestLeadTime(unittest.TestCase): From e7602a3d75de61980faf3d1d1348eca46acb6ae7 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 12 Apr 2024 12:01:37 -0400 Subject: [PATCH 20/94] Finished working through NodeStateVars changes --- src/stockpyl/supply_chain_node.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 7a71e57..fbbdbae 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1632,6 +1632,7 @@ class NodeStateVars(object): raw_material_inventory : dict ``raw_material_inventory[prod]`` = number of units of product ``prod`` from _all_ predecessors in raw-material inventory at node. + # TODO: note: this is a change, used to be indexed by predecessor disrupted : bool ``True`` if the node was disrupted in the period, ``False`` otherwise. holding_cost_incurred : float @@ -2266,9 +2267,9 @@ def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm + self.raw_material_aggregate(prod_index=prod_index) \ + self.inbound_disrupted_items_aggregate(prod_index=prod_index) -## STOPPED def _echelon_inventory_position_adjusted(self): + # TODO: not updated for multi-product """Calculate the adjusted echelon inventory position. Equals the current echelon inventory position including only items ordered :math:`L_i` periods ago or earlier, where :math:`L_i` is the forward echelon lead time for the node. That is, equals current echelon inventory level @@ -2421,7 +2422,8 @@ def reindex_state_variables(self, old_to_new_dict): change_dict_key(self.inbound_shipment_pipeline, p.index, old_to_new_dict[p.index]) change_dict_key(self.inbound_shipment, p.index, old_to_new_dict[p.index]) change_dict_key(self.on_order_by_predecessor, p.index, old_to_new_dict[p.index]) - change_dict_key(self.raw_material_inventory, p.index, old_to_new_dict[p.index]) + # Removed 4/12/24: raw_material_inventory is no longer indexed by predecessor + # change_dict_key(self.raw_material_inventory, p.index, old_to_new_dict[p.index]) change_dict_key(self.order_quantity, p.index, old_to_new_dict[p.index]) change_dict_key(self.inbound_disrupted_items, p.index, old_to_new_dict[p.index]) From 53b0ef5f614b873811fd6c4c48d13dbc4703044b Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 12 Apr 2024 14:49:41 -0400 Subject: [PATCH 21/94] Delete private files folder --- .../SCMO stuff/wagner_whitin_capac.py | 125 --- .../.3_node_60_60_60.csv.icloud | Bin 171 -> 0 bytes .../.assembly_3_stage_2_762.csv.icloud | Bin 178 -> 0 bytes .../.example_6_1_randseed_17.csv.icloud | Bin 179 -> 0 bytes .../.kangye-4node-randseed1.csv.icloud | Bin 176 -> 0 bytes ...kangye_3_stage_serial_3_3_3_762.csv.icloud | Bin 187 -> 0 bytes .../.kangye_3_stage_serial_762.csv.icloud | Bin 181 -> 0 bytes ...kangye_3_stage_serial_7_7_7_762.csv.icloud | Bin 187 -> 0 bytes .../.michelle_sean_3_stage_762.csv.icloud | Bin 181 -> 0 bytes private_files/debugging_files/.mwe.csv.icloud | Bin 155 -> 0 bytes .../debugging_files/.ss_disr.csv.icloud | Bin 161 -> 0 bytes .../debugging_files/.temp.csv.icloud | Bin 158 -> 0 bytes .../debugging_files/.temp_assembly.csv.icloud | Bin 169 -> 0 bytes .../debugging_files/.temp_echelon.csv.icloud | Bin 168 -> 0 bytes .../debugging_files/.temp_local.csv.icloud | Bin 164 -> 0 bytes .../.temp_new_policy.csv.icloud | Bin 169 -> 0 bytes .../debugging_files/.yinan-test.ipynb.icloud | Bin 168 -> 0 bytes .../mohammad_tests/..__init__.py.icloud | Bin 158 -> 0 bytes .../mohammad_tests/mohammad_instances.py | 179 ---- .../mohammad_tests/test_mohammad_instances.py | 108 -- ...d_instance_2022-06-09 15:39:34.730374.json | 1 - private_files/debugging_files/temp | 1 - ...inventory model and simulation.xlsm.icloud | Bin 194 -> 0 bytes private_files/old-defunct/.temp.xlsx.icloud | Bin 159 -> 0 bytes .../old-defunct/demand_source_old.py | 318 ------ .../old-defunct/demand_source_old2.py | 733 ------------- private_files/old-defunct/example_numpy.py | 356 ------- private_files/old-defunct/policy_old.py | 754 -------------- private_files/old-defunct/sim_old.py | 501 --------- private_files/old-defunct/ssm_serial old.py | 948 ----------------- .../old-defunct/test_ssm_serial old.py | 625 ----------- .../.sim_io_example_instance.csv.icloud | Bin 177 -> 0 bytes .../scripts/.test_disruptions.ipynb.icloud | Bin 172 -> 0 bytes private_files/scripts/build_instance_json.py | 977 ------------------ .../scripts/disruptions_10000per.png | Bin 36112 -> 0 bytes .../scripts/gsm_tree_willems_data.py | 94 -- private_files/scripts/kangye_simulations.py | 95 -- private_files/scripts/prob_dist_tests.py | 104 -- private_files/scripts/run_sim.py | 151 --- private_files/scripts/sim_disruption.py | 128 --- private_files/scripts/sim_example_scratch.py | 116 --- .../scripts/test_disruption_types.py | 89 -- src/stockpyl/sim.py | 325 +++--- src/stockpyl/supply_chain_node.py | 3 +- 44 files changed, 175 insertions(+), 6556 deletions(-) delete mode 100644 private_files/SCMO stuff/wagner_whitin_capac.py delete mode 100644 private_files/debugging_files/.3_node_60_60_60.csv.icloud delete mode 100644 private_files/debugging_files/.assembly_3_stage_2_762.csv.icloud delete mode 100644 private_files/debugging_files/.example_6_1_randseed_17.csv.icloud delete mode 100644 private_files/debugging_files/.kangye-4node-randseed1.csv.icloud delete mode 100644 private_files/debugging_files/.kangye_3_stage_serial_3_3_3_762.csv.icloud delete mode 100644 private_files/debugging_files/.kangye_3_stage_serial_762.csv.icloud delete mode 100644 private_files/debugging_files/.kangye_3_stage_serial_7_7_7_762.csv.icloud delete mode 100644 private_files/debugging_files/.michelle_sean_3_stage_762.csv.icloud delete mode 100644 private_files/debugging_files/.mwe.csv.icloud delete mode 100644 private_files/debugging_files/.ss_disr.csv.icloud delete mode 100644 private_files/debugging_files/.temp.csv.icloud delete mode 100644 private_files/debugging_files/.temp_assembly.csv.icloud delete mode 100644 private_files/debugging_files/.temp_echelon.csv.icloud delete mode 100644 private_files/debugging_files/.temp_local.csv.icloud delete mode 100644 private_files/debugging_files/.temp_new_policy.csv.icloud delete mode 100644 private_files/debugging_files/.yinan-test.ipynb.icloud delete mode 100644 private_files/debugging_files/mohammad_tests/..__init__.py.icloud delete mode 100644 private_files/debugging_files/mohammad_tests/mohammad_instances.py delete mode 100644 private_files/debugging_files/mohammad_tests/test_mohammad_instances.py delete mode 100644 private_files/debugging_files/saved_instance_2022-06-09 15:39:34.730374.json delete mode 100644 private_files/debugging_files/temp delete mode 100644 private_files/old-defunct/.simple inventory model and simulation.xlsm.icloud delete mode 100644 private_files/old-defunct/.temp.xlsx.icloud delete mode 100644 private_files/old-defunct/demand_source_old.py delete mode 100644 private_files/old-defunct/demand_source_old2.py delete mode 100644 private_files/old-defunct/example_numpy.py delete mode 100644 private_files/old-defunct/policy_old.py delete mode 100644 private_files/old-defunct/sim_old.py delete mode 100644 private_files/old-defunct/ssm_serial old.py delete mode 100644 private_files/old-defunct/test_ssm_serial old.py delete mode 100644 private_files/scripts/.sim_io_example_instance.csv.icloud delete mode 100644 private_files/scripts/.test_disruptions.ipynb.icloud delete mode 100644 private_files/scripts/build_instance_json.py delete mode 100644 private_files/scripts/disruptions_10000per.png delete mode 100644 private_files/scripts/gsm_tree_willems_data.py delete mode 100644 private_files/scripts/kangye_simulations.py delete mode 100644 private_files/scripts/prob_dist_tests.py delete mode 100644 private_files/scripts/run_sim.py delete mode 100644 private_files/scripts/sim_disruption.py delete mode 100644 private_files/scripts/sim_example_scratch.py delete mode 100644 private_files/scripts/test_disruption_types.py diff --git a/private_files/SCMO stuff/wagner_whitin_capac.py b/private_files/SCMO stuff/wagner_whitin_capac.py deleted file mode 100644 index 5f259c0..0000000 --- a/private_files/SCMO stuff/wagner_whitin_capac.py +++ /dev/null @@ -1,125 +0,0 @@ - -def wagner_whitin_capac(num_periods, holding_cost, fixed_cost, demand, purchase_cost=0, capac=np.inf): - """Solve the Wagner-Whitin problem using dynamic programming (DP). - - The time periods are indexed 1, ..., ``num_periods``. Lists given in - outputs use the same indexing, which means that element 0 - will usually be ignored. (In some cases, element 0 is used to represent - initial conditions.) - - Most parameters may be given as a singleton or a list. If given as a - singleton, the parameter will be assumed to be the same in every time - period. If given as a list, the list must be of length ``num_periods`` or - ``num_periods``\+1. - - * In the former case, the list is assumed to contain values for periods - 1, ..., ``num_periods`` in elements 0, ..., ``num_periods``-1. - * In the latter case, the list is assumed to contain values for periods - 1, ..., ``num_periods`` in elements 1, ..., ``num_periods``, and the - 0th element is ignored. - - The parameters may be mixed, some scalars and some lists. - - Parameters - ---------- - num_periods : int - Number of periods in time horizon. [:math:`T`] - holding_cost : float or list - Holding cost per item per period. [:math:`h`] - fixed_cost : float or list - Fixed cost per order. [:math:`K`] - demand : float or list - Demand in each time period. [:math:`d`] - purchase_cost : float or list, optional - Purchase cost per item. [:math:`c`] - - Returns - ------- - order_quantities : list - List of order quantities in each time period. [:math:`Q^*`] - cost : float - Optimal cost for entire horizon. [:math:`g^*`] - costs_to_go : list - List of "costs to go". [:math:`\\theta`] - next_order_periods : list - List of "next order" period. [:math:`s`] - - - **Equation Used** (modified from equation (3.39)): - - .. math:: - - \\theta_t = \\min_{t < s \le T+1} \\left\\{K + c_t\sum_{i=1}^{s-1}d_i + h\\sum_{i=t}^{s-1}(i-t)d_i + \\theta_s \\right\\} - - **Algorithm Used:** Wagner-Whitin algorithm (Algorithm 3.1) - - **Example** (Example 3.9): - - .. testsetup:: * - - from stockpyl.wagner_whitin import * - - .. doctest:: - - >>> Q, cost, theta, s = wagner_whitin(4, 2, 500, [90, 120, 80, 70]) - >>> Q - [0, 210, 0, 150, 0] - >>> cost - 1380.0 - >>> theta - array([ 0., 1380., 940., 640., 500., 0.]) - >>> s - [0, 3, 5, 5, 5] - - """ - # Check that parameters are non-negative. - assert np.all(np.array(holding_cost) >= 0), "holding_cost must be non-negative." - assert np.all(np.array(fixed_cost) >= 0), "fixed_cost must be non-negative." - assert np.all(np.array(demand) >= 0), "demand must be non-negative." - assert np.all(np.array(purchase_cost) >= 0), "purchase_cost must be non-negative." - - # Replace scalar parameters with lists (multiple copies of scalar). - holding_cost = ensure_list_for_time_periods(holding_cost, num_periods) - fixed_cost = ensure_list_for_time_periods(fixed_cost, num_periods) - demand = ensure_list_for_time_periods(demand, num_periods) - purchase_cost = ensure_list_for_time_periods(purchase_cost, num_periods) - - # Allocate solution arrays. - theta = np.zeros(num_periods+2) - next_order_periods = [0] * (num_periods+1) - - # Loop backwards through periods. - for t in range(num_periods, 0, -1): - - # Loop through possible next order periods. - best_cost = BIG_FLOAT - for ss in range(t+1, num_periods+2): - # Calculate purchase qty. - Q = np.sum([demand[i] for i in range(t, ss)]) - if Q <= capac: - # Calculate cost if next order is in period ss. - cost = fixed_cost[t] - for i in range(t, ss): - # TODO: vectorize this - cost += purchase_cost[t] * demand[i] + holding_cost[t] * (i - t) * demand[i] - cost += theta[ss] - - # Compare to best cost. - if cost < best_cost: - best_cost = cost - best_s = ss - - # Set theta and next_order_periods. - theta[t] = best_cost - next_order_periods[t] = best_s - - # Determine optimal order quantities. - order_quantities = [0] * (num_periods+1) - t = 1 - while t <= num_periods: - order_quantities[t] = np.sum(demand[t:next_order_periods[t]]) - t = next_order_periods[t] - cost = theta[1] - - return order_quantities, cost, theta, next_order_periods - diff --git a/private_files/debugging_files/.3_node_60_60_60.csv.icloud b/private_files/debugging_files/.3_node_60_60_60.csv.icloud deleted file mode 100644 index 4ae489718e1afc47c034d46bf27ff53494776f77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zfVdMC`{FKyqGXn_HOD--GVqoOXjTex?sw*fpy)-AWh=X57-zy=N0Sp)! MAv6O!l!j3)0FCJ^-2eap diff --git a/private_files/debugging_files/.assembly_3_stage_2_762.csv.icloud b/private_files/debugging_files/.assembly_3_stage_2_762.csv.icloud deleted file mode 100644 index 5447a6a2693b0ae67a87ea7feb943e2990dcdfd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zfsl?*q)ZC<;%6Q}W;*!Ml)Oe$Kb2B5oh($ diff --git a/private_files/debugging_files/.example_6_1_randseed_17.csv.icloud b/private_files/debugging_files/.example_6_1_randseed_17.csv.icloud deleted file mode 100644 index 1ad9320c9aea1632dc3dd5aa29f38f63d99edb39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zf>C}qE+=86cc(ZuJ_@czTl;YIXlz2mPz2xFDAqGZ|pYZ}RSak=brkCa< Z7IE;)=zC@4GJpXiBZOvPhte>r2LKN1F}wf( diff --git a/private_files/debugging_files/.kangye-4node-randseed1.csv.icloud b/private_files/debugging_files/.kangye-4node-randseed1.csv.icloud deleted file mode 100644 index 66b0a2d8fbc07648c56d5835caa31719ac54e513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zfsqDnO^vYCSlf3+tRNbP)yp-b9)D%O#Jd12Av^ diff --git a/private_files/debugging_files/.kangye_3_stage_serial_3_3_3_762.csv.icloud b/private_files/debugging_files/.kangye_3_stage_serial_3_3_3_762.csv.icloud deleted file mode 100644 index 32bbf1779f419b52a042c634f76cfaf86c5d0935..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zfZefU^OKu dHN7+^v513TM&GNTlmQGF86h+SJCue|Qvl}`G#>x} diff --git a/private_files/debugging_files/.kangye_3_stage_serial_762.csv.icloud b/private_files/debugging_files/.kangye_3_stage_serial_762.csv.icloud deleted file mode 100644 index e82704aa98bfde949055f3a1faf8d84e279b3743..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zf+3du;^vcwD0 diff --git a/private_files/debugging_files/.kangye_3_stage_serial_7_7_7_762.csv.icloud b/private_files/debugging_files/.kangye_3_stage_serial_7_7_7_762.csv.icloud deleted file mode 100644 index f56fb5a613822489fd643fc53a2e361ffc47dc59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zfP5r3IGh@D|P?? diff --git a/private_files/debugging_files/.temp.csv.icloud b/private_files/debugging_files/.temp.csv.icloud deleted file mode 100644 index 8c2e77ea30e33c30924f2f1869f7994fe7e75444..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?5QFh?3OY0=?woG9d;=f%bR-8LSF}QqxOw5{o$aW%Rv*BN)Jdkr6^OutRAW GRSp0@Mk(3= diff --git a/private_files/debugging_files/.temp_assembly.csv.icloud b/private_files/debugging_files/.temp_assembly.csv.icloud deleted file mode 100644 index f57690128a2f79ecac336a6b04200fa8b14882e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zf!IIS6g80PZ;?&%voJzgq;xZuyMrQGN0U4}%f>P5L^odAcR3#U*-~1(kV8LJUk#9pVLKuxbfPO)t$!EaKpo(f5i?VgLh1 NMhMNo4y9pKBLIeCE!qG8 diff --git a/private_files/debugging_files/mohammad_tests/..__init__.py.icloud b/private_files/debugging_files/mohammad_tests/..__init__.py.icloud deleted file mode 100644 index bd3da479102fd3cbc735faa07a248474e242e8a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?5QF==k`|yv&mLc)fy30fu-18LSF}QqxOw5{o$aW%RwmA{fAckr6^OutRAW GRSp1U?Vnwf}B)^%)GMHypsH)N`>6~l++xB#Jm&*pj2s2Vo7Fxo?b;xajp;p m>$j=#0y0<)3rbA~sx9K+m(lksuVDZKMn(wDzz(Hh)NBA>`8dJ= diff --git a/private_files/old-defunct/.temp.xlsx.icloud b/private_files/old-defunct/.temp.xlsx.icloud deleted file mode 100644 index 989f48797623f6b149abc279fca04681e72cd946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?5QF$dc6D0== 0, "For NORMAL demand, mean must be non-negative" - assert demand_standard_deviation is not None, "For NORMAL demand, standard_deviation must be provided" - assert demand_standard_deviation >= 0, "For NORMAL demand, standard_deviation must be non-negative" - self.demand_mean = demand_mean - self.demand_standard_deviation = demand_standard_deviation - elif demand_type == DemandType.UNIFORM_DISCRETE: - assert demand_lo is not None, "For UNIFORM_DISCRETE demand, lo must be provided" - assert demand_lo >= 0 and is_integer(demand_lo), \ - "For UNIFORM_DISCRETE demand, lo must be a non-negative integer" - assert demand_hi is not None, "For UNIFORM_DISCRETE demand, hi must be provided" - assert demand_hi >= 0 and is_integer(demand_hi), \ - "For UNIFORM_DISCRETE demand, hi must be a non-negative integer" - assert demand_lo <= demand_hi, "For UNIFORM_DISCRETE demand, lo must be <= hi" - self.demand_lo = demand_lo - self.demand_hi = demand_hi - elif demand_type == DemandType.UNIFORM_CONTINUOUS: - assert demand_lo is not None, "For UNIFORM_CONTINUOUS demand, lo must be provided" - assert demand_lo >= 0, "For UNIFORM_CONTINUOUS demand, lo must be non-negative" - assert demand_hi is not None, "For UNIFORM_CONTINUOUS demand, hi must be provided" - assert demand_hi >= 0, "For UNIFORM_CONTINUOUS demand, hi must be non-negative" - assert demand_lo <= demand_hi, "For UNIFORM_CONTINUOUS demand, lo must be <= hi" - self.demand_lo = demand_lo - self.demand_hi = demand_hi - elif demand_type == DemandType.DETERMINISTIC: - assert demands is not None, "For DETERMINISTIC demand, demand_list must be provided" - self.demands = demands - elif demand_type == DemandType.DISCRETE_EXPLICIT: - assert demands is not None, "For DISCRETE_EXPLICIT demand, demand_list must be provided" - assert demand_probabilities is not None, "For DISCRETE_EXPLICIT demand, probabilities must be provided" - assert len(demands) == len(demand_probabilities), \ - "For DISCRETE_EXPLICIT demand, demand_list and probabilities must have equal lengths" - assert np.sum(demand_probabilities) == 1, "For DISCRETE_EXPLICIT demand, probabilities must sum to 1" - self.demands = demands - self.demand_probabilities = demand_probabilities - - # Special members. - - def __repr__(self): - """ - Return a string representation of the ``DemandSource`` instance. - - Returns - ------- - A string representation of the ``DemandSource`` instance. - - """ - # Build string of parameters. - if self.demand_type == DemandType.NONE: - param_str = "" - elif self.demand_type == DemandType.NORMAL: - param_str = \ - "mean={:.2f}, standard_deviation={:.2f}".format(self.demand_mean, self.demand_standard_deviation) - elif self.demand_type in (DemandType.UNIFORM_DISCRETE, DemandType.UNIFORM_CONTINUOUS): - param_str = \ - "lo={:.2f}, hi={:.2f}".format(self.demand_lo, self.demand_hi) - elif self.demand_type == DemandType.DETERMINISTIC: - param_str = "demand_list={}".format(self.demands) - elif self.demand_type == DemandType.DISCRETE_EXPLICIT: - param_str = "demand_list={}, probabilities={}".format(self.demands, self.demand_probabilities) - - return "DemandSource({:s}: {:s})".format(self.demand_type.name, param_str) - - def __str__(self): - """ - Return the full name of the ``DemandSource`` instance. - - Returns - ------- - The demand source name. - - """ - return self.__repr__() - - def generate_demand(self, period=None): - """Generate a demand value using the demand type specified in - type. - - Parameters - ---------- - period : int, optional - The period to generate a demand value for. If ``type`` == - ``DETERMINISTIC``, this is required if ``demand_list`` is a list of - demand_list, on per period. If omitted, will return first (or only) - demand in list. Ignored if ``type`` != ``DETERMINISTIC``. - - Returns - ------- - demand : float - The demand value. - - """ - - if self.demand_type == DemandType.NORMAL: - demand = self.generate_demand_normal() - elif self.demand_type == DemandType.UNIFORM_DISCRETE: - demand = self.generate_demand_uniform_discrete() - elif self.demand_type == DemandType.UNIFORM_CONTINUOUS: - demand = self.generate_demand_uniform_continuous() - elif self.demand_type == DemandType.DETERMINISTIC: - demand = self.generate_demand_deterministic(period) - elif self.demand_type == DemandType.DISCRETE_EXPLICIT: - demand = self.generate_demand_discrete_explicit() - - if self.round: - demand = np.round(demand) - - return demand - - def generate_demand_normal(self): - """Generate demand from normal distribution. - - Returns - ------- - demand : float - The demand value. - - """ - return np.random.normal(self.demand_mean, self.demand_standard_deviation) - - def generate_demand_uniform_discrete(self): - """Generate demand from discrete uniform distribution. - - Returns - ------- - demand : float - The demand value. - - """ - return np.random.randint(int(self.demand_lo), int(self.demand_hi) + 1) - - def generate_demand_uniform_continuous(self): - """Generate demand from continuous uniform distribution. - - Returns - ------- - demand : float - The demand value. - - """ - return np.random.uniform(self.demand_lo, self.demand_hi) - - def generate_demand_deterministic(self, period=None): - """Generate deterministic demand. - - Returns - ------- - demand : float - The demand value. - - """ - if is_iterable(self.demands): - if period is None: - # Return first demand in demand_list list. - return self.demands[0] - else: - # Get demand for period mod (# periods in demand_list list), i.e., - # if we are past the end of the demand_list list, loop back to the beginning. - return self.demands[period % len(self.demands)] - else: - # Return demand_list singleton. - return self.demands - - def generate_demand_discrete_explicit(self): - """Generate demand from discrete explicit distribution. - - Returns - ------- - demand : float - The demand value. - - """ - return np.random.choice(self.demands, p=self.demand_probabilities) - diff --git a/private_files/old-defunct/demand_source_old2.py b/private_files/old-defunct/demand_source_old2.py deleted file mode 100644 index 8dfb5fe..0000000 --- a/private_files/old-defunct/demand_source_old2.py +++ /dev/null @@ -1,733 +0,0 @@ -# =============================================================================== -# PyInv - DemandSource Class -# ------------------------------------------------------------------------------- -# Updated: 04-12-2020 -# Author: Larry Snyder -# License: GPLv3 -# =============================================================================== - -""" -This module contains the ``DemandSource`` class. A ``DemandSource`` -object is used to generate demand_list. - -Notation and equation and section numbers refer to Snyder and Shen, -"Fundamentals of Supply Chain Theory", Wiley, 2019, 2nd ed., except as noted. -""" - - -# =============================================================================== -# Imports -# =============================================================================== - -from enum import Enum -import numpy as np -from scipy.stats import norm -from scipy.stats import uniform -from abc import ABC, abstractmethod # abstract base class - -from helpers import * - - -# =============================================================================== -# Data Types -# =============================================================================== - -class DemandType(Enum): - NONE = 0 # no external demand - NORMAL = 1 - UNIFORM_DISCRETE = 2 - UNIFORM_CONTINUOUS = 3 - DETERMINISTIC = 4 # must supply 'demand_list' parameter - DISCRETE_EXPLICIT = 5 # must supply 'demand_list' and 'demand_probs' parameters - - -# =============================================================================== -# DemandSource Class and Subclasses -# =============================================================================== - -class DemandSource(ABC): - """The ``DemandSource`` class is used to encapsulate demand generation. - This is an abstract class, so it must be subclassed. Subclasses define the - actual demand generation. - """ - - @abstractmethod - def generate_demand(self, period=None): - pass - - -class DemandSourceNone(DemandSource): - """The ``DemandSourceNone`` class is used for nodes that have no external - demand source. - - Attributes - ---------- - _type : DemandType - The demand type. - """ - - def __init__(self): - self._type = DemandType.NONE - - # PROPERTIES - - @property - def type(self): - # Read-only property. - return self._type - - # SPECIAL METHODS - - def __repr__(self): - """ - Return a string representation of the ``DemandSource`` instance. - - Returns - ------- - A string representation of the ``DemandSource`` instance. - """ - return "DemandSource({:s})".format(self._type.name) - - # METHODS - - def generate_demand(self, period=None): - """Return None. - - Parameters - ---------- - period : int - Ignored. - - Returns - ------- - demand : float - The demand value. Equals None. - """ - demand = None - - return demand - - -class DemandSourceNormal(DemandSource): - """The ``DemandSourceNormal`` class is used to encapsulate demand generation - for demand_list with normal distribution. - - Attributes - ---------- - _type : DemandType - The demand type. - _mean : float - Mean of demand per period. [mu] - _standard_deviation : float - Standard deviation of demand per period. [sigma] - _round_to_int : bool - Round demand to nearest integer? - """ - - def __init__(self): - self._type = DemandType.NORMAL - self._mean = None - self._standard_deviation = None - self._round_to_int = False - - # PROPERTIES - - @property - def type(self): - # Read-only property. - return self._type - - @property - def mean(self): - return self._mean - - @mean.setter - def mean(self, mean): - assert mean >= 0, "For NORMAL demand, mean must be non-negative" - self._mean = mean - - @property - def standard_deviation(self): - return self._standard_deviation - - @standard_deviation.setter - def standard_deviation(self, standard_deviation): - assert standard_deviation >= 0, "For NORMAL demand, standard_deviation must be non-negative" - self._standard_deviation = standard_deviation - - @property - def round_to_int(self): - return self._round_to_int - - @round_to_int.setter - def round_to_int(self, round_to_int): - self._round_to_int = round_to_int - - # SPECIAL METHODS - - def __repr__(self): - """ - Return a string representation of the ``DemandSource`` instance. - - Returns - ------- - A string representation of the ``DemandSource`` instance. - """ - # Build string of parameters. - param_str = \ - "mean={:.2f}, standard_deviation={:.2f}".format(self._mean, self._standard_deviation) - - return "DemandSource({:s}: {:s})".format(self._type.name, param_str) - - # METHODS - - def generate_demand(self, period=None): - """Generate demand from normal distribution. - - Parameters - ---------- - period : int, optional - Ignored for this demand source type. - - Returns - ------- - demand : float - The demand value. - """ - # Check parameters. - assert self._mean is not None, "For NORMAL demand, mean must be provided" - assert self._standard_deviation is not None, "For NORMAL demand, mean must be provided" - - # Generate random demand. - demand = max(0, np.random.normal(self._mean, self._standard_deviation)) - - # Round demand, if requested. - if self._round_to_int: - demand = np.round(demand) - - return demand - - def demand_distribution(self): - """Return demand distribution, as a ``scipy.stats.rv_continuous`` object. - - Returns - ------- - distribution : rv_continuous - The demand distribution object. - """ - return norm(self._mean, self._standard_deviation) - - def lead_time_demand_distribution(self, lead_time): - """Return lead-time demand distribution, as a - ``scipy.stats.rv_continuous`` object. - - Parameters - ---------- - lead_time : float - The lead time. [:math:`L`] - - Returns - ------- - distribution : rv_continuous - The lead-time demand distribution object. - """ - return norm(self._mean * lead_time, - self._standard_deviation * np.sqrt(lead_time)) - - def cdf(self, x): - """Cumulative distribution function of demand distribution. - - For normal distribution, this is simply a wrapper around - ``scipy.stats.norm.cdf()``. - - Parameters - ---------- - x : float - Value to calculate cdf for. - - Returns - ------- - F : float - cdf of ``x``. - - """ - - distrib = norm(self._mean, self._standard_deviation) - - return distrib.cdf(x) - - -class DemandSourceUniformDiscrete(DemandSource): - """The ``DemandSourceUniformDiscrete`` class is used to encapsulate demand - generation for demand_list with discrete uniform distribution. - - Attributes - ---------- - _type : DemandType - The demand type. - _lo : float - Low value of demand range. - _hi : float - High value of demand range. - """ - - def __init__(self): - self._type = DemandType.UNIFORM_DISCRETE - self._lo = None - self._hi = None - - # PROPERTIES - - @property - def type(self): - # Read-only property. - return self._type - - @property - def lo(self): - return self._lo - - @lo.setter - def lo(self, lo): - assert lo >= 0 and is_integer(lo), "For UNIFORM_DISCRETE demand, lo must be a non-negative integer" - self._lo = lo - - @property - def hi(self): - return self._hi - - @hi.setter - def hi(self, hi): - assert hi >= 0 and is_integer(hi), "For UNIFORM_DISCRETE demand, hi must be a non-negative integer" - self._hi = hi - - # SPECIAL METHODS - - def __repr__(self): - """ - Return a string representation of the ``DemandSource`` instance. - - Returns - ------- - A string representation of the ``DemandSource`` instance. - """ - # Build string of parameters. - param_str = \ - "lo={:.2f}, hi={:.2f}".format(self._lo, self._hi) - - return "DemandSource({:s}: {:s})".format(self._type.name, param_str) - - # METHODS - - def generate_demand(self, period=None): - """Generate demand from discrete uniform distribution. - - Parameters - ---------- - period : int, optional - Ignored for this demand source type. - - Returns - ------- - demand : float - The demand value. - """ - # Check parameters. - assert self._lo is not None, "For UNIFORM_DISCRETE demand, lo must be provided" - assert self._hi is not None, "For UNIFORM_DISCRETE demand, hi must be provided" - assert self._lo <= self._hi, "For UNIFORM_DISCRETE demand, lo must be <= hi" - - # Generate random demand. - demand = np.random.randint(int(self._lo), int(self._hi) + 1) - - return demand - - -class DemandSourceUniformContinuous(DemandSource): - """The ``DemandSourceUniformContinuous`` class is used to encapsulate demand - generation for demand_list with continuous uniform distribution. - - Attributes - ---------- - _type : DemandType - The demand type. - _lo : float - Low value of demand range. - _hi : float - High value of demand range. - _round_to_int : bool - Round demand to nearest integer? - """ - - def __init__(self): - self._type = DemandType.UNIFORM_CONTINUOUS - self._lo = None - self._hi = None - self._round_to_int = False - - # PROPERTIES - - @property - def type(self): - # Read-only property. - return self._type - - @property - def lo(self): - return self._lo - - @lo.setter - def lo(self, lo): - assert lo >= 0, "For UNIFORM_DISCRETE demand, lo must be non-negative" - self._lo = lo - - @property - def hi(self): - return self._hi - - @hi.setter - def hi(self, hi): - assert hi >= 0, "For UNIFORM_DISCRETE demand, hi must be non-negative" - self._hi = hi - - @property - def round_to_int(self): - return self._round_to_int - - @round_to_int.setter - def round_to_int(self, round): - self._round_to_int = round - - # SPECIAL METHODS - - def __repr__(self): - """ - Return a string representation of the ``DemandSource`` instance. - - Returns - ------- - A string representation of the ``DemandSource`` instance. - """ - # Build string of parameters. - param_str = \ - "lo={:.2f}, hi={:.2f}".format(self._lo, self._hi) - - return "DemandSource({:s}: {:s})".format(self._type.name, param_str) - - # METHODS - - def generate_demand(self, period=None): - """Generate demand from continuous uniform distribution. - - Parameters - ---------- - period : int, optional - Ignored for this demand source type. - - Returns - ------- - demand : float - The demand value. - """ - # Check parameters. - assert self._lo is not None, "For UNIFORM_CONTINUOUS demand, lo must be provided" - assert self._hi is not None, "For UNIFORM_DISCRETE demand, hi must be provided" - assert self._lo <= self._hi, "For UNIFORM_DISCRETE demand, lo must be <= hi" - - # Generate random demand. - demand = np.random.uniform(self._lo, self._hi) - - # Round demand, if requested. - if self._round_to_int: - demand = np.round(demand) - - return demand - - def demand_distribution(self): - """Return demand distribution, as a ``scipy.stats.rv_continuous`` object. - - Returns - ------- - distribution : rv_continuous - The demand distribution object. - """ - # Uniform loc = lo, scale = hi - lo. - return uniform(self._lo, self._hi - self._lo) - - def lead_time_demand_distribution(self, lead_time): - """Return lead-time demand distribution, as a - ``scipy.stats.rv_continuous`` object. - - NOTE: This method calculates the lead-time demand distribution as the - sum of ``lead_time`` uniform random variables. Therefore, the method - requires ``lead_time`` to be an integer. If it is not, it raises an - value error. - - Parameters - ---------- - lead_time : int - The lead time. [:math:`L`] - - Returns - ------- - distribution : rv_continuous - The lead-time demand distribution object. - - Raises - ------ - ValueError - If ``lead_time`` is not an integer. - """ - - # Check whether lead_time is an integer. - if not is_integer(lead_time): - raise(ValueError, "lead_time must be an integer") - - # Get distribution object. - distribution = sum_of_uniforms_distribution(lead_time, self._lo, self._hi) - - return distribution - - def cdf(self, x): - """Cumulative distribution function of demand distribution. - - For normal distribution, this is simply a wrapper around - ``scipy.stats.unif.cdf()``. - - Parameters - ---------- - x : float - Value to calculate cdf for. - - Returns - ------- - F : float - cdf of ``x``. - - """ - - # Uniform loc = lo, scale = hi - lo. - distrib = uniform(self._lo, self._hi - self._lo) - - return distrib.cdf(x) - - -class DemandSourceDeterministic(DemandSource): - """The ``DemandSourceDeterministic`` class is used to encapsulate demand - generation for deterministic demand_list. - - Attributes - ---------- - _type : DemandType - The demand type. - _demands : list - List of demand_list, one per period. [d] - """ - - def __init__(self): - self._type = DemandType.DETERMINISTIC - self._demands = None - - # PROPERTIES - - @property - def type(self): - # Read-only property. - return self._type - - @property - def demands(self): - return self._demands - - @demands.setter - def demands(self, demands): - self._demands = demands - - # SPECIAL METHODS - - def __repr__(self): - """ - Return a string representation of the ``DemandSource`` instance. - - Returns - ------- - A string representation of the ``DemandSource`` instance. - """ - # Build string of parameters. - param_str = "demand_list={}".format(self.demands) - - return "DemandSource({:s}: {:s})".format(self._type.name, param_str) - - # METHODS - - def generate_demand(self, period=None): - """Generate demand from deterministic demand source. - - Parameters - ---------- - period : int, optional - The period to generate a demand value for. If omitted, will return - the first (or only) demand in _demands list. - - Returns - ------- - demand : float - The demand value. - """ - # Check parameters. - assert self._demands is not None, "For DETERMINISTIC demand, demand_list must be provided" - - if is_iterable(self._demands): - if period is None: - # Return first demand in demand_list list. - demand = self._demands[0] - else: - # Get demand for period mod (# periods in demand_list list), i.e., - # if we are past the end of the demand_list list, loop back to the beginning. - demand = self._demands[period % len(self._demands)] - else: - # Return demand_list singleton. - demand = self._demands - - return demand - - -class DemandSourceDiscreteExplicit(DemandSource): - """The ``DemandSourceDiscreteExplicit`` class is used to encapsulate demand - generation for discrete explicit demand_list. - - Attributes - ---------- - _type : DemandType - The demand type. - _demands : list - List of possible demand values. - _probabilities : list - List of probabilities of each demand value. - """ - - def __init__(self): - self._type = DemandType.DISCRETE_EXPLICIT - self._demands = None - self._probabilities = None - - # PROPERTIES - - @property - def type(self): - # Read-only property. - return self._type - - @property - def demands(self): - return self._demands - - @demands.setter - def demands(self, demands): - self._demands = demands - - @property - def probabilities(self): - return self._probabilities - - @probabilities.setter - def probabilities(self, probabilities): - assert np.sum(probabilities) == 1, "For DISCRETE_EXPLICIT demand, probabilities must sum to 1" - self._probabilities = probabilities - - # SPECIAL METHODS - - def __repr__(self): - """ - Return a string representation of the ``DemandSource`` instance. - - Returns - ------- - A string representation of the ``DemandSource`` instance. - """ - # Build string of parameters. - param_str = "demand_list={}, probabilities={}".format(self._demands, self._probabilities) - - return "DemandSource({:s}: {:s})".format(self._type.name, param_str) - - # METHODS - - def generate_demand(self, period=None): - """Generate demand from deterministic demand source. - - Parameters - ---------- - period : int, optional - Ignored for this demand source type. - - Returns - ------- - demand : float - The demand value. - """ - # Check parameters. - assert self._demands is not None, "For DISCRETE_EXPLICIT demand, demand_list must be provided" - assert self._probabilities is not None, "For DISCRETE_EXPLICIT demand, probabilities must be provided" - assert len(self._demands) == len(self._probabilities), \ - "For DISCRETE_EXPLICIT demand, demand_list and probabilities must have equal lengths" - - demand = np.random.choice(self.demands, p=self.probabilities) - - return demand - - -# =============================================================================== -# DemandSourceFactory Class -# =============================================================================== - -class DemandSourceFactory(object): - """The ``DemandSourceFactory`` class is used to build ``DemandSource`` - objects. - - Example - ------- - To build a ``DemandSourceNormal`` object: - - demand_source_factory = DemandSourceFactory() - demand_source = demand_source_factory.build_demand_source(DemandType.NORMAL) - - It is also possible to create the subclass object directly, e.g., - - demand_source = DemandSourceNormal() - - """ - - def build_demand_source(self, demand_type): - """Build and return a DemandSource object of the specified type. - - Parameters - ---------- - demand_type : DemandType - The desired demand type. - - Returns - ------- - demand_source : |class_demand_source| - The |class_demand_source| object. - - """ - if demand_type == DemandType.NONE: - demand_source = DemandSourceNone() - elif demand_type == DemandType.NORMAL: - demand_source = DemandSourceNormal() - elif demand_type == DemandType.UNIFORM_DISCRETE: - demand_source = DemandSourceUniformDiscrete() - elif demand_type == DemandType.UNIFORM_CONTINUOUS: - demand_source = DemandSourceUniformContinuous() - elif demand_type == DemandType.DETERMINISTIC: - demand_source = DemandSourceDeterministic() - elif demand_type == DemandType.DISCRETE_EXPLICIT: - demand_source = DemandSourceDiscreteExplicit() - else: - raise(ValueError, "Unknown demand source type") - - return demand_source - - - - diff --git a/private_files/old-defunct/example_numpy.py b/private_files/old-defunct/example_numpy.py deleted file mode 100644 index 0e71008..0000000 --- a/private_files/old-defunct/example_numpy.py +++ /dev/null @@ -1,356 +0,0 @@ -# -*- coding: utf-8 -*- -"""Example NumPy style docstrings. - -This module demonstrates documentation as specified by the `NumPy -Documentation HOWTO`_. Docstrings may extend over multiple lines. Sections -are created with a section header followed by an underline of equal length. - -Example -------- -Examples can be given using either the ``Example`` or ``Examples`` -sections. Sections support any reStructuredText formatting, including -literal blocks:: - - $ python example_numpy.py - - -Section breaks are created with two blank lines. Section breaks are also -implicitly created anytime a new section starts. Section bodies *may* be -indented: - -Notes ------ - This is an example of an indented section. It's like any other section, - but the body is indented to help it stand out from surrounding text. - -If a section is indented, then a section break is created by -resuming unindented text. - -Attributes ----------- -module_level_variable1 : int - Module level variables may be documented in either the ``Attributes`` - section of the module docstring, or in an inline docstring immediately - following the variable. - - Either form is acceptable, but the two should not be mixed. Choose - one convention to document module level variables and be consistent - with it. - - -.. _NumPy Documentation HOWTO: - https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt - -""" - -module_level_variable1 = 12345 - -module_level_variable2 = 98765 -"""int: Module level variable documented inline. - -The docstring may span multiple lines. The type may optionally be specified -on the first line, separated by a colon. -""" - - -def function_with_types_in_docstring(param1, param2): - """Example function with types documented in the docstring. - - `PEP 484`_ type annotations are supported. If attribute, parameter, and - return types are annotated according to `PEP 484`_, they do not need to be - included in the docstring: - - Parameters - ---------- - param1 : int - The first parameter. - param2 : str - The second parameter. - - Returns - ------- - bool - True if successful, False otherwise. - - .. _PEP 484: - https://www.python.org/dev/peps/pep-0484/ - - """ - - -def function_with_pep484_type_annotations(param1: int, param2: str) -> bool: - """Example function with PEP 484 type annotations. - - The return type must be duplicated in the docstring to comply - with the NumPy docstring style. - - Parameters - ---------- - param1 - The first parameter. - param2 - The second parameter. - - Returns - ------- - bool - True if successful, False otherwise. - - """ - - -def module_level_function(param1, param2=None, *args, **kwargs): - """This is an example of a module level function. - - Function parameters should be documented in the ``Parameters`` section. - The name of each parameter is required. The type and description of each - parameter is optional, but should be included if not obvious. - - If \*args or \*\*kwargs are accepted, - they should be listed as ``*args`` and ``**kwargs``. - - The format for a parameter is:: - - name : type - description - - The description may span multiple lines. Following lines - should be indented to match the first line of the description. - The ": type" is optional. - - Multiple paragraphs are supported in parameter - descriptions. - - Parameters - ---------- - param1 : int - The first parameter. - param2 : :obj:`str`, optional - The second parameter. - *args - Variable length argument list. - **kwargs - Arbitrary keyword arguments. - - Returns - ------- - bool - True if successful, False otherwise. - - The return type is not optional. The ``Returns`` section may span - multiple lines and paragraphs. Following lines should be indented to - match the first line of the description. - - The ``Returns`` section supports any reStructuredText formatting, - including literal blocks:: - - { - 'param1': param1, - 'param2': param2 - } - - Raises - ------ - AttributeError - The ``Raises`` section is a list of all exceptions - that are relevant to the interface. - ValueError - If `param2` is equal to `param1`. - - """ - if param1 == param2: - raise ValueError('param1 may not be equal to param2') - return True - - -def example_generator(n): - """Generators have a ``Yields`` section instead of a ``Returns`` section. - - Parameters - ---------- - n : int - The upper limit of the range to generate, from 0 to `n` - 1. - - Yields - ------ - int - The next number in the range of 0 to `n` - 1. - - Examples - -------- - Examples should be written in doctest format, and should illustrate how - to use the function. - - >>> print([i for i in example_generator(4)]) - [0, 1, 2, 3] - - """ - for i in range(n): - yield i - - -class ExampleError(Exception): - """Exceptions are documented in the same way as classes. - - The __init__ method may be documented in either the class level - docstring, or as a docstring on the __init__ method itself. - - Either form is acceptable, but the two should not be mixed. Choose one - convention to document the __init__ method and be consistent with it. - - Note - ---- - Do not include the `self` parameter in the ``Parameters`` section. - - Parameters - ---------- - msg : str - Human readable string describing the exception. - code : :obj:`int`, optional - Numeric error code. - - Attributes - ---------- - msg : str - Human readable string describing the exception. - code : int - Numeric error code. - - """ - - def __init__(self, msg, code): - self.msg = msg - self.code = code - - -class ExampleClass(object): - """The summary line for a class docstring should fit on one line. - - If the class has public attributes, they may be documented here - in an ``Attributes`` section and follow the same formatting as a - function's ``Args`` section. Alternatively, attributes may be documented - inline with the attribute's declaration (see __init__ method below). - - Properties created with the ``@property`` decorator should be documented - in the property's getter method. - - Attributes - ---------- - attr1 : str - Description of `attr1`. - attr2 : :obj:`int`, optional - Description of `attr2`. - - """ - - def __init__(self, param1, param2, param3): - """Example of docstring on the __init__ method. - - The __init__ method may be documented in either the class level - docstring, or as a docstring on the __init__ method itself. - - Either form is acceptable, but the two should not be mixed. Choose one - convention to document the __init__ method and be consistent with it. - - Note - ---- - Do not include the `self` parameter in the ``Parameters`` section. - - Parameters - ---------- - param1 : str - Description of `param1`. - param2 : :obj:`list` of :obj:`str` - Description of `param2`. Multiple - lines are supported. - param3 : :obj:`int`, optional - Description of `param3`. - - """ - self.attr1 = param1 - self.attr2 = param2 - self.attr3 = param3 #: Doc comment *inline* with attribute - - #: list of str: Doc comment *before* attribute, with type specified - self.attr4 = ["attr4"] - - self.attr5 = None - """str: Docstring *after* attribute, with type specified.""" - - @property - def readonly_property(self): - """str: Properties should be documented in their getter method.""" - return "readonly_property" - - @property - def readwrite_property(self): - """:obj:`list` of :obj:`str`: Properties with both a getter and setter - should only be documented in their getter method. - - If the setter method contains notable behavior, it should be - mentioned here. - """ - return ["readwrite_property"] - - @readwrite_property.setter - def readwrite_property(self, value): - value - - def example_method(self, param1, param2): - """Class methods are similar to regular functions. - - Note - ---- - Do not include the `self` parameter in the ``Parameters`` section. - - Parameters - ---------- - param1 - The first parameter. - param2 - The second parameter. - - Returns - ------- - bool - True if successful, False otherwise. - - """ - return True - - def __special__(self): - """By default special members with docstrings are not included. - - Special members are any methods or attributes that start with and - end with a double underscore. Any special member with a docstring - will be included in the output, if - ``napoleon_include_special_with_doc`` is set to True. - - This behavior can be enabled by changing the following setting in - Sphinx's conf.py:: - - napoleon_include_special_with_doc = True - - """ - pass - - def __special_without_docstring__(self): - pass - - def _private(self): - """By default private members are not included. - - Private members are any methods or attributes that start with an - underscore and are *not* special. By default they are not included - in the output. - - This behavior can be changed such that private members *are* included - by changing the following setting in Sphinx's conf.py:: - - napoleon_include_private_with_doc = True - - """ - pass - - def _private_without_docstring(self): - pass diff --git a/private_files/old-defunct/policy_old.py b/private_files/old-defunct/policy_old.py deleted file mode 100644 index 2c3ae5a..0000000 --- a/private_files/old-defunct/policy_old.py +++ /dev/null @@ -1,754 +0,0 @@ -# =============================================================================== -# PyInv - Policy Class -# ------------------------------------------------------------------------------- -# Updated: 03-06-2020 -# Author: Larry Snyder -# License: GPLv3 -# =============================================================================== - -""" -This module contains the ``Policy`` class. A ``Policy`` object is used to make -order quantity calculations. - -""" - -# =============================================================================== -# Imports -# =============================================================================== - -from enum import Enum -from abc import ABC, abstractmethod - - -# =============================================================================== -# Data Types -# =============================================================================== - -class InventoryPolicyType(Enum): - CUSTOM = 0 - BASE_STOCK = 1 - r_Q = 2 - s_S = 3 - FIXED_QUANTITY = 4 - ECHELON_BASE_STOCK = 5 - BALANCED_ECHELON_BASE_STOCK = 6 - LOCAL_BASE_STOCK = 7 -# STERMAN = 3 -# RANDOM = 4 - - -# =============================================================================== -# Policy Class and Subclasses -# =============================================================================== - -class Policy(ABC): - """The ``Policy`` class is used to encapsulate inventory policy calculations. - This is an abstract class, so it must be subclassed. Subclasses define the - actual policy. - """ - - @abstractmethod - def get_order_quantity(self, predecessor_index=None): - pass - - -class PolicyBaseStock(Policy): - """The ``PolicyBaseStock`` class is used for base-stock policies. - - Attributes - ---------- - _policy_type : InventoryPolicyType - The inventory policy type. - _base_stock_level : float - The base-stock level. [:math:`S`] - """ - - def __init__(self, base_stock_level): - """Policy constructor method. - """ - # Set policy_type. - self._policy_type = InventoryPolicyType.BASE_STOCK - - # Set policy parameter(s). - self._base_stock_level = base_stock_level - - # PROPERTIES - - @property - def policy_type(self): - # Read only. - return self._policy_type - - @property - def base_stock_level(self): - return self._base_stock_level - - @base_stock_level.setter - def base_stock_level(self, value): - self._base_stock_level = value - - # SPECIAL MEMBERS - - def __repr__(self): - """ - Return a string representation of the ``Policy`` instance. - - Returns - ------- - A string representation of the ``Policy`` instance. - - """ - # Build string of parameters. - param_str = "base_stock_level={:.2f}".format(self.base_stock_level) - - return "Policy({:s}: {:s})".format(self.policy_type.name, param_str) - - def __str__(self): - """ - Return the full name of the ``Policy`` instance. - - Returns - ------- - The policy name. - - """ - return self.__repr__() - - # METHODS - - def get_order_quantity(self, inventory_position=None, predecessor_index=None): - # TODO: doesn't currently make use of predecessor_index -- this will be needed when BS levels are pred-specific - """Calculate order quantity. - - Parameters - ---------- - inventory_position : float - Inventory position immediately before order is placed. - predecessor_index : int, optional - The predecessor for which the order quantity should be calculated. - Use ``None'' for external supplier, or if node has only one predecessor - (including external supplier). - - Returns - ------- - order_quantity : float - The order quantity. - """ - - return max(0.0, self._base_stock_level - inventory_position) - - -class PolicysS(Policy): - """The ``PolicysS`` class is used for (s,S) policies. - - Attributes - ---------- - _policy_type : InventoryPolicyType - The inventory policy type. - _reorder_point : float - The reorder point. [:math:`s`] - _order_up_to_level : float - The order-up-to level. [:math:`S`] - """ - - def __init__(self, reorder_point, order_up_to_level): - """Policy constructor method. - """ - # Set policy_type. - self._policy_type = InventoryPolicyType.s_S - - # Set policy parameter(s). - self._reorder_point = reorder_point - self._order_up_to_level = order_up_to_level - - # PROPERTIES - - @property - def policy_type(self): - # Read only. - return self._policy_type - - @property - def reorder_point(self): - return self._reorder_point - - @reorder_point.setter - def reorder_point(self, value): - self._reorder_point = value - - @property - def order_up_to_level(self): - return self._order_up_to_level - - @order_up_to_level.setter - def order_up_to_level(self, value): - self._order_up_to_level = value - - # SPECIAL MEMBERS - - def __repr__(self): - """ - Return a string representation of the ``Policy`` instance. - - Returns - ------- - A string representation of the ``Policy`` instance. - - """ - # Build string of parameters. - param_str = "reorder_point={:.2f}, order_up_to_level={:.2f}".format(self._reorder_point, self._order_up_to_level) - - return "Policy({:s}: {:s})".format(self.policy_type.name, param_str) - - def __str__(self): - """ - Return the full name of the ``Policy`` instance. - - Returns - ------- - The policy name. - - """ - return self.__repr__() - - # METHODS - - def get_order_quantity(self, inventory_position=None, predecessor_index=None): - """Calculate order quantity using an (s,S) policy. - - Parameters - ---------- - inventory_position : float - Inventory position immediately before order is placed. - predecessor_index : int, optional - The predecessor for which the order quantity should be calculated. - Use ``None'' for external supplier, or if node has only one predecessor - (including external supplier). - - Returns - ------- - order_quantity : float - The order quantity. - """ - - if inventory_position <= self._reorder_point: - return self._order_up_to_level - inventory_position - else: - return 0 - - -class PolicyrQ(Policy): - """The ``PolicyrQ`` class is used for (r,Q) policies. - - Attributes - ---------- - _policy_type : InventoryPolicyType - The inventory policy type. - _reorder_point : float - The reorder point. [:math:`r`] - _order_quantity : float - The order quantity. [:math:`Q`] - """ - - def __init__(self, reorder_point, order_quantity): - """Policy constructor method. - """ - # Set policy_type. - self._policy_type = InventoryPolicyType.r_Q - - # Set policy parameter(s). - self._reorder_point = reorder_point - self._order_quantity = order_quantity - - # PROPERTIES - - @property - def policy_type(self): - # Read only. - return self._policy_type - - @property - def reorder_point(self): - return self._reorder_point - - @reorder_point.setter - def reorder_point(self, value): - self._reorder_point = value - - @property - def order_quantity(self): - return self._order_quantity - - @order_quantity.setter - def order_quantity(self, value): - self._order_quantity = value - - # SPECIAL MEMBERS - - def __repr__(self): - """ - Return a string representation of the ``Policy`` instance. - - Returns - ------- - A string representation of the ``Policy`` instance. - - """ - # Build string of parameters. - param_str = "reorder_point={:.2f}, order_quantity={:.2f}".format(self._reorder_point, - self._order_quantity) - - return "Policy({:s}: {:s})".format(self.policy_type.name, param_str) - - def __str__(self): - """ - Return the full name of the ``Policy`` instance. - - Returns - ------- - The policy name. - - """ - return self.__repr__() - - # METHODS - - def get_order_quantity(self, inventory_position=None, predecessor_index=None): - """Calculate order quantity using an (s,S) policy. - - Parameters - ---------- - inventory_position : float - Inventory position immediately before order is placed. - - Returns - ------- - order_quantity : float - The order quantity. - """ - - if inventory_position <= self.reorder_point: - return self.order_quantity - else: - return 0.0 - - -class PolicyFixedQuantity(Policy): - """The ``PolicyrQ`` class is used for fixed-quantity policies. - - Attributes - ---------- - _policy_type : InventoryPolicyType - The inventory policy type. - _order_quantity : float - The order quantity. [:math:`Q`] - """ - - def __init__(self, order_quantity): - """Policy constructor method. - """ - # Set policy_type. - self._policy_type = InventoryPolicyType.FIXED_QUANTITY - - # Set policy parameter(s). - self._order_quantity = order_quantity - - # PROPERTIES - - @property - def policy_type(self): - # Read only. - return self._policy_type - - @property - def order_quantity(self): - return self._order_quantity - - @order_quantity.setter - def order_quantity(self, value): - self._order_quantity = value - - # SPECIAL MEMBERS - - def __repr__(self): - """ - Return a string representation of the ``Policy`` instance. - - Returns - ------- - A string representation of the ``Policy`` instance. - - """ - # Build string of parameters. - param_str = "order_quantity={:.2f}".format(self._order_quantity) - - return "Policy({:s}: {:s})".format(self.policy_type.name, param_str) - - def __str__(self): - """ - Return the full name of the ``Policy`` instance. - - Returns - ------- - The policy name. - - """ - return self.__repr__() - - # METHODS - - def get_order_quantity(self, inventory_position=None, predecessor_index=None): - """Calculate order quantity using a fixed-quantity policy. - - Parameters - ---------- - inventory_position : float - Inventory position immediately before order is placed. - (Ignored for this inventory policy type.) - - Returns - ------- - order_quantity : float - The order quantity. - """ - - return self.order_quantity - - -class PolicyEchelonBaseStock(Policy): - """The ``PolicyEchelonBaseStock`` class is used for echelon base-stock - policies. - - Attributes - ---------- - _policy_type : InventoryPolicyType - The inventory policy type. - _echelon_base_stock_level : float - The echelon base-stock level. [:math:`S`] - """ - - def __init__(self, echelon_base_stock_level): - """Policy constructor method. - """ - # Set policy_type. - self._policy_type = InventoryPolicyType.ECHELON_BASE_STOCK - - # Set policy parameter(s). - self._echelon_base_stock_level = echelon_base_stock_level - - # PROPERTIES - - @property - def policy_type(self): - # Read only. - return self._policy_type - - @property - def echelon_base_stock_level(self): - return self._echelon_base_stock_level - - @echelon_base_stock_level.setter - def echelon_base_stock_level(self, value): - self._echelon_base_stock_level = value - - # SPECIAL MEMBERS - - def __repr__(self): - """ - Return a string representation of the ``Policy`` instance. - - Returns - ------- - A string representation of the ``Policy`` instance. - - """ - # Build string of parameters. - param_str = "echelon_base_stock_level={:.2f}".format(self.echelon_base_stock_level) - - return "Policy({:s}: {:s})".format(self.policy_type.name, param_str) - - def __str__(self): - """ - Return the full name of the ``Policy`` instance. - - Returns - ------- - The policy name. - - """ - return self.__repr__() - - # METHODS - - def get_order_quantity(self, echelon_inventory_position=None, predecessor_index=None): - """Calculate order quantity. - - Parameters - ---------- - echelon_inventory_position : float - Echelon inventory position immediately before order is placed. - Echelon IP at stage i = sum of on-hand inventories at i and at or - in transit to all of its downstream stages, minus backorders at - downstream-most stage, plus on-order inventory at stage i. - - Returns - ------- - order_quantity : float - The order quantity. - """ - - return max(0.0, self._echelon_base_stock_level - echelon_inventory_position) - - -class PolicyBalancedEchelonBaseStock(Policy): - """The ``PolicyBalancedEchelonBaseStock`` class is used for balanced echelon - base-stock policies. - - Attributes - ---------- - _policy_type : InventoryPolicyType - The inventory policy type. - _echelon_base_stock_level : float - The echelon base-stock level. [:math:`S`] - """ - - def __init__(self, echelon_base_stock_level): - """Policy constructor method. - """ - # Set policy_type. - self._policy_type = InventoryPolicyType.BALANCED_ECHELON_BASE_STOCK - - # Set policy parameter(s). - self._echelon_base_stock_level = echelon_base_stock_level - - # PROPERTIES - - @property - def policy_type(self): - # Read only. - return self._policy_type - - @property - def echelon_base_stock_level(self): - return self._echelon_base_stock_level - - @echelon_base_stock_level.setter - def echelon_base_stock_level(self, value): - self._echelon_base_stock_level = value - - # SPECIAL MEMBERS - - def __repr__(self): - """ - Return a string representation of the ``Policy`` instance. - - Returns - ------- - A string representation of the ``Policy`` instance. - - """ - # Build string of parameters. - param_str = "echelon_base_stock_level={:.2f}".format(self.echelon_base_stock_level) - - return "Policy({:s}: {:s})".format(self.policy_type.name, param_str) - - def __str__(self): - """ - Return the full name of the ``Policy`` instance. - - Returns - ------- - The policy name. - - """ - return self.__repr__() - - # METHODS - - def get_order_quantity(self, echelon_inventory_position, echelon_inventory_position_adjusted, predecessor_index): - """Calculate order quantity. - Follows a balanced echelon base-stock policy, i.e., order up to min{S_i, IN^+_{i+1}}, where - S_i is the echelon base-stock level and IN^+_{i+1} is the adjusted echelon inventory position - for node i+1. - A balanced echelon base-stock policy is optimal for assembly systems (see Rosling (1989)), but - only if the system is in long-run balance (again, see Rosling). If the system - is not in long-run balance, the policy also requires checking that the predecessor - nodes have sufficient inventory, which this function does not do. The system may - begin in long-run balance for certain initial conditions, but no matter the initial - conditions, it will eventually reach long-run balance; see Rosling. - - Parameters - ---------- - echelon_inventory_position : float - Echelon inventory position immediately before order is placed. - Echelon IP at stage i = sum of on-hand inventories at i and at or - in transit to all of its downstream stages, minus backorders at - downstream-most stage, plus on-order inventory at stage i. - echelon_inventory_position_adjusted : float - Adjusted echelon inventory position at node i+1, where i is the current node. - - Returns - ------- - order_quantity : float - The order quantity. - """ - - # Determine target inventory position. - target_IP = min(self.echelon_base_stock_level, echelon_inventory_position_adjusted) - order_quantity = max(0.0, target_IP - echelon_inventory_position) - - return max(0.0, order_quantity) - - -class PolicyLocalBaseStock(Policy): - """The ``PolicyLocalBaseStock`` class is used for local base-stock - policies for multi-echelon systems. A local base-stock policy uses only - the local inventory position at a given stage to make ordering decisions, - ignoring inventory states at other nodes. This includes predecessor nodes, - meaning that a node ignores stockouts at its predecessors when placing orders. - - Attributes - ---------- - _policy_type : InventoryPolicyType - The inventory policy type. - _local_base_stock_level : float - The local base-stock level. [:math:`S'`] - """ - - def __init__(self, local_base_stock_level): - """Policy constructor method. - """ - # Set policy_type. - self._policy_type = InventoryPolicyType.LOCAL_BASE_STOCK - - # Set policy parameter(s). - self._local_base_stock_level = local_base_stock_level - - # PROPERTIES - - @property - def policy_type(self): - # Read only. - return self._policy_type - - @property - def local_base_stock_level(self): - return self._local_base_stock_level - - @local_base_stock_level.setter - def local_base_stock_level(self, value): - self._local_base_stock_level = value - - # SPECIAL MEMBERS - - def __repr__(self): - """ - Return a string representation of the ``Policy`` instance. - - Returns - ------- - A string representation of the ``Policy`` instance. - - """ - # Build string of parameters. - param_str = "local_base_stock_level={:.2f}".format(self.local_base_stock_level) - - return "Policy({:s}: {:s})".format(self.policy_type.name, param_str) - - def __str__(self): - """ - Return the full name of the ``Policy`` instance. - - Returns - ------- - The policy name. - - """ - return self.__repr__() - - # METHODS - -# TODO: write unit tests - - def get_order_quantity(self, inventory_position=None, predecessor_index=None): - """Calculate order quantity. - - Parameters - ---------- - inventory_position : float - (Local) inventory position immediately before order is placed. - Local IP at stage i = local inventory level at stage i plus on-order - inventory at stage i. - - Returns - ------- - order_quantity : float - The order quantity. - """ - - return max(0.0, self._local_base_stock_level - inventory_position) - - -# =============================================================================== -# PolicyFactory Class -# =============================================================================== - -class PolicyFactory(object): - """The ``PolicyFactory`` class is used to build ``Policy`` objects. - - Example - ------- - To build a ``PolicyBaseStock`` object: - - policy_factory = PolicyFactory() - policy = policy_factory.build_policy(InventoryPolicyType.BASE_STOCK, base_stock_level=100) - - It is also possible to create the subclass object directly, e.g., - - policy = PolicyBaseStock(base_stock_level=100) - - """ - - def build_policy(self, policy_type, base_stock_level=None, - reorder_point=None, order_up_to_level=None, - order_quantity=None): - """ - Build and return a Policy object of the specified type. - - Parameters - ---------- - policy_type : InventoryPolicyType - The desired inventory policy type. - base_stock_level : float, optional - The base-stock level. Required for BASE_STOCK policies. - reorder_point : float, optional - The reorder point. Required for r_Q and s_S policies. - order_up_to_level : float, optional - The order-up-to level. Required for s_S policies. - order_quantity : float, optional - The order quantity. Required for r_Q and FIXED_QUANTITY policies. - - Returns - ------- - policy : |class_policy| - The Policy object. - - """ - if policy_type == InventoryPolicyType.BASE_STOCK: - policy = PolicyBaseStock(base_stock_level=base_stock_level) - elif policy_type == InventoryPolicyType.r_Q: - policy = PolicyrQ(reorder_point=reorder_point, order_quantity=order_quantity) - elif policy_type == InventoryPolicyType.s_S: - policy = PolicysS(reorder_point=reorder_point, order_up_to_level=order_up_to_level) - elif policy_type == InventoryPolicyType.FIXED_QUANTITY: - policy = PolicyFixedQuantity(order_quantity=order_quantity) - elif policy_type == InventoryPolicyType.ECHELON_BASE_STOCK: - policy = PolicyEchelonBaseStock(echelon_base_stock_level=base_stock_level) - elif policy_type == InventoryPolicyType.BALANCED_ECHELON_BASE_STOCK: - policy = PolicyBalancedEchelonBaseStock(echelon_base_stock_level=base_stock_level) - elif policy_type == InventoryPolicyType.LOCAL_BASE_STOCK: - policy = PolicyLocalBaseStock(local_base_stock_level=base_stock_level) - else: - raise(ValueError, "Unknown inventory policy type") - - return policy diff --git a/private_files/old-defunct/sim_old.py b/private_files/old-defunct/sim_old.py deleted file mode 100644 index bb13a07..0000000 --- a/private_files/old-defunct/sim_old.py +++ /dev/null @@ -1,501 +0,0 @@ -"""Code for simulating multi-echelon pyinv systems. - -'node' and 'stage' are used interchangeably in the documentation. - -The primary data object is the NetworkX DiGraph, which contains all of the data -for the simulation instance. - -The following attributes are used to specify input data: - * Node-level attributes - - local_holding_cost [h'] TODO: allow echelon h.c. - - stockout_cost [p] - - lead_time [L] TODO: create "alias" shipment_lead_time - - order_lead_time - - type - - mean [mu] - - standard_deviation [sigma] - - demand_list [d] - - probabilities - - lo - - hi - - inventory_policy - * Edge-level attributes - (None.) - -The following attributes are used to store outputs and intermediate values: - * Graph-level attributes - - total_cost - * Node-level attributes: - - IS - - IO - - OS - - OO - - IL - - BO - - EIL - - HC - - SC - - ITHC - - TC - - DMFS - - FR - - OQ - -(c) Lawrence V. Snyder -Lehigh University - -""" - -import numpy as np -import math - -from datatypes import * -from sim_io import * -from helpers import * -from tests.instances_ssm_serial import * - -# ------------------- - -# HELPER FUNCTIONS - - -def generate_demand(node, period=None): - """Generate demand for node in period, based on node's DemandType. - - Parameters - ---------- - node : node - NetworkX node representing the node to generate demand for. - period : int - Time period. Required if type = DETERMINISTIC; ignored otherwise. - - Returns - ------- - demand : float - Demand for the node in the period. - - """ - - if node['type'] == DemandType.NONE: - demand = None - elif node['type'] == DemandType.NORMAL: - demand = np.random.normal(node['mean'], node['standard_deviation']) - elif node['type'] == DemandType.UNIFORM_DISCRETE: - demand = np.random.randint(node['lo'], node['hi'] + 1) - elif node['type'] == DemandType.UNIFORM_CONTINUOUS: - demand = np.random.uniform(node['lo'], node['hi']) - elif node['type'] == DemandType.DETERMINISTIC: - # Get demand for period mod (# periods in demand_list list), i.e., - # if we are past the end of the demand_list list, loop back to the beginning. - demand = node['demand_list'][period % len(node['demand_list'])] - elif node['type'] == DemandType.DISCRETE_EXPLICIT: - demand = np.random.choice(node['demand_list'], p=node['probabilities']) - else: - raise ValueError('Valid type not provided') - - return demand - - -def order_quantity(node_index, network, period): - """Determine order quantity based on policy type and values of state variables. - - Parameters - ---------- - node_index - network - period - - Returns - ------- - - """ - - -def generate_downstream_orders(node_index, network, period, visited): - """Generate demand_list and orders for all downstream nodes using depth-first-search. - Ignore nodes for which visited=True. - - Parameters - ---------- - node_index : int - Index of starting node for depth-first search. - network : DiGraph - NetworkX directed graph representing the multi-echelon pyinv network. - period : int - Time period. - visited : dict - Dictionary indicating whether each node in network has already been - visted by the depth-first search. - - Returns - ------- - - """ - # Did we already visit this node? - if visited[node_index]: - # We shouldn't even be here. - return - - # Mark node as visited. - visited[node_index] = True - - # Does node have external demand? - if network.nodes[node_index]['type'] != DemandType.NONE: - # Generate demand and fill it in 'IO'. - network.nodes[node_index]['IO'][None][period] = \ - generate_demand(network.nodes[node_index], period) - - # Call generate_downstream_orders() for all non-visited _successors. - for s in list(network.successors(node_index)): - if not visited[s]: - generate_downstream_orders(s, network, period, visited) - - # Calculate order quantity. # TODO: handle policies - order_quantity = np.sum([network.nodes[node_index]['IO'][s][period] for s in - list(network.successors(node_index))+[None]]) - network.nodes[node_index]['OQ'][period] = order_quantity - - # Get lead times (for convenience). - order_LT = network.nodes[node_index]['order_lead_time'] - shipment_LT = network.nodes[node_index]['shipment_lead_time'] - - # Place orders to all _predecessors. - for p in list(network.predecessors(node_index)) + [None]: - if p is not None: - network.nodes[p]['IO'][node_index][period+order_LT] = order_quantity - network.nodes[node_index]['OO'][p][period+1] = \ - network.nodes[node_index]['OO'][p][period] + order_quantity - - # Does node have external supply? - if network.nodes[node_index]['supply_type'] != SupplyType.NONE: - # Place order to external supplier. - # (For now, this just means setting inbound shipment in the future.) - # TODO: handle other types of supply functions - network.nodes[node_index]['IS'][None][period+order_LT+shipment_LT] = \ - order_quantity - - -def generate_downstream_shipments(node_index, network, period, visited): - """Generate shipments to all downstream nodes using depth-first-search. - Ignore nodes for which visited=True. - - Parameters - ---------- - node_index : int - Index of starting node for depth-first search. - network : DiGraph - NetworkX directed graph representing the multi-echelon pyinv network. - period : int - Time period. - visited : dict - Dictionary indicating whether each node in network has already been - visted by the depth-first search. - - Returns - ------- - - """ - # Did we already visit this node? - if visited[node_index]: - # We shouldn't even be here. - return - - # Mark node as visited. - visited[node_index] = True - - # Shortcuts. - node = network.nodes[node_index] - IS = get_attribute_total(node_index, network, 'IS', period) - IO = get_attribute_total(node_index, network, 'IO', period) - - # Receive inbound shipment (add it to ending IL); will subtract outbound - # shipment later. Subtract arriving shipment from next period's starting OO. - # TODO: handle what happens when multiple supply nodes (assembly-type) - node['EIL'][period] = node['IL'][period] + IS - for p in list(network.predecessors(node_index)) + [None]: - node['OO'][p][period+1] -= node['IS'][p][period] - - # Determine current on-hand and backorders (after shipment arrives but - # before demand is subtracted). - current_on_hand = max(0, node['IL'][period]) + IS - current_backorders = max(0, -node['IL'][period]) - # Double check BO calculations. - current_backorders_check = get_attribute_total(node_index, network, 'BO', period) - assert math.isclose(current_backorders, current_backorders_check) - - # Determine outbound shipments. (Satisfy demand in order of successor node - # index.) Also update EIL and BO, and calculate demand met from stock. - # TODO: allow different allocation policies - node['DMFS'][period] = 0.0 - for s in list(network.successors(node_index)) + [None]: - # Outbound shipment to s = min{OH, BO for s + new order from s}. - node['OS'][s][period] = min(current_on_hand, - node['BO'][s][period] + - node['IO'][s][period]) - # Calculate demand met from stock. (Note: This assumes that if there - # are backorders, they get priority of current period's demand_list.) - # TODO: handle successor-level DMFS and FR. - node['DMFS'][period] = max(0, node['OS'][s][period] - node['BO'][s][period]) - # Update EIL and BO. - node['EIL'][period] -= node['IO'][s][period] - node['BO'][s][period] -= min(node['BO'][s][period], node['OS'][s][period]) - - # node['OS'][period] = min(current_on_hand, current_backorders + IO) - # - # # Determine number of current period's demand_list (inbound orders) that are - # # met from stock. (Note: This assumes that if there are backorders, current - # # period's demand_list get priority.) - # node['DMFS'][period] = min(current_on_hand, IO) - - # Calculate fill rate (cumulative in periods 0,...,t). - met_from_stock = np.sum(node['DMFS'][0:period+1]) - total_demand = np.sum([get_attribute_total(node_index, network, 'IO', t) - for t in range(period+1)]) - if total_demand > 0: - node['FR'][period] = met_from_stock / total_demand - else: - node['FR'][period] = 1.0 - - # Propagate shipment downstream (i.e., update IS). - for s in network.successors(node_index): - network.nodes[s]['IS'][node_index][period+network.nodes[s]['shipment_lead_time']] \ - = node['OS'][s][period] - - # Subtract demand from ending pyinv and calculate costs. - # TODO: add more flexible ways of calculating in-transit h.c. - node['HC'][period] = node['local_holding_cost'] * max(0, node['EIL'][period]) - node['SC'][period] = node['stockout_cost'] * max(0, -node['EIL'][period]) - node['ITHC'][period] = node['local_holding_cost'] * \ - np.sum([network.nodes[p]['OO'][node_index][period] - for p in network.successors(node_index)]) - node['TC'][period] = node['HC'][period] + node['SC'][period] + \ - node['ITHC'][period] - - # Set next period's starting IL. - node['IL'][period+1] = node['EIL'][period] - - # Call generate_downstream_shipments() for all non-visited _successors. - for s in list(network.successors(node_index)): - if not visited[s]: - generate_downstream_shipments(s, network, period, visited) - - -def get_attribute_total(node_index, network, attribute, period): - """Return total of attribute for the period specified. Attribute should be - an attribute that is indexed by successor or predecessor, i.e., IS, OO, IO, - OS, or BO. (If another attribute is specified, return the value of the - attribute, without any summation.) - - Example: get_attribute_total(3, network, 'IS', 5) returns the total - inbound shipment, from all predecessor nodes, in period 5. - - Parameters - ---------- - node_index : int - Index of starting node for depth-first search. - network : DiGraph - NetworkX directed graph representing the multi-echelon pyinv network. - attribute : str - Attribute to be totalled. Error occurs if attribute is not present. - period : int - Time period. - - Returns - ------- - - """ - if attribute in ('IS', 'OO'): - # These attributes are indexed by predecessor. - return np.sum([network.nodes[node_index][attribute][p][period] for - p in list(network.predecessors(node_index))+[None]]) - elif attribute in ('IO', 'OS', 'BO'): - # These attributes are indexed by successor. - return np.sum([network.nodes[node_index][attribute][s][period] for - s in list(network.successors(node_index))+[None]]) - else: - return network.nodes[node_index][attribute][period] - - -# ------------------- - -# SIMULATION - -def simulation(network, num_periods, rand_seed=None): - """ - - Parameters - ---------- - network : DiGraph - NetworkX directed graph representing the multi-echelon pyinv network. - num_periods : int - Number of periods to simulate. - rand_seed : int, optional - Random number generator seed. - - Returns - ------- - G : DiGraph - Copy of network, containing performance measures. - - """ - - # TODO: check for directed loops - # TODO: modify original network; don't make copy - - # CONSTANTS - - # Number of extra periods to allow for calculations past the last period. - EXTRA_PERIODS = 10 - - # INITIALIZATION - - # Make local (deep) copy of graph. - G = network.copy() #(with_data=True) - - # Initialize state and decision variables at each node. - - # NOTE: Some variables are indexed up to num_periods+EXTRA_PERIODS; the - # additional slots are to allow calculations past the last period. - - for n in G.nodes: - # --- State Variables --- # - - # Inbound Shipment: IS[j][t] = shipment quantity arriving at stage from - # stage j in period t. If j is None, refers to external supply. - G.nodes[n]['IS'] = {j: np.zeros(num_periods+EXTRA_PERIODS) - for j in list(G.predecessors(n))+[None]} - - # Inbound Order: IO[j][t] = order quantity arriving at stage from stage - # j in period t. If j is None, refers to external demand. - G.nodes[n]['IO'] = {j: np.zeros(num_periods+EXTRA_PERIODS) - for j in list(G.successors(n))+[None]} - - # Outbound Shipment: OS[j][t] = outbound shipment to stage j in period t. - # If j is None, refers to external demand. - G.nodes[n]['OS'] = {j: np.zeros(num_periods) - for j in list(G.successors(n))+[None]} - - # On-Order: OO[j][t] = on-order quantity (items that have been ordered - # from j but not yet received) at stage at the beginning of period t. - # If j is None, refers to external supply. - G.nodes[n]['OO'] = {j: np.zeros(num_periods+EXTRA_PERIODS) - for j in list(G.predecessors(n))+[None]} - - # Inventory Level: IL[t] = pyinv level (positive or negative) at - # stage at the beginning of period t. - G.nodes[n]['IL'] = np.zeros(num_periods+EXTRA_PERIODS) - - # Backorders: BO[j][t] = number of backorders for successor s at the - # beginning of period t. If s is None, refers to external demand. Sum - # over all _successors should always equal IL^-. - G.nodes[n]['BO'] = {s: np.zeros(num_periods+EXTRA_PERIODS) - for s in list(G.successors(n))+[None]} - - # Ending Inventory Level: EIL[t] = pyinv level (positive or - # negative) at stage at the end of period t. - # NOTE: this is just for convenience, since EIL[i,t] = IL[i,t+1] - G.nodes[n]['EIL'] = np.zeros(num_periods) - - # Costs: HC[t], SC[t], ITHC[t], TC[t] = holding, stockout, in-transit - # holding, and total cost incurred at stage in period t. - G.nodes[n]['HC'] = np.zeros(num_periods) - G.nodes[n]['SC'] = np.zeros(num_periods) - G.nodes[n]['ITHC'] = np.zeros(num_periods) - G.nodes[n]['TC'] = np.zeros(num_periods) - - # Fill Rates: DMFS[t] = demand_list met from stock at stage in period t; - # FR[t] = cumulative fill rate in periods 0,...,t. - G.nodes[n]['DMFS'] = np.zeros(num_periods) - G.nodes[n]['FR'] = np.zeros(num_periods) - - # --- Decision Variables --- # - - # Order Quantity: OQ[j][t] = order quantity placed by stage to stage j - # in period t. If j is None, refers to external supply. - G.nodes[n]['OQ'] = np.zeros(num_periods) - - # Initialize system state. - - # Initialize random number generator. - np.random.seed(rand_seed) - - # Initialize pyinv levels and other quantities. - for n in G.nodes(): - # Initialize inventory levels and backorders. - # TODO: handle what happens if initial IL < 0 (or prohibit it) - if G.nodes[n]['initial_inventory_level'] is not None: - G.nodes[n]['IL'][0] = G.nodes[n]['initial_inventory_level'] - else: - G.nodes[n]['IL'][0] = 0.0 - - # Initialize inbound order quantities for all _predecessors of n, - # and update on-order quantity. - for j in G.predecessors(n): - for t in range(G.nodes[n]['order_lead_time']): - G.nodes[j]['IO'][n][t] = G.nodes[n]['initial_orders'] - G.nodes[n]['OO'][j][0] += G.nodes[j]['IO'][n][t] - - # Initialize inbound shipment quantities from all _predecessors of n, - # and update on-order quantity. - for j in G.predecessors(n): - for t in range(G.nodes[n]['shipment_lead_time']): - G.nodes[n]['IS'][j][t] = G.nodes[n]['initial_shipments'] - G.nodes[n]['OO'][j][0] += G.nodes[n]['IS'][j][t] - - # MAIN LOOP - - for t in range(num_periods): - - #print(t) - - # GENERATE DEMANDS AND ORDERS - - # Build list of nodes with no _predecessors. (These will be the starting - # nodes for the dfs.) - no_pred = {n for n in G.nodes() if G.in_degree(n) == 0} - - # Initialize visited dict. - visited = {n: False for n in G.nodes} - - # Generate demand_list and place orders. Use depth-first search, starting - # at nodes with no _predecessors, and propagating orders upstream. - for n in no_pred: - generate_downstream_orders(n, G, t, visited) - - # GENERATE SHIPMENTS - - # Reset visited dict. - visited = {n: False for n in G.nodes} - - # Generate shipments. Use depth-first search, starting at nodes with - # no _predecessors, and propagating shipments downstream. - for n in no_pred: - generate_downstream_shipments(n, G, t, visited) - - # Fill total cost as graph-level attribute. - G.graph['total_cost'] = np.sum([G.nodes[n]['TC'][t] for n in G.nodes() - for t in range(num_periods)]) - - print("") - - return G - - - -def main(): - T = 10 - serial_3 = serial_system(3, local_holding_cost=[7, 4, 2], - stockout_cost=[37.12, 0, 0], - demand_type=DemandType.NORMAL, - demand_mean=5, - demand_standard_deviation=1, - downstream_0=False) - G = simulation(serial_3, T, rand_seed=15) - write_results(G, T, False, None) - - print("") - - - -if __name__ == "__main__": - main() diff --git a/private_files/old-defunct/ssm_serial old.py b/private_files/old-defunct/ssm_serial old.py deleted file mode 100644 index 8cf28ea..0000000 --- a/private_files/old-defunct/ssm_serial old.py +++ /dev/null @@ -1,948 +0,0 @@ -# =============================================================================== -# stockpyl - ssm_serial Module -# ------------------------------------------------------------------------------- -# Updated: 01-30-2022 -# Author: Larry Snyder -# License: GPLv3 -# =============================================================================== - -"""The :mod:`ssm_serial` module contains code to implement Chen-Zheng (1994) algorithm -for stochastic serial systems under the stochastic service model (SSM), based on -Clark and Scarf (1960), as described in Snyder and Shen (2019). - -'node' and 'stage' are used interchangeably in the documentation. - -The notation and references (equations, sections, examples, etc.) used below -refer to Snyder and Shen, *Fundamentals of Supply Chain Theory*, 2nd edition -(2019). - -References ----------- -F. Chen and Y. S. Zheng. Lower bounds for multiechelon stochastic inventory systems. *Management Science*, 40(11):1426–1443, 1994. - -A. J. Clark and H. Scarf. Optimal policies for a multiechelon inventory problem. *Management Science*, 6(4):475–490, 1960. -""" - -import numpy as np -from scipy import stats -#import math -import matplotlib.pyplot as plt -import copy -from build.lib.stockpyl.demand_source import DemandSource - -from stockpyl.helpers import * -#from stockpyl.supply_chain_network import * - - -### OPTIMIZATION ### - -def optimize_base_stock_levels(num_nodes, echelon_holding_cost, lead_time, - stockout_cost, demand_mean=None, demand_standard_deviation=None, - demand_source=None, S=None, plots=False, x=None, - x_num=1000, d_num=100, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(8)): - """Chen-Zheng (1994) algorithm for stochastic serial systems under - stochastic service model (SSM), as described in Snyder and Shen (2019). - - The nodes must be indexed :math:`N, \\ldots, 1`. The node-specific - parameters (``echelon_holding_cost`` and ``lead_time``) must be either - a dict, a list, or a singleton, with the following requirements: - - * If the parameter is a dict, its keys must equal 1,..., ``num_nodes``, - each corresponding to a node index. - * If the parameter is a list, it must have length ``num_nodes`` + 1; - the 0th entry will be ignored and the other entries will correspond to the node indices. - * If the parameter is a singleton, all nodes will have that parameter set to the - singleton value. - - Either ``demand_mean`` and ``demand_standard_deviation`` must be - provided (in which case the demand will be assumed to be normally distributed) - or a ``demand_source`` must be provided. - - - Parameters - ---------- - num_nodes : int - Number of nodes in serial system. [:math:`N`] - echelon_holding_cost : float, list, or dict - Echelon holding cost at each node. [:math:`h`] - lead_time : float, list, or dict - (Shipment) lead time at each node. [:math:`L`] - stockout_cost : float - Stockout cost per item per unit time at node 1. [:math:`p`] - demand_mean : float, optional - Mean demand per unit time at node 1. Ignored if ``demand_source`` is not ``None``. [:math:`\\mu`] - demand_standard_deviation : float, optional - Standard deviation of demand per unit time at node 1. Ignored if ``demand_source`` is not ``None``. [:math:`\\mu`] - demand_source : DemandSource, optional - A DemandSource object describing the demand distribution. Required if - ``demand_mean`` and ``demand_standard_deviation`` are ``None``. - S : dict, optional - Dict of echelon base-stock levels to evaluate. If present, no - optimization is performed and the function just returns the cost - under base-stock levels ``S``; to optimize instead, set ``S`` = ``None`` - (the default). [:math:`S`] - plots : bool, optional - ``True`` for the function to generate plots of :math:`C(\\cdot)` functions, - ``False`` otherwise. - x : ndarray, optional - x-array to use for truncation and discretization, or ``None`` (the default) - to determine automatically. - x_num : int, optional - Number of discretization intervals to use for ``x`` range. Ignored if - ``x`` is provided. - d_num : int, optional - Number of discretization intervals to use for ``d`` range. - ltd_lower_tail_prob : float, optional - Lower tail probability to use when truncating lead-time demand - distribution. - ltd_upper_tail_prob : float, optional - Upper tail probability to use when truncating lead-time demand - distribution. - sum_ltd_lower_tail_prob : float, optional - Lower tail probability to use when truncating "sum-of-lead-times" - demand distribution. - sum_ltd_upper_tail_prob : float, optional - Upper tail probability to use when truncating "sum-of-lead-times" - demand distribution. - - Returns - ------- - S_star : dict - Dict of optimal echelon base-stock levels. [:math:`S^*`] - C_star : float - Optimal expected cost. [:math:`C^*`] - - Raises - ------ - ValueError - If ``stockout_cost`` is ``None`` or if ``echelon_holding_cost`` or - ``lead_time`` is ``None`` for any node. - ValueError - If ``demand_mean`` or ``demand_standard_deviation`` is ``None`` and - ``demand_source`` is ``None``. - ValueError - If ``stockout_cost`` < 0 or if ``lead_time`` < 0 for any node. - - - **Equations Used**: - - .. math:: - - \\underline{g}_0(x) = (p+h'_1)x^- - - For :math:`j=1,\\ldots,N`: - - .. math:: - - \\begin{gather*} - \\hat{g}_j(x) = h_jx + \\underline{g}_{j-1}(x) \\\\ - g_j(y) = E\left[\hat{g}_j(y-D_j)\\right] \\\\ - S^*_j = \\mathrm{argmin} \\{g_j(y)\\} \\\\ - \\underline{g}_j(x) = g_j(\\min\\{S_j^*,x\\}) - \\end{gather*} - - - The range of :math:`x` values considered is discretized and truncated. - The :math:`\\hat{g}_j(x)` functions sometimes need to be evaluated for :math:`x` - values outside this range. For those values, the following limits provide linear - approximations that are used instead (see Problem 6.13): - - .. math:: - - \\begin{gather*} - \\lim_{x \\rightarrow -\\infty} \\hat{g}_j(x) = \\sum_{i=1}^j h_i\\left(x - \\sum_{k=i}^{j-1} E[D_k]\\right) - (p+h'_1)\\left(x - \\sum_{k=1}^{j-1} E[D_k]\\right) \\\\ - \\lim_{x \\rightarrow +\\infty} \\hat{g}_j(x) = \\begin{cases} h_jx + g_{j-1}(S^*_{j-1}), & \\text{if $j>1$} \\\\ - h_jx, & \\text{if $j=1$} \\end{cases} - \\end{gather*} - - - **Example** (Example 6.1): - - .. testsetup:: * - - from stockpyl.ssm_serial import * - - .. doctest:: - - >>> S_star, C_star = optimize_base_stock_levels( - ... num_nodes=3, - ... echelon_holding_cost=[3, 2, 2], - ... lead_time=[1, 1, 2], - ... stockout_cost=37.12, - ... demand_mean=5, - ... demand_standard_deviation=1 - ... ) - >>> S_star - {1: 6.5144388073261155, 2: 12.012332294949644, 3: 22.700237234889784} - >>> C_star - 47.668653127136345 - """ - - # TODO: handle other indexing (other than N ... 1) - - # Build dicts of parameters. - indices = list(range(1, num_nodes+1)) - echelon_holding_cost_dict = ensure_dict_for_nodes(echelon_holding_cost, indices) - lead_time_dict = ensure_dict_for_nodes(lead_time, indices, 0) - stockout_cost_dict = {n: stockout_cost if n == 1 else 0 for n in indices} - - # Validate parameters. - if not all(echelon_holding_cost_dict.values()): raise ValueError("echelon_holding_cost cannot be None for any node") - if not all(lead_time_dict.values()): raise ValueError("lead_time cannot be None for any node") - if any(l < 0 for l in lead_time_dict.values()): raise ValueError("lead_time must be non-negative for every node") - if stockout_cost is None: raise ValueError("stockout_cost cannot be None") - elif stockout_cost < 0: raise ValueError("stockout_cost must be non-negative") - if (demand_mean is None or demand_standard_deviation is None) and demand_source is None: - raise ValueError("You must provide either demand_mean and demand_standard_deviation, or demand_source") - - # Get shortcuts to some parameters (for convenience). - N = num_nodes - if demand_source is None: - mu = demand_mean - else: - mu = demand_source.demand_distribution.mean() - L = [0] + [lead_time_dict[j] for j in range(1, N+1)] - h = [0] + [echelon_holding_cost_dict[j] for j in range(1, N+1)] - p = stockout_cost - - # Build (or get) "sum of lead-time demand" distribution (LTD distribution in - # which L = sum of all lead times) - if demand_source is None: - demand_source = DemandSource() - demand_source.type = 'N' - demand_source.mean = demand_mean - demand_source.standard_deviation = demand_standard_deviation - sum_ltd_dist = demand_source.lead_time_demand_distribution(float(np.sum(L))) - - # TODO: would it be better to calculate mean, a, b directly if we know them? - - # Get truncation bounds for sum-of-lead-time demand distribution. - # If support is finite, use support; otherwise, use F^{-1}(.). - if sum_ltd_dist.a == float("-inf"): - sum_ltd_lo = sum_ltd_dist.ppf(sum_ltd_lower_tail_prob) - else: - # interval(1) gives lo and hi end of interval that contains 100% of - # probability area, i.e., 0th and 100th percentile, which for uniform - # distribution is the entire support. - sum_ltd_lo = sum_ltd_dist.interval(1)[0] - if sum_ltd_dist.b == float("inf"): - sum_ltd_hi = sum_ltd_dist.ppf(1 - sum_ltd_upper_tail_prob) - else: - sum_ltd_hi = sum_ltd_dist.interval(1)[1] - - # Determine x (inventory level) array (truncated and discretized). - if x is None: - # TODO: is this the best x-range to use? - # x-range = [sum_ltd_lo-sum_ltd_mean, sum_ltd_hi]. - x_lo = sum_ltd_lo - sum_ltd_dist.mean() - x_hi = sum_ltd_hi - x_delta = (x_hi - x_lo) / x_num - # x_lo = -4 * sigma * np.sqrt(sum(L)) - # x_hi = mu * sum(L) + 8 * sigma * np.sqrt(sum(L)) - # x_delta = (x_hi - x_lo) / x_num - # Ensure x >= largest echelon BS level, if provided. - if S is not None: - x_hi = max(x_hi, max(S, key=S.get)) - # Build x range. - x = np.arange(x_lo, x_hi + x_delta, x_delta) - else: - x_delta = x[1] - x[0] - - # Standard normal demand array (truncated and discretized). - # (Use mu + d * sigma to get distribution-specific demand_list). - # d_lo = -4 - # d_hi = 4 - # d_delta = (d_hi - d_lo) / d_num - # d = np.arange(d_lo, d_hi + d_delta, d_delta) - # # Probability array. - # fd = stats.norm.cdf(d+d_delta/2) - stats.norm.cdf(d-d_delta/2) - - # Extended x array (used for approximate C-hat function). - x_ext_lo = np.min(x) - sum_ltd_hi - x_ext_hi = np.max(x) + sum_ltd_hi - # x_ext_lo = np.min(x) - (mu * sum(L) + - # d.max() * sigma * np.sqrt(sum(L))) - # x_ext_hi = np.max(x) + (mu * sum(L) + - # d.max() * sigma * np.sqrt(sum(L))) - x_ext = np.arange(x_ext_lo, x_ext_hi, x_delta) - - # Initialize arrays. (0th element is ignored since we are assuming stages - # are numbered starting at 1. C_bar is an exception since C_bar[0] is - # meaningful.) - C_hat = np.zeros((N+1, len(x))) - C = np.zeros((N+1, len(x))) - S_star = {} - C_star = np.zeros(N+1) - C_bar = np.zeros((N+1, len(x))) - - # Initialize arrays containing approximation for C (mainly for debugging). - C_hat_lim1 = np.zeros((N+1, len(x_ext))) - C_hat_lim2 = np.zeros((N+1, len(x_ext))) - - # Calculate C_bar[0, :]. - C_bar[0, :] = (p + sum(h)) * np.maximum(-x, 0) - - # Loop through stages. - for j in range(1, N+1): - - # Calculate C_hat. - C_hat[j, :] = h[j] * x + C_bar[j-1, :] - - # Calculate approximate C-hat function. - C_hat_lim1[j, :] = -(p + sum(h)) * (x_ext - mu * sum(L[1:j])) - for i in range(1, j+1): - C_hat_lim1[j, :] += h[i] * (x_ext - mu * sum(L[i:j])) - # C_hat_lim2 is never used since y-d is never greater than the y range; - # however, it is here so it can be plotted. - if j > 1: - C_hat_lim2[j, :] = h[j] * x_ext + C[j-1, find_nearest(x, S_star[j-1], True)] - else: - C_hat_lim2[j, :] = h[j] * x_ext - - # Get lead-time demand distribution. - # TODO: what happens if demand_source does not provide these functions? - ltd_dist = demand_source.lead_time_demand_distribution(L[j]) - - # Get truncation bounds for lead-time demand distribution. - # If support is finite, use support; otherwise, use F^{-1}(.). - if ltd_dist.a == float("-inf"): - ltd_lo = ltd_dist.ppf(ltd_lower_tail_prob) - else: - ltd_lo = ltd_dist.interval(1)[0] - if ltd_dist.b == float("inf"): - ltd_hi = ltd_dist.ppf(1 - ltd_upper_tail_prob) - else: - ltd_hi = ltd_dist.interval(1)[1] - - # Determine d (lead-time demand) array (truncated and discretized). - d_lo = ltd_lo - d_hi = ltd_hi - d_delta = (d_hi - d_lo) / d_num - d = np.arange(d_lo, d_hi + d_delta, d_delta) - - # Calculate discretized cdf array. - # TODO: handle situation where demand_distrib does not provide _cdf - fd = np.array([ltd_dist.cdf(d_val+d_delta/2) - ltd_dist.cdf(d_val-d_delta/2) for d_val in d]) -# fd = ltd_dist.cdf(d+d_delta/2) - ltd_dist.cdf(d-d_delta/2) - - # Calculate C. - for y in x: - - # Get index of closest element of x to y. - the_x = find_nearest(x, y, True) - - # Loop through demand_list and calculate expected cost. - # This method uses the following result (see Problem 6.13): - # lim_{y -> -infty} C_j(y) = -(p + h'_{j+1})(y - sum_{i=1}^j E[D_i]) - # lim_{y -> +infty} C_j(y) = h_j(y - E[D_j]) + C_{j-1}(S*_{j-1}) - # TODO: this can probably be vectorized and be much faster - - the_cost = np.zeros(d.size) - - for d_ind in range(d.size): - # Calculate y - d. - y_minus_d = y - d[d_ind] -# y_minus_d = y - (mu * L[j] + d[d_ind] * sigma * np.sqrt(L[j])) - - # Calculate cost -- use approximate value of C-hat if y-d is - # outside of x-range. - if y_minus_d < np.min(x): - the_cost[d_ind] = \ - C_hat_lim1[j, find_nearest(x_ext, y_minus_d, True)] - elif y_minus_d > np.max(x): # THIS SHOULD NEVER HAPPEN - the_cost[d_ind] = \ - C_hat_lim2[j, find_nearest(x_ext, y_minus_d, True)] - else: - the_cost[d_ind] = \ - C_hat[j, find_nearest(x, y_minus_d, True)] - - # Calculate expected cost. - C[j, the_x] = np.dot(fd, the_cost) - - # Did user specify S? - if S is None: - # No -- determine S*. - opt_S_index = np.argmin(C[j, :]) - S_star[j] = x[opt_S_index] - else: - # Yes -- use specified S. - S_star[j] = S[j] - C_star[j] = C[j, find_nearest(x, S_star[j], True)] - - # Calculate C_bar - C_bar[j, :] = C[j, find_nearest(x, np.minimum(S_star[j], x), True)] - - # Plot functions. - if plots: - fig, axes = plt.subplots(2, 2) - # C_hat. - axes[0, 0].plot(x, np.transpose(C_hat[1:N+1, :])) - axes[0, 0].set_title('C-hat') - axes[0, 0].legend(list(map(str, range(1, N+1)))) - k = N - axes[0, 0].plot(x, C_hat_lim1[k, find_nearest(x_ext, x)], ':') - axes[0, 0].plot(x, C_hat_lim2[k, find_nearest(x_ext, x)], ':') - # C_bar. - axes[0, 1].plot(x, np.transpose(C_bar)) - axes[0, 1].set_title('C-bar') - axes[0, 1].legend(list(map(str, range(N+1)))) - # C. - axes[1, 0].plot(x, np.transpose(C[1:N+1, :])) - axes[1, 0].set_title('C') - axes[1, 0].legend(list(map(str, range(1, N+1)))) - - plt.show() - - return S_star, C_star[N] - - - -def optimize_base_stock_levels_from_network(network, S=None, plots=False, x=None, - x_num=1000, d_num=100, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(8)): - """Chen-Zheng (1994) algorithm for stochastic serial systems under - stochastic service model (SSM), as described in Snyder and Shen (2019). - Takes as input a ``SupplyChainNetwork`` that contains the problem data. - - The nodes in ``network`` must be indexed :math:`N, \\ldots, 1`. They - must provide the following attributes: - - * **echelon_holding_cost** - * **lead_time** (optional, default=0) - * **stockout_cost** (node 1 only) - * **demand_source** (node 1 only) - - - Parameters - ---------- - network : SupplyChainNetwork - The serial inventory network. - S : dict, optional - Dict of echelon base-stock levels to evaluate. If present, no - optimization is performed and the function just returns the cost - under base-stock levels ``S``; to optimize instead, set ``S`` = ``None`` - (the default). [:math:`S`] - plots : bool, optional - ``True`` for the function to generate plots of :math:`C(\\cdot)` functions, - ``False`` otherwise. - x : ndarray, optional - x-array to use for truncation and discretization, or ``None`` (the default) - to determine automatically. - x_num : int, optional - Number of discretization intervals to use for ``x`` range. Ignored if - ``x`` is provided. - d_num : int, optional - Number of discretization intervals to use for ``d`` range. - ltd_lower_tail_prob : float, optional - Lower tail probability to use when truncating lead-time demand - distribution. - ltd_upper_tail_prob : float, optional - Upper tail probability to use when truncating lead-time demand - distribution. - sum_ltd_lower_tail_prob : float, optional - Lower tail probability to use when truncating "sum-of-lead-times" - demand distribution. - sum_ltd_upper_tail_prob : float, optional - Upper tail probability to use when truncating "sum-of-lead-times" - demand distribution. - - Returns - ------- - S_star : dict - Dict of optimal echelon base-stock levels. [:math:`S^*`] - C_star : float - Optimal expected cost. [:math:`C^*`] - - Raises - ------ - ValueError - If nodes are not indexed N, ..., 1. - ValueError - If ``echelon_holding_cost`` is ``None`` for any node or if - ``stockout_cost`` or ``demand_source`` is ``None`` for node 1. - ValueError - If ``lead_time`` < 0 for any node or if ``stockout_cost`` < 0 for node 1. - - - **Equations Used**: See documentation for :func:`optimize_base_stock_levels`. - - .. math:: - - \\underline{g}_0(x) = (p+h'_1)x^- - - For :math:`j=1,\\ldots,N`: - - .. math:: - - \\begin{gather*} - \\hat{g}_j(x) = h_jx + \\underline{g}_{j-1}(x) \\\\ - g_j(y) = E\left[\hat{g}_j(y-D_j)\\right] \\\\ - S^*_j = \\mathrm{argmin} \\{g_j(y)\\} \\\\ - \\underline{g}_j(x) = g_j(\\min\\{S_j^*,x\\}) - \\end{gather*} - - - The range of :math:`x` values considered is discretized and truncated. - The :math:`\\hat{g}_j(x)` functions sometimes need to be evaluated for :math:`x` - values outside this range. For those values, the following limits provide linear - approximations that are used instead (see Problem 6.13): - - .. math:: - - \\begin{gather*} - \\lim_{x \\rightarrow -\\infty} \\hat{g}_j(x) = \\sum_{i=1}^j h_i\\left(x - \\sum_{k=i}^{j-1} E[D_k]\\right) - (p+h'_1)\\left(x - \\sum_{k=1}^{j-1} E[D_k]\\right) \\\\ - \\lim_{x \\rightarrow +\\infty} \\hat{g}_j(x) = \\begin{cases} h_jx + g_{j-1}(S^*_{j-1}), & \\text{if $j>1$} \\\\ - h_jx, & \\text{if $j=1$} \\end{cases} - \\end{gather*} - - - **Example** (Example 6.1): - - .. testsetup:: * - - from stockpyl.ssm_serial import * - - .. doctest:: - - >>> from stockpyl.supply_chain_network import serial_system - >>> network = serial_system( - ... num_nodes=3, - ... node_indices=[1, 2, 3], - ... echelon_holding_cost=[3, 2, 2], - ... stockout_cost=[37.12, 0, 0], - ... demand_type='N', - ... demand_mean=5, - ... demand_standard_deviation=1, - ... shipment_lead_time=[1, 1, 2], - ... inventory_policy_type='BS', - ... base_stock_levels=[0, 0, 0] - ... ) - >>> S_star, C_star = optimize_base_stock_levels_from_network(network) - >>> S_star - {1: 6.5144388073261155, 2: 12.012332294949644, 3: 22.700237234889784} - >>> C_star - 47.668653127136345 - - - """ - - # TODO: handle other indexing (other than N ... 1) - - # Get number of nodes. - N = len(network.nodes) - - # Make sure nodes are indexed correctly. - if network.source_nodes[0].index != N or network.sink_nodes[0].index != 1: \ - raise ValueError("nodes must be indexed N, ..., 1") - node = network.source_nodes[0] - while node is not None: - if node.index == 1: - node = None - else: - succ = node.successor_indices() - if succ != [node.index - 1]: raise ValueError("nodes must be indexed N, ..., 1") - else: - node = node.get_one_successor() - - # Check that nodes have the necessary attributes, and check their values. - for node in network.nodes: - if node.echelon_holding_cost is None: raise ValueError("echelon_holding_cost is required for all nodes") - if node.lead_time is not None and node.lead_time < 0: raise ValueError("lead_time must be non-negative") - if node.index == 1: - if node.stockout_cost is None: raise ValueError("stockout_cost is required for node 1") - elif node.stockout_cost < 0: raise ValueError("stockout_cost must be non-negative") - if node.demand_source is None: raise ValueError("demand_source is required for node 1") - - # Get shortcuts to parameters (for convenience). - sink = network.get_node_from_index(1) - mu = sink.demand_source.demand_distribution.mean() - L = np.zeros(N+1) - h = np.zeros(N+1) - for j in network.nodes: - L[j.index] = j.lead_time or 0 - h[j.index] = j.echelon_holding_cost - p = sink.stockout_cost - - # Get "sum of lead-time demand" distribution (LTD distribution in which - # L = sum of all lead times). - sum_ltd_dist = sink.demand_source.lead_time_demand_distribution(np.sum(L)) - - # TODO: would it be better to calculate mean, a, b directly if we know them? - - # Get truncation bounds for sum-of-lead-time demand distribution. - # If support is finite, use support; otherwise, use F^{-1}(.). - if sum_ltd_dist.a == float("-inf"): - sum_ltd_lo = sum_ltd_dist.ppf(sum_ltd_lower_tail_prob) - else: - # interval(1) gives lo and hi end of interval that contains 100% of - # probability area, i.e., 0th and 100th percentile, which for uniform - # distribution is the entire support. - sum_ltd_lo = sum_ltd_dist.interval(1)[0] - if sum_ltd_dist.b == float("inf"): - sum_ltd_hi = sum_ltd_dist.ppf(1 - sum_ltd_upper_tail_prob) - else: - sum_ltd_hi = sum_ltd_dist.interval(1)[1] - - # Determine x (inventory level) array (truncated and discretized). - if x is None: - # TODO: is this the best x-range to use? - # x-range = [sum_ltd_lo-sum_ltd_mean, sum_ltd_hi]. - x_lo = sum_ltd_lo - sum_ltd_dist.mean() - x_hi = sum_ltd_hi - x_delta = (x_hi - x_lo) / x_num - # x_lo = -4 * sigma * np.sqrt(sum(L)) - # x_hi = mu * sum(L) + 8 * sigma * np.sqrt(sum(L)) - # x_delta = (x_hi - x_lo) / x_num - # Ensure x >= largest echelon BS level, if provided. - if S is not None: - x_hi = max(x_hi, max(S, key=S.get)) - # Build x range. - x = np.arange(x_lo, x_hi + x_delta, x_delta) - else: - x_delta = x[1] - x[0] - - # Standard normal demand array (truncated and discretized). - # (Use mu + d * sigma to get distribution-specific demand_list). - # d_lo = -4 - # d_hi = 4 - # d_delta = (d_hi - d_lo) / d_num - # d = np.arange(d_lo, d_hi + d_delta, d_delta) - # # Probability array. - # fd = stats.norm.cdf(d+d_delta/2) - stats.norm.cdf(d-d_delta/2) - - # Extended x array (used for approximate C-hat function). - x_ext_lo = np.min(x) - sum_ltd_hi - x_ext_hi = np.max(x) + sum_ltd_hi - # x_ext_lo = np.min(x) - (mu * sum(L) + - # d.max() * sigma * np.sqrt(sum(L))) - # x_ext_hi = np.max(x) + (mu * sum(L) + - # d.max() * sigma * np.sqrt(sum(L))) - x_ext = np.arange(x_ext_lo, x_ext_hi, x_delta) - - # Initialize arrays. (0th element is ignored since we are assuming stages - # are numbered starting at 1. C_bar is an exception since C_bar[0] is - # meaningful.) - C_hat = np.zeros((N+1, len(x))) - C = np.zeros((N+1, len(x))) - S_star = {} - C_star = np.zeros(N+1) - C_bar = np.zeros((N+1, len(x))) - - # Initialize arrays containing approximation for C (mainly for debugging). - C_hat_lim1 = np.zeros((N+1, len(x_ext))) - C_hat_lim2 = np.zeros((N+1, len(x_ext))) - - # Calculate C_bar[0, :]. - C_bar[0, :] = (p + sum(h)) * np.maximum(-x, 0) - - # Loop through stages. - for j in range(1, N+1): - - # Calculate C_hat. - C_hat[j, :] = h[j] * x + C_bar[j-1, :] - - # Calculate approximate C-hat function. - C_hat_lim1[j, :] = -(p + sum(h)) * (x_ext - mu * sum(L[1:j])) - for i in range(1, j+1): - C_hat_lim1[j, :] += h[i] * (x_ext - mu * sum(L[i:j])) - # C_hat_lim2 is never used since y-d is never greater than the y range; - # however, it is here so it can be plotted. - if j > 1: - C_hat_lim2[j, :] = h[j] * x_ext + C[j-1, find_nearest(x, S_star[j-1], True)] - else: - C_hat_lim2[j, :] = h[j] * x_ext - - # Get lead-time demand distribution. - # TODO: what happens if demand_source does not provide these functions? - ltd_dist = sink.demand_source.lead_time_demand_distribution(L[j]) - - # Get truncation bounds for lead-time demand distribution. - # If support is finite, use support; otherwise, use F^{-1}(.). - if ltd_dist.a == float("-inf"): - ltd_lo = ltd_dist.ppf(ltd_lower_tail_prob) - else: - ltd_lo = ltd_dist.interval(1)[0] - if ltd_dist.b == float("inf"): - ltd_hi = ltd_dist.ppf(1 - ltd_upper_tail_prob) - else: - ltd_hi = ltd_dist.interval(1)[1] - - # Determine d (lead-time demand) array (truncated and discretized). - d_lo = ltd_lo - d_hi = ltd_hi - d_delta = (d_hi - d_lo) / d_num - d = np.arange(d_lo, d_hi + d_delta, d_delta) - - # Calculate discretized cdf array. - # TODO: handle situation where demand_distrib does not provide _cdf - fd = np.array([ltd_dist.cdf(d_val+d_delta/2) - ltd_dist.cdf(d_val-d_delta/2) for d_val in d]) -# fd = ltd_dist.cdf(d+d_delta/2) - ltd_dist.cdf(d-d_delta/2) - - # Calculate C. - for y in x: - - # Get index of closest element of x to y. - the_x = find_nearest(x, y, True) - - # Loop through demand_list and calculate expected cost. - # This method uses the following result (see Problem 6.13): - # lim_{y -> -infty} C_j(y) = -(p + h'_{j+1})(y - sum_{i=1}^j E[D_i]) - # lim_{y -> +infty} C_j(y) = h_j(y - E[D_j]) + C_{j-1}(S*_{j-1}) - # TODO: this can probably be vectorized and be much faster - - the_cost = np.zeros(d.size) - - for d_ind in range(d.size): - # Calculate y - d. - y_minus_d = y - d[d_ind] -# y_minus_d = y - (mu * L[j] + d[d_ind] * sigma * np.sqrt(L[j])) - - # Calculate cost -- use approximate value of C-hat if y-d is - # outside of x-range. - if y_minus_d < np.min(x): - the_cost[d_ind] = \ - C_hat_lim1[j, find_nearest(x_ext, y_minus_d, True)] - elif y_minus_d > np.max(x): # THIS SHOULD NEVER HAPPEN - the_cost[d_ind] = \ - C_hat_lim2[j, find_nearest(x_ext, y_minus_d, True)] - else: - the_cost[d_ind] = \ - C_hat[j, find_nearest(x, y_minus_d, True)] - - # Calculate expected cost. - C[j, the_x] = np.dot(fd, the_cost) - - # Did user specify S? - if S is None: - # No -- determine S*. - opt_S_index = np.argmin(C[j, :]) - S_star[j] = x[opt_S_index] - else: - # Yes -- use specified S. - S_star[j] = S[j] - C_star[j] = C[j, find_nearest(x, S_star[j], True)] - - # Calculate C_bar - C_bar[j, :] = C[j, find_nearest(x, np.minimum(S_star[j], x), True)] - - # Plot functions. - if plots: - fig, axes = plt.subplots(2, 2) - # C_hat. - axes[0, 0].plot(x, np.transpose(C_hat[1:N+1, :])) - axes[0, 0].set_title('C-hat') - axes[0, 0].legend(list(map(str, range(1, N+1)))) - k = N - axes[0, 0].plot(x, C_hat_lim1[k, find_nearest(x_ext, x)], ':') - axes[0, 0].plot(x, C_hat_lim2[k, find_nearest(x_ext, x)], ':') - # C_bar. - axes[0, 1].plot(x, np.transpose(C_bar)) - axes[0, 1].set_title('C-bar') - axes[0, 1].legend(list(map(str, range(N+1)))) - # C. - axes[1, 0].plot(x, np.transpose(C[1:N+1, :])) - axes[1, 0].set_title('C') - axes[1, 0].legend(list(map(str, range(1, N+1)))) - - plt.show() - - return S_star, C_star[N] - - -### NETWORK-HANDLING FUNCTIONS ### - -def local_to_echelon_base_stock_levels(network, S_local): - """Convert local base-stock levels to echelon base-stock levels. - - Assumes network is serial system but does not assume anything about the - labeling of the nodes. - - Parameters - ---------- - network : SupplyChainNetwork - The serial inventory network. - S_local : dict - Dict of local base-stock levels. - - Returns - ------- - S_echelon : dict - Dict of echelon base-stock levels. - - """ - S_echelon = {} - for n in network.nodes: - S_echelon[n.index] = S_local[n.index] - k = n.get_one_successor() - while k is not None: - S_echelon[n.index] += S_local[k.index] - k = k.get_one_successor() - - return S_echelon - - -def echelon_to_local_base_stock_levels(network, S_echelon): - """Convert echelon base-stock levels to local base-stock levels. - - Assumes network is serial system but does not assume anything about the - labeling of the nodes. - - Parameters - ---------- - network : SupplyChainNetwork - The serial inventory network. - S_echelon : dict - Dict of echelon base-stock levels. - - Returns - ------- - S_local : dict - Dict of local base-stock levels. - - """ - S_local = {} - - # Determine indexing of nodes. (node_list[i] = index of i'th node, where - # i = 0 means sink node and i = N-1 means source node.) - node_list = [] - n = network.sink_nodes[0] - while n is not None: - node_list.append(n.index) - n = n.get_one_predecessor() - - # Calculate S-minus. - S_minus = {} - j = 0 - for n in network.nodes: - S_minus[n.index] = np.min([S_echelon[node_list[i]] - for i in range(j, len(S_echelon))]) - j += 1 - - # Calculate S_local. - for n in network.nodes: - # Get successor. - k = n.get_one_successor() - if k is None: - S_local[n.index] = S_minus[n.index] - else: - S_local[n.index] = S_minus[n.index] - S_minus[k.index] - - return S_local - - -### COST-RELATED FUNCTIONS ### - -def expected_cost(network, echelon_S, x_num=1000, d_num=100, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(8)): - """Calculate expected cost of given solution. - - This is a wrapper function that calls ``optimize_base_stock_levels()`` - without doing any optimization. - - Parameters - ---------- - network : SupplyChainNetwork - The serial inventory network. - echelon_S : dict - Dict of echelon base-stock levels to be evaluated. - x_num : int, optional - Number of discretization intervals to use for ``x`` range. - d_num : int, optional - Number of discretization intervals to use for ``d`` range. - ltd_lower_tail_prob : float, optional - Lower tail probability to use when truncating lead-time demand - distribution. - ltd_upper_tail_prob : float, optional - Upper tail probability to use when truncating lead-time demand - distribution. - sum_ltd_lower_tail_prob : float, optional - Lower tail probability to use when truncating "sum-of-lead-times" - demand distribution. - sum_ltd_upper_tail_prob : float, optional - Upper tail probability to use when truncating "sum-of-lead-times" - demand distribution. - - Returns - ------- - cost : float - Expected cost of system. - """ - _, cost = optimize_base_stock_levels_from_network(network, S=echelon_S, plots=False, - x=None, x_num=x_num, d_num=d_num, - ltd_lower_tail_prob=ltd_lower_tail_prob, - ltd_upper_tail_prob=ltd_upper_tail_prob, - sum_ltd_lower_tail_prob=sum_ltd_lower_tail_prob, - sum_ltd_upper_tail_prob=sum_ltd_upper_tail_prob) - - return cost - - -def expected_holding_cost(network, echelon_S, x_num=1000, d_num=100, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(8)): - """Calculate expected holding cost of given solution. - - Basic idea: set stockout cost to 0 and call ``optimize_base_stock_levels()`` - without doing any optimization. - - Parameters - ---------- - network : SupplyChainNetwork - The serial inventory network. - echelon_S : dict - Dict of echelon base-stock levels to be evaluated. - x_num : int, optional - Number of discretization intervals to use for ``x`` range. - d_num : int, optional - Number of discretization intervals to use for ``d`` range. - ltd_lower_tail_prob : float, optional - Lower tail probability to use when truncating lead-time demand - distribution. - ltd_upper_tail_prob : float, optional - Upper tail probability to use when truncating lead-time demand - distribution. - sum_ltd_lower_tail_prob : float, optional - Lower tail probability to use when truncating "sum-of-lead-times" - demand distribution. - sum_ltd_upper_tail_prob : float, optional - Upper tail probability to use when truncating "sum-of-lead-times" - demand distribution. - - Returns - ------- - holding_cost : float - Expected holding cost of system. - """ - - # Make copy of network and set stockout cost to 0. - network2 = copy.deepcopy(network) - for node in network2.nodes: - node.stockout_cost = 0 - - _, holding_cost = optimize_base_stock_levels_from_network(network2, S=echelon_S, - plots=False, x=None, x_num=x_num, d_num=d_num, - ltd_lower_tail_prob=ltd_lower_tail_prob, - ltd_upper_tail_prob=ltd_upper_tail_prob, - sum_ltd_lower_tail_prob=sum_ltd_lower_tail_prob, - sum_ltd_upper_tail_prob=sum_ltd_upper_tail_prob) - - return holding_cost - - - - -#S_star, C_star = optimize_base_stock_levels(instance_2_stage, plots=False) -#print('S_star = {}, C_star = {}'.format(S_star, C_star)) - diff --git a/private_files/old-defunct/test_ssm_serial old.py b/private_files/old-defunct/test_ssm_serial old.py deleted file mode 100644 index 9f907ea..0000000 --- a/private_files/old-defunct/test_ssm_serial old.py +++ /dev/null @@ -1,625 +0,0 @@ -import unittest -import numpy as np - -from stockpyl.ssm_serial import * -from tests.instances_ssm_serial import * -from stockpyl.instances import * - -# Module-level functions. - -def print_status(class_name, function_name): - """Print status message.""" - print("module : test_ssm_serial class : {:30s} function : {:30s}".format(class_name, function_name)) - - -def set_up_module(): - """Called once, before anything else in this module.""" - print_status('---', 'set_up_module()') - - -def tear_down_module(): - """Called once, after everything else in this module.""" - print_status('---', 'tear_down_module()') - - -class TestOptimizeBaseStockLevels(unittest.TestCase): - - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestOptimizeBaseStockLevels', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestOptimizeBaseStockLevels', 'tear_down_class()') - - def test_example_6_1(self): - """Test that optimize_base_stock_levels() correctly optimizes - network in Example 6.1. - """ - - print_status('TestOptimizeBaseStockLevels', 'test_example_6_1()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) -# instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - - S_star, C_star = optimize_base_stock_levels( - num_nodes=len(instance.nodes), - echelon_holding_cost={node.index: node.echelon_holding_cost for node in instance.nodes}, - lead_time={node.index: node.shipment_lead_time for node in instance.nodes}, - stockout_cost=instance.get_node_from_index(1).stockout_cost, - demand_mean=instance.get_node_from_index(1).demand_source.mean, - demand_standard_deviation=instance.get_node_from_index(1).demand_source.standard_deviation, - demand_source=None, S=None, plots=False, x=None, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(8)) - correct_S_star = [0, 6.514438807325977, 12.232248034454390, 22.788203530691469] - for n in instance.node_indices: - self.assertAlmostEqual(S_star[n], correct_S_star[n], places=5) - self.assertAlmostEqual(C_star, 47.820555075345887, places=5) - - def test_problem_6_1(self): - """Test that optimize_base_stock_levels() correctly optimizes network in - Problem 6.1. - """ - - print_status('TestOptimizeBaseStockLevels', 'test_problem_6_1()') - - instance = copy.deepcopy(get_named_instance("problem_6_1")) - instance.reindex_nodes({0: 1, 1: 2}) - - S_star, C_star = optimize_base_stock_levels( - num_nodes=len(instance.nodes), - echelon_holding_cost={node.index: node.echelon_holding_cost for node in instance.nodes}, - lead_time={node.index: node.shipment_lead_time for node in instance.nodes}, - stockout_cost=instance.get_node_from_index(1).stockout_cost, - demand_mean=instance.get_node_from_index(1).demand_source.mean, - demand_standard_deviation=instance.get_node_from_index(1).demand_source.standard_deviation, - demand_source=None, S=None, plots=False, x=None, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(8)) - correct_S_star = [0, 1.241618472110342e2, 2.286691776877441e2] - for n in instance.node_indices: - self.assertAlmostEqual(S_star[n], correct_S_star[n], places=5) - self.assertAlmostEqual(C_star, 1.676947889401860e+02, places=5) - - def test_problem_6_2a(self): - """Test that optimize_base_stock_levels() correctly optimizes network in - Problem 6.2a. - """ - - print_status('TestOptimizeBaseStockLevels', 'test_problem_6_2a()') - - instance = copy.deepcopy(get_named_instance("problem_6_2a")) - instance.reindex_nodes({n: n+1 for n in instance.node_indices}) - - S_star, C_star = optimize_base_stock_levels( - num_nodes=len(instance.nodes), - echelon_holding_cost={node.index: node.echelon_holding_cost for node in instance.nodes}, - lead_time={node.index: node.shipment_lead_time for node in instance.nodes}, - stockout_cost=instance.get_node_from_index(1).stockout_cost, - demand_mean=instance.get_node_from_index(1).demand_source.mean, - demand_standard_deviation=instance.get_node_from_index(1).demand_source.standard_deviation, - demand_source=None, S=None, plots=False, x=None, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(8)) - correct_S_star = [0, 39.7915536774345, 77.1934831561084, 111.478585178226, 142.646859743788, 173.815134309349] - for n in instance.node_indices: - self.assertAlmostEqual(S_star[n], correct_S_star[n], places=4) - self.assertAlmostEqual(C_star, 4.584970628129348e+02, places=4) - - def test_example_6_1_uniform(self): - """Test that optimize_base_stock_levels() correctly optimizes - network in Example 6.1 with uniform demand_list. - """ - - print_status('TestOptimizeBaseStockLevels', 'test_example_6_1_uniform()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - - for n in instance.nodes: - if n.index == 1: - demand_source = DemandSource() - demand_source.type = 'UC' - demand_source.lo = 5 - np.sqrt(12) / 2 - demand_source.hi = 5 + np.sqrt(12) / 2 - else: - demand_source = None - n.demand_source = demand_source - - S_star, C_star = optimize_base_stock_levels( - num_nodes=len(instance.nodes), - echelon_holding_cost={node.index: node.echelon_holding_cost for node in instance.nodes}, - lead_time={node.index: node.shipment_lead_time for node in instance.nodes}, - stockout_cost=instance.get_node_from_index(1).stockout_cost, - demand_mean=None, - demand_standard_deviation=None, - demand_source=instance.get_node_from_index(1).demand_source, - S=None, plots=False, x=None, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(8)) - correct_S_star = {1: 6.293580485578014, 2: 11.95126810804254, 3: 22.601033044446353} - for n in instance.node_indices: - self.assertAlmostEqual(S_star[n], correct_S_star[n], places=5) - self.assertAlmostEqual(C_star, 46.45421661501915, places=5) - - def test_bad_parameters(self): - """Test that optimize_base_stock_levels() correctly raises exceptions if - bad parameters are given. - """ - - print_status('TestOptimizeBaseStockLevels', 'test_bad_parameters()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - instance.get_node_from_index(2).shipment_lead_time = -20 - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels( - num_nodes=len(instance.nodes), - echelon_holding_cost={node.index: node.echelon_holding_cost for node in instance.nodes}, - lead_time={node.index: node.shipment_lead_time for node in instance.nodes}, - stockout_cost=instance.get_node_from_index(1).stockout_cost, - demand_mean=instance.get_node_from_index(1).demand_source.mean, - demand_standard_deviation=instance.get_node_from_index(1).demand_source.standard_deviation, - x_num=100, d_num=10) - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - instance.get_node_from_index(1).stockout_cost = None - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels( - num_nodes=len(instance.nodes), - echelon_holding_cost={node.index: node.echelon_holding_cost for node in instance.nodes}, - lead_time={node.index: node.shipment_lead_time for node in instance.nodes}, - stockout_cost=instance.get_node_from_index(1).stockout_cost, - demand_mean=instance.get_node_from_index(1).demand_source.mean, - demand_standard_deviation=instance.get_node_from_index(1).demand_source.standard_deviation, - x_num=100, d_num=10) - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - instance.get_node_from_index(1).stockout_cost = -2 - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels( - num_nodes=len(instance.nodes), - echelon_holding_cost={node.index: node.echelon_holding_cost for node in instance.nodes}, - lead_time={node.index: node.shipment_lead_time for node in instance.nodes}, - stockout_cost=instance.get_node_from_index(1).stockout_cost, - demand_mean=instance.get_node_from_index(1).demand_source.mean, - demand_standard_deviation=instance.get_node_from_index(1).demand_source.standard_deviation, - x_num=100, d_num=10) - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - instance.get_node_from_index(2).echelon_holding_cost = None - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels( - num_nodes=len(instance.nodes), - echelon_holding_cost={node.index: node.echelon_holding_cost for node in instance.nodes}, - lead_time={node.index: node.shipment_lead_time for node in instance.nodes}, - stockout_cost=instance.get_node_from_index(1).stockout_cost, - demand_mean=instance.get_node_from_index(1).demand_source.mean, - demand_standard_deviation=instance.get_node_from_index(1).demand_source.standard_deviation, - x_num=100, d_num=10) - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - instance.get_node_from_index(1).demand_source = None - instance.get_node_from_index(1).demand_mean = None - instance.get_node_from_index(1).demand_standard_deviation = 10 - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels( - num_nodes=len(instance.nodes), - echelon_holding_cost={node.index: node.echelon_holding_cost for node in instance.nodes}, - lead_time={node.index: node.shipment_lead_time for node in instance.nodes}, - stockout_cost=instance.get_node_from_index(1).stockout_cost, - demand_mean=None, - demand_standard_deviation=10, - demand_source=None, - x_num=100, d_num=10 - ) - - -class TestOptimizeBaseStockLevelsFromNetwork(unittest.TestCase): - - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestOptimizeBaseStockLevelsFromNetwork', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestOptimizeBaseStockLevelsFromNetwork', 'tear_down_class()') - - def test_example_6_1(self): - """Test that optimize_base_stock_levels_from_network() correctly optimizes - network in Example 6.1. - """ - - print_status('TestOptimizeBaseStockLevelsFromNetwork', 'test_example_6_1()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - - S_star, C_star = optimize_base_stock_levels_from_network( - instance, S=None, plots=False, x=None, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(8)) - correct_S_star = [0, 6.514438807325977, 12.232248034454390, 22.788203530691469] - for n in instance.node_indices: - self.assertAlmostEqual(S_star[n], correct_S_star[n], places=5) - self.assertAlmostEqual(C_star, 47.820555075345887, places=5) - - def test_problem_6_1(self): - """Test that optimize_base_stock_levels_from_network() correctly optimizes network in - Problem 6.1. - """ - - print_status('TestOptimizeBaseStockLevelsFromNetwork', 'test_problem_6_1()') - - instance = copy.deepcopy(get_named_instance("problem_6_1")) - instance.reindex_nodes({0: 1, 1: 2}) - - S_star, C_star = optimize_base_stock_levels_from_network( - instance, S=None, plots=False, x=None, x_num=100, d_num=10, - ltd_lower_tail_prob=1 - stats.norm.cdf(4), - ltd_upper_tail_prob=1 - stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1 - stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1 - stats.norm.cdf(8)) - correct_S_star = [0, 1.241618472110342e2, 2.286691776877441e2] - for n in instance.node_indices: - self.assertAlmostEqual(S_star[n], correct_S_star[n], places=5) - self.assertAlmostEqual(C_star, 1.676947889401860e+02, places=5) - - def test_problem_6_2a(self): - """Test that optimize_base_stock_levels_from_network() correctly optimizes network in - Problem 6.2a. - """ - - print_status('TestOptimizeBaseStockLevelsFromNetwork', 'test_problem_6_2a()') - - instance = copy.deepcopy(get_named_instance("problem_6_2a")) - instance.reindex_nodes({n: n+1 for n in instance.node_indices}) - - S_star, C_star = optimize_base_stock_levels_from_network( - instance, S=None, plots=False, x=None, x_num=100, d_num=10, - ltd_lower_tail_prob=1 - stats.norm.cdf(4), - ltd_upper_tail_prob=1 - stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1 - stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1 - stats.norm.cdf(8)) - correct_S_star = [0, 39.7915536774345, 77.1934831561084, 111.478585178226, 142.646859743788, 173.815134309349] - for n in instance.node_indices: - self.assertAlmostEqual(S_star[n], correct_S_star[n], places=4) - self.assertAlmostEqual(C_star, 4.584970628129348e+02, places=4) - - def test_example_6_1_uniform(self): - """Test that optimize_base_stock_levels_from_network() correctly optimizes - network in Example 6.1 with uniform demand_list. - """ - - print_status('TestOptimizeBaseStockLevelsFromNetwork', 'test_example_6_1_uniform()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) -# instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - - for n in instance.nodes: - if n.index == 1: - demand_source = DemandSource() - demand_source.type = 'UC' - demand_source.lo = 5 - np.sqrt(12) / 2 - demand_source.hi = 5 + np.sqrt(12) / 2 - else: - demand_source = None - n.demand_source = demand_source - - S_star, C_star = optimize_base_stock_levels_from_network( - instance, S=None, plots=False, x=None, x_num=100, d_num=10) - correct_S_star = {1: 6.293580485578014, 2: 11.95126810804254, 3: 22.601033044446353} - for n in instance.node_indices: - self.assertAlmostEqual(S_star[n], correct_S_star[n], places=5) - self.assertAlmostEqual(C_star, 46.45421661501915, places=5) - - def test_bad_indices(self): - """Test that optimize_base_stock_levels_from_network() correctly raises exceptions if - nodes are not indexed correctly. - """ - - print_status('TestOptimizeBaseStockLevelsFromNetwork', 'test_bad_indices()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) - instance.reindex_nodes({0: 3, 1: 2, 2: 1}) - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels_from_network(instance, S={n: 0 for n in instance.node_indices}) - - instance = copy.deepcopy(get_named_instance("example_6_1")) - instance.reindex_nodes({0: 1, 1: 3, 2: 2}) - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels_from_network(instance, S={n: 0 for n in instance.node_indices}) - - def test_bad_parameters(self): - """Test that optimize_base_stock_levels_from_network() correctly raises exceptions if - bad parameters are given. - """ - - print_status('TestOptimizeBaseStockLevelsFromNetwork', 'test_bad_parameters()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 3, 2: 2}) - instance.nodes[1].order_lead_time = -20 - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels_from_network(instance, S={n: 0 for n in instance.node_indices}) - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 3, 2: 2}) - instance.nodes[0].stockout_cost = None - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels_from_network(instance, S={n: 0 for n in instance.node_indices}) - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 3, 2: 2}) - instance.nodes[0].stockout_cost = -2 - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels_from_network(instance, S={n: 0 for n in instance.node_indices}) - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 3, 2: 2}) - instance.nodes[2].echelon_holding_cost = None - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels_from_network(instance, S={n: 0 for n in instance.node_indices}) - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 3, 2: 2}) - instance.nodes[0].demand_distribution = None - with self.assertRaises(ValueError): - S_star, C_star = optimize_base_stock_levels_from_network(instance, S={n: 0 for n in instance.node_indices}) - - -class TestLocalToEchelonBaseStockLevels(unittest.TestCase): - - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestLocalToEchelonBaseStockLevels', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestLocalToEchelonBaseStockLevels', 'tear_down_class()') - - def test_example_6_1(self): - """Test that local_to_echelon_base_stock_levels() correctly converts - a few different sets of BS levels for network in Example 6.1. - """ - - print_status('TestLocalToEchelonBaseStockLevels', 'test_example_6_1()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - - S_local = {1: 4, 2: 5, 3: 1} - S_echelon = local_to_echelon_base_stock_levels(instance, S_local) - self.assertDictEqual(S_echelon, {1: 4, 2: 9, 3: 10}) - - S_local = {1: 10, 2: 0, 3: 2} - S_echelon = local_to_echelon_base_stock_levels(instance, S_local) - self.assertDictEqual(S_echelon, {1: 10, 2: 10, 3: 12}) - - S_local = {1: 3, 2: -4, 3: 5} - S_echelon = local_to_echelon_base_stock_levels(instance, S_local) - self.assertDictEqual(S_echelon, {1: 3, 2: -1, 3: 4}) - - -class TestEchelonToLocalBaseStockLevels(unittest.TestCase): - - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestEchelonToLocalBaseStockLevels', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestEchelonToLocalBaseStockLevels', 'tear_down_class()') - - def test_example_6_1(self): - """Test that echelon_to_local_base_stock_levels() correctly converts - a few different sets of BS levels for network in Example 6.1. - """ - - print_status('TestEchelonToLocalBaseStockLevels', 'test_example_6_1()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - - S_echelon = {1: 4, 2: 9, 3: 10} - S_local = echelon_to_local_base_stock_levels(instance, S_echelon) - self.assertDictEqual(S_local, {1: 4, 2: 5, 3: 1}) - - S_echelon = {1: 10, 2: 10, 3: 12} - S_local = echelon_to_local_base_stock_levels(instance, S_echelon) - self.assertDictEqual(S_local, {1: 10, 2: 0, 3: 2}) - - S_echelon = {1: 3, 2: -1, 3: 4} - S_local = echelon_to_local_base_stock_levels(instance, S_echelon) - self.assertDictEqual(S_local, {1: -1, 2: 0, 3: 5}) - - S_echelon = {1: 10, 2: 15, 3: 5} - S_local = echelon_to_local_base_stock_levels(instance, S_echelon) - self.assertDictEqual(S_local, {1: 5, 2: 0, 3: 0}) - - -class TestExpectedCost(unittest.TestCase): - - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestExpectedCost', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestExpectedCost', 'tear_down_class()') - - def test_example_6_1(self): - """Test that expected_cost() correctly calculates cost for - a few different sets of BS levels for network in Example 6.1. - """ - - print_status('TestExpectedCost', 'test_example_6_1()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - - S_echelon = {1: 4, 2: 9, 3: 10} - cost = expected_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 4.025320847013973e+02) - - S_echelon = {1: 10, 2: 10, 3: 12} - cost = expected_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 3.227131745107600e+02) - - S_echelon = {1: 3, 2: -1, 3: 4} - cost = expected_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 6.292579915269251e+02) - - def test_problem_6_1(self): - """Test that expected_cost() correctly calculates cost for - a few different sets of BS levels for network in Problem 6.1. - """ - - print_status('TestExpectedCost', 'test_problem_6_1()') - - instance = copy.deepcopy(get_named_instance("problem_6_1")) - instance.reindex_nodes({0: 1, 1: 2}) - - S_echelon = {1: 1.242440692221066e+02, 2: 2.287925107043527e+02} - cost = expected_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 1.693611203524711e+02) - - S_echelon = {1: 50, 2: 125} - cost = expected_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 1.218952430250280e+03) - - S_echelon = {1: 75, 2: 50} - cost = expected_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 2.378816200366911e+03) - - -class TestExpectedHoldingCost(unittest.TestCase): - - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestExpectedHoldingCost', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestExpectedHoldingCost', 'tear_down_class()') - - def test_example_6_1(self): - """Test that expected_holding_cost() correctly calculates cost for - a few different sets of BS levels for network in Example 6.1. - """ - - print_status('TestExpectedHoldingCost', 'test_example_6_1()') - - instance = copy.deepcopy(get_named_instance("example_6_1")) - #instance.reindex_nodes({0: 1, 1: 2, 2: 3}) - - S_echelon = {1: 4, 2: 9, 3: 10} - cost = expected_holding_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 29.979059977933002) - - S_echelon = {1: 10, 2: 10, 3: 12} - cost = expected_holding_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 30.013403869820511) - - S_echelon = {1: 3, 2: -1, 3: 4} - cost = expected_holding_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 29.986925977144374) - - def test_problem_6_1(self): - """Test that expected_holding_cost() correctly calculates cost for - a few different sets of BS levels for network in Problem 6.1. - """ - - print_status('TestExpectedHoldingCost', 'test_problem_6_1()') - - instance = copy.deepcopy(get_named_instance("problem_6_1")) - instance.reindex_nodes({0: 1, 1: 2}) - - S_echelon = {1: 1.242440692221066e+02, 2: 2.287925107043527e+02} - cost = expected_holding_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 1.526476024969551e+02) - - S_echelon = {1: 50, 2: 125} - cost = expected_holding_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 1.002946042252444e+02) - - S_echelon = {1: 75, 2: 50} - cost = expected_holding_cost(instance, S_echelon, x_num=100, d_num=10, - ltd_lower_tail_prob=1-stats.norm.cdf(4), - ltd_upper_tail_prob=1-stats.norm.cdf(4), - sum_ltd_lower_tail_prob=1-stats.norm.cdf(4), - sum_ltd_upper_tail_prob=1-stats.norm.cdf(4)) - self.assertAlmostEqual(cost, 99.997129696149514) - - diff --git a/private_files/scripts/.sim_io_example_instance.csv.icloud b/private_files/scripts/.sim_io_example_instance.csv.icloud deleted file mode 100644 index 052632817c496c8bacbc1013598091484850430a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zf>Eg`X_{{wH)QZI1f}GU&%)H`~#JuEGz2xFDL4ob@0y0?j2BoH#<|Gzz X@XP3XWn?pe0V5-XW?+ZXFscgx`;Rg{ diff --git a/private_files/scripts/.test_disruptions.ipynb.icloud b/private_files/scripts/.test_disruptions.ipynb.icloud deleted file mode 100644 index e46681843e329f4832bc893cf24a595a72423dc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmYc)$jK}&F)+By$i&RT$`<1n92(@~mzbOComv?$AOPmNW#*&?XI4RkB;Z0psm1xF zMaiill?4zfv69r{lK7O&;-b=mlFavm(ll1 SPGbNAMn(wDzz(HhR4V`w#W7+4 diff --git a/private_files/scripts/build_instance_json.py b/private_files/scripts/build_instance_json.py deleted file mode 100644 index 9acb8bc..0000000 --- a/private_files/scripts/build_instance_json.py +++ /dev/null @@ -1,977 +0,0 @@ -import sys -import copy - -sys.path.append('/Users/larry/Documents/GitHub/stockpyl') -#sys.path.append('/Users/larry/Documents/GitHub/stockpyl') -# print(sys.path) - -#from ...stockpyl.instances import * - -# import os - -# print(os.getcwd()) - -from stockpyl.instances import * - - -def get_named_instance(instance_name): - """Return the named instance specified by ``instance_name``. Return - variables depend on the instance. - - Parameters - ---------- - instance_name : str - The instance name. See method code for allowable strings. - - """ - - # CHAPTER 3 - if instance_name == "example_3_1": - # Example 3.1. - fixed_cost = 8 - holding_cost = 0.75 * 0.3 - demand_rate = 1300 - return fixed_cost, holding_cost, demand_rate - elif instance_name == "problem_3_1": - # Problem 3.1. - fixed_cost = 2250 - holding_cost = 275 - demand_rate = 500 * 365 - return fixed_cost, holding_cost, demand_rate - elif instance_name == "example_3_8": - # Example 3.8. - fixed_cost = 8 - holding_cost = 0.75 * 0.3 - stockout_cost = 5 - demand_rate = 1300 - return fixed_cost, holding_cost, stockout_cost, demand_rate - elif instance_name == "problem_3_2b": - # Problem 3.2(b). - fixed_cost = 40 - holding_cost = (165 * 0.17 + 12) - stockout_cost = 60 - demand_rate = 40 * 52 - return fixed_cost, holding_cost, stockout_cost, demand_rate - elif instance_name == "problem_3_22": - # Problem 3.22. - fixed_cost = 4 - holding_cost = 0.08 - demand_rate = 80 - production_rate = 110 - return fixed_cost, holding_cost, demand_rate, production_rate - elif instance_name == "example_3_9": - # Example 3.9 (Wagner-Whitin). - num_periods = 4 - holding_cost = 2 - fixed_cost = 500 - demand = [90, 120, 80, 70] - return num_periods, holding_cost, fixed_cost, demand - elif instance_name == "problem_3_27": - # Problem 3.27. - num_periods = 4 - holding_cost = 0.8 - fixed_cost = 120 - demand = [150, 100, 80, 200] - return num_periods, holding_cost, fixed_cost, demand - elif instance_name == "problem_3_29": - # Problem 3.29. - num_periods = 5 - holding_cost = 0.1 - fixed_cost = 100 - demand = [730, 580, 445, 650, 880] - return num_periods, holding_cost, fixed_cost, demand - elif instance_name == "ww_hw_c": - # SCMO HW problem for WW with nonstationary purchase cost. - num_periods = 5 - holding_cost = 0.1 - fixed_cost = 100 - demand = [400, 500, 500, 1100, 900] - purchase_cost = [3, 1, 4, 6, 6] - return num_periods, holding_cost, fixed_cost, demand, purchase_cost - elif instance_name == "jrp_ex": - # JRP example in SCMO. - shared_fixed_cost = 600 - individual_fixed_costs = [120, 840, 300] - holding_costs = [160, 20, 50] - demand_rates = [1, 1, 1] - return shared_fixed_cost, individual_fixed_costs, holding_costs, demand_rates - elif instance_name == "jrp_hw_1": - # JRP HW 1 (paper) - shared_fixed_cost = 20000 - individual_fixed_costs = [36000, 46000, 34000, 38000] - holding_costs = [1000, 900, 1200, 1000] - demand_rates = [1780, 445, 920, 175] - return shared_fixed_cost, individual_fixed_costs, holding_costs, demand_rates - elif instance_name == "jrp_hw_2": - # JRP HW 2 (construction) - shared_fixed_cost = 1500 - individual_fixed_costs = [4000, 1000, 2000] - holding_costs = [300, 200, 200] - demand_rates_week = [175, 1600, 400] - demand_rates = (52 * np.array(demand_rates_week)).tolist() - return shared_fixed_cost, individual_fixed_costs, holding_costs, demand_rates - elif instance_name == "jrp_hw_3": - # JRP HW 3 (books) - shared_fixed_cost = 180 - individual_fixed_costs = [60, 100, 180, 115, 135] - purchase_costs = [19, 14, 17, 14, 12] - holding_costs = (0.28 * np.array(purchase_costs)).tolist() - demand_rates = [6200, 1300, 400, 4400, 1800] - return shared_fixed_cost, individual_fixed_costs, holding_costs, demand_rates - elif instance_name == "jrp_silver": - # Numerical example in Silver (1976). - shared_fixed_cost = 10 - individual_fixed_costs = [1.87, 5.27, 7.94, 8.19, 8.87] - holding_costs = [0.2] * 5 - demand_rates = [1736, 656, 558, 170, 142] - return shared_fixed_cost, individual_fixed_costs, holding_costs, demand_rates - elif instance_name == "jrp_spp": - # Example on p. 428 of Silver, Pyke, and Peterson (1998). - shared_fixed_cost = 40 - individual_fixed_costs = [15, 15, 15, 15] - holding_costs = [0.24] * 4 - demand_rates = [86000, 12500, 1400, 3000] - return shared_fixed_cost, individual_fixed_costs, holding_costs, demand_rates - - - - # CHAPTER 4 - if instance_name == "example_4_1_network": - # Example 4.1 (newsvendor), as SupplyChainNetwork object. - example_4_1_network = serial_system( - num_nodes=1, - local_holding_cost=[0.18], - stockout_cost=[0.70], - demand_type='N', - mean=50, - standard_deviation=8, - shipment_lead_time=[1], - policy_type='BS', - base_stock_level=[56.6] - ) - return example_4_1_network - elif instance_name == "example_4_1": - # Example 4.1 (newsvendor). - holding_cost = 0.18 - stockout_cost = 0.7 - demand_mean = 50 - demand_sd = 8 - return holding_cost, stockout_cost, demand_mean, demand_sd - elif instance_name == "example_4_2": - # Example 4.2 (newsvendor explicit). - selling_revenue = 1 - purchase_cost = 0.3 - salvage_value = 0.12 - demand_mean = 50 - demand_sd = 8 - return selling_revenue, purchase_cost, salvage_value, demand_mean, demand_sd - elif instance_name == "example_4_2_network": - # Example 4.2 (newsvendor explicit), as SupplyChainNetwork object. - example_4_2_network = serial_system( - num_nodes=1, - local_holding_cost=[0.18], - stockout_cost=[0.70], - demand_type='N', - mean=50, - standard_deviation=8, - shipment_lead_time=[1], - policy_type='BS', - base_stock_level=[56.6]) - return example_4_2_network - elif instance_name == "example_4_3": - # Example 4.3 (= Example 4.1). - return get_named_instance("example_4_1") - elif instance_name == "problem_4_1": - # Problem 4.1. - holding_cost = 65-22 - stockout_cost = 129-65+15 - demand_mean = 900 - demand_sd = 60 - return holding_cost, stockout_cost, demand_mean, demand_sd - elif instance_name == "problem_4_3b": - # Problem 4.3(b) (newsvendor explicit -- In-Flight Meals). - selling_revenue = 7 - purchase_cost = 2.5 - salvage_value = 1.5 - demand_mean = 50 - demand_sd = 10 - return selling_revenue, purchase_cost, salvage_value, demand_mean, demand_sd - elif instance_name == "example_4_4": - # Example 4.4. - holding_cost = 0.18 - stockout_cost = 0.7 - demand_mean = 50 - demand_sd = 8 - lead_time = 4 - return holding_cost, stockout_cost, demand_mean, demand_sd, lead_time - elif instance_name == "example_4_7": - # Example 4.7 (Poisson). - holding_cost = 1 - stockout_cost = 4 - demand_mean = 6 - fixed_cost = 5 - return holding_cost, stockout_cost, fixed_cost, demand_mean - elif instance_name == "problem_4_8a": - # Problem 4.8(a). - holding_cost = 200 - stockout_cost = 270 - demand_mean = 18 - return holding_cost, stockout_cost, demand_mean - elif instance_name == "problem_4_7b": - # Problem 4.7(b). - holding_cost = 500000 - stockout_cost = 1000000 - demand_pmf = {1: 0.25, 2: 0.05, 3: 0.1, 4: 0.2, 5: 0.15, 6: 0.10, 7: 0.10, 8: 0.05} - return holding_cost, stockout_cost, demand_pmf - elif instance_name == "problem_4_8b": - # Problem 4.8(b) -- lognormal newsvendor. - holding_cost = 1 - stockout_cost = 0.1765 - mu = 6 - sigma = 0.3 - return holding_cost, stockout_cost, mu, sigma - elif instance_name == "problem_4_31": - # Problem 4.31. - holding_cost = 40 - stockout_cost = 125 - fixed_cost = 150 - demand_mean = 4 - return holding_cost, stockout_cost, fixed_cost, demand_mean - elif instance_name == "example_4_8": - # Example 4.8 (= Example 4.4 + K = 2.5). - holding_cost, stockout_cost, demand_mean, demand_sd, _ = \ - get_named_instance("example_4_4") - fixed_cost = 2.5 - return holding_cost, stockout_cost, fixed_cost, demand_mean, demand_sd - elif instance_name == "problem_4_32": - # Problem 4.32. - holding_cost = 2 - stockout_cost = 36 - fixed_cost = 60 - demand_mean = 190 - demand_sd = 48 - return holding_cost, stockout_cost, fixed_cost, demand_mean, demand_sd - elif instance_name == "problem_4_29": - # Problem 4.29. - num_periods = 10 - holding_cost = 1 - stockout_cost = 25 - terminal_holding_cost = holding_cost - terminal_stockout_cost = stockout_cost - purchase_cost = 1 - fixed_cost = 0 - demand_mean = 18 - demand_sd = 3 - discount_factor = 0.98 - initial_inventory_level = 0 - return num_periods, holding_cost, stockout_cost, terminal_holding_cost, \ - terminal_stockout_cost, purchase_cost, fixed_cost, demand_mean, \ - demand_sd, discount_factor, initial_inventory_level - elif instance_name == "problem_4_30": - # Problem 4.30 (= Problem 4.29 + fixed_cost = 40). - num_periods, holding_cost, stockout_cost, terminal_holding_cost, \ - terminal_stockout_cost, purchase_cost, _, demand_mean, \ - demand_sd, discount_factor, initial_inventory_level = \ - get_named_instance("problem_4_29") - fixed_cost = 40 - return num_periods, holding_cost, stockout_cost, terminal_holding_cost, \ - terminal_stockout_cost, purchase_cost, fixed_cost, demand_mean, \ - demand_sd, discount_factor, initial_inventory_level - - # CHAPTER 5 - if instance_name == "example_5_1": - # Example 5.1 (plus 5.2-5.6). - holding_cost = 0.225 - stockout_cost = 7.5 - fixed_cost = 8 - demand_mean = 1300 - demand_sd = 150 - lead_time = 1/12 - return holding_cost, stockout_cost, fixed_cost, demand_mean, demand_sd, lead_time - elif instance_name == "problem_5_1": - # Problem 5.1. - holding_cost = 3.1 - stockout_cost = 45 - fixed_cost = 50 - demand_mean = 800 - demand_sd = 40 - lead_time = 4/365 - return holding_cost, stockout_cost, fixed_cost, demand_mean, demand_sd, lead_time - elif instance_name == "problem_5_3": - # Problem 5.3. - holding_cost = 1.5 / 7 - stockout_cost = 40 - fixed_cost = 85 - demand_mean = 192 - demand_sd = 17.4 - lead_time = 3 - return holding_cost, stockout_cost, fixed_cost, demand_mean, demand_sd, lead_time - elif instance_name == "example_5_8": - # Example 5.8 (Poisson). - holding_cost = 20 - stockout_cost = 150 - fixed_cost = 100 - demand_mean = 1.5 - lead_time = 2 - return holding_cost, stockout_cost, fixed_cost, demand_mean, lead_time - elif instance_name == "problem_5_2": - # Problem 5.2. - holding_cost = 4 - stockout_cost = 28 - fixed_cost = 4 - demand_mean = 12 - lead_time = 0.5 - return holding_cost, stockout_cost, fixed_cost, demand_mean, lead_time - - # CHAPTER 6 - if instance_name == "example_6_1": - # Example 6.1. - example_6_1_network = serial_system( - num_nodes=3, - node_order_in_system=[3, 2, 1], - echelon_holding_cost={1: 3, 2: 2, 3: 2}, - local_holding_cost={1: 7, 2: 4, 3: 2}, - shipment_lead_time={1: 1, 2: 1, 3: 2}, - stockout_cost={1: 37.12, 2: 0, 3: 0}, - demand_type='N', - mean=5, - standard_deviation=1, - policy_type='BS', - base_stock_level={1: 6.49, 2: 5.53, 3: 10.69} - ) - return example_6_1_network - elif instance_name == "problem_6_1": - # Problem 6.1. - problem_6_1_network = serial_system( - num_nodes=2, - node_order_in_system=[2, 1], - node_order_in_lists=[1, 2], - local_holding_cost=[2, 1], - echelon_holding_cost=[1, 1], - stockout_cost=[15, 0], - demand_type='N', - mean=100, - standard_deviation=15, - shipment_lead_time=[1, 1], - policy_type='BS', - base_stock_level=[100, 94] - ) - return problem_6_1_network - elif instance_name == "problem_6_2a": - # Problem 6.2a. - problem_6_2a_network = serial_system( - num_nodes=5, - node_order_in_system=[5, 4, 3, 2, 1], - node_order_in_lists=[1, 2, 3, 4, 5], - local_holding_cost=[1, 2, 3, 5, 7], - echelon_holding_cost=[2, 2, 1, 1, 1], - stockout_cost=[24, 0, 0, 0, 0], - demand_type='N', - mean=64, - standard_deviation=8, - shipment_lead_time=[0.5, 0.5, 0.5, 0.5, 0.5], - policy_type='BS', - base_stock_level=[40.59, 33.87, 35.14, 33.30, 32.93] - ) - return problem_6_2a_network - elif instance_name == "problem_6_2a_adj": - # Problem 6.2a, adjusted for periodic review. - # (Since L=0.5 in that problem, here we treat each period as - # having length 0.5 in the original problem.) - problem_6_2a_network_adj = serial_system( - num_nodes=5, - node_order_in_system=[5, 4, 3, 2, 1], - node_order_in_lists=[1, 2, 3, 4, 5], - local_holding_cost=list(np.array([1, 2, 3, 5, 7]) / 2), - stockout_cost=list(np.array([24, 0, 0, 0, 0]) / 2), - demand_type='N', - mean=64 / 2, - standard_deviation=8 / np.sqrt(2), - shipment_lead_time=[1, 1, 1, 1, 1], - policy_type='BS', - base_stock_level=[40.59, 33.87, 35.14, 33.30, 32.93] - ) - return problem_6_2a_network_adj - elif instance_name == "problem_6_2b_adj": - # Problem 6.2b, adjusted for periodic review. - # (Since L=0.5 in that problem, here we treat each period as - # having length 0.5 in the original problem.) - problem_6_2a_network_adj = get_named_instance('problem_6_2a_adj') - problem_6_2b_network_adjusted = copy.deepcopy(problem_6_2a_network_adj) - # TODO: build this instance - -need to add Poisson demand capability - return problem_6_2b_network_adjusted - elif instance_name == "problem_6_16": - # Problem 6.16. - problem_6_16_network = serial_system( - num_nodes=2, - node_order_in_system=[2, 1], - node_order_in_lists=[1, 2], - local_holding_cost=[7, 2], - stockout_cost=[24, 0], - demand_type='N', - mean=20, - standard_deviation=4, - shipment_lead_time=[8, 3], - policy_type='BS', - base_stock_level=[171.1912, 57.7257], - initial_inventory_level=20, - initial_orders=20, - initial_shipments=20 - ) - return problem_6_16_network - - # CHAPTER 9 - if instance_name == "example_9_1": - # Example 9.1. - holding_cost = 0.225 - stockout_cost = 5 - fixed_cost = 8 - demand_rate = 1300 - disruption_rate = 1.5 - recovery_rate = 14 - return holding_cost, stockout_cost, fixed_cost, demand_rate, disruption_rate, recovery_rate - elif instance_name == "problem_9_8": - # Problem 9.8. - holding_cost = 4 - stockout_cost = 22 - fixed_cost = 35 - demand_rate = 30 - disruption_rate = 1 - recovery_rate = 12 - return holding_cost, stockout_cost, fixed_cost, demand_rate, disruption_rate, recovery_rate - elif instance_name == "example_9_3": - # Example 9.3. - holding_cost = 0.25 - stockout_cost = 3 - disruption_prob = 0.04 - recovery_prob = 0.25 - demand = 2000 - return holding_cost, stockout_cost, demand, disruption_prob, recovery_prob - elif instance_name == "example_9_4": - # Example 9.4. - fixed_cost = 18500 - holding_cost = 0.06 - demand_rate = 75000 - yield_mean = -15000 - yield_sd = 9000 - return fixed_cost, holding_cost, demand_rate, yield_mean, yield_sd - elif instance_name == "problem_9_4a": - # Problem 9.4a. - fixed_cost, holding_cost, demand_rate = get_named_instance("problem_3_1") - yield_mean = -1/0.02 - yield_sd = 0.02 - return fixed_cost, holding_cost, demand_rate, yield_mean, yield_sd - elif instance_name == "problem_9_4b": - # Problem 9.4b. - fixed_cost, holding_cost, demand_rate = get_named_instance("problem_3_1") - yield_mean = 0.9 - yield_sd = 0.2 / np.sqrt(12) - return fixed_cost, holding_cost, demand_rate, yield_mean, yield_sd - elif instance_name == "example_9_5": - # Example 9.5. - fixed_cost = 18500 - holding_cost = 0.06 - demand_rate = 75000 - yield_mean = 5.0/6 - yield_sd = np.sqrt(5.0/(36*7)) - return fixed_cost, holding_cost, demand_rate, yield_mean, yield_sd - elif instance_name == "example_9_6": - # Example 9.6. - holding_cost = 15000000 - stockout_cost = 75000000 - demand = 1.5 - yield_lo = -0.5 - yield_hi = 0.5 - return holding_cost, stockout_cost, demand, yield_lo, yield_hi - elif instance_name == "problem_9_5": - # Problem 9.5. - holding_cost = 150 - stockout_cost = 1200 - demand = 25 - yield_lo = -5 - yield_hi = 0 - return holding_cost, stockout_cost, demand, yield_lo, yield_hi - - # INSTANCES NOT FROM TEXTBOOK - if instance_name == "assembly_3_stage": - assembly_3_stage_network = mwor_system( - num_warehouses=2, - local_holding_cost=[2, 1, 1], - stockout_cost=[20, 0, 0], - demand_type='N', - demand_mean=5, - demand_standard_deviation=1, - shipment_lead_time=[1, 2, 2], - inventory_policy_type='BS', - base_stock_levels=[7, 13, 11], - initial_IL=[7, 13, 11], - downstream_0=True - ) - assembly_3_stage_network.nodes[0].demand_source.round_to_int = True - return assembly_3_stage_network - elif instance_name == "assembly_3_stage_2": - assembly_3_stage_2_network = network_from_edges( - edges=[(1, 3), (2, 3)], - local_holding_cost={1: 1, 2: 1, 3: 2}, - stockout_cost={1: 0, 2: 0, 3: 20}, - demand_type={1: None, 2: None, 3: 'N'}, - demand_mean=20, - demand_standard_deviation=5, - shipment_lead_time={1: 2, 2: 2, 3: 1}, - inventory_policy_type='BS', - base_stock_levels={1: 44, 2: 52, 3: 28}, - initial_IL={1: 44, 2: 52, 3: 28} - ) - # assembly_3_stage_2_network = mwor_system( - # num_warehouses=2, - # local_holding_cost=[2, 1, 1], - # stockout_cost=[20, 0, 0], - # type='D', - # mean=20, - # standard_deviation=5, - # shipment_lead_time=[1, 2, 2], - # inventory_policy_type='BS', - # base_stock_levels=[28, 52, 44], - # initial_IL=[28, 52, 44], - # downstream_0=True) - assembly_3_stage_2_network.get_node_from_index(3).demand_source.round_to_int = True - return assembly_3_stage_2_network - elif instance_name == "rosling_figure_1": - # Figure 1 from Rosling (1989). - # Note: Other than the structure and lead times, none of the remaining parameters are from Rosling's paper. - rosling_figure_1_network = SupplyChainNetwork() - nodes = {i: SupplyChainNode(index=i) for i in range(1, 8)} - # Inventory policies. - for n in nodes.values(): - n.inventory_policy.type = 'BEBS' - n.inventory_policy.base_stock_level = None - # Node 1. - nodes[1].shipment_lead_time = 1 - demand_source = DemandSource() # TODO: create this in the constructor (like policy) - demand_source.type = 'UD' - demand_source.lo = 0 - demand_source.hi = 10 - nodes[1].demand_source = demand_source - nodes[1].supply_type = None - nodes[1].inventory_policy.base_stock_level = 8 - nodes[1].initial_inventory_level = 8 - rosling_figure_1_network.add_node(nodes[1]) - # Node 2. - nodes[2].shipment_lead_time = 1 - nodes[2].supply_type = None - nodes[2].inventory_policy.base_stock_level = 24 - nodes[2].initial_inventory_level = 8 - rosling_figure_1_network.add_predecessor(nodes[1], nodes[2]) - # Node 3. - nodes[3].shipment_lead_time = 3 - nodes[3].supply_type = None - nodes[3].inventory_policy.base_stock_level = 40 - nodes[3].initial_inventory_level = 24 - rosling_figure_1_network.add_predecessor(nodes[1], nodes[3]) - # Node 4. - nodes[4].shipment_lead_time = 2 - nodes[4].supply_type = None - nodes[4].inventory_policy.base_stock_level = 76 - nodes[4].initial_inventory_level = 16 - rosling_figure_1_network.add_predecessor(nodes[3], nodes[4]) - # Node 5. - nodes[5].shipment_lead_time = 4 - nodes[5].inventory_policy.base_stock_level = 62 - nodes[5].initial_inventory_level = 32 - nodes[5].supply_type = 'U' - rosling_figure_1_network.add_predecessor(nodes[2], nodes[5]) - # Node 6. - nodes[6].shipment_lead_time = 1 - nodes[6].supply_type = 'U' - nodes[6].inventory_policy.base_stock_level = 84 - nodes[6].initial_inventory_level = 8 - rosling_figure_1_network.add_predecessor(nodes[4], nodes[6]) - # Node 7. - nodes[7].shipment_lead_time = 2 - nodes[7].supply_type = 'U' - nodes[7].inventory_policy.base_stock_level = 92 - nodes[7].initial_inventory_level = 16 - rosling_figure_1_network.add_predecessor(nodes[4], nodes[7]) - return rosling_figure_1_network - elif instance_name == "kangye_4_stage": - kangye_4_stage = mwor_system( - num_warehouses=3, - demand_type='N', - demand_mean=20, - demand_standard_deviation=4, - shipment_lead_time=[1, 1, 2, 3], - inventory_policy_type='BEBS', - base_stock_levels=[30, 50, 70, 90], - downstream_0=True - ) - return kangye_4_stage - elif instance_name == "kangye_3_stage_serial": - kangye_3_stage_serial = serial_system( - num_nodes=3, - node_order_in_system=[1, 2, 3], - local_holding_cost=[1, 5, 10], - stockout_cost=[0, 0, 100], - demand_type='N', - demand_mean=5, - demand_standard_deviation=np.sqrt(5), - shipment_lead_time=[1, 1, 1], - inventory_policy_type='BS', - base_stock_levels=[7, 7, 7], - initial_IL=[7, 7, 7], - downstream_0=False - ) - for i in range(2): - kangye_3_stage_serial.get_node_from_index(i).in_transit_holding_cost = 0 - kangye_3_stage_serial.get_node_from_index(2).demand_source.round_to_int = True - return kangye_3_stage_serial - elif instance_name == "michelle_sean_3_stage": - michelle_sean_3_stage = mwor_system( - num_warehouses=2, - demand_type='N', - demand_mean=50, - demand_standard_deviation=10, - local_holding_cost=[10, 10, 10], - stockout_cost=[10, 10, 10], - shipment_lead_time=[1, 1, 1], - inventory_policy_type='BS', - base_stock_levels=[60, 50, 60], - downstream_0=True, - initial_IL=[60, 50, 60] - ) - return michelle_sean_3_stage - elif instance_name == "rong_atan_snyder_figure_1a": - # Uses normal demand instead of Poisson. - rong_atan_snyder_figure_1a = network_from_edges( - edges=[(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), (2, 6)], - demand_type={0: None, 1: None, 2: None, 3: 'N', 4: 'N', 5: 'N', 6: 'N'}, - demand_mean=8, - demand_standard_deviation=np.sqrt(8), - local_holding_cost={0: 1/3, 1: 2/3, 2: 2/3, 3: 1, 4: 1, 5: 1, 6: 1}, - stockout_cost=20, - shipment_lead_time=1, - inventory_policy_type='BS', - base_stock_levels={i: 0 for i in range(0, 7)} - ) - return rong_atan_snyder_figure_1a - elif instance_name == "rong_atan_snyder_figure_1b": - # Uses normal demand instead of Poisson. - # TODO: add costs and lead times - demand_type = {i: 'N' if i >= 3 else None for i in range(11)} - rong_atan_snyder_figure_1b = network_from_edges( - edges=[(0, 1), (0, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (2, 8), (2, 9), (2, 10)], - demand_type=demand_type, - demand_mean=8, - demand_standard_deviation=np.sqrt(8), - inventory_policy_type='BS', - base_stock_levels={i: 0 for i in range(0, 11)} - ) - return rong_atan_snyder_figure_1b - elif instance_name == "rong_atan_snyder_figure_1c": - # Uses normal demand instead of Poisson. - # TODO: add costs and lead times - rong_atan_snyder_figure_1c = network_from_edges( - edges=[(0, 1), (0, 2), (2, 3), (2, 4), (2, 5)], - demand_type={0: None, 1: 'N', 2: None, 3: 'N', 4: 'N', 5: 'N'}, - demand_mean=8, - demand_standard_deviation=np.sqrt(8), - inventory_policy_type='BS', - base_stock_levels={i: 0 for i in range(0, 6)} - ) - return rong_atan_snyder_figure_1c - - -# CHAPTER 3 - -# save_instance("example_3_1", {"fixed_cost": 8, "holding_cost": 0.75 * 0.3, "demand_rate": 1300}, "Example 3.1") -# save_instance("problem_3_1", {"fixed_cost": 2250, "holding_cost": 275, "demand_rate": 500 * 365}, "Problem 3.1") -# save_instance("example_3_8", {"fixed_cost": 8, "holding_cost": 0.75 * 0.3, "stockout_cost": 5, "demand_rate": 1300}, "Example 3.8") -# save_instance("problem_3_2b", {"fixed_cost": 40, "holding_cost": (165 * 0.17 + 12), "stockout_cost": 60, "demand_rate": 40 * 52}, "Problem 3.2(b)") -# save_instance("problem_3_22", {"fixed_cost": 4, "holding_cost": 0.08, "demand_rate": 80, "production_rate": 110}, "Problem 3.22") -# save_instance("example_3_9", {"num_periods": 4, "holding_cost": 2, "fixed_cost": 500, "demand": [90, 120, 80, 70]}, "Example 3.9") - -# N, h, K, d = get_named_instance("problem_3_29") -# save_instance("problem_3_29", {"num_periods": N, "holding_cost": h, "fixed_cost": K, "demand": d}, "Problem 3.29 (Wagner-Whitin)") - -# N, h, K, d, c = get_named_instance("ww_hw_c") -# save_instance("scmo_ww_hw_c", {"num_periods": N, "holding_cost": h, "fixed_cost": K, "demand": d, "purchase_cost": c}, "(SCMO, Wagner-Whitin with nonstationary purchase cost)") - -# K, k, h, d = get_named_instance("jrp_hw_3") -# save_instance("scmo_jrp_hw_3", {"shared_fixed_cost": K, "individual_fixed_costs": k, "holding_costs": h, "demand_rates": d}, "SCMO (JRP problem 3)") - -# CHAPTER 4 - -# h, p, mu, sigma = get_named_instance("example_4_1") -# save_instance("example_4_1", {"holding_cost": h, "stockout_cost": p, "demand_mean": mu, "demand_sd": sigma}, "Example 4.1 (newsvendor)") - -# network = get_named_instance("example_4_1_network") -# save_instance("example_4_1_network", network, "Example 4.1 (newsvendor) (as ``SupplyChainNetwork``)") - -# r, c, v, mu, sigma = get_named_instance("example_4_2") -# save_instance("example_4_2", {"selling_revenue": r, "purchase_cost": c, "salvage_value": v, "demand_mean": mu, "demand_sd": sigma}, "Example 4.2 (newsvendor explicit)") - -# network = get_named_instance("example_4_2_network") -# save_instance("example_4_2_network", network, "Example 4.2 (newsvendor explicit) (as ``SupplyChainNetwork``)") - -# h, p, mu, sigma = get_named_instance("example_4_3") -# save_instance("example_4_3", {"holding_cost": h, "stockout_cost": p, "demand_mean": mu, "demand_sd": sigma}, "Example 4.3 (newsvendor) (= Example 4.1)") - -# h, p, mu, sigma = get_named_instance("problem_4_1") -# save_instance("problem_4_1", {"holding_cost": h, "stockout_cost": p, "demand_mean": mu, "demand_sd": sigma}, "Problem 4.1 (newsvendor)") - -# r, c, v, mu, sigma = get_named_instance("problem_4_3b") -# save_instance("problem_4_3b", {"selling_revenue": r, "purchase_cost": c, "salvage_value": v, "demand_mean": mu, "demand_sd": sigma}, "Problem 4.3(b) (newsvendor explicit)") - -# h, p, mu, sigma, L = get_named_instance("example_4_4") -# save_instance("example_4_4", {"holding_cost": h, "stockout_cost": p, "demand_mean": mu, "demand_sd": sigma, "lead_time": L}, "Example 4.4 (base-stock optimization)") - -# h, p, K, mu = get_named_instance("example_4_7") -# save_instance("example_4_7", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_mean": mu}, "Example 4.7 ((s,S) with Poisson demand)") - -#h, p, pmf = get_named_instance("problem_4_7b") -#save_instance("problem_4_7b", {"holding_cost": h, "stockout_cost": p, "demand_pmf": pmf}, "Problem 4.7(b) (newsvendor with discrete demand)") - -# h, p, mu = get_named_instance("problem_4_8a") -# save_instance("problem_4_8a", {"holding_cost": h, "stockout_cost": p, "demand_mean": mu}, "Problem 4.8(a) (newsvendor with Poisson demand)") - -# h, p, mu, sigma = get_named_instance("problem_4_8b") -# save_instance("problem_4_8b", {"holding_cost": h, "stockout_cost": p, "mu": mu, "sigma": sigma}, "Problem 4.8(b) (newsvendor with lognormal demand)") - -# h, p, K, mu = get_named_instance("problem_4_31") -# save_instance("problem_4_31", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_mean": mu}, "Problem 4.31 ((s,S) with Poisson demand)") - -# h, p, K, mu, sigma = get_named_instance("example_4_8") -# save_instance("example_4_8", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_mean": mu, "demand_sd": sigma}, "Example 4.8 ((s,S))") - -# h, p, K, mu, sigma = get_named_instance("problem_4_32") -# save_instance("problem_4_32", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_mean": mu, "demand_sd": sigma}, "Problem 4.32 ((s,S))") - -# N, h, p, hT, pT, c, K, mu, sigma, gamma, iIL = get_named_instance("problem_4_29") -# save_instance("problem_4_29", {"num_periods": N, "holding_cost": h, "stockout_cost": p, "terminal_holding_cost": hT, "terminal_stockout_cost": pT, "purchase_cost": c, "fixed_cost": K, "demand_mean": mu, "demand_sd": sigma, "discount_factor": gamma, "initial_inventory_level": iIL}, "Problem 4.29 (finite-horizon)") - -# N, h, p, hT, pT, c, K, mu, sigma, gamma, iIL = get_named_instance("problem_4_30") -# save_instance("problem_4_30", {"num_periods": N, "holding_cost": h, "stockout_cost": p, "terminal_holding_cost": hT, "terminal_stockout_cost": pT, "purchase_cost": c, "fixed_cost": K, "demand_mean": mu, "demand_sd": sigma, "discount_factor": gamma, "initial_inventory_level": iIL}, "Problem 4.30 (finite-horizon)") - -# CHAPTER 5 - -# h, p, K, mu, sigma, L = get_named_instance("example_5_1") -# save_instance("example_5_1", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_mean": mu, "demand_sd": sigma, "lead_time": L}, "Example 5.1 ((r,Q))") - -# h, p, K, mu, sigma, L = get_named_instance("problem_5_1") -# save_instance("problem_5_1", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_mean": mu, "demand_sd": sigma, "lead_time": L}, "Problem 5.1 ((r,Q))") - -# h, p, K, mu, L = get_named_instance("problem_5_2") -# save_instance("problem_5_2", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_mean": mu, "lead_time": L}, "Problem 5.2 ((r,Q) with Poisson demand)") - -# h, p, K, mu, sigma, L = get_named_instance("problem_5_3") -# save_instance("problem_5_3", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_mean": mu, "demand_sd": sigma, "lead_time": L}, "Problem 5.3 ((r,Q))") - -# h, p, K, mu, L = get_named_instance("example_5_8") -# save_instance("example_5_8", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_mean": mu, "lead_time": L}, "Example 5.8 ((r,Q) with Poisson demand)") - -# CHAPTER 6 - -# network = get_named_instance("example_6_1") -# save_instance("example_6_1", network, "Example 6.1 (serial SSM)") - -# network = get_named_instance("problem_6_1") -# save_instance("problem_6_1", network, "Problem 6.1 (serial SSM)") - -# network = get_named_instance("problem_6_2a") -# save_instance("problem_6_2a", network, "Problem 6.2(a) (serial SSM)") - -# network = get_named_instance("problem_6_2a_adj") -# save_instance("problem_6_2a_adj", network, "Problem 6.2(a) (serial SSM), adjusted for periodic review (since L=0.5 in that problem, here we treat each period as having length 0.5 in the original problem.)") - -# network = get_named_instance("problem_6_2b_adj") -# save_instance("problem_6_2b_adj", network, "Problem 6.2(b) (serial SSM), adjusted for periodic review (since L=0.5 in that problem, here we treat each period as having length 0.5 in the original problem.)") - -# network = get_named_instance("problem_6_16") -# save_instance("problem_6_16", network, "Problem 6.16 (serial SSM)") - -# network = network_from_edges( -# [(3, 2), (2, 1)], node_indices=[1, 2, 3], -# processing_times=[1, 0, 1], -# external_inbound_csts=[None, None, 1], -# local_holding_cost=[7, 4, 2], -# demand_bound_constants=1, -# external_outbound_csts=[1, None, None], -# demand_type=['N', None, None], -# demand_mean=0, -# demand_standard_deviation=[1, 0, 0] -# ) -#save_instance("example_6_3", network, 'Example 6.3 (serial GSM)') - -# network = network_from_edges( -# [(3, 2), (2, 1)], node_indices=[1, 2, 3], -# processing_times=[2, 1, 1], -# external_inbound_csts=[None, None, 1], -# local_holding_cost=[4, 3, 2], -# demand_bound_constants=4, -# external_outbound_csts=[0, None, None], -# demand_type=['N', None, None], -# demand_mean=[45, 0, 0], -# demand_standard_deviation=[10, 0, 0] -# ) -# network.get_node_from_index(1).name = 'Glazing' -# network.get_node_from_index(2).name = 'Firing' -# network.get_node_from_index(3).name = 'Forming' -# save_instance("problem_6_7", network, 'Problem 6.7 (serial GSM)') - -# network = network_from_edges( -# [(n+1, n) for n in range(1, 10)], -# node_indices=list(range(1, 11)), -# processing_times=[5, 10, 2, 15, 8, 5, 9, 5, 1, 5], -# external_inbound_csts=[None] * 9 + [7], -# local_holding_cost=[5.73, 4.56, 3.04, 2.93, 2.47, 2.37, 1.15, 1.1, 0.98, 0.87], -# demand_bound_constants=stats.norm.ppf(0.98), -# external_outbound_csts=[3] + [None] * 9, -# demand_type=['N'] + [None] * 9, -# demand_mean=0, -# demand_standard_deviation=[15.8] + [None] * 9 -# ) -# save_instance("problem_6_8", network, 'Problem 6.8 (serial GSM)') - -# network = network_from_edges( -# [(1, 3), (3, 2), (3, 4)], node_indices=[1, 2, 3, 4], -# processing_times=[2, 1, 1, 1], -# external_inbound_csts=[1, None, None, None], -# local_holding_cost=[1, 3, 2, 3], -# demand_bound_constants=[1, 1, 1, 1], -# external_outbound_csts=[None, 0, None, 1], -# demand_type=[None, 'N', None, 'N'], -# demand_mean=0, -# demand_standard_deviation=[None, 1, None, 1] -# ) -# save_instance("example_6_5", network, 'Example 6.5 (tree GSM)') - -# network = SupplyChainNetwork() -# network.add_node(SupplyChainNode(1, 'Raw_Material', network, processing_time=2, local_holding_cost=0.01)) -# network.add_node(SupplyChainNode(2, 'Process_Wafers', network, processing_time=3, local_holding_cost=0.03)) -# network.add_node(SupplyChainNode(3, 'Package_Test_Wafers', network, processing_time=2, local_holding_cost=0.04)) -# network.add_node(SupplyChainNode(4, 'Imager_Base', network, processing_time=4, local_holding_cost=0.06)) -# network.add_node(SupplyChainNode(5, 'Imager_Assembly', network, processing_time=2, local_holding_cost=0.12)) -# network.add_node(SupplyChainNode(6, 'Ship_to_Final_Assembly', network, processing_time=3, local_holding_cost=0.13)) -# network.add_node(SupplyChainNode(7, 'Camera', network, processing_time=6, local_holding_cost=0.20)) -# network.add_node(SupplyChainNode(8, 'Circuit_Board', network, processing_time=4, local_holding_cost=0.08)) -# network.add_node(SupplyChainNode(9, 'Other_Parts', network, processing_time=3, local_holding_cost=0.04)) -# network.add_node(SupplyChainNode(10, 'Build_Test_Pack', network, processing_time=2, local_holding_cost=0.50, \ -# external_outbound_cst=2, demand_source=DemandSource(type='N', mean=0, standard_deviation=10), -# demand_bound_constant=stats.norm.ppf(0.95))) -# network.add_edges_from_list([(1, 2), (2, 3), (3, 5), (4, 5), (5, 6), (7, 10), (6, 10), (8, 10), (9, 10)]) -# save_instance("figure_6_14", network, 'Figure 6.14 (tree GSM)') - -# network = network_from_edges([(1, 2), (1, 3), (3, 5), (4, 5), (5, 6), (5, 7)]) -# save_instance("figure_6_12", network, 'Figure 6.12 (tree GSM') - -# network = SupplyChainNetwork() -# network.add_node(SupplyChainNode(3, name='Forming', network=network, processing_time=1, local_holding_cost=2, external_inbound_cst=1)) -# network.add_node(SupplyChainNode(2, name='Firing', network=network, processing_time=1, local_holding_cost=3)) -# network.add_node(SupplyChainNode(1, name='Glazing', network=network, processing_time=2, local_holding_cost=4, external_outbound_cst=0, demand_source=DemandSource(type='N', mean=45, standard_deviation=10), demand_bound_constant=4)) -# network.add_edges_from_list([(3, 2), (2, 1)]) -# save_instance("problem_6_7", network, 'Problem 6.7 (tree GSM)') - -# network = SupplyChainNetwork() -# network.add_node(SupplyChainNode(1, network=network, processing_time=7, local_holding_cost=220*0.2/365, external_outbound_cst=3, demand_source=DemandSource(type='N', mean=22.0, standard_deviation=4.1), demand_bound_constant=4)) -# network.add_node(SupplyChainNode(2, network=network, processing_time=7, local_holding_cost=140*0.2/365, external_outbound_cst=3, demand_source=DemandSource(type='N', mean=15.3, standard_deviation=6.2), demand_bound_constant=4)) -# network.add_node(SupplyChainNode(3, network=network, processing_time=21, local_holding_cost=90*0.2/365)) -# network.add_node(SupplyChainNode(4, network=network, processing_time=3, local_holding_cost=5*0.2/365)) -# network.add_node(SupplyChainNode(5, network=network, processing_time=8, local_holding_cost=20*0.2/365)) -# network.add_node(SupplyChainNode(6, network=network, processing_time=2, local_holding_cost=7.5*0.2/365)) -# network.add_edges_from_list([(6, 5), (4, 3), (5, 3), (3, 1), (3, 2)]) -# save_instance("problem_6_9", network, 'Problem 6.9 (tree GSM)') - -# CHAPTER 9 - -# h, p, K, d, lambdaa, mu = get_named_instance("example_9_1") -# save_instance("example_9_1", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_rate": d, "disruption_rate": lambdaa, "recovery_rate": mu}, "Example 9.1 (EOQB)") - -# h, p, K, d, lambdaa, mu = get_named_instance("problem_9_8") -# save_instance("problem_9_8", {"holding_cost": h, "stockout_cost": p, "fixed_cost": K, "demand_rate": d, "disruption_rate": lambdaa, "recovery_rate": mu}, "Problem 9.8 (EOQB)") - -# h, p, d, alpha, beta = get_named_instance("example_9_3") -# save_instance("example_9_3", {"holding_cost": h, "stockout_cost": p, "demand": d, "disruption_prob": alpha, "recovery_prob": beta}, "Example 9.3 (base-stock with disruptions)") - -# K, h, d, mu, sigma = get_named_instance("example_9_4") -# save_instance("example_9_4", {"holding_cost": h, "fixed_cost": K, "demand_rate": d, "yield_mean": mu, "yield_sd": sigma}, "Example 9.4 (EOQ with additive yield uncertainty)") - -# K, h, d, mu, sigma = get_named_instance("problem_9_4a") -# save_instance("problem_9_4a", {"holding_cost": h, "fixed_cost": K, "demand_rate": d, "yield_mean": mu, "yield_sd": sigma}, "Problem 9.4(a) (EOQ with additive yield uncertainty)") - -# K, h, d, mu, sigma = get_named_instance("problem_9_4b") -# save_instance("problem_9_4b", {"holding_cost": h, "fixed_cost": K, "demand_rate": d, "yield_mean": mu, "yield_sd": sigma}, "Problem 9.4(b) (EOQ with multiplicative yield uncertainty)") - -# K, h, d, mu, sigma = get_named_instance("example_9_5") -# save_instance("example_9_5", {"holding_cost": h, "fixed_cost": K, "demand_rate": d, "yield_mean": mu, "yield_sd": sigma}, "Problem 9.5 (EOQ with multiplicative yield uncertainty)") - -# h, p, d, lo, hi = get_named_instance("example_9_6") -# save_instance("example_9_6", {"holding_cost": h, "stockout_cost": p, "demand": d, "yield_lo": lo, "yield_hi": hi}, "Example 9.6 (newsvendor with additive yield uncertainty)") - -# h, p, d, lo, hi = get_named_instance("problem_9_5") -# save_instance("problem_9_5", {"holding_cost": h, "stockout_cost": p, "demand": d, "yield_lo": lo, "yield_hi": hi}, "Problem 9.5 (newsvendor with additive yield uncertainty)") - -# OTHER INSTANCES - -# network = get_named_instance("assembly_3_stage") -# save_instance("assembly_3_stage", network, "3-stage assembly system (2 warehouses, 1 retailer)") - -# network = get_named_instance("rosling_figure_1") -# save_instance("rosling_figure_1", network, "assembly system from Figure 1 in Rosling (1989) (structure and lead times are from Rosling; all other parameters are made up)") - -# network = get_named_instance("rong_atan_snyder_figure_1a") -# save_instance("rong_atan_snyder_figure_1a", network, "distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)) (using normal demand instead of Poisson)") - -# network = get_named_instance("rong_atan_snyder_figure_1b") -# save_instance("rong_atan_snyder_figure_1b", network, "distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)) (using normal demand instead of Poisson, and with costs and lead times omitted)") - -# network = get_named_instance("rong_atan_snyder_figure_1c") -# save_instance("rong_atan_snyder_figure_1c", network, "distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)) (using normal demand instead of Poisson, and with costs and lead times omitted)") - -# network = serial_system( -# num_nodes=4, -# node_order_in_system=[4, 3, 2, 1], -# echelon_holding_cost=0.25, -# shipment_lead_time=0.25, -# stockout_cost={1: 9}, -# demand_type='P', -# mean=16, -# policy_type='BS' -# ) -# save_instance("shang_song_1", network, "serial system in Shang and Song (2003), Table 1, row 1") - -network = serial_system( - num_nodes=4, - node_order_in_system=[4, 3, 2, 1], - node_order_in_lists=[1, 2, 3, 4], - echelon_holding_cost=[0.25, 2.5, 2.5, 0.25], - shipment_lead_time=0.25, - stockout_cost={1: 9}, - demand_type='P', - mean=16, - policy_type='BS' -) -save_instance("shang_song_9", network, "serial system in Shang and Song (2003), Table 1, row 9") - -network = serial_system( - num_nodes=4, - node_order_in_system=[4, 3, 2, 1], - echelon_holding_cost=0.25, - shipment_lead_time=0.25, - stockout_cost={1: 99}, - demand_type='P', - mean=16, - policy_type='BS' -) -save_instance("shang_song_17", network, "serial system in Shang and Song (2003), Table 1, row 17") - -network = serial_system( - num_nodes=4, - node_order_in_system=[4, 3, 2, 1], - node_order_in_lists=[1, 2, 3, 4], - echelon_holding_cost=[0.25, 2.5, 2.5, 0.25], - shipment_lead_time=0.25, - stockout_cost={1: 99}, - demand_type='P', - mean=16, - policy_type='BS' -) -save_instance("shang_song_25", network, "serial system in Shang and Song (2003), Table 1, row 25") \ No newline at end of file diff --git a/private_files/scripts/disruptions_10000per.png b/private_files/scripts/disruptions_10000per.png deleted file mode 100644 index fc2147665e6012bf51c7ea45e88d3d2cf0903807..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36112 zcmd?RWmH$~7X|nOY3Yy-=}=lp=|(9jl?DOn4(V|mJ%uHlyc5} z|FdS+nlJNdK8@>rmjT@0z0dQUbN1PLpBtm4p-g~BgNH()2vk)RbWkYtU=#{%9tR8l z<<{WLFZfN&L($OVzO%K5x4GM6)ID<#7YAn#hbI{lio2 zodMOM-lOn46l%2pk2Lo0L&9f=>Dmp$;DdvMl5krRngp!5pnrE7yf*Rp`1tDT z>vJD`uztaBj!wuZWyCR1@3r~xhH*oU#z$jH4A~!ZR)W+`O-(9H0IT7BY%^k_KX@laOETML*#OUGcqW%d=_y(NPiNt{wfniNI$>4j7dpJ zS>rHC3acvP<>ghoRJ^fo>*aO(_ds^ib@|BF{{GS-#&JF00H@i82&sV6)W-LkQhza= zoSdkHtm6ZxLNTv0;h^j2=#(_7FAI8`KGvIDUF?c;oo_{xJeshKj*XR*lS7yKckb@7 z`U5SBh*4={>^;wH_dD(UO3w}bczTIzDIA(g+S(+%rp@uvmnT;Z{M0Njs&fe+UVSlG*vm?z29tI=5xKk503((a|`PJFQo0FJIe_ zmv{Z$Ul9m6J$N|hWlSyV!o+^}1xlMdIXO8*$mYA*;rgiIM+fR_d?xXkLN@yLjoZy< zybJ*c+VON^)m~T1F+V>&lru45prfZRZE~`;<=orbo1dT8DmYBP`3Q@Vk@4n1 zt^swv&*9(SNXWm}XAu*l#wKFuJpa32Wz|ROFj0wiae7!oMFlzaOxrK zI7MEn|Gr(G=uWtCqt`+kHe;E~?4Lgl2bV*w||NToC-I6 z{!EZQ9x#_W)*Nv5aIR>*!DpBG8n00_>;%(|8)YWh61=>GaL1uK#hvgZad0(%2nbQ{ zExJU8I}g{qJF6^vetfXel>GZE#l_33yZC<5&QHH>^PWWdiAHZe*5@S#ykm#H!fb4q z&dq<>kr?^tIIV9;X7PRFzL8P<9lxWTpnsQG8^2dpmU@#}R%aVUP&x13;UK|d{q+S} zvF^kC0RD{0Gj9F1kSo}op`qwuPYfzdDBiq&-MPEeW6*F3L8pjXl-O>v6t1YNGrX&+ zIw*ZPA4a5rvheWm(330k#>K_WW5QYd)t8d+`-w1(fPg@iM%FO|_BDBV`30xA_wugYvSBZ7$Rz>|N>S^5OxL013BW z(Ks^aaDNBGu=kza3AAyu4W6YQ7hQ3baj4FG<)rl@;|34aRJDS|nR<7E^!J+qiHV7~ zV?P%LUjDTq39f@f_;9+gJ}c{g_TTChUsBFMB=3CTsX(FHJ30=#jvMm!(s&H= zOj`nX_V>e5QplKDSgQR0y5&3C3Dev#tVD%`gt)l6%FZ?NnSB1BZk^`f;2^Q$;4dlMP!#L|s`c9|k?T0L)N!mG2v48Y+^G4r zHCzJ&0|iCJg%nMx;y>?s45mLiR(Y)H!1gTd4@ir=Fi1PL?1&^VtaG^@8X7wP`*)-= zV*okiAWlxs)`PWSsH4~sav>bq{zI!1w~r;5Z`{C#@9((0I2$ZbrxcZtU}0uPhl==l zu$q$BNTwz5f+?e)gpMx$(_CQV&~{WT`L%0{2_ipbAkXCLaxbi}$7bE}vw$*|R$f{v z)!_eE5UFBF<@NKkoT_=!J1`(p|NZy3SAz|n_7@w?j?=fp{zBk%U*&5GhJTjl&FGk( zrcJtYWcWT{E9mbsrAmR$`HJ+vK}~l^Yr~q-3Gz{d*KgncICLoCy%i6cd84S-b`bsI z?6@bAfc9>AN=Amk)`qq*-~$2Jfa@9kgN@$Kucd>2+Gaw@Um8?qjDQOH`puic;`$5`{#5m#P!NNoLHeHA-{u0(2q1d-(XU)V_5+f`()&+8Lm$2`PYal+b7g^# zid0IVSt}x-;zxaZd5h<`wk&>&PWO%Vqu*J|_U(OrxZG)9${v674S+3mJwI{9hi_c! zPUwIvxx3Z4Z2{|if+U{}$Dd8q=H}+MGj*;B$8AQxx9rnOg71+ilElQs*utF^^hZWU zqN4)Oca;xT2d@Zbt`+?|Zuyr`YEWST3G3u!DQRJ8=?ZG+@DLMq!?c+Wa8Nr-k|cWO z-ALFvdcLL|bYU8T!n>JybKfD6?OvX3Tb}GJP)Yjme}63&))t0M8*u&C@85Y)jp_h* zWCa{O5Vjk^L24a*KM5nFsre&`S*Z&MG-R3P7Z)wu>Y)}Rw*#e|1?q!2|8@^!Q247? zv`X<*Xeghp`jwr2z816fkz$BV1v@+LqwTpQ^$gxz*gl`l+VN*lr|arO1LTUeI8nAK zKb0ALG0u*+dx9?a84;ke^8HN*TrnP=lBPCo`jayw?Up1sUL*icBOuI8{5EgJGfFccrD_*IfJJ*a?&{ckT1c=wGb;df&3m6+KS8z( zfu$Lyfo*>#KMWS$qlN3$%pAg<0s!Kj@1itSFf^ok{``3*K)}w( zCO~g4Nipu4EN_M-YFOF97B?zdB8_+}j_gx2 zGh>`vF7)T<*m-!a^5~bf&bNiR9;|BDK(!oljAyt*1BczP#+C&6L`~@n^5d;pAvLpO zI37^rD3H@SGc&WZR+Mcq@=iNCCT8&8j+ECQDkvV&0+!uOqM}rg=G*s{`v;3O8I78J zwExW(4%$9TPq!YE;!aZwAd7^3L2$c^x3`F4A*>)Oc(_QDg_X7Qmlp)W_pCc{MOjb3 z*qUVU8t)v>1+l=50?<8OLr@!>DW+KFhaVkcknN-raeDp0HDd*qQ5mUNcQZrJ&;9-P z`Z!j{D;Od96#aW`T<3yz=jnlrme#XN!^ukXD@uuUF$uIHi>CihDW4v$M`V~h#mx>p z<%0AU1>h1r`0`(gUTKaNC%^meyHGkHtfYOG5=5S5W+vvUUW56s4 zI?pWSu1I3S!5W=yP-w0R!zRjuz|)J({i$30XE6Mh{a7@rlY&QIx1mfap9Ie6O?2Xm zi;FIRk+G)!yAiSir5cKQt@ZWwO2b%03^$Y%6jm8ISXrY5Gw;%gxxH<3gHD1NjY^lg z`Ecw}UTJBm&*8dW*yEM2nJj7rIs)wMh3ywF`OQOdWT3So|94ms6vG&JlIycJ#FoF@ ze7ep<65Q6*-Yz%T)6>JmP@wbR$)TdJUaS3B83`L{Or7(bRM?tn;NJoq8A+G<;6NJG zAaqRgx5m2O0R;Z~_3p(%z5B}8yOOJEx_!`m-NRtY5_2#7a;9xUu>)1&CKd(;mGDhs zMQu9hU*73*ANC}diwiL`x35mT6m`wRk?}vC^*$Wlnr-Cxvh1c!jNuAJ`*baX&-8Xl z$*^Oi$E~C-p`DB4xs4)d(W2pC(cQ934SZQXrE1_2wEgqWhmzbcrRco0>aMO;R16Hf zkfdXgqim=TIOv3qLJw`D1`swp{fKn=`WaI1swykBT4pAyEEQ#mJ0TI$l+C?=B$7W6 zDmF)w#~GWOo6C%H-TwLc^ogpfY98Rblf8bvjiP(mQpSKH#oRj0#9*N|2VnE7v{PQf zuEktlUM}9(yz`j<^B>oOQmLoEl9ln({T3o9@uid-Jn8A_2}*Jx=2_5*r6J@mgzr~O z!UxAE>dm@7`TqXEb*@B@rwYKI(tztiJ0?jm(!`|itHoHjxmCj&?SB(V_#Lp@MahiX zg@`+S0$m#=gbnxQ(X{g-{7cu^`$qtlANQxHozYPYZhkQ0rCeHEJQ(&Ior3Q3hvvpy zOUnf0Isw4G()aQQqme7Ty6sq!t*=c{S$w=WX_HN1Y-EK0u~dSPyD{z3f3*Zdy`@OJ zqG>M{r*&TJOTNTyk53RguO8$VIU$h06oj+U``Y`#)gG@4gnT8d}DbZH0^z0Z@iE zD=W+JlM_7>-#>n6ozMNd$evW}DG2hkv9e--o!a#x6G)X6snRKl!K}#!|Y#Q-nx48 z(MN@Umlv)8IWOD*??-<4@IlsKr{(hWDs(?#tof*Y4#@`UsbTvNF;LDAB+FavA%cFhVXj zNV;@C@a_x#w)t^CfPvRz^R&6N;149Uv~hqNE`;5iSv;V}7=&i^!qU{#RM`3F%>3sQ z$bq}9SBR)molZ_qEuifm^?ib}Re$VJ@U=lF0e;eBeWY)-mQ!d$@1G0gBBD0{i9FaO}_iw{#jpuDj)@re%b>oAPdiMSmFKf zA}P_}_7txh_mrKMupAK^CWpPZuz6$N2CwYG~zk zNpt#gOniJN+)tJ7zID^-dZ~-2=X-5FGxve~(L0x4A8&0eZEquG+I(}W_H?QbTL1Zx z;`=_(=A+prVQZ5g7F6gJ4BFy1^W4|b(Sn{RFONBY4W3!=XJBnG#I^_t3g+l?yPh36qGVt>@qhdI`ci+UhBfGz{9tqFZ1Dgx6h${nvI;-+>vuB+ zF^h|fMP24m&F6dS4zmpumfi7f(B=TU6SdG0WeJbuv+@2D%Cc&YadK=R!ogePEK+X7U;yx&zt2ds21zKJfz8dI6gc~W;2j= z)0>`ygX4xt6BS>}x#0Q51#;fZCMwP0gF`1BAE^!3_T4Hv4)nCLvDug#SZ`v~6T5wj zhConI@L)9ax4&}gv1IVkXU+?$pGarQ@~#Gw(yJLt_xC2BX&3_z5N69^2h-#M8Ty;T zd#`9Doo4C;SV?2F8}GOu3Gnd|0o&F7C5;D(`sloO*#_cIfQjo4M!WJgwnDhx$Z15M zEVx-!LveJi!FSYn4k8bV{wPOS+My_~=HxhSuxw)`bfWU)icOcN8$K6@DWUjS%_1Hydg4*l8D zro5S1PTTpD;X-qyhwgzKd3%yT3@|CO`9S>rfZBqPWB{wUKRGhx+<9`iJ;w++to1pY zIx#6JI^>h{zbn~D2U9xA`6z$TY`!(b=Wx{E-goD*vdqcpy`!UU=ww2X<^Z7u;N-f% znGB$f!X;y$hosvL%?pC0p^d`?!O2NoTgi=~buAX*va~tA&GUuFBErm3k6cmlegM3FgvG61DeX@oSgBx4|oX`3h^T&&X? zR10(h+KGvYQK;qS^oH?krD>>i{XyTFhMw&DlKoTQBQn3bdRXr0 zeVSJ=n0hdU&FCK-9**IEFsO_*T)O|#Kn(5cz(CK=LWe5=!aoyLSD2xXse*G32YwhKJ8N|k3>bmIsk9kj@Yoo;XKJCFcENvZZhV{) z+5xEFo~QPMq{t6I&qj?T4J0vnZB8xZCrJ%uWW73T-YCHs$d)$Us2GGVhc-1yUZ_?| z%@INGRKhGQOb!nz^fGYyOPZbYK3qdqK>-8Kp+VTO!{zy3Yv-k@T6?TH=kW^DD5d=3 zu{yVw^S!I=8n10#Ec$>av3p5IOKb0i`*=+!20oSA<6uY(NXx)LUsh6FX!OFCdXi|r z0gs6&P53X%UgVW-@mA=!(G@0!K-;`->TLYvby%2uL65I*_AuZs7ARJLF?gUUDadA^ zr+2LR6U7)94c(_cjkm4syJlTcPEMTW=4N(Nb$1EIOsFzBd@&XG9{;aI>Ak8*y2~yP zB*wjF@8A4-Q-3>%q;uexezS6EDyn4E4gpS#g!JO!2z>(FgiyVamDSt6&K-DApzZ`q z5>+%ckrD&kRq;QUhK7dqm9)Y$wnrbITEHq{^&<%aC_3P2dRjxS91iyrs-xMe&mam7 z+<5=0!K0^7#mVs$>kFPk52~WBE;KadNR_O&Uwo0yX+l+uMyS_5kwrPY6Lj{ z!cM~Jx&1D0Z+{=jS+dDB(696nO|1^*??Mt;eC6CMK;?w?Lx0y+nC8OXo?vKbh~Mjv zA+-Df6?!>#XTWRO?TJz&4M6Lk>e1KGirf+>F_d$1;)Mj?OpljyZxPzB_(THtsbMb= zKo%Aj3;{I_25;nX>YrhEf&_s`13pimu1~)kT{$z~@>bA8iXMCy7clrG&e$(rzc$KO zmq<&zfBcY9%nbu{8^H&U?Y|&Oh-?_v8e`DWqzy{z$vs)$-PD_h=YKv7#78m+=y7Xj z4Hb|kNu6>^o$tu|Lz;VW%l;b5aj4R5SA!Q*tAz`#-3z)jj(NY5f zrD9HQ?siB+04@&Co@Zqd0)d(TvlfoaP1K7&cOGSyyjCvtJJ*Y-uSgPW@Z7Mj&6q3G zK}Y%^OAynjr2Iu;Z{nvm(s&PrmcM2SL4!^gNl1^dj_v*ZSG~7p+CcYnJ>D{gr_l}C z*^qi$@%f0RJD&OqHa0ebg~PB2Li6)kB8eCiZL$NdK?*$i{mOZMWyMCzY6B1$)H5W$ z5e6+3l(BjEkckFQ9)Ev-d<`dPO7MV(3I+0IEh?zDudfZdP=x53hd$^u*Y*oE2J+A! z{iraNK7g~#orVWM30jLcmkNenvq;r~=Clj)NTtuNMVK#ONE|}KZuq=dkYnU>wakEE z5%v1>qK$7K+L}e+quSvH2J78zfG9w2A2J-qZHI~Al`KEPMz2k|B!)XV`lYUa_Z}mq zHVCpytyE4S0@H!Z>;k#tTZ6_Lto<&;stmcJm9_OET<`?SZt|Nq32f@=W{^csAD31$ z(o1-C!e>^3w1t6%#SBCch$>xv+n=N0_gr9aUP$^10&-7IPmcsG&jRk$^C5*UWx2`c zSRjlofel1xc!)qiKhIvguyu*ah3i@T-COoK+x#^6R+a4J@88TO<|qZ`HfS9M{7+nf z6e2`uZ*+8Y7kC6Cpi+=WC=l43{zUZmFA}<^UJ{Q!I)p&i50}NCVjmm-U-Tdq#qfhQ zK_otPDD2r(A&hze#{?^ZDAlV3nUdmA4~dY3>!EP&Lci8vY0c{_>VR98wZ$>KNcn5E)I$VB(z*x%J!AaDxS&LfPk+87M(Z&StDxzu>IO=_Gc~DNXh6UGh1H zUXhKkQ-jmfkNknY#?Rv6;ZX-Qr+flVF34Ki2fMo@pf>UbLQ94vubrBfnaLFhRNx{o zoL$gy47Rn&dbqojHF|Ea2Lf}lOjtAs5LlZznF^naDRyc>#>97-qRMglW8SM*uU6OB zxgqAqY)?W#&2h*X0bB{A@c?gfEJDeAwlpZ0}Tx~RF)2< zXPrpcN!x6bV0yTIdELRE{iDCiXtK+ zB*B5bsQXpXd7N8wEv9s$E;*Mzaj~(2R1BTuvmZS~;5G)w#|{3BmS&uMm)MSmjLAM; z+IN=QxZVwXB!1y58jZG@?da<53=KfD36T#){f^2Ia%B)&d3-!P(z&M_H(k48DU_y> zvIwd%EG)M_!7ZAE6WD8nSVP#fiRJ*mT>y*x;)DuS=jLW`7C5Eg^!~RSYinE@Z^ZS! z_V)`t93LUR3qOOEorX|ske}YJE-kTeljFGphqAcbpOKJW8UtX@b*$_`o>~DZB7p-J z{L250$I8oU3rou`klA!SyuB$Y@FGM(AKXQNUjI4l)*`?f#WXcGK*7-r3=E4ovSFQX zB)n-H2WGY_hvwp-k4&Z_C1n;D6N>>&UYN>Fc?HC$MMx_L0-!O*KyDHe9|(ZsWuc%D z4t)ZF)GKU4I$}njc{D_X2Dx^zw4#~&5_%H~LPs6Fm4R$ZYyukAhPt}{KJjFCsS5ym z%9-)$1?YJVqQFrIFf+@g_AetrG65&n70{`Lm)FO(Q>afsNq&7HK+&x;yKk$v78xMu z$s>`PA_nyt5|RQKC3Zm=6MSJZNGzpOTr;zo38zHtj62$b{*%W?K?r#y;Y>TXIBG2$ z&LK7&FxCKG8@3P_8G##(_1qX+fIef?PWY}>98gdRk3Kmq05bDDq63P#6&l-QKt@iR z7;FbJ6wK$rLK80+l_!R;^0yOMJSmZ;mJ7(@9wsbP~Hg-2yX7%or zO!3#;rk4(+E7Huq-Js7m?b)F<@%p8#h^K-)Fp zxrdEH+%sU28LKdLUem&#@W7o1+P)GgF96)MILRkkf~2ABM*%v^9BnTC_y$@?h>lj+ z{BU3aXPSJ6b7ZASlEn+-3i;aXT>WKhK-h6{r!QCMM0y7^z2DP#75* zAzdf10Pwf8|LkzLT)=?^xfc3k#1WOBpFf)(7?T$bIgyovgGF4N2I^hybXyirJF*Dx zLU?Z62v^FN1y2B6?FM~fSKqQ52wU^OvvIluv60$Woem7YYJW;y-WNAh2XYS=F#6sh3e?l}=h)uw+_1TzbB39Vg1w7iJU?(~|3 zs0Ry$U4kLs04?yJpgO6|g|It9aKqMBE)sGKJvu|49 zG9}}}RU%qU!;34VNP$HfMb^X!l#2i>ol-=Q^)V8U<|yXhYC!Q(C4An(ueK5|+1C5+_Z0uBG)>Nw(^C zv0mvYq9Y&@<3DgM=uKZoZ^d|qgVHiAYfBgM-W|=NtxHceUfV-QIY*HFq#7grq~q?& zB1S8c;_f0OMk^L!r%?2ZNt_K^f{(VmC{+SkE)prc0Jn(=ShptQdDfJ%Z{JBs9*Aj^ zL;Bh(G%z~b+Z;DF|5lQQ9C%&su6Syp9q8-E@27r@z-5}OeI061CP5QMah8ARXgc%S z%BSfOXM2+|zs-^uivJzWVA|a0JJo609k!4+QuTsqRVV9`^X}m|r?N(R5A8ooHVD5j zuqH~8;#8TX5d3lEhd~Gqqk-_z{nS(@?)m(8Z*=4nZB(qJe-Y{!`MXy>=x0dK=y;pf z!)@#|n(}6lZKl6$<+cHk$lxF3HEswGk&nt(c`xvSG2nuGCXHcd?+6VgDZD4pB=*nq z#HS84?clIG<0vwjYW3ntOv8YkYx;~03Gq$LsNjlMWLbgybW07lLmNL_K{>`4Pnx)v z;63dEvr&+@%}Jv~z8@K5nD1Z3spqoBstXCf9A<9#zBbk>tI)VC`g(iz_2YsmDm!(2 z7Jmwy_j1L#Hxq1n71H0ig)+S`CYb(E%!i)(U8T2IWRg%T_{guq=KkEne`UVlTmfDZ zaT8|wd&RajrM^`-cOD*~l3M?FARRh8GfP6lfJQ{w^Dv8tcO=cC!q$fc@Y zzM;z@{A1Uy51*NLDhOqja7Ukwp;1v4m!ySvOv=Wlqixwz&pYuOlPj{?P|PVE2DPW`}c`QILSrIjk=$E z{|wINM)5VDHni;trk{@Du?JgG^8WnRY2fEPpY&n(H00hi7SFEHb~n{X$zs*{TT--H z8o%)e4xvn~1GChDTi;iIPSlO;=&xVs$OpK+cpX+2YB8hnt!s0{=ug9Qhsvy1DflFT zcnUs^W@iPguc!uoq?0~iwikNqiAtCLnX7h-;Z^~OqSdc!XkSq0J7*d<{;l3=+H1ex ztI~qa2n{s-Ie*qG0a{=&FT_b@gG%uvc7>G3GO$jdVSCE@cXY zW|j$`sbY$%u(>=_VM@V!rV4+sEn55C$2zr^$hQAjN4BLYOcx!y7?t_XWK|5&FE#%>2MS(oGo{H82M024$;yd!?5~!*I~v%sIgGiXZ4727W#~3R_yc0y zXmfK!nJmtt7VC*vgvvLrkxze9aL^@<=@(d2=AE9J)Ne#SZIs~>sW|cWBaXSsCRo)SO2e!kO{%wsza4i&$lX|g^fp3%VJOo=*5~hpm>oQ*_ z{CgAE!)U|9*m~%sB(=u{9#pUPrOl|(X zOL#^ci|eba6MXCvxE82L9nC);wju&B8F2e|Va9S`#|TWDiPnPW$2$n9(X#f>n> zj?$1nfj^Bh zDZVdII$;^cTJfIB7CW1luT;L?K;>+TN#s7_WcMVBs(6(W!BX>@cfrK^aO>5`otgC# z4Mpu&7}rV_>FSb0ZS)x{Jl+spHiTv;c3IfkQ$*J2=Nd<2YtkrO%dwx!cy4UwqDbm( zgMCsb);3zT7_LE#!TCBfZ-lM6K|i{~=mm#ZDXNrE$?{w7G~6;4>ZH*=%8h!ufMiB3 z(yhuSeQVZ$EHuZS59h#f%fOuZDoR5T7YfVWhrG>Geq^SbpJU))Vtvv#x7|Q_;2+j} zxnQkkTmHE1?i!xdPNJbl#qwIm>th9_s=wz z3THAV+WGkE2V13%zgerZM8G6t$UT6l!onOz8vysM_bg~g(nE# zkv&8Fmn9JoG)#2uqr-2MKg%_7?AzZGD`bQDuOJPw|nz!oy-r-ARb`q z$Zxc_W6?e?yV6)3ABX;UzPJkEzN*BXzFi*@Fs^ej>?g7h&rSQGt%bfsgZUAZ+csLR z2`?$MAk(`F4>fWFkz91~=+sO^8&KlNy;?@ zOHWL!(G3Ok(H_MBGFoO23cet4&mD_CIg>+go^iiovnYtNh5fun5pCnAoTF#f!T2Sj zq)5C&SM&?(>hKIvz{|6R&14$7&uNj4D`b_M{^-xE@hblw7&}M>P`Y7roqpWuf+Daw z-cE$a5vWMIMqYYLrT?aao!8`10O5|lXj|sy84Y=0D{HzZJYH(bX>ymhw z{f$W$mSSBPH$BZA7di~I%DM|vymtH#j@rOr)1QP;DqHV;`;sN^r4<3ST5{S2navpQxiu1}{&t`Ghy8v3zf z@f<0$aH&hA#_4PYULB>6QIP4;;)5_~4`OtRarYLitbJ?6j{qcI zHjADDg_$fDFLVvzj+R2WXirX-D%z=J>_nw3!}lsO}PxF)4KNI(dzsXj>k{@o?N<|d<FFaEt|mAN9t-=6|B~4E2y)91>+v$=mj_Td2S1rDQYVAsQXdaxP- zR%)l+D5#6=r1{TLo$^3S9vn1ivB4BkJ)1Yb5{bO2IlNYmTZHAJnT zWP2z6h0xcoP-SKkia#Om%!tA~6}1)YG|W|XUKl?owz z5e<`M!js?Zmas%EAF=i@HrS|aF0sBf8FCH zyLK%Sh8z&*4JsI{F~9;f9So_1qO4s%ZH;TzH zct!iY|K<%PkJ#JP@fy6v8oYW1{v3CRph3WoG)1eq!`<=Om|%)p>4f`0@5^$64OMn> zlHw!24aQ@~a{4a?>Y`C@xsfcL{g^3!ie_#VIILE`mMX47CbIRQ`99m%S}#F;GGD=C zo9o7-igo43S5tGBc=uNC68AhD^5t|P_336lJ?{XM1e$L|-=kdjux&T;G0dhNnDU62 z1oEwW+Y}$gnqfuAp@B~p+)PU$*bKob_m?;A9}7~$tc{kTq2XG!u2dr@nm^cgs$e4N z&s+;*TU*;Q?=dh+h#HL8VnOS55Dsb!#RSKE?x4q`GtAslokU($tbTni%Hn=$t5i2? zx2vNRye!_&Krw2__au&TyFQ)#+&H*}kJV!1uMb^Aa;(L-ivgMNq*5vB_{NMl%D`X2 z+q#V&1;*fe)w)W^`F$X?XNbQaLui|Ke%0=1kyga16DDGkGcrK(6VHK88%D11^YZdg zROzT|;IBtcF*uSCfA2g97`)z%H_*yneB%fPdq@{}Z6m>X0dh@K`(v0f16ye&nCcM^ zfNgUzX)AC!jpD&~^|+KXW-8vP)t7muFjmIx;`d1vtXzWx%IYA&nDiM+=%x{x3^!`| zLaKTkZLat?Xr->ZUpz&9OLEeCnaG#(zOARH;}*u^GUX%$fkJ>V42WYI&etNadtGl; zQ;6YMo}Bmq{lX+I&4?F)?!NN93l1C4EIV22-lPLMXDqXc|E{9LR1Ge2mVpG}Fe z)CW8ou0ZHr@Fm6WpafGN8O8%NSqN(>*KPR2VL4^4(3tZyI<~jE`fBX%z+*?jx+M!z zywR6x;|oNrB_*3SmP}Sfts?wXp++JmHPWwNqxBJ<~Mch&YP#PLl_y~pR0EN zLl1vBxR!^f*ShTcJJSZSStA(}_64!r2|O8M1(EIK?CjO3L-c=9L@*DA!AcO5&%y5K z;_eQlIXX(FSXYiW15|KY!$z;03{O|DgCw(r1eJg#7D(%l_4ky!jp!b){^%Ws0RZ~r zXYX?Fi}vlPOv^|P-6n3KOX?~!{jT5eJ$q#fVhb~bVee`5GaB()rB2F5Co{Dboo{v+ zXn7qMgbC;v7{1~i9bJPy=gr+0sACx>AqGxoCc$HwO}F1QXl0n-t(a)?{cu^8ltctt zkq+O0BcH=m~`Q4EaDw1JmM!s}1#P=R`KN=g`loWag+G{ z<|^q{1ggM2Vu`vWbt>_u!V!D#S96Ooy2Q4Z9RfHcVO4j`K>_!7v37F?P_o)AD$=ORMp zdb~&M%|}S9*^Tz&hFroMapIbn-TB zZ3)ay3eWPZ2Cp%yG?=tbVs-(9VMv_0+m*a3{5nBhWZigs<99f;4?a1pTn_6+W^%S1 z7Q=2;d#yLmJ#JtDhl5eCT9s45c<$kdx);5pEwf;xTA!r!-jVFZ8ywE_TF1-v;;By` zs|d`xUZBQML^-jpIggl!OZKmDRcIwZ^F!8tziJKZa~xW0|0s!Zd(#iLnXASuO+R#& zzqgG#e(ihVXIRBIWyXI|7+C(yHg;FdyW;GP%omquYCq(btqr7!U!e36*t~;c&RZ{8 zBYJzzeCvB>;gX66O`<~4BA~KfKEb; z(!Eg3Thbz5%hk3C;&D)mM?TH755LV7kEh=rf}1<~g_pBC(z43Xm!GEU$<%dYx&l%F z3DHGbm4p9)bsdyC&RkQTvs%UqJx{d48T{pmCJ20GTmK2;vs;#cp* zp`o&P34Inrv?PDtteG*d`IV>>{zv@ z=`%0=nMNK6W3lUG%1(Br@kvTW3noq^N2Z!>mm5! zkiJJx^I30m0p_xt?eUVW2RET|(E_aMTPw=c8m_w?MJT$r=y{=c4&(1NhoS*t*Q;`Fz(U z-Gm5mGb6{3)73C)2z3@iT=;t5qNi^*mu&u+%h%HZ8@?**_H1aMIXdxiDmje@qyJbT{M0Z%p9;1ZTf#@QB&)IeGVN ze@Eto$LpATeBKhwHLCN#t6P}8jU8=!%xeAH^04jE$*u}M^k67kKl`L0CUUaI2-yOw zJ*C4iWFnp#M!|D`mcz;Gg4PBVEV1S*>Lx_dlHD9<%to(zmjtcT=GRh@r2y3|SGfED z3i8DjXeXAAg}e{1JdJwVIKPJ7Ay6V;DLX2z9WYO#te{|xyZ3Bqjz08y8V&_}u=xJ% zH$9JnjO3Xs|gMTU>aE@X_$sxo?G}xe$MWcYLvV zj^;WOe$k<(j#3cRKTH&vZyX)<_)1yu!~E{Pw<#*$??qO`@rj>!2G=C=Vj4{D2qT_c zq_#3JlxP25UXDN<6`&5=LJ5A;`Irw;O|;WIaF6AJhp2I>|0=zaK{?XOqzzH~nXbh> zDi%X>mqzzYN8bw%Bh4>L9%_Vn_uY0j`Xo>_S9CuSXy;k7Xx0!NDnt=$avIaEduH3o zyXm8i(KRP963!_-ge7nNrWz?=EXQB0EDAl`wZuvb38(E=Kjk@j3#Yummo0J9zdbU; z&~mTXUHn~KS~@%qI$h&v+U=%=sqNUnmvXr>YO!9?d0;O=M(?BJ;yRF#YA}Hz^8?7t z_hH>1%>P!Cv{<1PI7^?)s1#yU7^{{+p-_+yE1eao@S(T-{UDL}wILkTv#dwakR3%m z;ki0zI@VrzSW%KMwI1ry)djY^tcl4+r&miOy?vx-xaq=aK=xs0v-#D8|2i+;=v4nM zrf=`=NZ10L6)LCiW7%J~>ONl)@*W5`WG~SCa^6OGD7R zfYSit%J$FAQHE-up4gA$p+&sBwt3DR%e)u6|Mj8%du_|XK}DrLM$|>kabj~+c}cmo z9(MoZJ@L<{(MIJrRd2%F_=lBBY$Un7dl*?m*xIV1mr#zuoQ4CGb0RR$KIb7?C>c91 zG>xve8M?G{5T^K6zbP%ZN38;?*>Gfpq(wY%M%g3ivysweVOW zmYlppm(aAqzHt3LjQYqkCo^$yV1s~p0`p}sOXs{+Nh6G8d#h0^9o&c5T!Z2&F}Sns zC=@7zqP`OJMIHs=uGA_6H`}E%Qg#NGSy5BZ>#uQp!@}s(dfWbrQ8M9GDhQ`A9x9K? zrfrrWPDtQb1SW290Ek6=%Ld_49j7;&XTJo+65}N-#;Q3;HRmJV@aZfo=G zOG3LH=8jyszzV|2Q74rnVzv5hd3rjm^nMP+yxkch4uZm3T%ERt!K$AA8-WxsjC_fe{>5Tgt@{ zuj>pxcvG%Rpmq|JBn-^;$*6f<_cBuJOjM6abJ%SL`iQ^Y2BRU|Z`7AoUj3Qc+ZV%+ z39YxXaM40#NjXywHnL_Pf9!fLT|$eT$zJy2)bGe$G1%pACcid)+a1wJE$aJdy6xAG z1l_k8MoFKTk&{(UQak;9a0(xXKA0^a{RJJii&w^^rywEIgLHVwO0lbCA3hk~wYbw@ zxFxu;v9X}zI&&WP$>s?C-Lo~1g8l%(LVBf|t0iZ_c1T+S;xcHZQ6E0|8rTUGNL66y zjB`J|=W}U|1o0%7wD&$Kn>$~C&DFQ0T;iqTkHqmyu*YU&(?D!aT;+XYU{WfDHpS3l z-2Qo8=tkbtHbjR0^L*>M7b^aF>rh5b>6g|q1%m(bS@oj^^{L|2$k8V50wF~3m{Ff1 zx#i(-1>XPS_5L>R6XlT~{D^GcXh4}!!%}TshRzNWeYFs>JaED9J6-HQ38BWP_P-V4y?B$43+ykpH!^vXL?PjS>S5EGjUd z*ed<+{QgSSq~OtiA7gcSAwoK59KINiaUq1r>y6a$v+MGRca)rhVgZa| z$dm?#Y%8#2hyBPX6TD%d+DB~{@~w{s@$HMCB5d zBPu`we^mZG7c{=MFCiu-TcC3t&KHYvVkgW!APrd9V;FSG(JB4`^Kr=Vvac_6Z_obz z?^>1$+TkxUY<^bT-6EX}#3oj}Pm7MhwEM<;Vd_0CMsdy1Ca#+pM($~tZ8mr>U|w0l z*4DPZ|38fwy1Lrzo}VDd!IBDCm@t%ktQxA*4yR+7Y|eC*b-l`#L~H9RP}79>a0JQZ zYUO}$0TUDRnF{L(sHgXM!J-w1jDUg_0bYjTot71~^*_(Uwb4(`rpT>|iHRYj3)fTn z`0YkG!yb1h(qApsjRj*6GQtFQBzP-IwN@tqBNEWev@E^Lwt;)$5Bh&INGDGGlYF%1 zcHJ}xGehIe*QZ-0Zl0dV;1UW2?~kFM`sf%3!{fimtiaJ#?XbAN_t z+W=6Nh%r8tnj8Ba1m7)?bG67@^9l|{WwuBg`5o|=5}4gn{m(&11a9|Ec(264<^?#k zq*UL&wB$2``;lN*DcH#t`SeRR^E)kD(#6WR_Zh!5SHRmC1|l-z?sXn`;{2a0V^Zu` zHjMb7Pp9|%f}jw5Oe6<=L*k6sl{a9-9Nsjt2*xI54GoRYQlCB(D-7!T@@29J36a6E zgI5i}6z(SvQ8*YyKq-*W(u z50GidyJV0BM<(7K+uk9mY&{E7we1?yx;zX4z(*p2!NL0IRX85V00$Vic31P0&{4>{ zfnY*<@kg#aGMCRiYi(`Ko~p)%I9Ru~OvW2!;1JXXuQ=24qTS$OVYz}rUTuUDbzQ`W zjg93uYeiiM!hDeo*lAtB(i_)_ylG39(JGxVM+&U{pjFT#liCR7i-P$97Y~nc@LaZ4 z!xXKGiVA=I8+fY?GVRZ3V{JY5;45*I3wR;N?!mC8TE#uYxaKGGKD+2YcI|B(4jrkOM;eCB+Bmr_KjYIA86?y48d9x>Z(8mX?mUu>g z{E$RRDa+| zm%8LBr?bF?h2|JA28x5@>P7%Dx&!SZnpH3rkS!&5a}Ho|hM9rZRg7*YkbJ$%rKyA4 z&b&KK5i~TtS3p$O1Q)rh$V%nl1$3G%C3pb>*AEt+u(8IFW1^yZBNOXT@dI8NsF|zo zr602$J!?C$0Y;=4`*I+nW^?EOC;4hGuwQqkmy(gk$6Mri}!cmCOuh zBVXk1QzbU)Z*)&<3-U=BFmM?L0R3ScYI~T!PJzJ~;Iq!dHcm4i(ZJ8pxT&&xKUU_U zDy_f0t3N&E8}Y}Xtx)9M|Tf|=;`o=1~OS#L>;sBayWW6 zf9)IxUZQ7lI~>bUA)F>L*B_=}rtn& zB~JyT8E9fdkP}k1_Vy|dY$W>GGsowxsuoOmMFwfa*LDv6S*Bw<_Tu;CP*A|a)qqk9 ztipQe-9<}#yUa(D>y5l{2J}f%0nGuvJNt*&Q)wSY@XpbPhi30~m&b7cW{)YC2*Phw%>keUeTP$5BcW{V637mN6+(pH?V5Ua|E>SJsT) zX-+(Uy}@hP!LM!o*ZKnjz< zQUd$UiYL_~X~dz76G<10W}K(3dbtt~xAU6Jyx=4F`~cr2cGg3tj>oj_JxyItQBe_w zIXHYa{H@MSL={ofcJ08oy84gBWogXw#V>;VaR;$IotAdpNrjXo!eryT%Y>gC2A{DG zDjM>9wLLz{_G(@#Ex4s;L>HPmmbi^0Tn^JOvZmsn7)NWYpV3KFR~tWpJ5KW{%)%KL z9jCSN!e|GVcr~#p&rXo*$)y=(2RdQSoQt%3ScCUx8(LMYKon<3Y`cSv`&V01xKlfs z(-m4T?U=j|fc}-^=RYdlp(pUVy-UJICuNkC8E~TB*nG=Pl>iX<;5kD>9>;yPE!Ni{=hm7+Gy`{GrivIR*NelGxLY^k z9ld)=Q#;eokv63JPA4e<@zDvPIf|lw>Gt znE$yD9Qe>##d8lXj$^G-n6*_~!OD)N$c`ZAUK}4j6YHxxTP5n_1X$PO6Yi&yBpD@j zl49I)10=HiWlUafZyenuCbo6tU_W*BfW3N(k;gYuhgi+N!9MD0NAFe( zYm{tsQ_VhSw4~PGaI08ES0=TQw*RrD{4Dp2;P*Y+S+YvghOFw*B;TzQwm+U&E}z?r z%{VQg;hlHMSNzwm?dlmJ)+V7>AIp6g2e-6z_OT zHV=*u^4GOwoih25B}O%T@Yl`f^Fz~LXq=XEzq!V(DpzK(Jeiykp0^;9_a%X+x36#n@Sv?9+61;;ofeL=)5vwX>QxtZ0hK=J#CUL}@?WOkXMBcrN8% zw?=o|jZ@^JZacYHhMx=;SN)wy`4iK^#rQ&ku5cPzSqZ8Y7@DDW=P<3_p_xY%U70#?gx=r8GN-BV-daRF(d=M;_jMwMtkY=->+8o7QBoVkxSb-GnPS+JcQ%+Y~1_sUhvaH zS%b5MtMTv4j9};8JClunljGJK?ckx|#m)8R&>}7(n6?bX554KV%v47jUSs4_A|-kC zrHx8(ET8V3c%t>x*rvjajIJ`y(E(;B&0b!eT!~xLbpe@mW0UCFNv% z(9l@z5pk_~#b}T;89d1K=Ila<{$tEQAFmvmmq@#S_)Fp*bHrc}4BGg-#?@!UZ(28( zwiw9ER&ktNwI*Mx?YI$P5zh%TXd%~betnfGth8eP!Ay!bryLVqJ6*Vr&$jr~!yw(E z|7kV55igUWJKZGyqf#4{0~QoR&lZlnw2$a@kQ|+{sQ5E;-r>pEl)9&kNQv!0*iS=E zcUz8Ir*=j(%qlGVb#j^8_|D*piwM*;XCm_598E!aON`fRTf*7Eqq`G{uNRrN_;w{W z?n+`);oH|~1SF$Jt|v2Wp6!cb(q<|Bty0W)<80lAiND`4UXO~htB;|L%Izfb*C{Hm zIgNW0NT2GzDrg|Ua*k1n;r(1W+x0Ubxa8GF;<}89(j))xu{5`QBwC9I=BHG~D4SSc z-r33*=ghsje;o&bGjVSjEGkAzSjMM6-P6=u@k2UmS4u?;U4ZnY~~};pBVF$?gD^-{!8{NJ9V2 zSm~a%k-hFgSLOIZlgg154xyLZ?hhlCrMWYug`_)i7Z2;C(CCwJ`RgQL!e@nDv9L4` zSu>v!?HpR8TgN6wPC(;8pZi@ zg6&+vZMyyqcAsW1sqhJDIZ!qe>NRK>E)4ZVMR+V&&s&7ycUcK`xzdl$*mrmF^6;~W zR>>uiahX)gNTsF-Q`;?PdpxE}{lVGZe6L@w*!`VbkD`6gBab)Rr_PmcGJ3xFeG}Iz zl~?r+E>e*|l8j$cJ*=6anl_Hy^w9r&4f_SiDp(9tqbkF``xsXI#crX5b8A?SO|iCV z=9N@ueFqeo9^rS^U}DGN_B~XP7B%EJ==kMF$pK|&V;}W z*W9^oa*ErNZDy}HXl?f#<@I>pyodnrZma&EMtGX9MrxCd^gpm##lDR-G;-H6Luc>n z{6^KGJY@_FV-Mi%%@m+z(BW}S{WOP5Z(3MjGqh4ILz6Gq+9cZn4a z>eVnTN(;x+vR8H}D99t%yL{*e-o*s`tw+O)f2g{N7z(L~?X2tT82yvAMpqty#KXAw z)~sm7O`@l2HE9JOv=2Wv{?Of79{JQHLzv{|B^Hg)?0&D^(m<8^cn`27!+T-7O{Hdz z!tL9)cZd|UkHy%=iMfiF<0*>CHt5e6oPE$0Ygwpeo=xT;%5Cj_#_9U$!kgVYV_sVJ z#bG9K!Dm`Bn=5YPOBv%;UOtevj(HCgnN#SzRg-&Bda)!*^`(8Bu6WzBeRp9LCr6sN zxi(2EU}69^Kuu47UBCyZJn*(qsH(1Y?uT)^bHDz4NhIxuBg2B`{wo9h1CuffuYSy# zB_G-pE_=yisnKg(Wd9D&zC<*2p1Oarwx7qun`ygT_|kFNiJE@r6&@7~m)cib@~Xr{ zWuB6x=7)j;m%cV0f^Q(~3@Y_NX$`7N&hWO1z(DZQQVDBs*Gn1wgd0p;vID~H3jFWb z7jJ}!Es^yN8zfW`7&|aVd({h^RISOVF5E8g=}(F}r_KJ3_0!s1ALmJzE2&>j$xd14 z%0zJtWeF_*_Dp$d%P=toj)BM8CFn&Hac~htZ}8fDAr%yDkXwBC_U!3{7p?Ex6Z5Di zRWnB%ES|4?pFp1=q7Z5Q*!jkDZ}ru@9Uj~KXD%#XE7ZN44`R_`_>_{AD~~B!rE=Hr zSa#6A`*@5aVr*mJJ&kM%xOJ}8`m%tv8X1Dmo27htIf>H>tDKuW5#DcWp3d`K?^Aob zRAk)wXV>F(*&m6_U3ykgH*~cwtj|CDv$0a5?hyoMSWSR`)J^0=Qyqd z{MO(TMVJWSPNsoq=MUKZMrUVlPIvJ%;kS}bzQBb|wQI4P2urPm^lA*~?g4nkP{I?17XW0OXOQug1TG|c`$cF&FuoSK z+0c#SdSwqCwuzI4{Z{?d?j4NVEhwqJa+>vq9IC87epfX^i6=1Ipq7 zNa2EBsVyEz5n_mI!wT-aLx&H`bG-?t%3+Ta!{O{pL{h?YqZfyIhI!KY#+^74*kX#( ziKsQm^%Xtn4j&F-mAd`&sOQ{QY6=R9a_@CMs6kl*!09?kU}?rjAu=1W?Oit`y5BiR z{olxF*QCrfRiau%_6I#hyzFipC_H^-FyV@mE6_1K!BJ$$XDsW*j|JW$Nv&v%g9lun zI`0w&5XS)_wS&qPqex$x4-k%mGN7)mf z5^Q0qNFN?d{Dab_^8*o-ATWJJ{!#E3l>_rv{63EbKZit}*+qEeruaCbqlpLB$sn*E zkHuVMtp`s%Uc9o^baZGj$5EVtWC!}W))#us@jd)t4S{}|1^63@4<3{UBk2-&K}W%6 zoj?)!bGPuAJ!{{t^>3&(lP7Cy;T|ObiUtOI+S;8pCUAQaf~(M{%@pKu?C}O4+a4*l z!fQJ@<^CS%JpuDLqC)uY+y)of1h@_XX#Myx!`-`g z8CHqu6{(@-0*ncH5Q~a?F4#RMCSN*C@K4<%-VLvt#iLj3&R(I!5Uv~yz5%cSI42LZA7a2`qs71tV+`iwpfk8W+jFRy2+l+O6XN@| z5OX?`Q7Eed{tEk;B4O>cAp#ybB=rOvd6AYE9GQY}GY?H2`0_!}aObxY0up)*u*IQ+ zkk->?sslSD<8eRei-0;v2yuz(v-dY2q0Q+Jimeu~c~fAm?d|eVSrNFsVgpu6LeQZV zJGr4RFGaH!h|1D{ql5W_<4*37B4WxSbOCa5j{V&KvLN^}RKWwn6lOP2N)A;wR4irn z{bP2m%A>QP8%=ZH2w{!^jSs5FA>1ygP#MnJP+^EW$xO6gJxkD2yNYz`&(pG?Y?I< z)8q6x@NgWoQ*6CpZYdJ>#}Lae9gZcseG+~_X}$q0{=6*ou#YjFg}FSVz(N>BKp%i^ z0YiuqtAq9N(xB@{cHqB(6|~UlE;={l&$P91P&BjvEH45_)vo|t!2%?Mp;1w#>Xt8F z6DPt&7(*jruK&cuL^onGPs0!oCFQpV(BM~oq^12De)ffPLo{T%3DAMFA(7muSgJS_}B)BwgUENF!t zhwTLXfMZTYP(Lbc*&1!oe-LeM)(Y-M*ndPq1x+nuXM1aF9dPyno0^(J7nR?t(C|lII;NZ}xWSfrJ`PEt`gG()xb z)U}p`ZTcK|MV(A(Q<;75UW z@}>nHr$5vUp(?LYu^a@%U8wOI_!J0+eWrAUOpcW0Smk>5$)E5Qz1VX;9z#b?M zbN~$JL}x@)R0}+FK$bcHV<+#maw_!v!deKHtG@tWo(8%>Km?noB7|Ct$^5Fa`=AzqcFqs;_Pg^F!&t*8azO2{`Ym&I%29x$B2!zU!$U)_y2k-#qEIXgQuKu`hn2_v8qoeH=MkcXOW$>Inz*3&6-`ptePK&$VmJ!uI`l5$G7M z4gtn2b^8$TtKZnAqC1iNF^q0tMFxV~kw3tR)&MXk1_2DH2`mi^cZB){L>cCfW-Gof z8s78&4zUF4+!7K@P+KLy;ESN4swc|v>AzP~pY9hLgkYTj8e3qNv-9x0w~dp5y-W*! z57Q02g4DsI4TbAQfMvqTwue;${AU*hOXRtn#Ep;BhF> z@UoymC+0HD0;aNtzt>T*{&@)Nd3ALvRKP_eD$q9qGv$#nzlcN!R`Az57*MkZ$oTb$ zA_dTsbQm-eC?e4Qynt~RH2JULF##PmgJw>z=`aB75d!w0;@^HkJ`WCko}AU%$_n|n z|A4^Q8EzAbgYvMiS_kuAlCxoRLsf@i)K-v{#Sq&Go?c2w)+lw;gC9{4uD4aj0Q!i4 z1o?We@!*MKkh*;qQDT7H1acAsaml|o0St{$+P?@wSLd}keMETzjd?S`kFHM_?w{gV zSd_qsO~+roLW9B#z#7rpGloXAZ)fvP;0A$n0Ht5VX#}1W9b%cHd-3nodATT@;1|g4 z_fa>X{+8UDdxNeOOe)X2ZBU2b(#lF-T;cDolzhRffh-R|3B2>TDc7haYG zoUsa8z@n*BSsA;0WB9Guu-~3fQ*$#qK?xKge=oH?iK%>@3DtkD=(T+gfr9(KSn&Vv zbR9S)|4kJF*B10RB2c?ZK!7Tc%@i&_;j*Ge6O-fH0Eia=jRYdn!#ewoYN1v3Ia_8G z(O?Begz*NvxYHxT4D8O7(Fb!?(x7vUcJPttw05NTb2QlW^ zGn0=ojQ!5uM1+pa_p^3ylfGH+Y`N+ub+4X@$l~2R3wTLqh{i;T=om9IZ3}Sc$s*j8-()yxHru_|yBZ zbgud0Vbl@}4Ylpyqpbrj3g%y1TU+l2l%^fYtMD)(D7RDIY3?{Rjx!>!2RAqrj(_JG zwd`p#@K!^k!4;20Oy|r0-4Y(~aB(QoZ|9uk>g#uffhESLsGUGPQxk{L(2}bRLQj2l zSv66@lMjJK%f5d7Y7o)(rTI(#WR2+Rfzk_(R@!KG(oQns@&}9@pcMc(oaJi(X92w? zz;ha3^%Mds28V{o9ZE8TOo;we{h5`x^N?Fug8tQl4_%`O<-3o%eixos7JfEogMHjG zeM4djAQR}KMFI#NzsqAAh0Xx^5MDx12nQk{17i!Z%mjc210JCnZ_+O!ISS!oMn5or z4G?c_SAUvddE2#cz)SQNoA4=mN7mc4^1>ALGY9ixu0FH~D}*L%Hm>NKnJFTw!19vu z@-vt-VC8Z^08{XvAl~E_2by?brz1Gs6;_Pvt_W;v-1kRCRo& z#KjptjEMXqY~FWIds8@IA!>o)iwkp083QGy^#g;jdoaY(J2NmasbRD7Ml70Aj;j8&M`UR&M)@xJ2;ZD6;lp8;G)Gu(Y!g4VTRq!0Sb)kj?Z^PXjevcKxR%DYd5qK!vZjjB^v8 zK3gNTetNBGzWd57^;i6l#kUAqb|lVI@hsTG8qhK?e`DLo1ioBWUey2Pa8)?nl#b~@ zfqhpfBPJ^`;(@;UC*5E~7*eUF1Uv1%ys3)aOl4=0eXajm&)t_!*kt7X`AG11ym)$f z$!#|4jHsP}B~9YJW6+(?JxV^kZKS*Z?UMenu5qt_j5BV#O>%#ypTffe>FT|TR^u4D zEeVn{)aawoAnb6iY1z{r3H-@7u=gig>o(hGmnJfgI=>oa#p*6D1d+th3RG^`l#7=e zh@OWzys|s`<4DOpINGlbxQB50E`Jd*o7{-stj`)^9ug>R){`9m?d&D){rAWFtqx8t zJ~4;yFLlG5)o;Lqbhy-Q_az^f|2fkLqG*sq%e>wj9dI2PH=j|&`sFf16v-N|7Cbv& zE;zV$?_MagZ`4$OW?oBqMc(3&00UO&!mf z+t(`Pi`U%N7QM0Aka_hYvF3zISigj!v|myL`j&Q_8`lOIx=0@H7Cv8@1%)KKNGaPA z@e&DawW0YD1#gd*79A~Z&>5yQ{Q97ycJIP?RfKwSbm}v%t2v`Gj(meeC^t*T1(1}PXR?)E3rp^%01(?SKrb^+exXtYzC*% z-5t~43S;LxMUlss-|*sQ(n^rB$dXMUItT1#^3hcjN1Lk8l4I(XcIuv~2mCfkYC~sY z3X&P@tYk1&-Oo+*Yw}uo&eeNZ&_tU*o9vIp2V4@KdVLj54>xbiJjMiZ`7xEE{)|0g z?410HGTClw8Wb4YS57KNex=}TV^&pdvYVLA9jUI{>%P9!efWlAXTHAo#n#-fog02V zlsiJHQP2{J!-un_w;(9!Cv$ga`_0B%(uV4hg$iZlEfjL`&m>kE?N2h#7 zzKaK%7GG4%d5%Z356%rqGj0>D zC|0fy_~?}0NxVUrBxrqW-p}1bINV`4-%aLwibSJaW>3w!;1L2M_(e2-hRxM~bkxbO zQkC#0YdiBwJE>se*l&tT`}ikQ>b8bOTgzjk>SL=VH)C7F86($Rb+t08rx$d=k8t+# zz4nK1b~M-fzJ2Q&tkRv{lG8fOSYS*JO9R_taxQ-uXEKB-QME(y!nZS-&r?EOV;6)A>HRjA%Wa8s&GtQ-E=xMn>|*UJXZcE ztqM`7qT-3D2d~^{Y54hxX~N`a2umti1G8M(EZ6-+69z+64SpXh?WMe$Sp5Cn^~4Rr zb*tcZ<>Tv9j|@h>m#)YJTls6@$??dWb=YSV{CU}9^vicwOjPkKp#r%=Bw<(Rme4l6%OeRAgG_XnIq&U!bBCqHFmYS*YMoy=&e$2qzAH`Qw-*@%nF zc8$Cm_lsL5%Ti%xiSe8yrJ3T-KHHSaFCC&1LUGQEb4F*OEv{V1$~Lq8UcT`G#V;>c zsWetYZO;krt!I^fO34vSiH)@y$+=oksVoiBOJAdsBe6u6p&> zV0tZ3dh5_jqe=!YZ%qy3Qwao<$rzKO|owQnsaJUT7%5oEfD( zO!<@{|H0`wq6epDElzFW^!5bIe~gOygL@0G9s2x$h=0c50ZaDgki+$}%6O7*0=!8_ zjhC^vn{~-9akcNiADU$268hmAX7+jKyFfKt_2BC9Kmy!L+Vq`T@S) z5jeMTO58EYNn|F6P27IXVmTQOHR?j7f@HaID%@d}XGkx{C|MHg5HN9vEIb!YxA-+`7yBByzSoTZp52B$H!+L$DR9l&Kd8#yoH8ao(v;#G6y zC({~AH3nvQbD*(U3B~{t)5u?#?bowugkfS~o3`J3<|!-$Em8ws^w<-e3Zx#R4#2)( z+1IoQ_k4`*jIlXqhe&~SA$N2mY5$W&MzteEm3bq&}9^H8T_RgOI_zr3gms*u%&#U2$yN**oV|matsBq{;c=Y3> zQ20}7GDU|=A~TOJofaPt!3kCFa5c>=#>J0tKl~c*UN3(A@R#S(yJWt;#fMObAU~{v z-Sn?zvwH;VvC+t&n1@N0F4xZE@V1S%+wJkQsexN^MgES5By0+}2-ACTI<7a5PtIwZ zolGkmWCGutT);oCYmD(7tFq<6&&`Q1LHYNw|#B*d=+-P%9Gi60OXoD8IzqrY#e zC=fUlNS#3(_+DFk%=8cBAt z>Oj*n({hQ*FNRmHbENgxEsJ>LXulOx__B;Hj+>ZS)5E=a=kuaall8k}d=eDS`p%ns zo^KY@)URgyB(o4TG0B89$eC%`W_vSd6X$<+e|*Zkld}l6e&Fu~%4W}2vZjyBmV+aZ zW`7&!^NvkU^}{LaJ4u=!$EL=uAF>6P-%z2fPN~k*y4^Zv7n&{n>z{+ykk`;n(f=K> z>@2dyH(oSBl|<()qr|I3b!xVGj@P}$1P@ zHH+LKm1`lKO6J$iuE&>&y_%JjJhV&oQ0={V=;Khk1OM5K#!%ad)~-kN3-`Z;$)xX{ z^)}+S=7)KJUG+$?z`6iT3>@$$sxm6kOUyF@wj8#^VCVstLy@L3H|Ik&Wrf=p8$Nye zluyvr*oHrSU>e=F2EL4HTq$QC^V4MzdmQ}C6_QEQBw(c%FOfk7{RgNyx6ULAB}cv_ zHw~!7$^;$9bXra~?j@E*>n4W`B$hc#EDNuhKByNSWFB1Myl16CnPT-}wImOMo&&Y( z&ed^PrfpvRbWYjENli!oPTddjh(!Yu|hzbc{Tb}&b{bmuK>ImG@CnD%x<>&kg1TXESRWO-Pc`v zYc4c#r094YBgfNP7}tm?**LbeGfp-P%~h@E#R;XYDw*5*+Ln~fPR`x?xaCKoOQc)g zdX4Q-+ZcyyKv3`IZT>g#VV-|KEXesrfVND?fk}&VHnxf5vPMbiNm|QjiPlw;=ht3T z^Lq;1nS-vZB|q8aNC?AsHF9M)i{GlF-eH zOrJ+-Z*qmOdAh4E5w0=1$ys~PbhT!DompKX7DisZcd6{Dy5lbWyKkdh*Xfnc+SR+E zcLxc`hD8~`80X~a@+E5aXLj#{#h(j5U)H{I(`p!MV}VLUv=V4+nsV)mE&_xDw;RZo zmaBfVm*K5*q5i~?&+gN4C&F8Gr;=1D+Ap6_`7v~)GRc_ktQM18sPmd3{Ed zX0!^XEVN5~#y66Xb$ayzPmH)S?L=w-_~@h)58wH=4P@QscWtpZgSOCvfCbXGrMB3og3K_-tD z5ywA^NK$G?{WB?`8lI6+Vy1LxS}49J<>&^>M_q3wLAhWULG3m5TyDu41^yhH)9|j> zEco}H;qd+vts>Yt{cvJxJmkuzZ(4P*TTWg*Jav(8$KSe?%};;NsU^M7calsu_*m=d z(9B>RFp=y}LQw25%X82!g?&B4t>Je=b|>Cc(2<>;`}yEh-mGS0aB}n)?tky^wBT2z zc}1=fF7Wu5)=%Q{G;OmTt@WA_1Jg$O-yh=`P(R9P?XGXzx=By!XF=-}OF=?rn1Qiil%{2>hOVj?K#` zca}!~zZ)nzWRx=oula=w?<*PYRp5CT_{L=XJGQCo+W?zfuhd$scRh@CFs!I}o8?RQ z3;zCRyoY*ZW}^3vn&)QnW5-?3+Zyx0*d3klEV%cr)*)Ncyp=mNa(Gv`uf(;bNo(*b z(ZifE#_KBVJ+RuB5HsayOd17eOipOM=T5|JKEd1zKvon}6eA=tv#l`;%&vL{-?S3w zW}`r^xm?no*r@o!T>Xh&J#@yEST)~z&aVbd82J`$C_Bv6-+cxYr5mEPBK-|twq^8D-<+^qO>M0MSB zX=-xL_DG&TR7qQH^$ZO!7&arjS!lkpyhHm}^+Hlqg8r{R%p(QkgXm?5up2ZewlVwL zrkQy-RED$b%cTQ&?{h!ixNkcuz$;b|{;=?dB~g_S>1qVvTS8|djdXGNbrAGK1!Z-J zX+_zjpkzs)Kt`BswQueurtoh68u~^+aAQWjHOL3Py*3vH7N^F}&Q6<+|Jw#-T@D*j zC^-+Q&VK^EJ$RsJ18j6iP$GHiyLlsh;~z+O>Fofy48yq|iMzhBkl9#BT&0FVG9k)!0Zv#0g#1uS|6v0!8ySdz-h8GcBU7-mVJMJ{M*g8XA}r$0wvrd`xZ_Gk6@D2c<=``Ku`zyZI-yne>Xxo z+pr$gQ6G?sF4`QK%Kv5wMvlRPE?7b$1{`=R(^0SE_DVLOuT>y)>^x{k#(w-D1nwJ3 zw1d#`*KT@R(Wo~*NN(DL-Ad9&O zuHx@5Vo3c^HhjDNNeet1E971806`PtR6u-pH*|_n&l4E_2^5_R;E^JNw1IkP zLqWc|2Uv>Dx>DsJH|4dPjmIKrvi^Y50K7+5)9Q2mpg8IR;SKPk5W>3LYl#Es{Kp_O z$3XmSRWSeuk)!~19}z|v0>>vn(erMr50PLjE9VW$?0) z;uwVO7$7q4wRtn?PBFmeAWL@wf;|dNEiEJU@N5*J>5kgB&{C6?xy%t`3VvPGZ3198 z2KoyO^SX6QUzBD`7}D}2Axwer8Ew&hh^9ydo$Y?4^3+ram`5f6)eYCiBM(H~C}t8# z4KPqAlA-Wq5Um)93Km@uR3VaG&&EzoHk85uFH1gQv;cs_%!>K79B9ZQ9fwGmubm zzuj7>!u-)e!M%+Fd=fE(I*83iRycETD?+q29qLGd1_e5l(ThY!%-}pi%nm4XVjw+6 zKXoKiPYk6GAT5I&p-V%o~5UfXkP(CP#oH8V1BD`(Q* z@7g6GAYc;|>@hWfYl~tq4=P%Yp!f|4zaav30}eyCIO_jH>+UfYOI?a9<^WqSgdZLA zSQyNC23-9@KnfzaWMIrUZfIhGzZ2;?_qLZQK~8ju0O=+TXw{yYXQU^r0s(8gU{UD;z8o_>Z{-?NO7_dv7MLL+-h2&AVF$4L#JJ`YR` z6z~EnxlxE`EQTk<`u)R`2r}loH7^1LEp`Zr$H00D-pTsR@}Mys|yS_y)n#smcD z*U*(&7_2~ebT}`_Ob1x4Z}16}DTPRisL>0l)@U|@I1dyT?+;*qkU5|FPm)0)In1#C zPtAMFb!dnlkfU+}7NV_V`juzWFreKoXhy3kualx2MLb}tKM$c{NZvNB4oTyU?_c6q z1Kt1y)c`FaJ1ZO3Wx+7TYaDKkw<`&0 zQ=|YIga)zXQWNbZC8h3 zVHvFAfRWj`{9Ij@EAEJDT>In&?K*^@gN!7U7YgzinAgnVw!NgL)&lAsAo?M9CJK9# z905%tN=}6#8bqq2$m$6au=%%M3JRQHz|{ysk(emx2g093eYZtH85`WxqyTZH2DPec zY82N$B!|HlS-^~dKnGuHcMn8fz{emStp!9~R7Z|LwvU=As2M>Ou9MQV1&lGLi>TkuB##8(Bb9H>T{A=vva@gaf<8JQ$d5-V84k&Fa} zT{N%#!w&-OpULc!G^B8NK_(gwLj=?Wev>G87AJsTfRA;6F%>i;^82=HI;3`Ans_&> zLIaBKa1=QXGffM)aS@e!_6$vo55z4{pJRa3q1@VsT|e&6rIZ3n-G@V4D=++;sQ8ZeOB3j1s@tg-OuHTz!^;q_fd4){n{GM zt5==DOM&v6e|~$zjoD{~_n_z|B)WkhW)o5`*j^>&FeK2s)xlJX!nssJ&MOE<0cXL| z9h3?1K-~xen>sJbL@q8qd!I#u9xUnT#{Pw(FJXkbYfuoJmBszGx_Su~2otcj`vb!V z3N;V1f50R{0iqLdLZW$mcYFB?0w>Y;UzLAj{Sl>hqTw_d485=tZ3Kp8iyE7P)-2q@ zF@4`4SPF7t9GwhdSqd^DX9($qc?hWoL4sKi@-vV{;KCH}!W06*w=n@zfz43mx$7N| z17PH;GaUf(B*;`G(8!FYpOP=eLi(9@B;Z5;`o@|P4atxemxgXb2wjI!$!5AMw6%pe v&0!k{*O{Z}AOu&S-~V?G%m3^D-j?}2_VwG{oR6O|_)keuP2uHv)4=}&$$hjO diff --git a/private_files/scripts/gsm_tree_willems_data.py b/private_files/scripts/gsm_tree_willems_data.py deleted file mode 100644 index 0673b56..0000000 --- a/private_files/scripts/gsm_tree_willems_data.py +++ /dev/null @@ -1,94 +0,0 @@ -"""Code to read and solve instances from Willems (2007), which presents -38 GSM tree instances from real-world supply chains. - -'stdDev stageTime' field in Willems's data sets is ignored; that is, processing -times are treated as deterministic. - -Unfortunately the optimal solutions or costs are not available, so there is -no benchmark against which to compare the results. - -PROBLEM! These networks are not trees; they have (undirected) cycles. -Many contain "clusters of commonality," so they can be reduced to trees following -Humair and Willems (2006), but this is a whole other can of worms. -TODO: handle clusters of commonality -For now, this approach is a dead end. - -(c) Lawrence V. Snyder -Lehigh University - -""" - -import pandas as pd -#from scipy import stats -#import numpy as np -import time -import tabulate -import matplotlib.pyplot as plt - -from gsm_tree import * - - -node_df = pd.read_excel('MSOM-06-038-R2 Data Set in Excel.xls', sheet_name='01_SD') -edge_df = pd.read_excel('MSOM-06-038-R2 Data Set in Excel.xls', sheet_name='01_LL') - -#print(node_df) - -# Create tree. -tree = nx.DiGraph() - -# Add nodes. -tree.add_nodes_from(node_df['Stage Name']) -nx.set_node_attributes(tree, dict(zip(node_df['Stage Name'], node_df['stageCost'])), 'holding_cost') -nx.set_node_attributes(tree, dict(zip(node_df['Stage Name'], node_df['avgDemand'])), 'external_demand_mean') -nx.set_node_attributes(tree, dict(zip(node_df['Stage Name'], node_df['stdDevDemand'])), 'external_demand_standard_deviation') -nx.set_node_attributes(tree, dict(zip(node_df['Stage Name'], node_df['maxServiceTime'])), 'external_outbound_cst') -for r, _ in node_df.iterrows(): - if not np.isnan(node_df['serviceLevel'][r]): - tree.nodes[node_df['Stage Name'][r]]['demand_bound_constant'] = node_df['serviceLevel'][r] -nx.set_node_attributes(tree, dict(zip(node_df['Stage Name'], node_df['stageTime'])), 'processing_time') -nx.set_node_attributes(tree, dict(zip(node_df['Stage Name'], node_df['maxServiceTime'])), 'external_outbound_cst') - -# Loop through all nodes and all attributes and remove NaNs. -for i in tree.nodes: - for k, v in list(tree.nodes[i].items()): - if np.isnan(v): - del tree.nodes[i][k] - -# Add edges. -tree.add_edges_from(zip(edge_df['sourceStage'], edge_df['destinationStage'])) - -# Add problem instance label. -tree.graph['problem_name'] = '01' - -# Get layout information. -pos = {node_df['Stage Name'][r]: (node_df['xPosition'][r], node_df['yPosition'][r]) for r, _ in node_df.iterrows()} - -#for i in tree.nodes: -# print(i, tree.nodes[i]) - -nx.draw(tree, pos=pos) -plt.show() - -# -# tree = preprocess_tree(tree) -# start_time = time.time() -# -# opt_cost, opt_cst = optimize_committed_service_times(tree) -# -# end_time = time.time() -# -# # Get some other quantities based on the solution. -# SI = inbound_cst(tree, tree.nodes, opt_cst) -# nlt = net_lead_time(tree, tree.nodes, opt_cst) -# safety_stock = safety_stock_levels(tree, tree.nodes, opt_cst) -# base_stock = cst_to_base_stock_levels(tree, tree.nodes, opt_cst) -# -# # Display the results. -# print('\nSolved {:s} in {:.4f} seconds.'.format(tree.graph['problem_name'], -# end_time - start_time)) -# print('Optimal cost: {:.4f}'.format(opt_cost)) -# print('Optimal solution:\n') -# results = [] -# for k in tree.nodes: -# results.append([k, opt_cst[k], SI[k], nlt[k], safety_stock[k], base_stock[k]]) -# print(tabulate.tabulate(results, headers=['Stage', 'S', 'SI', 'NLT', 'Safety Stock', 'Base-Stock Level'])) diff --git a/private_files/scripts/kangye_simulations.py b/private_files/scripts/kangye_simulations.py deleted file mode 100644 index 018f20d..0000000 --- a/private_files/scripts/kangye_simulations.py +++ /dev/null @@ -1,95 +0,0 @@ -# This is necessary in order to make the import statements work. -import sys - -sys.path.append('../stockpyl') - -from stockpyl import sim -from stockpyl import sim_io -from stockpyl.instances import load_instance -from stockpyl.disruption_process import DisruptionProcess - - -# Number of periods. -T = 1000 - -# --------- EXAMPLE 6.1 (serial) --------- # - -# Load instance. -network = load_instance("example_6_1") - -# Add shipment-pausing disruptions at node 2. -network.get_node_from_index(2).disruption_process = DisruptionProcess( - random_process_type='M', # Markovian - disruption_type='SP', # shipment-pausing - disruption_probability=0.1, - recovery_probability=0.3 -) - -# Simulate the system. -total_cost = sim.simulation(network=network, num_periods=T, rand_seed=42) - -# Write results to CSV file. -sim_io.write_results( - network=network, - num_periods=T, - write_csv=True, - csv_filename='aux_files/sim_results_example_6_1.csv' -) - -# --------- ROSLING FIGURE 1 (assembly) --------- # - -# Load instance. -network = load_instance("rosling_figure_1") - -# Add shipment-pausing disruptions at node 4. -network.get_node_from_index(4).disruption_process = DisruptionProcess( - random_process_type='M', # Markovian - disruption_type='SP', # shipment-pausing - disruption_probability=0.05, - recovery_probability=0.2 -) - -# Simulate the system. -total_cost = sim.simulation(network=network, num_periods=T, rand_seed=42) - -# Write results to CSV file. -sim_io.write_results( - network=network, - num_periods=T, - write_csv=True, - csv_filename='aux_files/sim_results_rosling_figure_1.csv' -) - - -# --------- RONG, ATAN, SNYDER FIGURE 1a (distribution) --------- # - -# Load instance. -network = load_instance("rong_atan_snyder_figure_1a") - -# Add shipment-pausing disruptions at node 0 and 5. -# NOTE: If your simulation can't handle independent disruptions at two different nodes, -# comment out one of them below. -network.get_node_from_index(0).disruption_process = DisruptionProcess( - random_process_type='M', # Markovian - disruption_type='SP', # shipment-pausing - disruption_probability=0.05, - recovery_probability=0.3 -) -network.get_node_from_index(5).disruption_process = DisruptionProcess( - random_process_type='M', # Markovian - disruption_type='SP', # shipment-pausing - disruption_probability=0.2, - recovery_probability=0.5 -) - -# Simulate the system. -total_cost = sim.simulation(network=network, num_periods=T, rand_seed=42) - -# Write results to CSV file. -sim_io.write_results( - network=network, - num_periods=T, - write_csv=True, - csv_filename='aux_files/sim_results_rong_atan_snyder_figure_1a.csv' -) - diff --git a/private_files/scripts/prob_dist_tests.py b/private_files/scripts/prob_dist_tests.py deleted file mode 100644 index 69694a1..0000000 --- a/private_files/scripts/prob_dist_tests.py +++ /dev/null @@ -1,104 +0,0 @@ -import sys -from scipy.stats import uniform, randint -import matplotlib.pyplot as plt - -sys.path.append('/Users/larry/Documents/GitHub/stockpyl') - -from stockpyl.helpers import * - - -def run_irwin_hall_cdf_test(): - """Test ``helpers.irwin_hall_cdf()``. This is not a unit test; it must be - run manually. It simulates many sums of uniform distributions and plots - their empirical cdf against the calculated cdf. - - """ - - n = 4 - T = 100000 - nbins = 100 - - sums = [] - for t in range(T): - sums.append(np.sum(uniform.rvs(size=n))) - - x = np.arange(0, n, n * 1.0/nbins) - F_empirical = np.zeros(np.size(x)) - F_calc = np.zeros(np.size(x)) - for b in range(nbins): - F_empirical[b] = np.sum(1 if sums[t] < x[b] else 0 for t in range(T)) / T - F_calc[b] = irwin_hall_cdf(x[b], n) - - plt.plot(x, F_empirical, 'r') - plt.plot(x, F_calc, 'b') - plt.show() - - -def run_sum_of_continuous_uniforms_distribution_test(): - """Test ``helpers.sum_of_continuous_uniforms_distribution()``. This is not a unit test; - it must be run manually. It simulates many sums of uniform distributions and - plots their empirical cdf against the calculated cdf. - - """ - - n = 4 - lo = 20 - hi = 60 - T = 10000 - nbins = 100 - - sums = [] - for t in range(T): - sums.append(np.sum(uniform.rvs(lo, hi-lo, size=n))) - - dist = sum_of_continuous_uniforms_distribution(n, lo, hi) - - x = np.arange(n*lo, n*hi, n * (hi-lo)/nbins) - F_empirical = np.zeros(np.size(x)) - F_calc = np.zeros(np.size(x)) - for b in range(nbins): - F_empirical[b] = np.sum(1 if sums[t] < x[b] else 0 for t in range(T)) / T - F_calc[b] = dist.cdf(x[b]) - - plt.plot(x, F_empirical, 'r') - plt.plot(x, F_calc, 'b') - plt.show() - - -def run_sum_of_discrete_uniforms_distribution_test(): - """Test ``helpers.sum_of_discrete_uniforms_distribution()``. This is not a unit test; - it must be run manually. It simulates many sums of uniform distributions and - plots their empirical cdf against the calculated cdf. - - """ - - n = 4 - lo = 20 - hi = 60 - T = 10000 - nbins = 100 - - sums = [] - for t in range(T): - sums.append(np.sum(randint.rvs(lo, hi + 1, size=n))) - - dist = sum_of_discrete_uniforms_distribution(n, lo, hi) - - x = np.arange(n*lo, n*hi, n * (hi-lo)/nbins) - F_empirical = np.zeros(np.size(x)) - F_calc = np.zeros(np.size(x)) - for b in range(nbins): - F_empirical[b] = np.sum(1 if sums[t] < x[b] else 0 for t in range(T)) / T - F_calc[b] = dist.cdf(x[b]) - - plt.plot(x, F_empirical, 'r') - plt.plot(x, F_calc, 'b') - plt.show() - - -#test_irwin_hall_cdf() -#run_sum_of_continuous_uniforms_distribution_test() -run_sum_of_discrete_uniforms_distribution_test() - -#dist = sum_of_discrete_uniforms_distribution(2, 5, 10) -#print(dist.pmf(18)) diff --git a/private_files/scripts/run_sim.py b/private_files/scripts/run_sim.py deleted file mode 100644 index 25a31cc..0000000 --- a/private_files/scripts/run_sim.py +++ /dev/null @@ -1,151 +0,0 @@ -# This is necessary in order to make the import statements work. -import sys - -#sys.path.append('../../src') - -from stockpyl import sim -from ...src.stockpyl import sim_io -from ...src.stockpyl import supply_chain_network -from ...src.stockpyl import supply_chain_node -from ...src.stockpyl import instances -from ...src.stockpyl import policy -from ...src.stockpyl import demand_source - -import numpy as np - -# Number of periods. -T = 1000 - -# Build a serial system. The function serial_system() does it for you. -# It returns a SupplyChainNetwork object, which is what the simulation needs. -# The data below replicate Example 6.1 from Fundamentals of Supply Chain Theory 2e. -serial_3 = supply_chain_network.serial_system( - num_nodes=3, - node_order_in_system=[3, 2, 1], - node_order_in_lists=[1, 2, 3], - local_holding_cost=[7, 4, 2], - stockout_cost=[37.12, 0, 0], - shipment_lead_time=[1, 1, 2], - demand_type='N', - mean=5, - standard_deviation=1, - policy_type='BS', - base_stock_level=[6.49, 12.02-6.49, 22.71-12.02] -) - -# Simulate the system. -total_cost = sim.simulation( - network=serial_3, - num_periods=T, - rand_seed=42 -) -print(f"avg. cost per period = {total_cost/T}") - -# Write the results. You can write them to the console or to a file. -# Here, I'm writing them to the console. -sim_io.write_results( - network=serial_3, - num_periods=T, - periods_to_print=100, - write_csv=False -) - -# You can also load named instances, most of which are from the book. -serial_3 = instances.load_instance("example_6_1") -# If we simulate it, we should get the same results. -total_cost = sim.simulation(network=serial_3, num_periods=T, rand_seed=42) -print(f"avg. cost per period using named instance = {total_cost/T:.6f}") - -# Let's simulate the same system, but using echelon base-stock policies instead of local. -# Calculate echelon base-stock levels. -S_local = {n.index: n.inventory_policy.base_stock_level for n in serial_3.nodes} -S_echelon = supply_chain_network.local_to_echelon_base_stock_levels(serial_3, S_local) - -# Create and fill echelon base-stock policies. -for n in serial_3.nodes: - n.inventory_policy.type = 'EBS' - n.inventory_policy.base_stock_level = S_echelon[n.index] - -# Simulate with echelon BS policy. -total_cost_ech = sim.simulation(serial_3, T, rand_seed=42) -print(f"avg. cost per period using echelon BS policies = {total_cost/T:.6f}") - - -# Here we'll build an assembly system -- a "multiple warehouse, one retailer" system. -assembly_3_stage_network = supply_chain_network.mwor_system( - num_warehouses=2, - local_holding_cost=[2, 1, 1], - stockout_cost=[20, 0, 0], - demand_type='N', - demand_mean=5, - demand_standard_deviation=1, - shipment_lead_time=[1, 2, 2], - inventory_policy_type='BS', - base_stock_levels=[7, 13, 11], - initial_IL=[7, 13, 11], - downstream_0=True -) -# Tell it to round the demands to integers. -assembly_3_stage_network.nodes[0].demand_source.round_to_int = True -# Simulate. -total_cost = sim.simulation(network=assembly_3_stage_network, num_periods=T, rand_seed=17) -print(f"avg. cost per period for MWOR system = {total_cost/T:.6f}") - - -# If you want to build your own network from scratch, the easiest way is to specify -# the edges, and the data for each node, and call network_from_edges(). Here's -# an example that builds the distribution system in Figure 1(a) from Rong, Atan, and Snyder (2017), -# but using normal demand instead of Poisson (I haven't implemented Poisson demand yet). -rong_atan_snyder_figure_1a = supply_chain_network.network_from_edges( - edges=[(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), (2, 6)], - demand_type={0: None, 1: None, 2: None, 3: 'N', 4: 'N', 5: 'N', 6: 'N'}, - demand_mean=8, - demand_standard_deviation=np.sqrt(8), - local_holding_cost={0: 1/3, 1: 2/3, 2: 2/3, 3: 1, 4: 1, 5: 1, 6: 1}, - stockout_cost=20, - shipment_lead_time=1, - inventory_policy_type='BS', - base_stock_levels={i: 0 for i in range(0, 7)} # need to provide a value here, but will overwrite below -) -# Replace the base-stock levels with mean + 3 * SD for "derived demand" distribution -# (external demand plus demand from downstream nodes). -for n in rong_atan_snyder_figure_1a.nodes: - n.inventory_policy.base_stock_level = n.derived_demand_mean + 3 * n.derived_demand_standard_deviation - -# Simulate. -total_cost = sim.simulation(network=rong_atan_snyder_figure_1a, num_periods=T, rand_seed=17) -print(f"avg. cost per period for distribution system = {total_cost/T:.6f}") - - -# You can also build the network node-by-node, but it's more tedious. Here's the same distribution system: -# Initialize network. -rong_atan_snyder_figure_1a_v2 = supply_chain_network.SupplyChainNetwork() -# Build nodes. -node0 = supply_chain_node.SupplyChainNode(index=0, local_holding_cost=1/3, stockout_cost=0, shipment_lead_time=1) -node1 = supply_chain_node.SupplyChainNode(index=1, local_holding_cost=2/3, stockout_cost=0, shipment_lead_time=1) -node2 = supply_chain_node.SupplyChainNode(index=2, local_holding_cost=2/3, stockout_cost=0, shipment_lead_time=1) -node3 = supply_chain_node.SupplyChainNode(index=3, local_holding_cost=1, stockout_cost=20, shipment_lead_time=1) -node4 = supply_chain_node.SupplyChainNode(index=4, local_holding_cost=1, stockout_cost=20, shipment_lead_time=1) -node5 = supply_chain_node.SupplyChainNode(index=5, local_holding_cost=1, stockout_cost=20, shipment_lead_time=1) -node6 = supply_chain_node.SupplyChainNode(index=6, local_holding_cost=1, stockout_cost=20, shipment_lead_time=1) -# Add nodes to network. -rong_atan_snyder_figure_1a_v2.add_node(node0) -rong_atan_snyder_figure_1a_v2.add_successor(node0, node1) -rong_atan_snyder_figure_1a_v2.add_successor(node0, node2) -rong_atan_snyder_figure_1a_v2.add_successor(node1, node3) -rong_atan_snyder_figure_1a_v2.add_successor(node1, node4) -rong_atan_snyder_figure_1a_v2.add_successor(node2, node5) -rong_atan_snyder_figure_1a_v2.add_successor(node2, node6) -# Add demand sources to leaf nodes. -for n in rong_atan_snyder_figure_1a_v2.sink_nodes: - n.demand_source = demand_source.DemandSource(type='N', mean=8, standard_deviation=np.sqrt(8)) -# Add inventory policy to each node. -for n in rong_atan_snyder_figure_1a_v2.nodes: - inventory_policy = policy.Policy() - inventory_policy.type = 'BS' - inventory_policy.base_stock_level = n.derived_demand_mean + 3 * n.derived_demand_standard_deviation - n.inventory_policy = inventory_policy - -# Simulate. -total_cost = sim.simulation(network=rong_atan_snyder_figure_1a, num_periods=T, rand_seed=17) -print(f"avg. cost per period for distribution system built node-by-node = {total_cost/T:.6f}") diff --git a/private_files/scripts/sim_disruption.py b/private_files/scripts/sim_disruption.py deleted file mode 100644 index 0246207..0000000 --- a/private_files/scripts/sim_disruption.py +++ /dev/null @@ -1,128 +0,0 @@ -# This is necessary in order to make the import statements work. -import sys - -sys.path.append('../stockpyl') - -from stockpyl import sim -from stockpyl import sim_io -from stockpyl import supply_chain_network -from stockpyl import supply_chain_node -from stockpyl import instances -from stockpyl import policy -from stockpyl import demand_source -from stockpyl import disruption_process -from stockpyl import supply_uncertainty - -import numpy as np -import datetime - -# Number of periods. -T = 100 - -# Single-stage system with deterministic demand (Example 9.3). -if False: - single_stage = supply_chain_network.single_stage( - holding_cost=0.25, - stockout_cost=3, - demand_type='D', - demand_list=2000, - inventory_policy_type='BS', - base_stock_level=8000, - shipment_lead_time=1 - ) - single_stage.nodes[0].disruption_process = disruption_process.DisruptionProcess( - random_process_type='M', - disruption_type='OP', - disruption_probability=0.04, - recovery_probability=0.25 - ) - total_cost = sim.simulation( - network=single_stage, - num_periods=T, - rand_seed=None - ) - sim_io.write_results( - network=single_stage, - num_periods=T, - periods_to_print=100, - write_csv=False - # csv_filename='private_files/debugging_files/ss_disr.csv' - ) - print(f"avg. cost per period = {total_cost/T} (expected {supply_uncertainty.newsvendor_with_disruptions(0.25, 3, 2000, 0.04, 0.25, 8000)[1]})") - print(f"avg. disrupted periods = {np.sum([single_stage.nodes[0].state_vars[t].disrupted for t in range(T)]) / T} (expected {single_stage.nodes[0].disruption_process.steady_state_probabilities()[1]})") - -if False: - # Build two-stage system with deterministic demand. 1 --> 0 - two_stage_determ = supply_chain_network.serial_system( - num_nodes=2, - node_order_in_system=[1, 2], - local_holding_cost=[1, 2], - stockout_cost=[0, 10], - shipment_lead_time=[1, 4], - demand_type='D', - demand_list=[0, 10], - policy_type='BS', - base_stock_level=[10, 90] - ) - # Downstream stage (stage 0) is subject to disruptions. - two_stage_determ.get_node_from_index(0).disruption_process = disruption_process.DisruptionProcess( - random_process_type='M', - disruption_type='SP', - disruption_probability=0.05, - recovery_probability=0.3 - ) - # Set ITHC=0 to avoid artificial increase in cost when L increases. - for n in two_stage_determ.nodes: - n.in_transit_holding_cost = 0 - - # Simulate. - total_cost = sim.simulation(network=two_stage_determ, num_periods=T, rand_seed=42) - sim_io.write_results( - network=two_stage_determ, - num_periods=T, - # num_periods_to_print=100, - write_csv=True, - csv_filename='/Users/larry/Documents/GitHub/stockpyl/private_files/debugging_files/ss_disr.csv' - ) - print(f"avg. cost per period = {total_cost/T} ") - print(f"avg. disrupted periods = {np.sum([two_stage_determ.get_node_from_index(1).state_vars[t].disrupted for t in range(T)]) / T} (expected {two_stage_determ.get_node_from_index(1).disruption_process.steady_state_probabilities()[1]})") - - -# filename = 'saved_instance_'+str(datetime.datetime.now()) -# sim_io.write_instance_and_states( -# network=two_stage_determ, -# filepath='/Users/larry/Documents/GitHub/stockpyl/private_files/debugging_files/'+filename+'.json', -# instance_name='temp' -# ) - -if True: - # Build network. - network = instances.load_instance("rong_atan_snyder_figure_1a") - # for n in network.sink_nodes: - # n.demand_source.type = 'D' - # n.demand_source.demand_list = 10 - # Add disruptions. - network.get_node_from_index(1).disruption_process = disruption_process.DisruptionProcess( - random_process_type='M', - disruption_type='OP', - disruption_probability=0.1, - recovery_probability=0.3 - ) - network.get_node_from_index(3).disruption_process = disruption_process.DisruptionProcess( - random_process_type='M', - disruption_type='SP', - disruption_probability=0.1, - recovery_probability=0.3 - ) - - # Simulate. - total_cost = sim.simulation(network=network, num_periods=T, rand_seed=42, consistency_checks='E') - sim_io.write_results( - network=network, - num_periods=T, -# num_periods_to_print=10, - write_csv=True, - csv_filename='/Users/larry/Documents/GitHub/stockpyl/private_files/debugging_files/ss_disr.csv' - ) - print(f"avg. cost per period = {total_cost/T} ") - print(f"avg. disrupted periods = {np.sum([network.get_node_from_index(1).state_vars[t].disrupted for t in range(T)]) / T} (expected {network.get_node_from_index(1).disruption_process.steady_state_probabilities()[1]})") diff --git a/private_files/scripts/sim_example_scratch.py b/private_files/scripts/sim_example_scratch.py deleted file mode 100644 index 687d914..0000000 --- a/private_files/scripts/sim_example_scratch.py +++ /dev/null @@ -1,116 +0,0 @@ -from stockpyl.supply_chain_network import single_stage_system, serial_system -from stockpyl.sim import simulation -from stockpyl.sim_io import write_results -from stockpyl.instances import load_instance - -import math - -# network = single_stage_system( -# demand_type='P', # Poisson demand -# mean=10, -# policy_type='BS', # base-stock policy -# base_stock_level=13, -# order_lead_time=0, -# shipment_lead_time=1 -# ) -# _ = simulation(network=network, num_periods=4, rand_seed=42, progress_bar=False) -# write_results(network=network, num_periods=4, columns_to_print='basic', print_cost_summary=False) -# network = single_stage_system( -# holding_cost=0.18, -# stockout_cost=0.70, -# demand_type='N', # normal demand -# mean=50, -# standard_deviation=8, -# policy_type='BS', # base-stock policy -# base_stock_level=264.8, -# shipment_lead_time=4, -# order_lead_time=1 # to account for difference in SoE -# ) -# total_cost = simulation(network=network, num_periods=1000, rand_seed=42, progress_bar=False) -# print(total_cost / 1000) -# network = serial_system( -# num_nodes=3, -# node_order_in_system=[3, 2, 1], -# local_holding_cost={1: 7, 2: 4, 3: 2}, -# shipment_lead_time={1: 1, 2: 1, 3: 2}, -# stockout_cost=37.12, -# demand_type='N', -# mean=5, -# standard_deviation=1, -# policy_type='EBS', # echelon base-stock policy -# base_stock_level={1: 6.49, 2: 12.02, 3: 22.71} -# ) -# #network = load_instance("example_6_1") -# total_cost = simulation(network=network, num_periods=1000, rand_seed=42, progress_bar=False) -# print(total_cost / 1000) - -from stockpyl.disruption_process import DisruptionProcess - -# def holding_cost(x): -# return 0.5 * max(x, 0)**2 - -# network = single_stage_system( -# local_holding_cost_function=holding_cost, -# stockout_cost_function=lambda x: 10 * math.sqrt(max(-x, 0)), -# demand_type='P', -# mean=15, -# policy_type='BS', -# base_stock_level=17, -# lead_time=1 -# ) -# T = 100 -# total_cost = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) -# #print(f"Total cost per period = {total_cost / T}") -# write_results(network=network, num_periods=T, periods_to_print=list(range(6)), columns_to_print='costs', print_cost_summary=False) - -# network = serial_system( -# num_nodes=2, -# node_order_in_system=[1, 2], -# shipment_lead_time=1, -# demand_type='P', -# mean=20, -# policy_type='BS', -# base_stock_level=[25, 25] -# ) - - -# RUN MULTIPLE TRIALS -# from stockpyl.ssm_serial import optimize_base_stock_levels, newsvendor_heuristic -# from stockpyl.supply_chain_network import echelon_to_local_base_stock_levels -# from stockpyl.sim import run_multiple_trials -# # Load network. -# network = load_instance("example_6_1") -# # Set base-stock levels according to optimal solution. -# S_opt, _ = optimize_base_stock_levels(network=network) -# S_opt_local = echelon_to_local_base_stock_levels(network, S_opt) -# for n in network.nodes: -# n.inventory_policy.base_stock_level = S_opt_local[n.index] -# mean_opt, sem_opt = run_multiple_trials(network=network, num_trials=10, num_periods=1000, rand_seed=42, progress_bar=False) -# print(f"Optimal solution has simulated average cost per period with mean {mean_opt} and SEM {sem_opt}") -# # Set base-stock levels according to heuristic solution. -# S_heur = newsvendor_heuristic(network=network) -# S_heur_local = echelon_to_local_base_stock_levels(network, S_heur) -# for n in network.nodes: -# n.inventory_policy.base_stock_level = S_heur_local[n.index] -# mean_heur, sem_heur = run_multiple_trials(network=network, num_trials=10, num_periods=1000, rand_seed=42, progress_bar=False) -# print(f"Heuristic solution has simulated average cost per period with mean {mean_heur} and SEM {sem_heur}") -# # Calculate confidence intervals. -# from scipy.stats import norm -# z = norm.ppf(1 - (1 - 0.95)/2) -# lo_opt, hi_opt = mean_opt - z * sem_opt, mean_opt + z * sem_opt -# lo_heur, hi_heur = mean_heur - z * sem_heur, mean_heur + z * sem_heur -# print(f"Optimal solution CI = [{lo_opt}, {hi_opt}], heuristic solution CI = [{lo_heur}, {hi_heur}]") - - -# SIMULATION WITH DISRUPTIONS -network = load_instance("example_6_1") -network.get_node_from_index(2).disruption_process = DisruptionProcess( - random_process_type='M', - disruption_type='RP', - disruption_probability=0.1, - recovery_probability=0.4 -) -T = 100 -_ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) -#write_results(network=network, num_periods=T, periods_to_print=list(range(7, 16)), columns_to_print=['DISR', 'IO', 'OQ', 'IS', 'OS', 'IL', 'ISPL', 'IDI'], print_cost_summary=False) -#write_results(network=network, num_periods=T, print_cost_summary=False, write_csv=True, csv_filename='tests/additional_files/test_sim_disruption_example_6_1_RP.csv') \ No newline at end of file diff --git a/private_files/scripts/test_disruption_types.py b/private_files/scripts/test_disruption_types.py deleted file mode 100644 index 69d688d..0000000 --- a/private_files/scripts/test_disruption_types.py +++ /dev/null @@ -1,89 +0,0 @@ -# This is necessary in order to make the import statements work. -import sys - -sys.path.append('../stockpyl') - -from stockpyl import sim -from stockpyl import sim_io -from stockpyl import supply_chain_network -from stockpyl import supply_chain_node -from stockpyl import instances -from stockpyl import policy -from stockpyl import demand_source -from stockpyl import disruption_process -from stockpyl import supply_uncertainty - -import numpy as np -import tqdm -import matplotlib.pyplot as plt - -# Number of periods. -T = 10000 - -# Two-stage system with deterministic demand. 0 --> 1 -two_stage_determ = supply_chain_network.serial_system( - num_nodes=2, - local_holding_cost=[1, 2], - stockout_cost=[0, 10], - shipment_lead_time=[1, 1], - demand_type='D', - list=[0, 10], - policy_type='BS', - base_stock_level=[10, 10] -) -# Downstream stage (stage 1) is subject to disruptions. -two_stage_determ.get_node_from_index(1).disruption_process = disruption_process.DisruptionProcess( - random_process_type='M', - disruption_type='OP', - disruption_probability=0.05, - recovery_probability=0.3 -) -# Set ITHC=0 to avoid artificial increase in cost when L increases. -for n in two_stage_determ.nodes: - n.in_transit_holding_cost = 0 - -# Lists to iterate over. -dt_list = ('OP', 'SP', 'TP', 'RP') -lt_list = list(range(10)) - -# Progress bar. -pbar = tqdm.tqdm(total=len(dt_list)*len(lt_list)) - -# Rand seed. -np.random.seed(42) - -# Results. -results = {} - -# Loop through disruption types. -for dt in dt_list: - results[dt] = [] - - # Loop through lead times. - for lt in lt_list: - pbar.update() - - # Fill parameters. - node1 = two_stage_determ.get_node_from_index(1) - node1.shipment_lead_time = lt - node1.disruption_process.disruption_type = dt - node1.inventory_policy.base_stock_level = node1.demand_source.demand_list * (lt + 1) - - # Simulate. - total_cost = sim.simulation(network=two_stage_determ, num_periods=T, rand_seed=None, progress_bar=False) - - # Store results. - results[dt].append(total_cost/T) - -# Plot results. -plt.figure() -#plt.plot(lt_list, results['OP'], lt_list, results['SP'], lt_list, results['TP'], lt_list, results['RP']) -plt.plot(lt_list, results['OP'], marker='o', label='OP') -plt.plot(lt_list, results['SP'], marker='o', label='SP') -plt.plot(lt_list, results['TP'], marker='o', label='TP') -plt.plot(lt_list, results['RP'], marker='o', label='RP') -plt.legend() -plt.xlabel('Lead Time') -plt.ylabel('Avg. Cost/Period') -plt.title('2-Stage System, Deterministic Demand, alpha=0.05, beta=0.3, S=10*(L+1)') -plt.show() \ No newline at end of file diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 9f23941..8b1e274 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -399,7 +399,7 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Place orders to all raw material suppliers (predecessors that provide this product/node with # a raw material). - for p in node.raw_material_suppliers(product_index=prod.index): + for p in node.raw_material_suppliers_by_product(product_index=prod.index): p_index = p.index if p is not None else None # Loop through products at predecessor and determine which ones are raw materials for prod. @@ -458,14 +458,14 @@ def _generate_downstream_shipments(node_index, network, period, visited, consist # Shortcuts. node = network.get_node_from_index(node_index) - # Remember starting IL. + # Remember starting IL (as dict by product). starting_inventory_level = node.state_vars_current.inventory_level # Receive inbound shipments. (Set inbound_shipment, remove from shipment # pipeline, update OO.) _receive_inbound_shipments(node) - # Convert raw materials to finished goods. + # Convert raw materials to finished goods. (Returns dict by) new_finished_goods = _raw_materials_to_finished_goods(node) # Process outbound shipments. @@ -528,11 +528,10 @@ def _initialize_state_vars(network): + (n.get_attribute('initial_orders', prod) or 0) * (n.get_attribute('order_lead_time', prod) or 0) # Initialize raw material inventory. - for rm_index in n.raw_material_indices(network_BOM=True): + for rm_index in n.raw_material_indices_by_product(product_index='all', network_BOM=True): n.state_vars[0].raw_material_inventory[rm_index] = 0 - def _receive_inbound_orders(node): """Receive inbound orders: @@ -588,7 +587,7 @@ def _initialize_next_period_state_vars(network, period): # Shortcut to predecessor index. p_index = p.index if p is not None else None # Loop through raw materials at predecessor. - for rm_index in (p.products if p is not None else [None]): + for rm_index in (p.products if p is not None else [n._external_supplier_dummy_product.index]): # Is there a transit-pausing disruption? if n.disrupted and n.get_attribute('disruption_process', rm_index).disruption_type == 'TP': @@ -628,11 +627,11 @@ def _initialize_next_period_state_vars(network, period): for p in n.predecessors(include_external=True): p_index = p.index if p is not None else None # Loop through raw materials at predecessor. - for rm_index in (p.products if p is not None else [None]): + for rm_index in (p.products if p is not None else [n._external_supplier_dummy_product.index]): n.state_vars[period + 1].on_order_by_predecessor[p_index][rm_index] = \ n.state_vars[period].on_order_by_predecessor[p_index][rm_index] - n.state_vars[period + 1].raw_material_inventory[p_index][rm_index] = \ - n.state_vars[period].raw_material_inventory[p_index][rm_index] + n.state_vars[period + 1].raw_material_inventory[rm_index] = \ + n.state_vars[period].raw_material_inventory[rm_index] n.state_vars[period + 1].inbound_disrupted_items[p_index][rm_index] = \ n.state_vars[period].inbound_disrupted_items[p_index][rm_index] @@ -673,10 +672,13 @@ def _calculate_period_costs(network, period): except TypeError: n.state_vars[period].holding_cost_incurred += (n.get_attribute('local_holding_cost', prod_index) or 0) * items_held # Raw materials holding cost. + # TODO: fix this!! this is multiple-counting RM inventory holding cost because there's only + # 1 but there's a loop over p. How to handle the fact that RM inventory is not predecessor-specific + # but its holding cost comes from teh predecessor??? for p in n.predecessors(include_external=False): n.state_vars[period].holding_cost_incurred += \ (p.get_attribute('local_holding_cost', prod_index) or 0) * \ - (n.state_vars[period].raw_material_inventory[p.index][prod_index] \ + (n.state_vars[period].raw_material_inventory[prod_index] \ + n.state_vars[period].inbound_disrupted_items[p.index][prod_index]) # Stockout cost. try: @@ -727,7 +729,7 @@ def _receive_inbound_shipments(node): p_index = p.index if p is not None else None # Loop through raw materials at predecessor. - for rm_index in (p.products if p is not None else [None]): + for rm_index in (p.products if p is not None else [node._external_supplier_dummy_product.index]): # Determine number of items that will be received from p (if there is no disruption), # not including inbound disrupted items waiting to be received. ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][rm_index][0] @@ -751,7 +753,7 @@ def _receive_inbound_shipments(node): # Remove shipment from pipeline. node.state_vars_current.inbound_shipment_pipeline[p_index][rm_index][0] = 0 # Add shipment to raw material inventory. - node.state_vars_current.raw_material_inventory[p_index][rm_index] += IS + node.state_vars_current.raw_material_inventory[rm_index] += IS # Update on-order inventory. node.state_vars_current.on_order_by_predecessor[p_index][rm_index] -= ready_to_receive # Update inbound_disrupted_items. @@ -771,28 +773,43 @@ def _raw_materials_to_finished_goods(node): Returns ------- - new_finished_goods : float - Number of new finished goods added to inventory this period. + new_finished_goods : dict + Dict whose keys are indices of products at ``node`` and whose values are + the corresponding number of new finished goods added to inventory this period. """ + + # TODO: currently assumes product is infinitely divisble, i.e., if need 2 units of A and 2 of + # B to make the product, and have 1.5 units of A and 2 of B, will make 0.75 units of product. + # Make it an option to choose whether to allow this, or require integer multiples of the BOM number to + # be available, i.e., require integer number of items to be processed. + # Determine number of units of each product that can be processed. new_finished_goods = {} for prod_index in node.product_indices: - # Determine number of available units of each raw material for this product. + # Shortcut to product and BOM. + prod = node.products_by_index[prod_index] + BOM = {} + for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True): + BOM[rm_index] = prod.BOM(rm_index) + if BOM[rm_index] == 0: + # Raw material is a dummy product (it's not in the product's BOM). + # BOM always = 1 in this case. + BOM[rm_index] = 1 + + # Determine number of available units of each raw material for this product, # in units of the product. - avail_rm = {} - for p in node.raw_material_suppliers(prod_index): - p_index = p.index if p is not None else None - for rm_index in p.products: - pass ## STOPPED - # avail_rm[p_index] = node.state_vars_current.raw_material_inventory[p_index][] - # new_finished_goods = float(np.min([node.state_vars_current.raw_material_inventory[p_index] - # for p_index in node.predecessor_indices(include_external=True)])) - - # Process units: remove from raw material inventory and add to finished goods. - for p_index in node.predecessor_indices(include_external=True): - node.state_vars_current.raw_material_inventory[p_index] -= new_finished_goods - node.state_vars_current.inventory_level += new_finished_goods + avail_rm = {rm_index: node.state_vars_current.raw_material_inventory[rm_index] / BOM[rm_index] + for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True)} + + # Determine number of units that can be processed. + new_finished_goods[prod_index] = min(avail_rm.values()) + + # Process units: remove from raw material and add to finished goods. + for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True): + node.state_vars_current.raw_material_inventory[rm_index] \ + -= new_finished_goods[prod_index] * BOM[rm_index] + node.state_vars_current.inventory_level return new_finished_goods @@ -814,113 +831,118 @@ def _process_outbound_shipments(node, starting_inventory_level, new_finished_goo ---------- node : |class_node| The supply chain node. - starting_inventory_level : float - Starting inventory level for the period. - new_finished_goods : float - Number of new finished goods added to inventory this period. + starting_inventory_level : dict + Dict whose keys are indices of products at ``node`` and whose values are the corresponding + starting inventory level for the period. + new_finished_goods : dict + Dict whose keys are indices of products at ``node`` and whose values are + the corresponding number of new finished goods added to inventory this period. consistency_checks : str, optional String indicating whether to run consistency checks (backorder calculations) and what to do if check fails. For currently supported strings, see docstring for simulation(). """ - # Determine current on-hand and backorders (after new finished goods are - # added but before demand is subtracted). - current_on_hand = max(0.0, starting_inventory_level) + new_finished_goods - current_backorders = max(0.0, -starting_inventory_level) - - global issued_backorder_warning - if consistency_checks in ('W', 'WF', 'E', 'EF') and not issued_backorder_warning: - # Double-check BO calculations. - current_backorders_check = node._get_attribute_total('backorders_by_successor', node.network.period) - if not np.isclose(current_backorders, current_backorders_check): - if consistency_checks in ('WF', 'EF'): - # Write instance and simulation data to file. - filename = 'failed_instance_' + str(datetime.datetime.now()) - filepath = 'aux_files/' + filename + '.json' - write_instance_and_states( - network=node.network, - filepath=filepath, - instance_name='failed_instance' - ) - # Issue warning. - # See https://stackoverflow.com/q/287871/3453768 for terminal text color. - if consistency_checks in ('W', 'WF'): - textcolor = '\033[93m' + + # Loop through products at this node. + for prod_index in node.product_indices: + + # Determine current on-hand and backorders (after new finished goods are + # added but before demand is subtracted). + current_on_hand = max(0.0, starting_inventory_level[prod_index]) + new_finished_goods[prod_index] + current_backorders = max(0.0, -starting_inventory_level[prod_index]) + + global issued_backorder_warning + if consistency_checks in ('W', 'WF', 'E', 'EF') and not issued_backorder_warning: + # Double-check BO calculations. + current_backorders_check = node._get_attribute_total('backorders_by_successor', node.network.period, product_index=prod_index) + if not np.isclose(current_backorders, current_backorders_check): + if consistency_checks in ('WF', 'EF'): + # Write instance and simulation data to file. + filename = 'failed_instance_' + str(datetime.datetime.now()) + filepath = 'aux_files/' + filename + '.json' + write_instance_and_states( + network=node.network, + filepath=filepath, + instance_name='failed_instance' + ) + # Issue warning. + # See https://stackoverflow.com/q/287871/3453768 for terminal text color. + if consistency_checks in ('W', 'WF'): + textcolor = '\033[93m' + else: + textcolor = '\033[91m' + warning_msg = f"\n{textcolor}Backorder check failed! current_backorders = {current_backorders} <> current_backorders_check = {current_backorders_check}, node = {node.index}, period = {node.network.period}.\n" + if consistency_checks in ('WF', 'EF'): + warning_msg += f"The instance and simulation data have been written to {filepath}.\n" + warning_msg += f"Please post an issue at https://github.com/LarrySnyder/stockpyl/issues or contact the developer directly.\n" + if consistency_checks in ('W', 'WF'): + warning_msg += f"Simulation will proceed, but results may be incorrect." + warning_msg += "\x1b[0m" # reset color + if consistency_checks in ('W', 'WF'): + warnings.warn(warning_msg) + issued_backorder_warning = True + if consistency_checks in ('E', 'EF'): + raise ValueError(warning_msg) + + # Determine outbound shipments. (Satisfy demand in order of successor node + # index.) Also update EIL and BO, and calculate demand met from stock. + node.state_vars_current.demand_met_from_stock[prod_index] = 0.0 + for s in node.successors(include_external=True): + # Get successor index (for convenience). + s_index = None if s is None else s.index + + # Determine number of items that will ship out to s (if there is no disruption), not including + # disrupted items waiting to ship. = min{OH, BO for s + new order from s} + ready_to_ship = min(current_on_hand, node.state_vars_current.backorders_by_successor[s_index][prod_index] + + node.state_vars_current.inbound_order[s_index][prod_index]) + + # Is there a shipment-pausing disruption at s? + if s is not None and s.disrupted and s.disruption_process.disruption_type == 'SP': + # Yes: Don't ship anything out. + OS = 0 + # New outbound disrupted items = the items that would have been shipped out, if + # there were no disruption. + ODI = ready_to_ship + # Decompose ODI into new demands that are now disrupted items and previously backordered items + # that are now disrupted items. Assumes backorders are handled first, then new demands. + BO_to_DI = min(ready_to_ship, node.state_vars_current.backorders_by_successor[s_index][prod_index]) + ND_to_DI = ODI - BO_to_DI else: - textcolor = '\033[91m' - warning_msg = f"\n{textcolor}Backorder check failed! current_backorders = {current_backorders} <> current_backorders_check = {current_backorders_check}, node = {node.index}, period = {node.network.period}.\n" - if consistency_checks in ('WF', 'EF'): - warning_msg += f"The instance and simulation data have been written to {filepath}.\n" - warning_msg += f"Please post an issue at https://github.com/LarrySnyder/stockpyl/issues or contact the developer directly.\n" - if consistency_checks in ('W', 'WF'): - warning_msg += f"Simulation will proceed, but results may be incorrect." - warning_msg += "\x1b[0m" # reset color - if consistency_checks in ('W', 'WF'): - warnings.warn(warning_msg) - issued_backorder_warning = True - if consistency_checks in ('E', 'EF'): - raise ValueError(warning_msg) - - # Determine outbound shipments. (Satisfy demand in order of successor node - # index.) Also update EIL and BO, and calculate demand met from stock. - node.state_vars_current.demand_met_from_stock = 0.0 - for s in node.successors(include_external=True): - # Get successor index (for convenience). - s_index = None if s is None else s.index - - # Determine number of items that will ship out to s (if there is no disruption), not including - # disrupted items waiting to ship. = min{OH, BO for s + new order from s} - ready_to_ship = min(current_on_hand, node.state_vars_current.backorders_by_successor[s_index] + - node.state_vars_current.inbound_order[s_index]) - - # Is there a shipment-pausing disruption at s? - if s is not None and s.disrupted and s.disruption_process.disruption_type == 'SP': - # Yes: Don't ship anything out. - OS = 0 - # New outbound disrupted items = the items that would have been shipped out, if - # there were no disruption. - ODI = ready_to_ship - # Decompose ODI into new demands that are now disrupted items and previously backordered items - # that are now disrupted items. Assumes backorders are handled first, then new demands. - BO_to_DI = min(ready_to_ship, node.state_vars_current.backorders_by_successor[s_index]) - ND_to_DI = ODI - BO_to_DI - else: - # No: Outbound shipment to s = ready_to_ship + ODI for s. - OS = ready_to_ship + node.state_vars_current.outbound_disrupted_items[s_index] - # No new disrupted items. - ODI = 0 - BO_to_DI = 0 - ND_to_DI = 0 - - # How much of outbound shipment was used for previously disrupted items and to clear backorders? - # (Assumes disrupted items are cleared first, then backorders, before satisfying current period's - # demands.) - DI_OS = min(OS, node.state_vars_current.outbound_disrupted_items[s_index]) - BO_OS = min(OS - DI_OS, node.state_vars_current.backorders_by_successor[s_index]) - non_BO_DI_OS = OS - BO_OS - DI_OS - - # Update outbound_shipment and current_on_hand. (Outbound items that were previously disrupted - # do not get subtracted from current_on_hand because they were not included in it to begin with.) - node.state_vars_current.outbound_shipment[s_index] = OS - current_on_hand -= (OS - DI_OS + ODI) - - # Calculate demand met from stock. (Note: This assumes that if there - # are backorders, they get priority over current period's demands.) - DMFS = max(0, OS - node.state_vars_current.backorders_by_successor[s_index]) - node.state_vars_current.demand_met_from_stock += DMFS - node.state_vars_current.demand_met_from_stock_cumul += DMFS - - # Update IL and BO. - node.state_vars_current.inventory_level -= node.state_vars_current.inbound_order[s_index] - - # Calculate new backorders_by_successor. - node.state_vars_current.backorders_by_successor[s_index] -= (BO_OS + BO_to_DI) - node.state_vars_current.backorders_by_successor[s_index] += max(0, - node.state_vars_current.inbound_order[ - s_index] - ND_to_DI - non_BO_DI_OS) - - # Update disrupted_items. - if s is not None: - node.state_vars_current.outbound_disrupted_items[s_index] += ODI - DI_OS + # No: Outbound shipment to s = ready_to_ship + ODI for s. + OS = ready_to_ship + node.state_vars_current.outbound_disrupted_items[s_index][prod_index] + # No new disrupted items. + ODI = 0 + BO_to_DI = 0 + ND_to_DI = 0 + + # How much of outbound shipment was used for previously disrupted items and to clear backorders? + # (Assumes disrupted items are cleared first, then backorders, before satisfying current period's + # demands.) + DI_OS = min(OS, node.state_vars_current.outbound_disrupted_items[s_index][prod_index]) + BO_OS = min(OS - DI_OS, node.state_vars_current.backorders_by_successor[s_index][prod_index]) + non_BO_DI_OS = OS - BO_OS - DI_OS + + # Update outbound_shipment and current_on_hand. (Outbound items that were previously disrupted + # do not get subtracted from current_on_hand because they were not included in it to begin with.) + node.state_vars_current.outbound_shipment[s_index][prod_index] = OS + current_on_hand -= (OS - DI_OS + ODI) + + # Calculate demand met from stock. (Note: This assumes that if there + # are backorders, they get priority over current period's demands.) + DMFS = max(0, OS - node.state_vars_current.backorders_by_successor[s_index][prod_index]) + node.state_vars_current.demand_met_from_stock[prod_index] += DMFS + node.state_vars_current.demand_met_from_stock_cumul[prod_index] += DMFS + + # Update IL and BO. + node.state_vars_current.inventory_level[prod_index] -= node.state_vars_current.inbound_order[s_index][prod_index] + + # Calculate new backorders_by_successor. + node.state_vars_current.backorders_by_successor[s_index][prod_index] -= (BO_OS + BO_to_DI) + node.state_vars_current.backorders_by_successor[s_index][prod_index] \ + += max(0, node.state_vars_current.inbound_order[s_index][prod_index] - ND_to_DI - non_BO_DI_OS) + + # Update disrupted_items. + if s is not None: + node.state_vars_current.outbound_disrupted_items[s_index][prod_index] += ODI - DI_OS def _calculate_fill_rate(node, period): @@ -934,17 +956,16 @@ def _calculate_fill_rate(node, period): Time period. """ - # Calculate fill rate (cumulative in periods 0,...,t). - met_from_stock = node.state_vars[period].demand_met_from_stock_cumul - total_demand = node.state_vars[period].demand_cumul - # met_from_stock = np.sum([node.state_vars[t].demand_met_from_stock for t in range(period + 1)]) - # total_demand = np.sum([node._get_attribute_total('inbound_order', t) - # for t in range(period + 1)]) - - if total_demand > 0: - node.state_vars_current.fill_rate = met_from_stock / total_demand - else: - node.state_vars_current.fill_rate = 1.0 + # Loop through products at this node. + for prod_index in node.product_indices: + # Calculate fill rate (cumulative in periods 0,...,t). + met_from_stock = node.state_vars[period].demand_met_from_stock_cumul[prod_index] + total_demand = node.state_vars[period].demand_cumul[prod_index] + + if total_demand > 0: + node.state_vars_current.fill_rate[prod_index] = met_from_stock / total_demand + else: + node.state_vars_current.fill_rate[prod_index] = 1.0 def _propagate_shipment_downstream(node): @@ -957,17 +978,19 @@ def _propagate_shipment_downstream(node): Returns ------- - inbound_shipment : float - The inbound shipment quantity. - + inbound_shipment : dict + Dict whose keys are indices of products at ``node`` and whose values are the corresponding + starting inbound shipment quantity. """ - # Propagate shipment downstream (i.e., add to successors' inbound_shipment_pipeline). - # (Normally inbound_shipment_pipeline[node.index][s.shipment_lead_time] should equal 0, - # unless there is a type-TP disruption, in which case outbound shipments - # successor wait in slot s.shipment_lead_time until the disruption ends.) - for s in node.successors(): - s.state_vars_current.inbound_shipment_pipeline[node.index][s.shipment_lead_time or 0] \ - += node.state_vars_current.outbound_shipment[s.index] + # Loop through products at this node. + for prod_index in node.product_indices: + # Propagate shipment downstream (i.e., add to successors' inbound_shipment_pipeline). + # (Normally inbound_shipment_pipeline[node.index][s.shipment_lead_time] should equal 0, + # unless there is a type-TP disruption, in which case outbound shipments + # successor wait in slot s.shipment_lead_time until the disruption ends.) + for s in node.successors(): + s.state_vars_current.inbound_shipment_pipeline[node.index][prod_index][s.shipment_lead_time or 0] \ + += node.state_vars_current.outbound_shipment[s.index][prod_index] # ------------------- diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index fbbdbae..556cf88 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1726,8 +1726,7 @@ def __init__(self, node=None, period=None): for p in self.node.predecessors(include_external=True)} self.order_quantity = {p_index[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.raw_material_inventory = {p_index[p]: {prod_index: 0 for prod_index in rm_indices[p]} - for p in self.node.predecessors(include_external=True)} + self.raw_material_inventory = {prod_index: 0 for prod_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True)} else: From beb41465b02690902dc0af0bc9aa2d880631d5e9 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 12 Apr 2024 15:05:38 -0400 Subject: [PATCH 22/94] Working on sim_io --- src/stockpyl/sim_io.py | 64 ++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/src/stockpyl/sim_io.py b/src/stockpyl/sim_io.py index 743414a..3fc0b39 100644 --- a/src/stockpyl/sim_io.py +++ b/src/stockpyl/sim_io.py @@ -152,38 +152,42 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= for t in pers_to_print: temp = [t] sorted_nodes = sorted(network.node_indices) + # Loop through nodes. for ind in sorted_nodes: node = network.get_node_from_index(ind) - # Remove 0th element of pipelines because these will always be 0 at the end of the period. - IOPL_temp = sort_dict_by_keys(node.state_vars[t].inbound_order_pipeline) - IOPL = [x[1:] for x in IOPL_temp] - ISPL_temp = sort_dict_by_keys(node.state_vars[t].inbound_shipment_pipeline) - ISPL = [x[1:] for x in ISPL_temp] - # Build row. - temp += ['|'] - if 'DISR' in cols_to_print: temp += [node.state_vars[t].disrupted] - if 'IO' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inbound_order) - if 'IOPL' in cols_to_print: temp += IOPL - if 'OQ' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].order_quantity) - if 'OO' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].on_order_by_predecessor) - if 'IS' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inbound_shipment) - if 'ISPL' in cols_to_print: temp += ISPL - if 'IDI' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inbound_disrupted_items) - if 'RM' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].raw_material_inventory) - if 'OS' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].outbound_shipment) - if 'DMFS' in cols_to_print: temp += [node.state_vars[t].demand_met_from_stock] - if 'FR' in cols_to_print: temp += [node.state_vars[t].fill_rate] - if 'IL' in cols_to_print: temp += [node.state_vars[t].inventory_level] - if 'BO' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].backorders_by_successor) - if 'ODI' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].outbound_disrupted_items) - if 'HC' in cols_to_print: temp += [node.state_vars[t].holding_cost_incurred] - if 'SC' in cols_to_print: temp += [node.state_vars[t].stockout_cost_incurred] - if 'ITHC' in cols_to_print: temp += [node.state_vars[t].in_transit_holding_cost_incurred] - if 'REV' in cols_to_print: temp += [node.state_vars[t].revenue_earned] - if 'TC' in cols_to_print: temp += [node.state_vars[t].total_cost_incurred] - results.append(temp) - if print_dots and t+1 not in pers_to_print and t < num_periods-1: - results.append(["..."]) + # Loop through products. + for prod in node.products: + + # Remove 0th element of pipelines because these will always be 0 at the end of the period. + IOPL_temp = sort_dict_by_keys(node.state_vars[t].inbound_order_pipeline) + IOPL = [x[1:] for x in IOPL_temp] + ISPL_temp = sort_dict_by_keys(node.state_vars[t].inbound_shipment_pipeline) + ISPL = [x[1:] for x in ISPL_temp] + # Build row. + temp += ['|'] + if 'DISR' in cols_to_print: temp += [node.state_vars[t].disrupted] + if 'IO' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inbound_order) + if 'IOPL' in cols_to_print: temp += IOPL + if 'OQ' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].order_quantity) + if 'OO' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].on_order_by_predecessor) + if 'IS' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inbound_shipment) + if 'ISPL' in cols_to_print: temp += ISPL + if 'IDI' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inbound_disrupted_items) + if 'RM' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].raw_material_inventory) + if 'OS' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].outbound_shipment) + if 'DMFS' in cols_to_print: temp += [node.state_vars[t].demand_met_from_stock] + if 'FR' in cols_to_print: temp += [node.state_vars[t].fill_rate] + if 'IL' in cols_to_print: temp += [node.state_vars[t].inventory_level] + if 'BO' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].backorders_by_successor) + if 'ODI' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].outbound_disrupted_items) + if 'HC' in cols_to_print: temp += [node.state_vars[t].holding_cost_incurred] + if 'SC' in cols_to_print: temp += [node.state_vars[t].stockout_cost_incurred] + if 'ITHC' in cols_to_print: temp += [node.state_vars[t].in_transit_holding_cost_incurred] + if 'REV' in cols_to_print: temp += [node.state_vars[t].revenue_earned] + if 'TC' in cols_to_print: temp += [node.state_vars[t].total_cost_incurred] + results.append(temp) + if print_dots and t+1 not in pers_to_print and t < num_periods-1: + results.append(["..."]) # Header row headers = ["t"] From 0d3efbcb49dc0eb50bf3b15b4a56fb6f238415f6 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 12 Apr 2024 21:07:12 -0400 Subject: [PATCH 23/94] Update sim_io for multiproduct (and add some stuff to helpers) --- src/stockpyl/helpers.py | 79 ++++++++++++++++++++++++++++++++++++++- src/stockpyl/sim_io.py | 83 +++++++++++++++++++++++++++-------------- tests/test_helpers.py | 37 ++++++++++++++++++ 3 files changed, 171 insertions(+), 28 deletions(-) diff --git a/src/stockpyl/helpers.py b/src/stockpyl/helpers.py index d3d504a..4c10ca1 100644 --- a/src/stockpyl/helpers.py +++ b/src/stockpyl/helpers.py @@ -741,10 +741,26 @@ def sort_dict_by_keys(d, ascending=True, return_values=True): """Sort dict by keys and return sorted list of values or keys, depending on the value of ``return_values``. - Special handling is included to handle keys that might be ``None``. + Keys must all be comparable to one another, i.e., all numbers or all strings, + with the exception that ``None`` keys are allowed. + Special handling is included to handle keys that are ``None``. (``None`` is assumed to come before any other element when sorting in ascending order.) + **Example:** + + .. testsetup:: * + + from stockpyl.helpers import * + + .. doctest:: + + >>> the_dict = {'a': 5, None: 14, 'b': 7} + >>> sort_dict_by_keys(the_dict) + [14, 5, 7] + >>> sort_dict_by_keys(the_dict, return_values=False) + [None, 'a', 'b'] + Parameters ---------- d : dict @@ -787,6 +803,67 @@ def sort_dict_by_keys(d, ascending=True, return_values=True): return return_list + +def sort_nested_dict_by_keys(d, ascending=True, return_values=True): + """Sort nested dict by its first two levels of keys and return sorted + list of values or keys, depending on the value of ``return_values``. + If ``return_values`` is ``False``, the list returned + contains tuples ``(key1, key2)``, where ``key1`` is the key from the + outer dict and ``key2`` is the key from the inner dict. + + Keys must all be comparable to one another, i.e., all numbers or all strings, + with the exception that ``None`` keys are allowed. + Special handling is included to handle keys that are ``None``. + (``None`` is assumed to come before any other element when sorting in + ascending order.) + + **Example:** + + .. testsetup:: * + + from stockpyl.helpers import * + + .. doctest:: + + >>> the_dict = {'a': 5, None: 14, 'b': 7} + >>> sort_dict_by_keys(the_dict) + [14, 5, 7] + >>> sort_dict_by_keys(the_dict, return_values=False) + [None, 'a', 'b'] + + Parameters + ---------- + d : dict + The dict to sort. + ascending : bool, optional + Sort order. + return_values : bool, optional + Set to ``True`` to return a list of the dict's values, ``False`` to + return its keys. + + Returns + ------- + return_list : list + List of values or keys of ``d``, sorted in order of keys of ``d``. + + """ + # Replace nested dict with one in which the first two levels are replaced by a tuple. + # Also replace any None keys with -inf so they will always be sorted first (if ascending order). + flattened_dict = {(key1 if key1 is not None else float('-inf'), key2 if key2 is not None else float('-inf')): \ + d[key1][key2] for key1 in d.keys() for key2 in d[key1].keys()} + + if return_values: + # Build sorted list of values (sorted by keys) in flattened_dict. + return_list = [value for _, value in sorted(flattened_dict.items(), reverse=not ascending)] + else: + # Build sorted list of keys in flattened_dict. + return_list = [key for key, _ in sorted(flattened_dict.items(), reverse=not ascending)] + + # Replace -inf with None. + return_list = [(None if key1 == -float('inf') else key1, None if key2 == -float('inf') else key2) \ + for key1, key2 in return_list] + + return return_list def change_dict_key(dict_to_change, old_key, new_key): """Change ``old_key`` to ``new_key`` in ``dict_to_change`` (in place). diff --git a/src/stockpyl/sim_io.py b/src/stockpyl/sim_io.py index 3fc0b39..5fa7f43 100644 --- a/src/stockpyl/sim_io.py +++ b/src/stockpyl/sim_io.py @@ -71,7 +71,7 @@ from copy import deepcopy #from stockpyl.sim import simulation -from stockpyl.helpers import sort_dict_by_keys, is_list +from stockpyl.helpers import sort_dict_by_keys, sort_nested_dict_by_keys, is_list from stockpyl.instances import save_instance, load_instance from stockpyl.demand_source import DemandSource from stockpyl.disruption_process import DisruptionProcess @@ -159,27 +159,27 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= for prod in node.products: # Remove 0th element of pipelines because these will always be 0 at the end of the period. - IOPL_temp = sort_dict_by_keys(node.state_vars[t].inbound_order_pipeline) + IOPL_temp = sort_nested_dict_by_keys(node.state_vars[t].inbound_order_pipeline) IOPL = [x[1:] for x in IOPL_temp] - ISPL_temp = sort_dict_by_keys(node.state_vars[t].inbound_shipment_pipeline) + ISPL_temp = sort_nested_dict_by_keys(node.state_vars[t].inbound_shipment_pipeline) ISPL = [x[1:] for x in ISPL_temp] # Build row. temp += ['|'] if 'DISR' in cols_to_print: temp += [node.state_vars[t].disrupted] - if 'IO' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inbound_order) + if 'IO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_order) if 'IOPL' in cols_to_print: temp += IOPL - if 'OQ' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].order_quantity) - if 'OO' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].on_order_by_predecessor) - if 'IS' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inbound_shipment) + if 'OQ' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].order_quantity) + if 'OO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].on_order_by_predecessor) + if 'IS' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_shipment) if 'ISPL' in cols_to_print: temp += ISPL - if 'IDI' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inbound_disrupted_items) + if 'IDI' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_disrupted_items) if 'RM' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].raw_material_inventory) - if 'OS' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].outbound_shipment) - if 'DMFS' in cols_to_print: temp += [node.state_vars[t].demand_met_from_stock] - if 'FR' in cols_to_print: temp += [node.state_vars[t].fill_rate] - if 'IL' in cols_to_print: temp += [node.state_vars[t].inventory_level] - if 'BO' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].backorders_by_successor) - if 'ODI' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].outbound_disrupted_items) + if 'OS' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].outbound_shipment) + if 'DMFS' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].demand_met_from_stock) + if 'FR' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].fill_rate) + if 'IL' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inventory_level) + if 'BO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].backorders_by_successor) + if 'ODI' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].outbound_disrupted_items) if 'HC' in cols_to_print: temp += [node.state_vars[t].holding_cost_incurred] if 'SC' in cols_to_print: temp += [node.state_vars[t].stockout_cost_incurred] if 'ITHC' in cols_to_print: temp += [node.state_vars[t].in_transit_holding_cost_incurred] @@ -195,20 +195,20 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= node = network.get_node_from_index(ind) headers = headers + ["| i={:d}".format(node.index)] if 'DISR' in cols_to_print: headers += ['DISR'] - if 'IO' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].inbound_order, "IO") - if 'IOPL' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].inbound_order_pipeline, "IOPL") - if 'OQ' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].order_quantity, "OQ") - if 'OO' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].on_order_by_predecessor, "OO") - if 'IS' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].inbound_shipment, "IS") - if 'ISPL' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].inbound_shipment_pipeline, "ISPL") - if 'IDI' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].inbound_disrupted_items, "IDI") + if 'IO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order, "IO") + if 'IOPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order_pipeline, "IOPL") + if 'OQ' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].order_quantity, "OQ") + if 'OO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].on_order_by_predecessor, "OO") + if 'IS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment, "IS") + if 'ISPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment_pipeline, "ISPL") + if 'IDI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_disrupted_items, "IDI") if 'RM' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "RM") - if 'OS' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].outbound_shipment, "OS") - if 'DMFS' in cols_to_print: headers += ["DMFS"] - if 'FR' in cols_to_print: headers += ["FR"] - if 'IL' in cols_to_print: headers += ["IL"] - if 'BO' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].backorders_by_successor, "BO") - if 'ODI' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].outbound_disrupted_items , "ODI") + if 'OS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_shipment, "OS") + if 'DMFS' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "DMFS") + if 'FR' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "FR") + if 'IL' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "IL") + if 'BO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].backorders_by_successor, "BO") + if 'ODI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_disrupted_items , "ODI") if 'HC' in cols_to_print: headers += ["HC"] if 'SC' in cols_to_print: headers += ["SC"] if 'ITHC' in cols_to_print: headers += ["ITHC"] @@ -273,6 +273,35 @@ def _dict_to_header_list(d, abbrev): return header_list +def _nested_dict_to_header_list(d, abbrev): + """Return list of headers for the given abbreviation and the values of the + nested dict ``d``. + + Parameters + ---------- + d : dict + The dict whose values should be used. + abbrev : str + The abbreviation string to use. + + Returns + ------- + header_list : list + List of header strings. + """ + # Get list of dict keys, sorted in ascending order. + sorted_dict_keys = sort_nested_dict_by_keys(d, return_values=False) + # Build header list. + header_list = [] + for i in sorted_dict_keys: + if i[0] is None: + header_list.append(f'{abbrev}:EXT|{i[1]:d}') + else: + header_list.append(f'{abbrev}:{i[0]:d}|{i[1]:d}') + + return header_list + + def write_instance_and_states(network, filepath, instance_name=None, num_periods=None): """Write a JSON file containing the instance and all of the history of the state variables. This is mostly used for debugging. diff --git a/tests/test_helpers.py b/tests/test_helpers.py index 6e023c1..c0e5bcf 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -894,6 +894,43 @@ def test_decending_keys(self): self.assertEqual(c_vals, [9, 3, 2, 0, None]) +class TestSortNestedDictByKeys(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestSortNestedDictByKeys', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestSortNestedDictByKeys', 'tear_down_class()') + + def test_nest_list(self): + """Test sort_nested_dict_by_keys(). + """ + print_status('TestSortNestedDictByKeys', 'test_ascending_values()') + + a = {0: 5, 3: "hello", 2: -1, 9: None} + b = {0: 5, 3: "hello", 2: -1, 9: None, None: "bar"} + c = {"c": -5, "a": 2, "d": None, "b": "foo"} + d = {5: a, None: b, 17: c} + # Note to self: d items, sorted ascending by key, are: + # (None, None): "bar", (None, 0): 5, (None, 2): -1, (None, 3): "hello", (None, 9): None, + # (5, 0): 5, (5, 2): -1, (5, 3): "hello", (5, 9): None, + # (17, "a"): 2, (17, "b"): "foo", (17, "c"): -5, (17, "d"): None + + self.assertEqual(helpers.sort_nested_dict_by_keys(d), + ["bar", 5, -1, "hello", None, 5, -1, "hello", None, 2, "foo", -5, None]) + self.assertEqual(helpers.sort_nested_dict_by_keys(d, ascending=False), + list(reversed(["bar", 5, -1, "hello", None, 5, -1, "hello", None, 2, "foo", -5, None]))) + self.assertEqual(helpers.sort_nested_dict_by_keys(d, return_values=False), + [(None, None), (None, 0), (None, 2), (None, 3), (None, 9), + (5, 0), (5, 2), (5, 3), (5, 9), (17, "a"), (17, "b"), (17, "c"), (17, "d")]) + self.assertEqual(helpers.sort_nested_dict_by_keys(d, ascending=False, return_values=False), + list(reversed([(None, None), (None, 0), (None, 2), (None, 3), (None, 9), + (5, 0), (5, 2), (5, 3), (5, 9), (17, "a"), (17, "b"), (17, "c"), (17, "d")]))) + + class TestChangeDictKey(unittest.TestCase): @classmethod def set_up_class(cls): From af0d0d382087ab52faede02b1c248681920bf9e4 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 13 Apr 2024 17:06:37 -0400 Subject: [PATCH 24/94] Debugging backorders --- src/stockpyl/policy.py | 54 +++++++++++++++++++++---------- src/stockpyl/sim.py | 39 +++++++++++----------- src/stockpyl/supply_chain_node.py | 24 +++++++------- tests/test_policy.py | 3 ++ tests/test_sim.py | 36 +++++++++++++++++++++ 5 files changed, 107 insertions(+), 49 deletions(-) diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index 7c4471d..f6e35a7 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -349,7 +349,7 @@ def from_dict(cls, the_dict): # ORDER QUANTITY METHODS - def get_order_quantity(self, predecessor_index=None, predecessor_product_index=None, inventory_position=None, + def get_order_quantity(self, product_index=None, predecessor_index=None, rm_index=None, inventory_position=None, echelon_inventory_position_adjusted=None): """Calculate order quantity using the policy type specified in ``type``. If ``type`` is ``None``, return ``None``. @@ -358,22 +358,29 @@ def get_order_quantity(self, predecessor_index=None, predecessor_product_index=N and sometimes others) from ``self.node.network``. The order quantity is set using the bill of materials structure for the node/product. + If the policy's ``node`` attribute is ``None``, assumes that the product and raw material have + a BOM number of 1. + If ``inventory_position`` (and ``echelon_inventory_position_adjusted``, for balanced echelon base-stock policies) are provided, they will override the values indicated by the node's current state variables. This allows the policy to be queried for an order quantity even if no node/product or network are provided or have no state variables objects. If ``inventory_position`` - and ``echelon_inventory_position_adjusted`` are omitted + and ``echelon_inventory_position_adjusted`` are ``None`` (which is the typical use case), the current state variables will be used. Parameters ---------- + product_index : int, optional + The index of the product for which the order quantity should be calculated. + If the node is single-product, either set ``product_index`` to the index of the single product, + or to ``None`` and the function will determine the index automatically. predecessor_index : int, optional - The predecessor for which the order quantity should be calculated. + The index of the predecessor for which the order quantity should be calculated. Use ``None`` for external supplier, or if node has only one predecessor (including external supplier). - predecessor_product_index : int, optional - The product at the predecessor for which the order quantity should be calculated. + rm_index : int, optional + The index of the raw material at the predecessor for which the order quantity should be calculated. Use ``None`` if the predecessor is the external supplier. If the predecessor has only one product, ``predecessor_product_index`` can be set to ``None`` or to the index of that product. @@ -399,6 +406,15 @@ def get_order_quantity(self, predecessor_index=None, predecessor_product_index=N """ if self.type is None: return None + + # Determine network BOM for this product/predecessor/raw material. If it's 0, return 0. + if self.node is None: + # Assume BOM number = 1. + NBOM = 1 + else: + NBOM = self.node.NBOM(product=product_index, predecessor=predecessor_index, raw_material=rm_index) + if NBOM == 0: + return 0 # Was inventory_position provided? if inventory_position is not None: @@ -409,39 +425,37 @@ def get_order_quantity(self, predecessor_index=None, predecessor_product_index=N IP = None else: # Make sure node attribute is set or inventory_position is provided. - # TODO: adjust error message for multi-product? if self.node is None: raise AttributeError("You must either provide inventory_position or set the node attribute of the Policy object to the node that it refers to. (Usually this should be done when you first create the Policy object.)") if self.node.is_multiproduct and self.product is None: raise AttributeError("You must either provide inventory_position or set the product attribute of the Policy object to the product that it refers to (since the node is multi-product). (Usually this shoudl be done when you first creat the Policy object.)") -# TODO: stopped here # Calculate total demand (inbound orders), including successor nodes and # external demand. - demand = self.node._get_attribute_total('inbound_order', self.node.network.period) + demand = self.node._get_attribute_total('inbound_order', self.node.network.period, product_index=product_index) # Calculate (local or echelon) inventory position, before demand is subtracted. if self.type in ('EBS', 'BEBS'): IP_before_demand = \ - self.node.state_vars_current.echelon_inventory_position(predecessor_index=predecessor_index) + self.node.state_vars_current.echelon_inventory_position(prod_index=product_index, predecessor_index=predecessor_index, rm_index=rm_index) else: IP_before_demand = \ - self.node.state_vars_current.inventory_position(predecessor_index=predecessor_index) + self.node.state_vars_current.inventory_position(prod_index=product_index, predecessor_index=predecessor_index, rm_index=rm_index) # Calculate current inventory position, after demand is subtracted. IP = IP_before_demand - demand - # Determine order quantity based on policy. + # Determine order quantity based on policy. This order quantity is in units of the product. if self.type == 'BS': - return self._get_order_quantity_base_stock(IP) + OQ = self._get_order_quantity_base_stock(IP) elif self.type == 'sS': - return self._get_order_quantity_s_S(IP) + OQ = self._get_order_quantity_s_S(IP) elif self.type == 'rQ': - return self._get_order_quantity_r_Q(IP) + OQ = self._get_order_quantity_r_Q(IP) elif self.type == 'FQ': - return self._get_order_quantity_fixed_quantity() + OQ = self._get_order_quantity_fixed_quantity() elif self.type == 'EBS': - return self._get_order_quantity_echelon_base_stock(IP) + OQ = self._get_order_quantity_echelon_base_stock(IP) elif self.type == 'BEBS': # Make sure node attribute is set or inventory_position is provided. if self.node is None and echelon_inventory_position_adjusted is None: @@ -458,9 +472,15 @@ def get_order_quantity(self, predecessor_index=None, predecessor_product_index=N partner_node = self.node.network.get_node_from_index(self.node.index + 1) EIPA = partner_node.state_vars_current._echelon_inventory_position_adjusted() - return self._get_order_quantity_balanced_echelon_base_stock(IP, EIPA) + OQ = self._get_order_quantity_balanced_echelon_base_stock(IP, EIPA) else: + OQ = None + + # Convert to units of the raw material. + if OQ is None: return None + else: + return OQ * NBOM def _get_order_quantity_base_stock(self, inventory_position): """Calculate order quantity using base-stock policy. diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 8b1e274..8e90c51 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -402,24 +402,23 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan for p in node.raw_material_suppliers_by_product(product_index=prod.index): p_index = p.index if p is not None else None - # Loop through products at predecessor and determine which ones are raw materials for prod. - for rm_index in(p.product_indices if p is not None else [None]): - if prod.BOM(rm_index) > 0: - - # Calculate order quantity from policy. - order_quantity = min(order_capac, policy.get_order_quantity(predecessor_index=p_index, predecessor_product_index=rm_index)) - - # Place order in predecessor's order pipeline. - if p is not None: - p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] = order_quantity - else: - # Place order to external supplier. (For now, this just means adding to inbound shipment pipeline.) - node.state_vars_current.inbound_shipment_pipeline[None][rm_index][order_lead_time + shipment_lead_time] += order_quantity - - # Record order quantity. - node.state_vars_current.order_quantity[p_index][rm_index] = order_quantity - # Add order to on_order_by_predecessor. - node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += order_quantity + # Loop through products at predecessor. + for rm_index in (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]): + # Calculate order quantity from policy. + # (It will be 0 if there's no BOM relationship for this product/predecessor/raw material.) + order_quantity = min(order_capac, policy.get_order_quantity(product_index=prod.index, predecessor_index=p_index, rm_index=rm_index)) + + # Place order in predecessor's order pipeline (converting first to raw material units via BOM). + if p is not None: + p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] = order_quantity + else: + # Place order to external supplier. (For now, this just means adding to inbound shipment pipeline.) + node.state_vars_current.inbound_shipment_pipeline[None][rm_index][order_lead_time + shipment_lead_time] += order_quantity + + # Record order quantity. + node.state_vars_current.order_quantity[p_index][rm_index] = order_quantity + # Add order to on_order_by_predecessor. + node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += order_quantity def _generate_downstream_shipments(node_index, network, period, visited, consistency_checks='W'): @@ -601,7 +600,7 @@ def _initialize_next_period_state_vars(network, period): n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index][0] = \ n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index][0] # Add items from slot s+1 in period t to slot s in period t+1. - for s in range(len(n.state_vars[period].inbound_shipment_pipeline[p]) - 1): + for s in range(len(n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index]) - 1): n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index][s] += \ n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index][s + 1] @@ -809,7 +808,7 @@ def _raw_materials_to_finished_goods(node): for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True): node.state_vars_current.raw_material_inventory[rm_index] \ -= new_finished_goods[prod_index] * BOM[rm_index] - node.state_vars_current.inventory_level + node.state_vars_current.inventory_level[prod_index] += new_finished_goods[prod_index] return new_finished_goods diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 556cf88..4bf8858 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1918,8 +1918,8 @@ def in_transit(self, prod_index=None): total_in_transit = np.sum([ self.in_transit_from(p, rm_index) - * self.node.NBOM(product_index=prod_index, predecessor_index=p, rm_index=rm_index) - for rm_index in self.node.raw_material_indices(product_index=prod_index, network_BOM=True) + * self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) + for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) ]) @@ -1967,8 +1967,8 @@ def on_order(self, prod_index=None): total_on_order = np.sum([ self.on_order_by_predecessor[p][rm_index] - * self.node.NBOM(product_index=prod_index, predecessor_index=p, rm_index=rm_index) - for rm_index in self.node.raw_material_indices(product_index=prod_index, network_BOM=True) + * self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) + for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) ]) @@ -2016,7 +2016,7 @@ def raw_material_aggregate(self, prod_index=None): prod = self.node.products_by_index[prod_index] total_raw_material = 0 - for rm_index in self.node.raw_material_indices(product_index=prod_index, network_BOM=True): + for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True): BOM = prod.BOM(rm_index) if BOM == 0: # rm_index has no BOM relationship, so it is only in the network BOM; therefore, @@ -2069,8 +2069,8 @@ def inbound_disrupted_items_aggregate(self, prod_index=None): total_disrupted_items = np.sum([ self.inbound_disrupted_items[p][rm_index] - * self.node.NBOM(product_index=prod_index, predecessor_index=p, rm_index=rm_index) - for rm_index in self.node.raw_material_indices(product_index=prod_index, network_BOM=True) + * self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) + for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) ]) @@ -2124,10 +2124,10 @@ def inventory_position(self, prod_index=None, predecessor_index=None, rm_index=N If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. """ # Validate parameters. - if predecessor_index is None and rm_index is not None: - raise ValueError('If predecessor_index is None, then rm_index must also be None.') - if predecessor_index is not None and rm_index is None: - raise ValueError('If rm_index is None, then predecessor_index must also be None.') + # if predecessor_index is None and rm_index is not None: + # raise ValueError('If predecessor_index is None, then rm_index must also be None.') + # if predecessor_index is not None and rm_index is None: + # raise ValueError('If rm_index is None, then predecessor_index must also be None.') # Determine product index. # TODO: validate parameters prod_index = prod_index or self.node.product_indices[0] @@ -2140,7 +2140,7 @@ def inventory_position(self, prod_index=None, predecessor_index=None, rm_index=N else: # Note: If <=1 predecessor, raw_material_inventory should always = 0 # (because raw materials are processed right away). - return self.inventory_level \ + return self.inventory_level[prod_index] \ + self.on_order(prod_index=prod_index) \ + self.raw_material_aggregate(prod_index=prod_index) \ + self.inbound_disrupted_items_aggregate(prod_index=prod_index) diff --git a/tests/test_policy.py b/tests/test_policy.py index 6ddd0c6..8112ca7 100644 --- a/tests/test_policy.py +++ b/tests/test_policy.py @@ -325,6 +325,7 @@ def test_base_stock(self): correct_dict = { 'type': 'BS', 'node': None, + 'product': None, 'base_stock_level': 100, 'order_quantity': None, 'reorder_point': None, @@ -348,6 +349,7 @@ def test_base_stock_with_node(self): correct_dict = { 'type': 'BS', 'node': 5, + 'product': None, 'base_stock_level': 100, 'order_quantity': None, 'reorder_point': None, @@ -369,6 +371,7 @@ def test_s_S(self): correct_dict = { 'type': 'sS', 'node': None, + 'product': None, 'base_stock_level': None, 'order_quantity': None, 'reorder_point': 100, diff --git a/tests/test_sim.py b/tests/test_sim.py index e08c1b8..7c34f90 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -204,7 +204,43 @@ def test_problem_6_16_order_cap2(self): self.assertAlmostEqual(node2.state_vars[5].inbound_shipment[None], 17.11936, places=4) self.assertAlmostEqual(node2.state_vars[8].inventory_level, 0.47918 , places=4) + def test_simple_single_stage(self): + """Test that simulation() function correctly simulates single-stage + model with small-integer demands (for easier debugging) with base-stock policy. + """ + print_status('TestSimulation', 'test_simple_single_stage()') + + network = single_stage_system( + holding_cost=1, + stockout_cost=10, + shipment_lead_time=1, + demand_source=demand_source.DemandSource(type='CD', demand_list=[1, 2, 3, 4], probabilities= 4 * [0.25]), + inventory_policy=policy.Policy(type='BS', base_stock_level=2) + ) + + total_cost = simulation(network, num_periods=100, rand_seed=762, progress_bar=False, consistency_checks='E') + write_results( + network=network, + num_periods=100, + # num_periods_to_print=100, + columns_to_print=['basic', 'costs'], + write_txt=False, + txt_filename='/Users/larry/Documents/GitHub/stockpyl-private/debugging_files/simple_sim.txt', + write_csv=True, + csv_filename='/Users/larry/Documents/GitHub/stockpyl-private/debugging_files/simple_sim.csv' + ) + + # Compare total cost. + self.assertAlmostEqual(total_cost, 255.2472033, places=4) + + # Compare a few performance measures. + self.assertAlmostEqual(network.nodes[0].state_vars[6].order_quantity[None], 57.103320, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[95].inventory_level, 9.9564105, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[43].inbound_order[None], 32.00584965, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[95].inbound_shipment[None], 52.9079333, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[19].backorders_by_successor[None], 6.7125153, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[86].inventory_level, -2.09415258242449, places=4) def test_single_stage(self): """Test that simulation() function correctly simulates single-stage From 582c65cc4dadef4c87aba8f8bd129b2d1e071f92 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 13 Apr 2024 17:22:27 -0400 Subject: [PATCH 25/94] Fixed backorder bug --- src/stockpyl/sim.py | 3 ++- tests/test_sim.py | 41 +++++++++++++++++------------------------ 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 8e90c51..dc5b9fa 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -28,6 +28,7 @@ from tqdm import tqdm # progress bar import warnings import datetime +import copy #from stockpyl.datatypes import * #from stockpyl.supply_chain_network import SupplyChainNetwork @@ -458,7 +459,7 @@ def _generate_downstream_shipments(node_index, network, period, visited, consist node = network.get_node_from_index(node_index) # Remember starting IL (as dict by product). - starting_inventory_level = node.state_vars_current.inventory_level + starting_inventory_level = copy.deepcopy(node.state_vars_current.inventory_level) # Receive inbound shipments. (Set inbound_shipment, remove from shipment # pipeline, update OO.) diff --git a/tests/test_sim.py b/tests/test_sim.py index 7c34f90..4838f53 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -217,30 +217,21 @@ def test_simple_single_stage(self): demand_source=demand_source.DemandSource(type='CD', demand_list=[1, 2, 3, 4], probabilities= 4 * [0.25]), inventory_policy=policy.Policy(type='BS', base_stock_level=2) ) + dp = network.nodes[0]._dummy_product.index + esdp = network.nodes[0]._external_supplier_dummy_product.index total_cost = simulation(network, num_periods=100, rand_seed=762, progress_bar=False, consistency_checks='E') - write_results( - network=network, - num_periods=100, - # num_periods_to_print=100, - columns_to_print=['basic', 'costs'], - write_txt=False, - txt_filename='/Users/larry/Documents/GitHub/stockpyl-private/debugging_files/simple_sim.txt', - write_csv=True, - csv_filename='/Users/larry/Documents/GitHub/stockpyl-private/debugging_files/simple_sim.csv' - ) - # Compare total cost. - self.assertAlmostEqual(total_cost, 255.2472033, places=4) + self.assertEqual(total_cost, 825) # Compare a few performance measures. - self.assertAlmostEqual(network.nodes[0].state_vars[6].order_quantity[None], 57.103320, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[95].inventory_level, 9.9564105, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[43].inbound_order[None], 32.00584965, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[95].inbound_shipment[None], 52.9079333, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[19].backorders_by_successor[None], 6.7125153, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[86].inventory_level, -2.09415258242449, places=4) + self.assertEqual(network.nodes[0].state_vars[6].order_quantity[None][esdp], 3) + self.assertEqual(network.nodes[0].state_vars[95].inventory_level[dp], -2) + self.assertEqual(network.nodes[0].state_vars[43].inbound_order[None][dp], 4) + self.assertEqual(network.nodes[0].state_vars[95].inbound_shipment[None][esdp], 2) + self.assertEqual(network.nodes[0].state_vars[16].backorders_by_successor[None][dp], 2) + self.assertEqual(network.nodes[0].state_vars[86].inventory_level[dp], -1) def test_single_stage(self): """Test that simulation() function correctly simulates single-stage @@ -249,6 +240,8 @@ def test_single_stage(self): print_status('TestSimulation', 'test_single_stage()') network = load_instance("example_4_1_network") + dp = network.nodes[0]._dummy_product.index + esdp = network.nodes[0]._external_supplier_dummy_product.index # Set initial inventory levels to 0. (Tests below were built with this assumption, but subsequent # changes in code changed the default initial IL.) @@ -261,12 +254,12 @@ def test_single_stage(self): self.assertAlmostEqual(total_cost, 255.2472033, places=4) # Compare a few performance measures. - self.assertAlmostEqual(network.nodes[0].state_vars[6].order_quantity[None], 57.103320, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[95].inventory_level, 9.9564105, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[43].inbound_order[None], 32.00584965, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[95].inbound_shipment[None], 52.9079333, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[19].backorders_by_successor[None], 6.7125153, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[86].inventory_level, -2.09415258242449, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[6].order_quantity[None][esdp], 57.103320, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[95].inventory_level[dp], 9.9564105, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[43].inbound_order[None][dp], 32.00584965, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[95].inbound_shipment[None][esdp], 52.9079333, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[19].backorders_by_successor[None][dp], 6.7125153, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[86].inventory_level[dp], -2.09415258242449, places=4) def test_no_policy_node(self): """Test that simulation still works if we don't set the node attribute of the inventory policy. From 9fc3ef171b1eb3bddd39b10681a70068e76776a9 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 14 Apr 2024 15:50:08 -0400 Subject: [PATCH 26/94] Working through sim unit tests --- src/stockpyl/sim.py | 24 +++-- src/stockpyl/supply_chain_node.py | 2 +- tests/test_sim.py | 162 +++++++++++++++++------------- 3 files changed, 105 insertions(+), 83 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index dc5b9fa..93c5717 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -587,7 +587,7 @@ def _initialize_next_period_state_vars(network, period): # Shortcut to predecessor index. p_index = p.index if p is not None else None # Loop through raw materials at predecessor. - for rm_index in (p.products if p is not None else [n._external_supplier_dummy_product.index]): + for rm_index in (p.product_indices if p is not None else [n._external_supplier_dummy_product.index]): # Is there a transit-pausing disruption? if n.disrupted and n.get_attribute('disruption_process', rm_index).disruption_type == 'TP': @@ -627,7 +627,7 @@ def _initialize_next_period_state_vars(network, period): for p in n.predecessors(include_external=True): p_index = p.index if p is not None else None # Loop through raw materials at predecessor. - for rm_index in (p.products if p is not None else [n._external_supplier_dummy_product.index]): + for rm_index in (p.product_indices if p is not None else [n._external_supplier_dummy_product.index]): n.state_vars[period + 1].on_order_by_predecessor[p_index][rm_index] = \ n.state_vars[period].on_order_by_predecessor[p_index][rm_index] n.state_vars[period + 1].raw_material_inventory[rm_index] = \ @@ -671,15 +671,17 @@ def _calculate_period_costs(network, period): n.state_vars[period].holding_cost_incurred += n.get_attribute('local_holding_cost_function', prod_index)(items_held) except TypeError: n.state_vars[period].holding_cost_incurred += (n.get_attribute('local_holding_cost', prod_index) or 0) * items_held - # Raw materials holding cost. - # TODO: fix this!! this is multiple-counting RM inventory holding cost because there's only - # 1 but there's a loop over p. How to handle the fact that RM inventory is not predecessor-specific - # but its holding cost comes from teh predecessor??? - for p in n.predecessors(include_external=False): + # Raw materials holding cost. Includes only "real" products, which come from an actual predecessor node. + for rm_index in n.raw_material_indices_by_product(product_index=prod_index, network_BOM=False): + # Determine any supplier of this raw material and use its holding cost. This is a workaround + # for now, since there cam be multiple RM suppliers but there's no way to specify which supplier's + # holding cost to use (or some other holding cost). See https://github.com/LarrySnyder/stockpyl/issues/140. + p = n.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=False)[0] + # Calculate raw material holding cost. n.state_vars[period].holding_cost_incurred += \ - (p.get_attribute('local_holding_cost', prod_index) or 0) * \ - (n.state_vars[period].raw_material_inventory[prod_index] \ - + n.state_vars[period].inbound_disrupted_items[p.index][prod_index]) + (p.get_attribute('local_holding_cost', rm_index) or 0) * \ + (n.state_vars[period].raw_material_inventory[rm_index] \ + + n.state_vars[period].inbound_disrupted_items[p.index][rm_index]) # Stockout cost. try: n.state_vars[period].stockout_cost_incurred += \ @@ -729,7 +731,7 @@ def _receive_inbound_shipments(node): p_index = p.index if p is not None else None # Loop through raw materials at predecessor. - for rm_index in (p.products if p is not None else [node._external_supplier_dummy_product.index]): + for rm_index in (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]): # Determine number of items that will be received from p (if there is no disruption), # not including inbound disrupted items waiting to be received. ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][rm_index][0] diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 4bf8858..d9f7cad 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -236,7 +236,7 @@ def index(self, value): if self._dummy_product: self._remove_dummy_product() self._add_dummy_product() - self._external_supplier_dummy_product = SupplyChainProduct(self._dummy_product.index - 1) + self._external_supplier_dummy_product = SupplyChainProduct(self._dummy_product.index - 1, is_dummy=True) # TODO: this is clumsy -- do these values really need to change if index changes? and if so, is this really the way to do it? diff --git a/tests/test_sim.py b/tests/test_sim.py index 4838f53..3a3fa5d 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -47,7 +47,6 @@ def test_example_6_1(self): # reindex nodes to 2 -> 1 -> 0 network.reindex_nodes({1: 0, 2: 1, 3: 2}) - # Set initial inventory levels to 0. (Tests below were built with this assumption, but subsequent # changes in code changed the default initial IL.) for node in network.nodes: @@ -59,14 +58,16 @@ def test_example_6_1(self): self.assertAlmostEqual(total_cost, 6620.352025, places=4) nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prod = nodes[2]._external_supplier_dummy_product.index # Compare a few performance measures. - self.assertAlmostEqual(nodes[0].state_vars[6].order_quantity[1], 4.8883, places=4) - self.assertAlmostEqual(nodes[0].state_vars[95].inventory_level, -1.08737, places=4) - self.assertAlmostEqual(nodes[1].state_vars[43].inbound_order[0], 4.30582, places=4) - self.assertAlmostEqual(nodes[1].state_vars[95].inbound_shipment[2], 6.97664, places=4) - self.assertAlmostEqual(nodes[2].state_vars[31].backorders_by_successor[1], 0.148957, places=4) - self.assertAlmostEqual(nodes[2].state_vars[89].inventory_level, 0.0443519, places=4) + self.assertAlmostEqual(nodes[0].state_vars[6].order_quantity[1][dummy_prods[1]], 4.8883, places=4) + self.assertAlmostEqual(nodes[0].state_vars[95].inventory_level[dummy_prods[0]], -1.08737, places=4) + self.assertAlmostEqual(nodes[1].state_vars[43].inbound_order[0][dummy_prods[1]], 4.30582, places=4) + self.assertAlmostEqual(nodes[1].state_vars[95].inbound_shipment[2][dummy_prods[2]], 6.97664, places=4) + self.assertAlmostEqual(nodes[2].state_vars[31].backorders_by_successor[1][dummy_prods[2]], 0.148957, places=4) + self.assertAlmostEqual(nodes[2].state_vars[89].inventory_level[dummy_prods[2]], 0.0443519, places=4) def test_problem_6_1(self): """Test that simulation() function correctly simulates model from @@ -87,14 +88,16 @@ def test_problem_6_1(self): self.assertAlmostEqual(total_cost, 35794.476254, places=4) nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prod = nodes[2]._external_supplier_dummy_product.index # Compare a few performance measures. - self.assertAlmostEqual(nodes[1].state_vars[6].order_quantity[2], 140.6747130757738, places=4) - self.assertAlmostEqual(nodes[1].state_vars[95].inventory_level, -21.4276, places=4) - self.assertAlmostEqual(nodes[2].state_vars[43].inbound_order[1], 98.6768, places=4) - self.assertAlmostEqual(nodes[2].state_vars[95].inbound_shipment[None], 105.7364470997879, places=4) - self.assertAlmostEqual(nodes[1].state_vars[31].backorders_by_successor[None], 18.9103, places=4) - self.assertAlmostEqual(nodes[2].state_vars[89].inventory_level, -28.4205, places=4) + self.assertAlmostEqual(nodes[1].state_vars[6].order_quantity[2][dummy_prods[2]], 140.6747130757738, places=4) + self.assertAlmostEqual(nodes[1].state_vars[95].inventory_level[dummy_prods[1]], -21.4276, places=4) + self.assertAlmostEqual(nodes[2].state_vars[43].inbound_order[1][dummy_prods[2]], 98.6768, places=4) + self.assertAlmostEqual(nodes[2].state_vars[95].inbound_shipment[None][ext_dummy_prod], 105.7364470997879, places=4) + self.assertAlmostEqual(nodes[1].state_vars[31].backorders_by_successor[None][dummy_prods[1]], 18.9103, places=4) + self.assertAlmostEqual(nodes[2].state_vars[89].inventory_level[dummy_prods[2]], -28.4205, places=4) def test_problem_6_2a(self): """Test that simulation() function correctly simulates model from @@ -109,23 +112,29 @@ def test_problem_6_2a(self): for node in network.nodes: node.initial_inventory_level = 0 + nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prod = nodes[2]._external_supplier_dummy_product.index + total_cost = simulation(network, 100, rand_seed=1340, progress_bar=False, consistency_checks='E') # Compare total cost. self.assertAlmostEqual(total_cost, 38381.048422, places=4) nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prod = nodes[5]._external_supplier_dummy_product.index # Compare a few performance measures. - self.assertAlmostEqual(nodes[1].state_vars[6].order_quantity[2], 34.7807, places=4) - self.assertAlmostEqual(nodes[1].state_vars[95].inventory_level, 5.60159, places=4) - self.assertAlmostEqual(nodes[2].state_vars[43].inbound_order[1], 36.0213, places=4) - self.assertAlmostEqual(nodes[2].state_vars[96].inbound_shipment[3], 34.9884, places=4) - self.assertAlmostEqual(nodes[3].state_vars[32].backorders_by_successor[2], 2.67911, places=4) - self.assertAlmostEqual(nodes[3].state_vars[89].inventory_level, -1.76791, places=4) - self.assertAlmostEqual(nodes[4].state_vars[67].outbound_shipment[3], 30.0597, places=4) - self.assertAlmostEqual(nodes[4].state_vars[84].fill_rate, 0.843055, places=4) - self.assertAlmostEqual(nodes[5].state_vars[58].on_order_by_predecessor[None], 26.8160166, places=4) + self.assertAlmostEqual(nodes[1].state_vars[6].order_quantity[2][dummy_prods[2]], 34.7807, places=4) + self.assertAlmostEqual(nodes[1].state_vars[95].inventory_level[dummy_prods[1]], 5.60159, places=4) + self.assertAlmostEqual(nodes[2].state_vars[43].inbound_order[1][dummy_prods[2]], 36.0213, places=4) + self.assertAlmostEqual(nodes[2].state_vars[96].inbound_shipment[3][dummy_prods[3]], 34.9884, places=4) + self.assertAlmostEqual(nodes[3].state_vars[32].backorders_by_successor[2][dummy_prods[3]], 2.67911, places=4) + self.assertAlmostEqual(nodes[3].state_vars[89].inventory_level[dummy_prods[3]], -1.76791, places=4) + self.assertAlmostEqual(nodes[4].state_vars[67].outbound_shipment[3][dummy_prods[4]], 30.0597, places=4) + self.assertAlmostEqual(nodes[4].state_vars[84].fill_rate[dummy_prods[4]], 0.843055, places=4) + self.assertAlmostEqual(nodes[5].state_vars[58].on_order_by_predecessor[None][ext_dummy_prod], 26.8160166, places=4) self.assertAlmostEqual(nodes[5].state_vars[81].holding_cost_incurred, 2.58384, places=4) def test_problem_6_16(self): @@ -136,32 +145,35 @@ def test_problem_6_16(self): network = load_instance("problem_6_16") + nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prod = nodes[2]._external_supplier_dummy_product.index + total_cost = simulation(network, 100, rand_seed=762, progress_bar=False, consistency_checks='E') # Compare total cost. self.assertAlmostEqual(total_cost, 52386.309175, places=4) # Compare a few performance measures. - node1 = network.get_node_from_index(1) - node2 = network.get_node_from_index(2) - self.assertAlmostEqual(node1.state_vars[6].order_quantity[2], 23.5517, places=4) - self.assertAlmostEqual(node1.state_vars[95].inventory_level, -4.72853, places=4) - self.assertAlmostEqual(node2.state_vars[43].inbound_order[1], 11.0029, places=4) - self.assertAlmostEqual(node2.state_vars[95].inbound_shipment[None], 19.9307, places=4) - self.assertAlmostEqual(node1.state_vars[31].backorders_by_successor[None], 26.9162, places=4) - self.assertAlmostEqual(node2.state_vars[89].inventory_level, -12.6397, places=4) - - + self.assertAlmostEqual(nodes[1].state_vars[6].order_quantity[2][dummy_prods[2]], 23.5517, places=4) + self.assertAlmostEqual(nodes[1].state_vars[95].inventory_level[dummy_prods[1]], -4.72853, places=4) + self.assertAlmostEqual(nodes[2].state_vars[43].inbound_order[1][dummy_prods[2]], 11.0029, places=4) + self.assertAlmostEqual(nodes[2].state_vars[95].inbound_shipment[None][ext_dummy_prod], 19.9307, places=4) + self.assertAlmostEqual(nodes[1].state_vars[31].backorders_by_successor[None][dummy_prods[1]], 26.9162, places=4) + self.assertAlmostEqual(nodes[2].state_vars[89].inventory_level[dummy_prods[2]], -12.6397, places=4) def test_problem_6_16_order_cap1(self): """Test that simulation() function correctly simulates model from - Problem 6.16, with order capacity constraint - HERE copy print_status + Problem 6.16, with order capacity constraint. """ print_status('TestSimulation', 'test_problem_6_16_order_cap1()') network = load_instance("problem_6_16") + nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prod = nodes[2]._external_supplier_dummy_product.index + network.get_node_from_index(1).order_capacity = 19 total_cost = simulation(network, 20, rand_seed=763, progress_bar=False, consistency_checks='E') @@ -170,13 +182,11 @@ def test_problem_6_16_order_cap1(self): self.assertAlmostEqual(total_cost, 12625.27170, places=4) # Compare a few performance measures. - node1 = network.get_node_from_index(1) - node2 = network.get_node_from_index(2) - self.assertAlmostEqual(node1.state_vars[6].order_quantity[2], 19, places=4) - self.assertAlmostEqual(node1.state_vars[15].inventory_level, -25.23384, places=4) - self.assertAlmostEqual(node2.state_vars[13].inbound_order[1], 19, places=4) - self.assertAlmostEqual(node2.state_vars[5].inbound_shipment[None], 19, places=4) - self.assertAlmostEqual(node2.state_vars[8].inventory_level, 0.72570 , places=4) + self.assertAlmostEqual(nodes[1].state_vars[6].order_quantity[2][dummy_prods[2]], 19, places=4) + self.assertAlmostEqual(nodes[1].state_vars[15].inventory_level[dummy_prods[1]], -25.23384, places=4) + self.assertAlmostEqual(nodes[2].state_vars[13].inbound_order[1][dummy_prods[2]], 19, places=4) + self.assertAlmostEqual(nodes[2].state_vars[5].inbound_shipment[None][ext_dummy_prod], 19, places=4) + self.assertAlmostEqual(nodes[2].state_vars[8].inventory_level[dummy_prods[2]], 0.72570 , places=4) def test_problem_6_16_order_cap2(self): @@ -187,8 +197,12 @@ def test_problem_6_16_order_cap2(self): network = load_instance("problem_6_16") - network.get_node_from_index(1).order_capacity = 21 - network.get_node_from_index(2).order_capacity = 25 + nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prod = nodes[2]._external_supplier_dummy_product.index + + nodes[1].order_capacity = 21 + nodes[2].order_capacity = 25 total_cost = simulation(network, 100, rand_seed=711, progress_bar=False, consistency_checks='E') @@ -196,13 +210,11 @@ def test_problem_6_16_order_cap2(self): self.assertAlmostEqual(total_cost, 46111.73376, places=4) # Compare a few performance measures. - node1 = network.get_node_from_index(1) - node2 = network.get_node_from_index(2) - self.assertAlmostEqual(node1.state_vars[6].order_quantity[2], 20.5389, places=4) - self.assertAlmostEqual(node1.state_vars[15].inventory_level, -16.75048, places=4) - self.assertAlmostEqual(node2.state_vars[13].inbound_order[1], 21, places=4) - self.assertAlmostEqual(node2.state_vars[5].inbound_shipment[None], 17.11936, places=4) - self.assertAlmostEqual(node2.state_vars[8].inventory_level, 0.47918 , places=4) + self.assertAlmostEqual(nodes[1].state_vars[6].order_quantity[2][dummy_prods[2]], 20.5389, places=4) + self.assertAlmostEqual(nodes[1].state_vars[15].inventory_level[dummy_prods[1]], -16.75048, places=4) + self.assertAlmostEqual(nodes[2].state_vars[13].inbound_order[1][dummy_prods[2]], 21, places=4) + self.assertAlmostEqual(nodes[2].state_vars[5].inbound_shipment[None][ext_dummy_prod], 17.11936, places=4) + self.assertAlmostEqual(nodes[2].state_vars[8].inventory_level[dummy_prods[2]], 0.47918 , places=4) def test_simple_single_stage(self): """Test that simulation() function correctly simulates single-stage @@ -269,6 +281,10 @@ def test_no_policy_node(self): network = load_instance("example_4_1_network") + nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prod = nodes[0]._external_supplier_dummy_product.index + # Replace inventory policy with a new one. pol = Policy() pol.type = 'BS' @@ -286,12 +302,12 @@ def test_no_policy_node(self): self.assertAlmostEqual(total_cost, 255.2472033, places=4) # Compare a few performance measures. - self.assertAlmostEqual(network.nodes[0].state_vars[6].order_quantity[None], 57.103320, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[95].inventory_level, 9.9564105, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[43].inbound_order[None], 32.00584965, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[95].inbound_shipment[None], 52.9079333, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[19].backorders_by_successor[None], 6.7125153, places=4) - self.assertAlmostEqual(network.nodes[0].state_vars[86].inventory_level, -2.09415258242449, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[6].order_quantity[None][ext_dummy_prod], 57.103320, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[95].inventory_level[dummy_prods[0]], 9.9564105, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[43].inbound_order[None][dummy_prods[0]], 32.00584965, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[95].inbound_shipment[None][ext_dummy_prod], 52.9079333, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[19].backorders_by_successor[None][dummy_prods[0]], 6.7125153, places=4) + self.assertAlmostEqual(network.nodes[0].state_vars[86].inventory_level[dummy_prods[0]], -2.09415258242449, places=4) def test_assembly_3_stage(self): """Test that simulation() function correctly simulates 3-stage assembly model. @@ -300,6 +316,10 @@ def test_assembly_3_stage(self): network = load_instance("assembly_3_stage") + nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prods = {n.index: n._external_supplier_dummy_product.index for n in network.source_nodes} + total_cost = simulation(network, 100, rand_seed=17, progress_bar=False, consistency_checks='E') # Compare total cost. @@ -308,21 +328,21 @@ def test_assembly_3_stage(self): nodes = {n.index: n for n in network.nodes} # Compare a few performance measures. - self.assertEqual(nodes[0].state_vars[6].order_quantity[1], 5) - self.assertEqual(nodes[0].state_vars[6].order_quantity[2], 5) - self.assertEqual(nodes[0].state_vars[26].inventory_level, 3) - self.assertEqual(nodes[1].state_vars[26].inventory_level, 4) - self.assertEqual(nodes[2].state_vars[26].inventory_level, 2) - self.assertEqual(nodes[0].state_vars[41].inventory_level, -1) - self.assertEqual(nodes[1].state_vars[41].inventory_level, 1) - self.assertEqual(nodes[2].state_vars[41].inventory_level, -1) - self.assertEqual(nodes[1].state_vars[43].inbound_order[0], 4) - self.assertEqual(nodes[2].state_vars[43].inbound_order[0], 4) - self.assertEqual(nodes[0].state_vars[95].inbound_shipment[1], 6) - self.assertEqual(nodes[0].state_vars[95].inbound_shipment[2], 7) - self.assertEqual(nodes[1].state_vars[95].inbound_shipment[None], 4) - self.assertEqual(nodes[2].state_vars[95].inbound_shipment[None], 4) - self.assertEqual(nodes[2].state_vars[78].backorders_by_successor[0], 2) + self.assertEqual(nodes[0].state_vars[6].order_quantity[1][dummy_prods[1]], 5) + self.assertEqual(nodes[0].state_vars[6].order_quantity[2][dummy_prods[2]], 5) + self.assertEqual(nodes[0].state_vars[26].inventory_level[dummy_prods[0]], 3) + self.assertEqual(nodes[1].state_vars[26].inventory_level[dummy_prods[1]], 4) + self.assertEqual(nodes[2].state_vars[26].inventory_level[dummy_prods[2]], 2) + self.assertEqual(nodes[0].state_vars[41].inventory_level[dummy_prods[0]], -1) + self.assertEqual(nodes[1].state_vars[41].inventory_level[dummy_prods[1]], 1) + self.assertEqual(nodes[2].state_vars[41].inventory_level[dummy_prods[2]], -1) + self.assertEqual(nodes[1].state_vars[43].inbound_order[0][dummy_prods[0]], 4) + self.assertEqual(nodes[2].state_vars[43].inbound_order[0][dummy_prods[0]], 4) + self.assertEqual(nodes[0].state_vars[95].inbound_shipment[1][dummy_prods[1]], 6) + self.assertEqual(nodes[0].state_vars[95].inbound_shipment[2][dummy_prods[1]], 7) + self.assertEqual(nodes[1].state_vars[95].inbound_shipment[None][ext_dummy_prods[1]], 4) + self.assertEqual(nodes[2].state_vars[95].inbound_shipment[None][ext_dummy_prods[2]], 4) + self.assertEqual(nodes[2].state_vars[78].backorders_by_successor[0][dummy_prods[2]], 2) def test_rosling_figure_1(self): """Test that simulation() function correctly simulates model in Rosling (1989), From 92b9cccb228fe133b3a1748fe25b41a135604d23 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 14 Apr 2024 16:27:21 -0400 Subject: [PATCH 27/94] Still working through unit tests --- src/stockpyl/sim.py | 26 ++++++++++++---------- src/stockpyl/sim_io.py | 50 ++++++++++++++++++++++-------------------- tests/test_sim.py | 6 ++--- 3 files changed, 44 insertions(+), 38 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 93c5717..b8c4e9f 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -671,17 +671,21 @@ def _calculate_period_costs(network, period): n.state_vars[period].holding_cost_incurred += n.get_attribute('local_holding_cost_function', prod_index)(items_held) except TypeError: n.state_vars[period].holding_cost_incurred += (n.get_attribute('local_holding_cost', prod_index) or 0) * items_held - # Raw materials holding cost. Includes only "real" products, which come from an actual predecessor node. - for rm_index in n.raw_material_indices_by_product(product_index=prod_index, network_BOM=False): - # Determine any supplier of this raw material and use its holding cost. This is a workaround - # for now, since there cam be multiple RM suppliers but there's no way to specify which supplier's - # holding cost to use (or some other holding cost). See https://github.com/LarrySnyder/stockpyl/issues/140. - p = n.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=False)[0] - # Calculate raw material holding cost. - n.state_vars[period].holding_cost_incurred += \ - (p.get_attribute('local_holding_cost', rm_index) or 0) * \ - (n.state_vars[period].raw_material_inventory[rm_index] \ - + n.state_vars[period].inbound_disrupted_items[p.index][rm_index]) + # Raw materials holding cost. Includes only products that come from an actual predecessor node, not external supplier. + for rm_index in n.raw_material_indices_by_product(product_index=prod_index, network_BOM=True): + # Determine suppliers for this raw material, excluding external supplier. + preds = n.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=True) + preds = [p for p in preds if p is not None] + if len(preds) > 0: + # Choose first supplier of this raw material arbitrarily and use its holding cost. This is a workaround + # for now, since there cam be multiple RM suppliers but there's no way to specify which supplier's + # holding cost to use (or some other holding cost). See https://github.com/LarrySnyder/stockpyl/issues/140. + p = preds[0] + # Calculate raw material holding cost. + n.state_vars[period].holding_cost_incurred += \ + (p.get_attribute('local_holding_cost', rm_index) or 0) * \ + (n.state_vars[period].raw_material_inventory[rm_index] \ + + n.state_vars[period].inbound_disrupted_items[p.index][rm_index]) # Stockout cost. try: n.state_vars[period].stockout_cost_incurred += \ diff --git a/src/stockpyl/sim_io.py b/src/stockpyl/sim_io.py index 5fa7f43..53204e6 100644 --- a/src/stockpyl/sim_io.py +++ b/src/stockpyl/sim_io.py @@ -185,35 +185,37 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= if 'ITHC' in cols_to_print: temp += [node.state_vars[t].in_transit_holding_cost_incurred] if 'REV' in cols_to_print: temp += [node.state_vars[t].revenue_earned] if 'TC' in cols_to_print: temp += [node.state_vars[t].total_cost_incurred] - results.append(temp) - if print_dots and t+1 not in pers_to_print and t < num_periods-1: - results.append(["..."]) + results.append(temp) + if print_dots and t+1 not in pers_to_print and t < num_periods-1: + results.append(["..."]) # Header row headers = ["t"] for ind in sorted_nodes: node = network.get_node_from_index(ind) - headers = headers + ["| i={:d}".format(node.index)] - if 'DISR' in cols_to_print: headers += ['DISR'] - if 'IO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order, "IO") - if 'IOPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order_pipeline, "IOPL") - if 'OQ' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].order_quantity, "OQ") - if 'OO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].on_order_by_predecessor, "OO") - if 'IS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment, "IS") - if 'ISPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment_pipeline, "ISPL") - if 'IDI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_disrupted_items, "IDI") - if 'RM' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "RM") - if 'OS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_shipment, "OS") - if 'DMFS' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "DMFS") - if 'FR' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "FR") - if 'IL' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "IL") - if 'BO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].backorders_by_successor, "BO") - if 'ODI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_disrupted_items , "ODI") - if 'HC' in cols_to_print: headers += ["HC"] - if 'SC' in cols_to_print: headers += ["SC"] - if 'ITHC' in cols_to_print: headers += ["ITHC"] - if 'REV' in cols_to_print: headers += ["REV"] - if 'TC' in cols_to_print: headers += ["TC"] + # Loop through products. + for prod_index in node.product_indices: + headers = headers + [f"| i={ind:d} pr={prod_index:d}"] + if 'DISR' in cols_to_print: headers += ['DISR'] + if 'IO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order, "IO") + if 'IOPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order_pipeline, "IOPL") + if 'OQ' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].order_quantity, "OQ") + if 'OO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].on_order_by_predecessor, "OO") + if 'IS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment, "IS") + if 'ISPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment_pipeline, "ISPL") + if 'IDI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_disrupted_items, "IDI") + if 'RM' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "RM") + if 'OS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_shipment, "OS") + if 'DMFS' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "DMFS") + if 'FR' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "FR") + if 'IL' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].inventory_level, "IL") + if 'BO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].backorders_by_successor, "BO") + if 'ODI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_disrupted_items , "ODI") + if 'HC' in cols_to_print: headers += ["HC"] + if 'SC' in cols_to_print: headers += ["SC"] + if 'ITHC' in cols_to_print: headers += ["ITHC"] + if 'REV' in cols_to_print: headers += ["REV"] + if 'TC' in cols_to_print: headers += ["TC"] # Average row. averages = ["t"] diff --git a/tests/test_sim.py b/tests/test_sim.py index 3a3fa5d..86c12f7 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -336,10 +336,10 @@ def test_assembly_3_stage(self): self.assertEqual(nodes[0].state_vars[41].inventory_level[dummy_prods[0]], -1) self.assertEqual(nodes[1].state_vars[41].inventory_level[dummy_prods[1]], 1) self.assertEqual(nodes[2].state_vars[41].inventory_level[dummy_prods[2]], -1) - self.assertEqual(nodes[1].state_vars[43].inbound_order[0][dummy_prods[0]], 4) - self.assertEqual(nodes[2].state_vars[43].inbound_order[0][dummy_prods[0]], 4) + self.assertEqual(nodes[1].state_vars[43].inbound_order[0][dummy_prods[1]], 4) + self.assertEqual(nodes[2].state_vars[43].inbound_order[0][dummy_prods[2]], 4) self.assertEqual(nodes[0].state_vars[95].inbound_shipment[1][dummy_prods[1]], 6) - self.assertEqual(nodes[0].state_vars[95].inbound_shipment[2][dummy_prods[1]], 7) + self.assertEqual(nodes[0].state_vars[95].inbound_shipment[2][dummy_prods[2]], 7) self.assertEqual(nodes[1].state_vars[95].inbound_shipment[None][ext_dummy_prods[1]], 4) self.assertEqual(nodes[2].state_vars[95].inbound_shipment[None][ext_dummy_prods[2]], 4) self.assertEqual(nodes[2].state_vars[78].backorders_by_successor[0][dummy_prods[2]], 2) From 4d18efd1d33c1f4f4d8825f8cb9382ffb67fbd4d Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 14 Apr 2024 16:34:59 -0400 Subject: [PATCH 28/94] Fixed no-policy bug --- src/stockpyl/sim.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index b8c4e9f..a090416 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -165,6 +165,17 @@ def initialize(network, num_periods, rand_seed=None): if network.has_directed_cycle(): raise ValueError("network may not contain a directed cycle") + # Check that all nodes have inventory policies with node attribute set correctly. + for node in network.nodes: + for prod in node.products: + policy = node.get_attribute('inventory_policy', product=prod) + if policy is None or policy.type is None: + if prod.index: + err_str = f'The inventory_policy attribute for node {node.index} and product {prod.index} is None. You must provide a Policy object in one or both objects in order for the simulation to set order quantities.' + else: + err_str = f'The inventory_policy attribute for node {node.index} is None. You must provide a Policy object in order for the simulation to set order quantities.' + raise AttributeError(err_str) + # Initialize state and decision variables at each node. # NOTE: State variables are indexed up to num_periods+extra_periods; the @@ -388,12 +399,6 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan else: # Calculate order quantity. policy = node.get_attribute('inventory_policy', product=prod) - if policy is None: - if prod.index: - err_str = f'The inventory_policy attribute for node {node.index} and product {prod.index} is None. You must provide a Policy object in one or both objects in order for the simulation to set order quantities.' - else: - err_str = f'The inventory_policy attribute for node {node.index} is None. You must provide a Policy object in order for the simulation to set order quantities.' - raise AttributeError(err_str) # Determine node/product's order capacity. order_capac = node.get_attribute('order_capacity', product=prod) or BIG_FLOAT From e2ec9d878088576b2ee473bc0f71b16e56f68082 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 14 Apr 2024 18:28:19 -0400 Subject: [PATCH 29/94] All tests in test_sim.TestSimulation pass --- src/stockpyl/policy.py | 2 + src/stockpyl/sim.py | 7 +- src/stockpyl/supply_chain_node.py | 49 +++++++---- .../temp_TestSaveInstance_example_6_1.json | 1 + ...tance_example_6_1_with_order_capacity.json | 1 + ...estSaveInstance_omit_state_vars_false.json | 1 + ...nstance_omit_state_vars_false_rosling.json | 1 + ...TestSaveInstance_omit_state_vars_true.json | 1 + tests/test_sim.py | 86 ++++++++++--------- 9 files changed, 88 insertions(+), 61 deletions(-) create mode 100644 tests/additional_files/temp_TestSaveInstance_example_6_1.json create mode 100644 tests/additional_files/temp_TestSaveInstance_example_6_1_with_order_capacity.json create mode 100644 tests/additional_files/temp_TestSaveInstance_omit_state_vars_false.json create mode 100644 tests/additional_files/temp_TestSaveInstance_omit_state_vars_false_rosling.json create mode 100644 tests/additional_files/temp_TestSaveInstance_omit_state_vars_true.json diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index f6e35a7..b237676 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -434,6 +434,8 @@ def get_order_quantity(self, product_index=None, predecessor_index=None, rm_inde # external demand. demand = self.node._get_attribute_total('inbound_order', self.node.network.period, product_index=product_index) + # Determine predecessor and RM index. + # Calculate (local or echelon) inventory position, before demand is subtracted. if self.type in ('EBS', 'BEBS'): IP_before_demand = \ diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index a090416..494bac0 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -512,7 +512,12 @@ def _initialize_state_vars(network): # Initialize inventory_level to initial_inventory_level (or to BS level, etc., if None). init_IL = n.get_attribute('initial_inventory_level', prod) if init_IL is None: - init_IL = n.get_attribute('inventory_policy', prod).get_order_quantity(inventory_position=0) + # Choose a supplier and RM to use when getting an order quantity to set the initial IL. + # This is klugey -- TODO: set this better + rm_index = n.raw_material_indices_by_product(prod.index)[0] + pred_index = n.raw_material_suppliers_by_raw_material(rm_index)[0] + init_IL = n.get_attribute('inventory_policy', prod).get_order_quantity( + product_index=prod.index, predecessor_index=pred_index, rm_index=rm_index, inventory_position=0) n.state_vars[0].inventory_level[prod.index] = init_IL # Initialize inbound order pipeline. (Exclude external demand.) diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index d9f7cad..28033fb 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1809,7 +1809,7 @@ def on_hand(self): if self.node.is_multiproduct: return {prod_index: max(0, self.inventory_level[prod_index]) for prod_index in self.node.product_indices} else: - return max(0, self.inventory_level[None]) + return max(0, self.inventory_level[self.node._dummy_product.index]) @property def backorders(self): @@ -1822,7 +1822,7 @@ def backorders(self): if self.node.is_multiproduct: return {prod_index: max(0, -self.inventory_level[prod_index]) for prod_index in self.node.product_indices} else: - return max(0, -self.inventory_level[None]) + return max(0, -self.inventory_level[self.node._dummy_product.index]) def in_transit_to(self, successor, prod_index=None): """Return current total inventory of product ``prod_index`` in transit to a given successor. @@ -1868,12 +1868,15 @@ def in_transit_from(self, predecessor=None, prod_index=None): float The current inventory in transit from the predecessor. """ + # Get predecessor index. Also get prod_index if it's None. if predecessor is None: p_ind = None + if prod_index is None: + prod_index = self.node._external_supplier_dummy_product.index else: p_ind = predecessor.index - # Determine product index. # TODO: validate parameters - prod_index = prod_index or self.node._dummy_product.index + if prod_index is None: + prod_index = predecessor.products[0].index return np.sum(self.inbound_shipment_pipeline[p_ind][prod_index][:]) @@ -2244,27 +2247,33 @@ def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm ValueError If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. """ - # Validate parameters. - if predecessor_index is None and rm_index is not None: - raise ValueError('If predecessor_index is None, then rm_index must also be None.') - if predecessor_index is not None and rm_index is None: - raise ValueError('If rm_index is None, then predecessor_index must also be None.') + # Validate parameters. # TODO: figure out what's going on here + # if predecessor_index is None and rm_index is not None: + # raise ValueError('If predecessor_index is None, then rm_index must also be None.') + # if predecessor_index is not None and rm_index is None: + # raise ValueError('If rm_index is None, then predecessor_index must also be None.') # Determine product index. # TODO: validate parameters prod_index = prod_index or self.node.product_indices[0] - if predecessor_index is not None: - return self.echelon_inventory_level[prod_index] \ - + self.on_order_by_predecessor[predecessor_index][rm_index] \ - + self.raw_material_inventory[predecessor_index][rm_index] \ - + self.inbound_disrupted_items[predecessor_index][rm_index] + # Calculate echelon inventory level. + if self.node.is_singleproduct: + EIL = self.echelon_inventory_level + else: + EIL = self.echelon_inventory_level[prod_index] + # Calculate on-order, raw material inventory, and inbound disrupted items. + if rm_index is not None: + OO = self.on_order_by_predecessor[predecessor_index][rm_index] + RMI = self.raw_material_inventory[rm_index] + IDI = self.inbound_disrupted_items[predecessor_index][rm_index] else: # Note: If <=1 predecessor, raw_material_inventory should always = 0 # (because raw materials are processed right away). - return self.echelon_inventory_level \ - + self.on_order(prod_index=prod_index) \ - + self.raw_material_aggregate(prod_index=prod_index) \ - + self.inbound_disrupted_items_aggregate(prod_index=prod_index) + OO = self.on_order(prod_index=prod_index) + RMI = self.raw_material_aggregate(prod_index=prod_index) + IDI = inbound_disrupted_items_aggregate(prod_index=prod_index) + + return EIL + OO + RMI + IDI def _echelon_inventory_position_adjusted(self): @@ -2300,11 +2309,13 @@ def _echelon_inventory_position_adjusted(self): pred = self.node.get_one_predecessor() if pred is None: pred_index = None + rm_index = self.node._external_supplier_dummy_product.index else: pred_index = pred.index + rm_index = pred.product_indices[0] for t in range(self.node.equivalent_lead_time, self.node.shipment_lead_time): if self.node.network.period - t >= 0: - in_transit_adjusted += self.node.state_vars[self.node.network.period - t].order_quantity[pred_index] + in_transit_adjusted += self.node.state_vars[self.node.network.period - t].order_quantity[pred_index][rm_index] # np.sum([self.node.state_vars[self.node.network.period-t].order_quantity[predecessor_index] # for t in range(self.node.equivalent_lead_time, self.node.shipment_lead_time)]) # Calculate adjusted echelon inventory position. diff --git a/tests/additional_files/temp_TestSaveInstance_example_6_1.json b/tests/additional_files/temp_TestSaveInstance_example_6_1.json new file mode 100644 index 0000000..75a2d36 --- /dev/null +++ b/tests/additional_files/temp_TestSaveInstance_example_6_1.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-3": -3}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestSaveInstance_example_6_1_with_order_capacity.json b/tests/additional_files/temp_TestSaveInstance_example_6_1_with_order_capacity.json new file mode 100644 index 0000000..646ba6e --- /dev/null +++ b/tests/additional_files/temp_TestSaveInstance_example_6_1_with_order_capacity.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-3": -3}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false.json b/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false.json new file mode 100644 index 0000000..dde0d8c --- /dev/null +++ b/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-5": -5}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false_rosling.json b/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false_rosling.json new file mode 100644 index 0000000..7359851 --- /dev/null +++ b/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false_rosling.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "test_omit_state_vars_rosling_false", "description": "this is test_omit_state_vars_rosling_false", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-1": -1}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestSaveInstance_omit_state_vars_true.json b/tests/additional_files/temp_TestSaveInstance_omit_state_vars_true.json new file mode 100644 index 0000000..45933f9 --- /dev/null +++ b/tests/additional_files/temp_TestSaveInstance_omit_state_vars_true.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-5": -5}, "_dummy_product": \ No newline at end of file diff --git a/tests/test_sim.py b/tests/test_sim.py index 86c12f7..28f616e 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -351,15 +351,19 @@ def test_rosling_figure_1(self): print_status('TestSimulation', 'test_rosling_figure_1()') network = load_instance("rosling_figure_1") + + nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prods = {n.index: n._external_supplier_dummy_product.index for n in network.source_nodes} + # Make the BS levels a little smaller so there are some stockouts. - #network.get_node_from_index(1).order_capacity = 10000 - network.get_node_from_index(1).inventory_policy.base_stock_level = 6 - network.get_node_from_index(2).inventory_policy.base_stock_level = 20 - network.get_node_from_index(3).inventory_policy.base_stock_level = 35 - network.get_node_from_index(4).inventory_policy.base_stock_level = 58 - network.get_node_from_index(5).inventory_policy.base_stock_level = 45 - network.get_node_from_index(6).inventory_policy.base_stock_level = 65 - network.get_node_from_index(7).inventory_policy.base_stock_level = 75 + nodes[1].inventory_policy.base_stock_level = 6 + nodes[2].inventory_policy.base_stock_level = 20 + nodes[3].inventory_policy.base_stock_level = 35 + nodes[4].inventory_policy.base_stock_level = 58 + nodes[5].inventory_policy.base_stock_level = 45 + nodes[6].inventory_policy.base_stock_level = 65 + nodes[7].inventory_policy.base_stock_level = 75 total_cost = simulation(network, 100, rand_seed=17, progress_bar=False, consistency_checks='E') @@ -367,39 +371,39 @@ def test_rosling_figure_1(self): self.assertEqual(total_cost, 0) # Compare a few performance measures. - self.assertEqual(network.get_node_from_index(1).state_vars[6].order_quantity[2], 4) - self.assertEqual(network.get_node_from_index(1).state_vars[6].order_quantity[3], 4) - self.assertEqual(network.get_node_from_index(2).state_vars[6].order_quantity[5], 4) - self.assertEqual(network.get_node_from_index(3).state_vars[6].order_quantity[4], 4) - self.assertEqual(network.get_node_from_index(4).state_vars[6].order_quantity[6], 0) - self.assertEqual(network.get_node_from_index(4).state_vars[6].order_quantity[7], 0) - self.assertEqual(network.get_node_from_index(1).state_vars[16].inventory_level, 3) - self.assertEqual(network.get_node_from_index(2).state_vars[16].inventory_level, 7) - self.assertEqual(network.get_node_from_index(3).state_vars[16].inventory_level, 4) - self.assertEqual(network.get_node_from_index(4).state_vars[16].inventory_level, 9) - self.assertEqual(network.get_node_from_index(5).state_vars[16].inventory_level, 7) - self.assertEqual(network.get_node_from_index(6).state_vars[16].inventory_level, 19) - self.assertEqual(network.get_node_from_index(7).state_vars[16].inventory_level, 24) - self.assertEqual(network.get_node_from_index(1).state_vars[44].inventory_level, -4) - self.assertEqual(network.get_node_from_index(2).state_vars[44].inventory_level, -5) - self.assertEqual(network.get_node_from_index(3).state_vars[44].inventory_level, 0) - self.assertEqual(network.get_node_from_index(4).state_vars[44].inventory_level, -2) - self.assertEqual(network.get_node_from_index(5).state_vars[44].inventory_level, -6) - self.assertEqual(network.get_node_from_index(6).state_vars[44].inventory_level, 0) - self.assertEqual(network.get_node_from_index(7).state_vars[44].inventory_level, 10) - self.assertEqual(network.get_node_from_index(1).state_vars[16].inbound_shipment[2], 2) - self.assertEqual(network.get_node_from_index(1).state_vars[16].inbound_shipment[3], 2) - self.assertEqual(network.get_node_from_index(2).state_vars[16].inbound_shipment[5], 1) - self.assertEqual(network.get_node_from_index(3).state_vars[16].inbound_shipment[4], 0) - self.assertEqual(network.get_node_from_index(4).state_vars[16].inbound_shipment[6], 12) - self.assertEqual(network.get_node_from_index(4).state_vars[16].inbound_shipment[7], 12) - self.assertEqual(network.get_node_from_index(5).state_vars[16].inbound_shipment[None], 9) - self.assertEqual(network.get_node_from_index(6).state_vars[16].inbound_shipment[None], 13) - self.assertEqual(network.get_node_from_index(7).state_vars[16].inbound_shipment[None], 12) - self.assertEqual(network.get_node_from_index(1).state_vars[45].raw_material_inventory[2], 0) - self.assertEqual(network.get_node_from_index(1).state_vars[45].raw_material_inventory[3], 5) - self.assertEqual(network.get_node_from_index(2).state_vars[45].raw_material_inventory[5], 0) - self.assertEqual(network.get_node_from_index(4).state_vars[45].raw_material_inventory[6], 0) + self.assertEqual(nodes[1].state_vars[6].order_quantity[2][dummy_prods[2]], 4) + self.assertEqual(nodes[1].state_vars[6].order_quantity[3][dummy_prods[3]], 4) + self.assertEqual(nodes[2].state_vars[6].order_quantity[5][dummy_prods[5]], 4) + self.assertEqual(nodes[3].state_vars[6].order_quantity[4][dummy_prods[4]], 4) + self.assertEqual(nodes[4].state_vars[6].order_quantity[6][dummy_prods[6]], 0) + self.assertEqual(nodes[4].state_vars[6].order_quantity[7][dummy_prods[7]], 0) + self.assertEqual(nodes[1].state_vars[16].inventory_level[dummy_prods[1]], 3) + self.assertEqual(nodes[2].state_vars[16].inventory_level[dummy_prods[2]], 7) + self.assertEqual(nodes[3].state_vars[16].inventory_level[dummy_prods[3]], 4) + self.assertEqual(nodes[4].state_vars[16].inventory_level[dummy_prods[4]], 9) + self.assertEqual(nodes[5].state_vars[16].inventory_level[dummy_prods[5]], 7) + self.assertEqual(nodes[6].state_vars[16].inventory_level[dummy_prods[6]], 19) + self.assertEqual(nodes[7].state_vars[16].inventory_level[dummy_prods[7]], 24) + self.assertEqual(nodes[1].state_vars[44].inventory_level[dummy_prods[1]], -4) + self.assertEqual(nodes[2].state_vars[44].inventory_level[dummy_prods[2]], -5) + self.assertEqual(nodes[3].state_vars[44].inventory_level[dummy_prods[3]], 0) + self.assertEqual(nodes[4].state_vars[44].inventory_level[dummy_prods[4]], -2) + self.assertEqual(nodes[5].state_vars[44].inventory_level[dummy_prods[5]], -6) + self.assertEqual(nodes[6].state_vars[44].inventory_level[dummy_prods[6]], 0) + self.assertEqual(nodes[7].state_vars[44].inventory_level[dummy_prods[7]], 10) + self.assertEqual(nodes[1].state_vars[16].inbound_shipment[2][dummy_prods[2]], 2) + self.assertEqual(nodes[1].state_vars[16].inbound_shipment[3][dummy_prods[3]], 2) + self.assertEqual(nodes[2].state_vars[16].inbound_shipment[5][dummy_prods[5]], 1) + self.assertEqual(nodes[3].state_vars[16].inbound_shipment[4][dummy_prods[4]], 0) + self.assertEqual(nodes[4].state_vars[16].inbound_shipment[6][dummy_prods[6]], 12) + self.assertEqual(nodes[4].state_vars[16].inbound_shipment[7][dummy_prods[7]], 12) + self.assertEqual(nodes[5].state_vars[16].inbound_shipment[None][ext_dummy_prods[5]], 9) + self.assertEqual(nodes[6].state_vars[16].inbound_shipment[None][ext_dummy_prods[6]], 13) + self.assertEqual(nodes[7].state_vars[16].inbound_shipment[None][ext_dummy_prods[7]], 12) + self.assertEqual(nodes[1].state_vars[45].raw_material_inventory[dummy_prods[2]], 0) + self.assertEqual(nodes[1].state_vars[45].raw_material_inventory[dummy_prods[3]], 5) + self.assertEqual(nodes[2].state_vars[45].raw_material_inventory[dummy_prods[5]], 0) + self.assertEqual(nodes[4].state_vars[45].raw_material_inventory[dummy_prods[6]], 0) def test_directed_cycle(self): """Test that simulation() function correctly raises a ValueError if network contains a From 05bbe63e7a2904ee04c2d98bb6120ee77695ba84 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 14 Apr 2024 22:39:11 -0400 Subject: [PATCH 30/94] All test_sim tests pass --- src/stockpyl/instances.py | 32 +++--- src/stockpyl/sim.py | 62 ++++++----- ...iteInstanceAndStates_test_example_6_1.json | 1 + ...tes_test_example_6_1_with_disruptions.json | 1 + ...tates_test_rong_atan_snyder_figure_1a.json | 1 + ...tan_snyder_figure_1a_with_disruptions.json | 1 + ...riteResults_test_columns_to_print_list.csv | 12 ++ ...riteResults_test_columns_to_print_list.txt | 13 +++ ..._test_columns_to_print_list_of_strings.csv | 12 ++ ..._test_columns_to_print_list_of_strings.txt | 13 +++ ...iteResults_test_columns_to_print_mixed.csv | 12 ++ ...iteResults_test_columns_to_print_mixed.txt | 13 +++ ...riteResults_test_columns_to_print_none.csv | 12 ++ ...riteResults_test_columns_to_print_none.txt | 13 +++ ...teResults_test_columns_to_print_string.csv | 12 ++ ...teResults_test_columns_to_print_string.txt | 24 ++-- ...temp_TestWriteResults_test_example_6_1.csv | 12 ++ ...temp_TestWriteResults_test_example_6_1.txt | 13 +++ ...TestWriteResults_test_periods_to_print.csv | 4 + ...TestWriteResults_test_periods_to_print.txt | 5 + .../test_sim_disruption_example_6_1_OP.csv | 2 +- .../test_sim_disruption_example_6_1_RP.csv | 2 +- .../test_sim_disruption_example_6_1_SP.csv | 2 +- .../test_sim_disruption_example_6_1_TP.csv | 2 +- tests/test_sim.py | 103 ++++++++++++------ 25 files changed, 288 insertions(+), 91 deletions(-) create mode 100644 tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1.json create mode 100644 tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1_with_disruptions.json create mode 100644 tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a.json create mode 100644 tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a_with_disruptions.json create mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.csv create mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.txt create mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.csv create mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.txt create mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.csv create mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.txt create mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.csv create mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.txt create mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.csv create mode 100644 tests/additional_files/temp_TestWriteResults_test_example_6_1.csv create mode 100644 tests/additional_files/temp_TestWriteResults_test_example_6_1.txt create mode 100644 tests/additional_files/temp_TestWriteResults_test_periods_to_print.csv create mode 100644 tests/additional_files/temp_TestWriteResults_test_periods_to_print.txt diff --git a/src/stockpyl/instances.py b/src/stockpyl/instances.py index f63783d..9ba10d9 100644 --- a/src/stockpyl/instances.py +++ b/src/stockpyl/instances.py @@ -119,6 +119,22 @@ def load_instance(instance_name, filepath=None, ignore_state_vars=True): if ignore_state_vars: for n in instance.nodes: n.state_vars = [] + + # Ensure that all nodes have dummy product fields set correctly. This is to maintain backward + # compatitbility with earlier versions, which did not save product info (including dummy products). + for n in instance.nodes: + # Does node already have dummy product? + if n._dummy_product is None: + # Add a dummy product, whether or not it needs one (mainly to assign the index). + n._add_dummy_product() + # Assign external supplier dummy product. + n._external_supplier_dummy_product = SupplyChainProduct(n._dummy_product.index - 1, is_dummy=True) + # Does node have "real" products? (This will probably never happen, since products were introduced + # in the same version as dummy products--so if a node has products, it probably has dummy products + # correctly handled already.) + if len(n.products_by_index) > 1: + # Remove dummy product. + n._remove_dummy_product() else: # As a dict. Leave in place. But: # If the instance contains any dicts with integer keys, they will have @@ -126,22 +142,6 @@ def load_instance(instance_name, filepath=None, ignore_state_vars=True): # Currently, only demand_pmf has this issue. if 'demand_pmf' in instance.keys(): instance['demand_pmf'] = {int(k): v for k, v in instance['demand_pmf'].items()} - - # Ensure that all nodes have dummy product fields set correctly. This is to maintain backward - # compatitbility with earlier versions, which did not save product info (including dummy products). - for n in instance.nodes: - # Does node already have dummy product? - if n._dummy_product is None: - # Add a dummy product, whether or not it needs one (mainly to assign the index). - n._add_dummy_product() - # Assign external supplier dummy product. - n._external_supplier_dummy_product = SupplyChainProduct(n._dummy_product.index - 1, is_dummy=True) - # Does node have "real" products? (This will probably never happen, since products were introduced - # in the same version as dummy products--so if a node has products, it probably has dummy products - # correctly handled already.) - if len(n.products_by_index) > 1: - # Remove dummy product. - n._remove_dummy_product() return instance diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 494bac0..385d8d4 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -217,9 +217,13 @@ def step(network, order_quantity_override=None, consistency_checks='W'): String indicating whether to run consistency checks (backorder calculations) and what to do if check fails. See docstring for :func:`~stockpyl.sim.simulation` for list of currently supported strings. order_quantity_override : dict, optional - Dictionary indicating an order quantity (or ``None``) for each node in network (specified as |class_node| objects). - If provided, these order quantity will override the order quantities that would otherwise be calculated for - the nodes. If ``order_quantity_override`` is provided but its value is ``None`` for a given + Nested dictionary such that order_quantity_override[node][rm] is an order quantity (or ``None``) + for each node in the network (specified as a |class_node| object) and for each raw material the node orders + (specified as a |class_product| object). + If provided, these order quantities will override the order quantities that would otherwise be calculated for + the nodes/products. If the node has a single raw material, ``rm`` may be set to ``None`` and the + raw material will be determined automatically. + If ``order_quantity_override`` is provided but its value is ``None`` for a given node, an order quantity will be calculated for that node as usual. (This option is mostly used when running the simulation from outside the package, e.g., in a reinforcement learning environment; it is analogous to setting the action for the current time period.) @@ -337,14 +341,16 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan Dictionary indicating whether each node in network has already been visited by the depth-first search. order_quantity_override : dict, optional - Dictionary indicating an order quantity (or ``None``) for each node and product in network - (specified as |class_node| and |class_product| objects, or ``None`` for single-product nodes). - e.g., ``order_quantity_override[node][product]`` is the order quantity to use for ``product`` at ``node``. - If provided, these order quantity will override the order quantities that would otherwise be calculated for - the nodes. If ``order_quantity_override`` is provided but its value is ``None`` for a given + Nested dictionary such that order_quantity_override[node][rm] is an order quantity (or ``None``) + for each node in the network (specified as a |class_node| object) and for each raw material the node orders + (specified as a |class_product| object). + If provided, these order quantities will override the order quantities that would otherwise be calculated for + the nodes/products. If the node has a single raw material, ``rm`` may be set to ``None`` and the + raw material will be determined automatically. + If ``order_quantity_override`` is provided but its value is ``None`` for a given node, an order quantity will be calculated for that node as usual. (This option is mostly used - when running the simulation from outside the package, e.g., in a reinforcement learning environment.) - + when running the simulation from outside the package, e.g., in a reinforcement learning environment; + it is analogous to setting the action for the current time period.) """ # Did we already visit this node? if visited[node_index]: @@ -383,18 +389,8 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan shipment_lead_time = node.get_attribute('shipment_lead_time', prod) or 0 # Determine order quantity. - # Was an override order quantity provided? - try: - qty_override = order_quantity_override[node][prod] - except: - qty_override = None - if qty_override is not None: - order_quantity = qty_override - # if order_quantity_override is not None and node in order_quantity_override \ - # and order_quantity_override[node] is not None : - # order_quantity = order_quantity_override[node] # Is there an order-pausing disruption? - elif node.disrupted and node.disruption_process.disruption_type == 'OP': + if node.disrupted and node.disruption_process.disruption_type == 'OP': order_quantity = 0 else: # Calculate order quantity. @@ -409,10 +405,22 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan p_index = p.index if p is not None else None # Loop through products at predecessor. - for rm_index in (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]): - # Calculate order quantity from policy. - # (It will be 0 if there's no BOM relationship for this product/predecessor/raw material.) - order_quantity = min(order_capac, policy.get_order_quantity(product_index=prod.index, predecessor_index=p_index, rm_index=rm_index)) + for rm in (p.products if p is not None else [node._external_supplier_dummy_product]): + rm_index = rm.index + # Was an override order quantity provided? + try: + if None in order_quantity_override[node]: + qty_override = order_quantity_override[node][None] + else: + qty_override = order_quantity_override[node][rm] + except: + qty_override = None + if qty_override is not None: + order_quantity = qty_override + else: + # Calculate order quantity from policy. + # (It will be 0 if there's no BOM relationship for this product/predecessor/raw material.) + order_quantity = min(order_capac, policy.get_order_quantity(product_index=prod.index, predecessor_index=p_index, rm_index=rm_index)) # Place order in predecessor's order pipeline (converting first to raw material units via BOM). if p is not None: @@ -600,7 +608,7 @@ def _initialize_next_period_state_vars(network, period): for rm_index in (p.product_indices if p is not None else [n._external_supplier_dummy_product.index]): # Is there a transit-pausing disruption? - if n.disrupted and n.get_attribute('disruption_process', rm_index).disruption_type == 'TP': + if n.disrupted and n.disruption_process.disruption_type == 'TP': # Yes; items in shipment pipeline stay where they are. n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index] = \ n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index].copy() @@ -751,7 +759,7 @@ def _receive_inbound_shipments(node): ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][rm_index][0] # Is there a receipt-pausing disruption? - if node.disrupted and node.get_attribute('disruption_process', rm_index).disruption_type == 'RP': + if node.disrupted and node.disruption_process.disruption_type == 'RP': # Yes: Don't receive anything. IS = 0 # Increase inbound disrupted items by the items that would have been received, if diff --git a/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1.json b/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1.json new file mode 100644 index 0000000..c764ee7 --- /dev/null +++ b/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "temp", "description": "", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1_with_disruptions.json b/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1_with_disruptions.json new file mode 100644 index 0000000..c764ee7 --- /dev/null +++ b/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1_with_disruptions.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "temp", "description": "", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a.json b/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a.json new file mode 100644 index 0000000..d2df1c4 --- /dev/null +++ b/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "temp", "description": "", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a_with_disruptions.json b/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a_with_disruptions.json new file mode 100644 index 0000000..d2df1c4 --- /dev/null +++ b/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a_with_disruptions.json @@ -0,0 +1 @@ +{"_id": "", "instances": [{"name": "temp", "description": "", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.csv b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.csv new file mode 100644 index 0000000..c7096ee --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IL:-1000,TC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IL:-1,TC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IL:-2,TC +0,,5.276265890021318,11.76626589002132,-5.276265890021318,195.85498983759132,,11.76626589002132,17.29626589002132,-11.76626589002132,0.0,,17.29626589002132,27.986265890021322,-17.29626589002132,0.0 +1,,3.1453719211934947,3.145371921193494,-8.421637811214813,312.61119555229385,,3.145371921193494,3.145371921193493,-14.911637811214813,0.0,,3.145371921193493,3.145371921193491,-20.441637811214814,0.0 +2,,5.623901111326356,5.623901111326356,-14.04553892254117,521.3704048047282,,5.623901111326356,5.623901111326355,-20.53553892254117,0.0,,5.623901111326355,5.623901111326357,1.9207269674801521,55.972531780042644 +3,,6.14531128957209,6.1453112895720885,-20.19085021211326,749.4843598736442,,6.1453112895720885,6.145311289572091,-0.6153112895720909,104.26215569016468,,6.145311289572091,6.145311289572089,-1.0792124008984478,10.132197777347287 +4,,6.037190468227883,6.037190468227885,-0.16250175779997544,6.032065249535088,,6.037190468227885,6.037190468227887,-1.5864028691263323,20.264395554694573,,6.037190468227887,6.037190468227889,-1.4925017577999782,11.247802222652714 +... +95,,6.130726446440085,6.130726446440086,-1.0873708669114333,40.3632065797524,,6.130726446440086,6.130726446440086,-0.6007264464400803,27.90657768188541,,6.130726446440086,6.130726446440088,-1.4443296265940617,9.372793639692048 +96,,5.560039692192106,5.560039692192106,0.32923386136781296,2.3046370295746907,,5.560039692192106,5.560039692192106,-1.4743693187861622,18.745587279384097,,5.560039692192106,5.560039692192106,-1.0007661386321853,12.007206360307965 +97,,4.381602699335917,4.381602699335917,0.63402798187792,4.43819587314544,,4.381602699335917,4.381602699335917,0.14763116203190307,24.01441272061593,,4.381602699335917,4.381602699335919,0.7483576084719852,12.261452892880175 +98,,4.775201280806586,4.775201280806585,1.7147987191934133,12.003591034353892,,4.775201280806585,4.775201280806586,0.7547987191934205,22.120000000000022,,4.775201280806586,4.775201280806584,1.5331960198575052,12.616794601328182 +99,,7.215901450653069,7.21590145065307,-0.7259014506530708,26.945461848241987,,7.21590145065307,7.21590145065307,-1.6859014506530636,22.120000000000026,,7.21590145065307,7.215901450653072,-1.301102731459646,11.829597438386848 diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.txt b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.txt new file mode 100644 index 0000000..10fbefd --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IL:-1000 TC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IL:-1 TC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IL:-2 TC +--- ---------------- -------------- --------- ---------- --------- ------------- --------- --------- ---------- -------- ------------- --------- ----------- ---------- -------- +0 | 5.27627 11.7663 -5.27627 195.855 | 11.7663 17.2963 -11.7663 0 | 17.2963 27.9863 -17.2963 0 +1 | 3.14537 3.14537 -8.42164 312.611 | 3.14537 3.14537 -14.9116 0 | 3.14537 3.14537 -20.4416 0 +2 | 5.6239 5.6239 -14.0455 521.37 | 5.6239 5.6239 -20.5355 0 | 5.6239 5.6239 1.92073 55.9725 +3 | 6.14531 6.14531 -20.1909 749.484 | 6.14531 6.14531 -0.615311 104.262 | 6.14531 6.14531 -1.07921 10.1322 +4 | 6.03719 6.03719 -0.162502 6.03207 | 6.03719 6.03719 -1.5864 20.2644 | 6.03719 6.03719 -1.4925 11.2478 +... +95 | 6.13073 6.13073 -1.08737 40.3632 | 6.13073 6.13073 -0.600726 27.9066 | 6.13073 6.13073 -1.44433 9.37279 +96 | 5.56004 5.56004 0.329234 2.30464 | 5.56004 5.56004 -1.47437 18.7456 | 5.56004 5.56004 -1.00077 12.0072 +97 | 4.3816 4.3816 0.634028 4.4382 | 4.3816 4.3816 0.147631 24.0144 | 4.3816 4.3816 0.748358 12.2615 +98 | 4.7752 4.7752 1.7148 12.0036 | 4.7752 4.7752 0.754799 22.12 | 4.7752 4.7752 1.5332 12.6168 +99 | 7.2159 7.2159 -0.725901 26.9455 | 7.2159 7.2159 -1.6859 22.12 | 7.2159 7.2159 -1.3011 11.8296 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.csv b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.csv new file mode 100644 index 0000000..f7ea079 --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,OS:EXT|-1000,IL:-1000,HC,SC,TC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,OS:0|-1,IL:-1,HC,SC,TC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,OS:1|-2,IL:-2,HC,SC,TC +0,,5.276265890021318,11.76626589002132,0,0.0,-5.276265890021318,0.0,195.85498983759132,195.85498983759132,,11.76626589002132,17.29626589002132,0,0.0,-11.76626589002132,0.0,0.0,0.0,,17.29626589002132,27.986265890021322,0,0.0,-17.29626589002132,0.0,0.0,0.0 +1,,3.1453719211934947,3.145371921193494,0.0,0.0,-8.421637811214813,0.0,312.61119555229385,312.61119555229385,,3.145371921193494,3.145371921193493,0.0,0.0,-14.911637811214813,0.0,0.0,0.0,,3.145371921193493,3.145371921193491,0,0.0,-20.441637811214814,0.0,0.0,0.0 +2,,5.623901111326356,5.623901111326356,0.0,0.0,-14.04553892254117,0.0,521.3704048047282,521.3704048047282,,5.623901111326356,5.623901111326355,0.0,0.0,-20.53553892254117,0.0,0.0,0.0,,5.623901111326355,5.623901111326357,27.986265890021322,26.06553892254117,1.9207269674801521,3.8414539349603043,0,55.972531780042644 +3,,6.14531128957209,6.1453112895720885,0.0,0.0,-20.19085021211326,0.0,749.4843598736442,749.4843598736442,,6.1453112895720885,6.145311289572091,26.06553892254117,26.06553892254117,-0.6153112895720909,0.0,0.0,104.26215569016468,,6.145311289572091,6.145311289572089,3.145371921193491,5.066098888673643,-1.0792124008984478,0.0,0.0,10.132197777347287 +4,,6.037190468227883,6.037190468227885,26.06553892254117,26.06553892254117,-0.16250175779997544,0.0,6.032065249535088,6.032065249535088,,6.037190468227885,6.037190468227887,5.066098888673643,5.066098888673643,-1.5864028691263323,0.0,0.0,20.264395554694573,,6.037190468227887,6.037190468227889,5.623901111326357,5.623901111326357,-1.4925017577999782,0.0,0.0,11.247802222652714 +... +95,,6.130726446440085,6.130726446440086,5.4680702998326325,5.4680702998326325,-1.0873708669114333,0.0,40.3632065797524,40.3632065797524,,6.130726446440086,6.130726446440086,6.976644420471352,6.976644420471352,-0.6007264464400803,0.0,0.0,27.90657768188541,,6.130726446440086,6.130726446440088,3.7919143161941378,4.686396819846024,-1.4443296265940617,0.0,0.0,9.372793639692048 +96,,5.560039692192106,5.560039692192106,6.976644420471352,6.647410559103539,0.32923386136781296,2.3046370295746907,0.0,2.3046370295746907,,5.560039692192106,5.560039692192106,4.686396819846024,4.686396819846024,-1.4743693187861622,0.0,0.0,18.745587279384097,,5.560039692192106,5.560039692192106,6.003603180153982,6.003603180153982,-1.0007661386321853,0.0,0.0,12.007206360307965 +97,,4.381602699335917,4.381602699335917,4.686396819846024,4.381602699335917,0.63402798187792,4.43819587314544,0.0,4.43819587314544,,4.381602699335917,4.381602699335917,6.003603180153982,5.855972018122079,0.14763116203190307,0.5905246481276123,0,24.01441272061593,,4.381602699335917,4.381602699335919,6.130726446440088,5.3823688379681025,0.7483576084719852,1.4967152169439704,0,12.261452892880175 +98,,4.775201280806586,4.775201280806585,5.855972018122079,4.775201280806586,1.7147987191934133,12.003591034353892,0.0,12.003591034353892,,4.775201280806585,4.775201280806586,5.3823688379681025,4.775201280806585,0.7547987191934205,3.019194876773682,0,22.120000000000022,,4.775201280806586,4.775201280806584,5.560039692192106,4.775201280806586,1.5331960198575052,3.0663920397150104,0,12.616794601328182 +99,,7.215901450653069,7.21590145065307,4.775201280806585,6.489999999999998,-0.7259014506530708,0.0,26.945461848241987,26.945461848241987,,7.21590145065307,7.21590145065307,4.775201280806586,5.5300000000000065,-1.6859014506530636,0.0,0.0,22.120000000000026,,7.21590145065307,7.215901450653072,4.381602699335919,5.914798719193424,-1.301102731459646,0.0,0.0,11.829597438386848 diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.txt b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.txt new file mode 100644 index 0000000..c900e59 --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 OS:EXT|-1000 IL:-1000 HC SC TC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 OS:0|-1 IL:-1 HC SC TC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 OS:1|-2 IL:-2 HC SC TC +--- ---------------- -------------- --------- --------- -------------- ---------- -------- --------- --------- ------------- --------- --------- --------- --------- ---------- -------- ---- -------- ------------- --------- ----------- ----------- --------- ---------- ------- ---- -------- +0 | 5.27627 11.7663 0 0 -5.27627 0 195.855 195.855 | 11.7663 17.2963 0 0 -11.7663 0 0 0 | 17.2963 27.9863 0 0 -17.2963 0 0 0 +1 | 3.14537 3.14537 0 0 -8.42164 0 312.611 312.611 | 3.14537 3.14537 0 0 -14.9116 0 0 0 | 3.14537 3.14537 0 0 -20.4416 0 0 0 +2 | 5.6239 5.6239 0 0 -14.0455 0 521.37 521.37 | 5.6239 5.6239 0 0 -20.5355 0 0 0 | 5.6239 5.6239 27.9863 26.0655 1.92073 3.84145 0 55.9725 +3 | 6.14531 6.14531 0 0 -20.1909 0 749.484 749.484 | 6.14531 6.14531 26.0655 26.0655 -0.615311 0 0 104.262 | 6.14531 6.14531 3.14537 5.0661 -1.07921 0 0 10.1322 +4 | 6.03719 6.03719 26.0655 26.0655 -0.162502 0 6.03207 6.03207 | 6.03719 6.03719 5.0661 5.0661 -1.5864 0 0 20.2644 | 6.03719 6.03719 5.6239 5.6239 -1.4925 0 0 11.2478 +... +95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 0 40.3632 40.3632 | 6.13073 6.13073 6.97664 6.97664 -0.600726 0 0 27.9066 | 6.13073 6.13073 3.79191 4.6864 -1.44433 0 0 9.37279 +96 | 5.56004 5.56004 6.97664 6.64741 0.329234 2.30464 0 2.30464 | 5.56004 5.56004 4.6864 4.6864 -1.47437 0 0 18.7456 | 5.56004 5.56004 6.0036 6.0036 -1.00077 0 0 12.0072 +97 | 4.3816 4.3816 4.6864 4.3816 0.634028 4.4382 0 4.4382 | 4.3816 4.3816 6.0036 5.85597 0.147631 0.590525 0 24.0144 | 4.3816 4.3816 6.13073 5.38237 0.748358 1.49672 0 12.2615 +98 | 4.7752 4.7752 5.85597 4.7752 1.7148 12.0036 0 12.0036 | 4.7752 4.7752 5.38237 4.7752 0.754799 3.01919 0 22.12 | 4.7752 4.7752 5.56004 4.7752 1.5332 3.06639 0 12.6168 +99 | 7.2159 7.2159 4.7752 6.49 -0.725901 0 26.9455 26.9455 | 7.2159 7.2159 4.7752 5.53 -1.6859 0 0 22.12 | 7.2159 7.2159 4.3816 5.9148 -1.3011 0 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.csv b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.csv new file mode 100644 index 0000000..38cfebe --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,IDI:1|-1,OS:EXT|-1000,IL:-1000,SC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,IDI:2|-2,OS:0|-1,IL:-1,SC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,IDI:EXT|-3,OS:1|-2,IL:-2,SC +0,,5.276265890021318,11.76626589002132,0,0,0.0,-5.276265890021318,195.85498983759132,,11.76626589002132,17.29626589002132,0,0,0.0,-11.76626589002132,0.0,,17.29626589002132,27.986265890021322,0,0,0.0,-17.29626589002132,0.0 +1,,3.1453719211934947,3.145371921193494,0.0,0,0.0,-8.421637811214813,312.61119555229385,,3.145371921193494,3.145371921193493,0.0,0,0.0,-14.911637811214813,0.0,,3.145371921193493,3.145371921193491,0,0,0.0,-20.441637811214814,0.0 +2,,5.623901111326356,5.623901111326356,0.0,0,0.0,-14.04553892254117,521.3704048047282,,5.623901111326356,5.623901111326355,0.0,0,0.0,-20.53553892254117,0.0,,5.623901111326355,5.623901111326357,27.986265890021322,0,26.06553892254117,1.9207269674801521,0 +3,,6.14531128957209,6.1453112895720885,0.0,0,0.0,-20.19085021211326,749.4843598736442,,6.1453112895720885,6.145311289572091,26.06553892254117,0,26.06553892254117,-0.6153112895720909,0.0,,6.145311289572091,6.145311289572089,3.145371921193491,0,5.066098888673643,-1.0792124008984478,0.0 +4,,6.037190468227883,6.037190468227885,26.06553892254117,0,26.06553892254117,-0.16250175779997544,6.032065249535088,,6.037190468227885,6.037190468227887,5.066098888673643,0,5.066098888673643,-1.5864028691263323,0.0,,6.037190468227887,6.037190468227889,5.623901111326357,0,5.623901111326357,-1.4925017577999782,0.0 +... +95,,6.130726446440085,6.130726446440086,5.4680702998326325,0,5.4680702998326325,-1.0873708669114333,40.3632065797524,,6.130726446440086,6.130726446440086,6.976644420471352,0,6.976644420471352,-0.6007264464400803,0.0,,6.130726446440086,6.130726446440088,3.7919143161941378,0,4.686396819846024,-1.4443296265940617,0.0 +96,,5.560039692192106,5.560039692192106,6.976644420471352,0,6.647410559103539,0.32923386136781296,0.0,,5.560039692192106,5.560039692192106,4.686396819846024,0,4.686396819846024,-1.4743693187861622,0.0,,5.560039692192106,5.560039692192106,6.003603180153982,0,6.003603180153982,-1.0007661386321853,0.0 +97,,4.381602699335917,4.381602699335917,4.686396819846024,0,4.381602699335917,0.63402798187792,0.0,,4.381602699335917,4.381602699335917,6.003603180153982,0,5.855972018122079,0.14763116203190307,0,,4.381602699335917,4.381602699335919,6.130726446440088,0,5.3823688379681025,0.7483576084719852,0 +98,,4.775201280806586,4.775201280806585,5.855972018122079,0,4.775201280806586,1.7147987191934133,0.0,,4.775201280806585,4.775201280806586,5.3823688379681025,0,4.775201280806585,0.7547987191934205,0,,4.775201280806586,4.775201280806584,5.560039692192106,0,4.775201280806586,1.5331960198575052,0 +99,,7.215901450653069,7.21590145065307,4.775201280806585,0,6.489999999999998,-0.7259014506530708,26.945461848241987,,7.21590145065307,7.21590145065307,4.775201280806586,0,5.5300000000000065,-1.6859014506530636,0.0,,7.21590145065307,7.215901450653072,4.381602699335919,0,5.914798719193424,-1.301102731459646,0.0 diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.txt b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.txt new file mode 100644 index 0000000..929489d --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 IDI:1|-1 OS:EXT|-1000 IL:-1000 SC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 IDI:2|-2 OS:0|-1 IL:-1 SC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 IDI:EXT|-3 OS:1|-2 IL:-2 SC +--- ---------------- -------------- --------- --------- ---------- -------------- ---------- --------- ------------- --------- --------- --------- ---------- --------- ---------- ---- ------------- --------- ----------- ----------- ------------ --------- ---------- ---- +0 | 5.27627 11.7663 0 0 0 -5.27627 195.855 | 11.7663 17.2963 0 0 0 -11.7663 0 | 17.2963 27.9863 0 0 0 -17.2963 0 +1 | 3.14537 3.14537 0 0 0 -8.42164 312.611 | 3.14537 3.14537 0 0 0 -14.9116 0 | 3.14537 3.14537 0 0 0 -20.4416 0 +2 | 5.6239 5.6239 0 0 0 -14.0455 521.37 | 5.6239 5.6239 0 0 0 -20.5355 0 | 5.6239 5.6239 27.9863 0 26.0655 1.92073 0 +3 | 6.14531 6.14531 0 0 0 -20.1909 749.484 | 6.14531 6.14531 26.0655 0 26.0655 -0.615311 0 | 6.14531 6.14531 3.14537 0 5.0661 -1.07921 0 +4 | 6.03719 6.03719 26.0655 0 26.0655 -0.162502 6.03207 | 6.03719 6.03719 5.0661 0 5.0661 -1.5864 0 | 6.03719 6.03719 5.6239 0 5.6239 -1.4925 0 +... +95 | 6.13073 6.13073 5.46807 0 5.46807 -1.08737 40.3632 | 6.13073 6.13073 6.97664 0 6.97664 -0.600726 0 | 6.13073 6.13073 3.79191 0 4.6864 -1.44433 0 +96 | 5.56004 5.56004 6.97664 0 6.64741 0.329234 0 | 5.56004 5.56004 4.6864 0 4.6864 -1.47437 0 | 5.56004 5.56004 6.0036 0 6.0036 -1.00077 0 +97 | 4.3816 4.3816 4.6864 0 4.3816 0.634028 0 | 4.3816 4.3816 6.0036 0 5.85597 0.147631 0 | 4.3816 4.3816 6.13073 0 5.38237 0.748358 0 +98 | 4.7752 4.7752 5.85597 0 4.7752 1.7148 0 | 4.7752 4.7752 5.38237 0 4.7752 0.754799 0 | 4.7752 4.7752 5.56004 0 4.7752 1.5332 0 +99 | 7.2159 7.2159 4.7752 0 6.49 -0.725901 26.9455 | 7.2159 7.2159 4.7752 0 5.53 -1.6859 0 | 7.2159 7.2159 4.3816 0 5.9148 -1.3011 0 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.csv b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.csv new file mode 100644 index 0000000..82471d6 --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,IDI:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,IDI:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC +0,,False,5.276265890021318,[],11.76626589002132,11.76626589002132,0,[0.0],0,0.0,0.0,0.0,0.0,-5.276265890021318,5.276265890021318,0,0.0,195.85498983759132,0.0,0.0,195.85498983759132,,False,11.76626589002132,[],17.29626589002132,17.29626589002132,0,[0.0],0,0.0,0.0,0.0,0.0,-11.76626589002132,11.76626589002132,0.0,0.0,0.0,0.0,0.0,0.0,,False,17.29626589002132,[],27.986265890021322,27.986265890021322,0,"[0, 27.986265890021322]",0,0.0,0.0,0.0,0.0,-17.29626589002132,17.29626589002132,0.0,0.0,0.0,0.0,0.0,0.0 +1,,False,3.1453719211934947,[],3.145371921193494,14.911637811214813,0.0,[0.0],0,0.0,0.0,0.0,0.0,-8.421637811214813,8.421637811214813,0,0.0,312.61119555229385,0.0,0.0,312.61119555229385,,False,3.145371921193494,[],3.145371921193493,20.441637811214814,0.0,[0.0],0,0.0,0.0,0.0,0.0,-14.911637811214813,14.911637811214813,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.145371921193493,[],3.145371921193491,31.131637811214812,0,"[27.986265890021322, 3.145371921193491]",0,0.0,0.0,0.0,0.0,-20.441637811214814,20.441637811214814,0.0,0.0,0.0,0.0,0.0,0.0 +2,,False,5.623901111326356,[],5.623901111326356,20.53553892254117,0.0,[0.0],0,0.0,0.0,0.0,0.0,-14.04553892254117,14.04553892254117,0,0.0,521.3704048047282,0.0,0.0,521.3704048047282,,False,5.623901111326356,[],5.623901111326355,26.06553892254117,0.0,[26.06553892254117],0,0.0,0.0,0.0,0.0,-20.53553892254117,20.53553892254117,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.623901111326355,[],5.623901111326357,8.769273032519848,27.986265890021322,"[3.145371921193491, 5.623901111326357]",0,0.0,26.06553892254117,5.623901111326354,0.21576001662727454,1.9207269674801521,8.881784197001252e-16,0.0,3.8414539349603043,0,52.13107784508234,0.0,55.972531780042644 +3,,False,6.14531128957209,[],6.1453112895720885,26.68085021211326,0.0,[26.06553892254117],0,0.0,0.0,0.0,0.0,-20.19085021211326,20.19085021211326,0,0.0,749.4843598736442,0.0,0.0,749.4843598736442,,False,6.1453112895720885,[],6.145311289572091,6.1453112895720885,26.06553892254117,[5.066098888673643],0,0.0,26.06553892254117,5.529999999999998,0.20726475940745492,-0.6153112895720909,0.6153112895720909,0.0,0.0,0.0,104.26215569016468,0.0,104.26215569016468,,False,6.145311289572091,[],6.145311289572089,11.769212400898446,3.145371921193491,"[5.623901111326357, 6.145311289572089]",0,0.0,5.066098888673643,5.066098888673642,0.3318757477559503,-1.0792124008984478,1.0792124008984487,0.0,0.0,0.0,10.132197777347287,0.0,10.132197777347287 +4,,False,6.037190468227883,[],6.037190468227885,6.652501757799978,26.06553892254117,[5.066098888673643],0,0.0,26.06553892254117,5.8746887104279075,0.22398503883788762,-0.16250175779997544,0.16250175779997544,0,0.0,6.032065249535088,0.0,0.0,6.032065249535088,,False,6.037190468227885,[],6.037190468227887,7.116402869126333,5.066098888673643,[5.623901111326357],0,0.0,5.066098888673643,4.450787599101552,0.3050545629127044,-1.5864028691263323,1.5864028691263323,0.0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227887,[],6.037190468227889,12.18250175779998,5.623901111326357,"[6.145311289572089, 6.037190468227889]",0,0.0,5.623901111326357,4.544688710427908,0.39831291850351647,-1.4925017577999782,1.492501757799979,0.0,0.0,0.0,11.247802222652714,0.0,11.247802222652714 +... +95,,False,6.130726446440085,[],6.130726446440086,7.5773708669114335,5.4680702998326325,[6.976644420471352],0,0.0,5.4680702998326325,5.043355579528652,0.9252643870000954,-1.0873708669114333,1.0873708669114333,0,0.0,40.3632065797524,0.0,0.0,40.3632065797524,,False,6.130726446440086,[],6.130726446440086,6.130726446440081,6.976644420471352,[4.686396819846024],0,0.0,6.976644420471352,5.530000000000006,0.8738544344297134,-0.6007264464400803,0.6007264464400803,0.0,0.0,0.0,27.90657768188541,0.0,27.90657768188541,,False,6.130726446440086,[],6.130726446440088,12.134329626594061,3.7919143161941378,"[6.003603180153982, 6.130726446440088]",0,0.0,4.686396819846024,4.686396819846024,0.8873690461055608,-1.4443296265940617,1.4443296265940617,0.0,0.0,0.0,9.372793639692048,0.0,9.372793639692048 +96,,False,5.560039692192106,[],5.560039692192106,6.160766138632187,6.976644420471352,[4.686396819846024],0,0.0,6.647410559103539,5.560039692192106,0.9261042237442303,0.32923386136781296,0.0,0,2.3046370295746907,0.0,0.0,0.0,2.3046370295746907,,False,5.560039692192106,[],5.560039692192106,7.004369318786162,4.686396819846024,[6.003603180153982],0,0.0,4.686396819846024,4.085670373405944,0.8723123560510794,-1.4743693187861622,1.4743693187861622,0.0,0.0,0.0,18.745587279384097,0.0,18.745587279384097,,False,5.560039692192106,[],5.560039692192106,11.690766138632183,6.003603180153982,"[6.130726446440088, 5.560039692192106]",0,0.0,6.003603180153982,4.559273553559921,0.8866300270843277,-1.0007661386321853,1.0007661386321853,0.0,0.0,0.0,12.007206360307965,0.0,12.007206360307965 +97,,False,4.381602699335917,[],4.381602699335917,5.855972018122081,4.686396819846024,[5.855972018122079],0,0.0,4.381602699335917,4.381602699335917,0.9267528775079436,0.63402798187792,0.0,0,4.43819587314544,0.0,0.0,0.0,4.43819587314544,,False,4.381602699335917,[],4.381602699335917,5.382368837968096,6.003603180153982,[5.3823688379681025],0,0.0,5.855972018122079,4.381602699335917,0.8734188064848402,0.14763116203190307,0.0,0.0,0.5905246481276123,0,23.423888072488317,0.0,24.01441272061593,,False,4.381602699335917,[],4.381602699335919,9.941642391528015,6.130726446440088,"[5.560039692192106, 4.381602699335919]",0,0.0,5.3823688379681025,4.381602699335917,0.8876017832155828,0.7483576084719852,0.0,0.0,1.4967152169439704,0,10.764737675936205,0.0,12.261452892880175 +98,,False,4.775201280806586,[],4.775201280806585,4.775201280806586,5.855972018122079,[4.775201280806585],0,0.0,4.775201280806586,4.775201280806586,0.9274469545198983,1.7147987191934133,0.0,0,12.003591034353892,0.0,0.0,0.0,12.003591034353892,,False,4.775201280806585,[],4.775201280806586,4.77520128080658,5.3823688379681025,[4.775201280806586],0,0.0,4.775201280806585,4.775201280806585,0.8746030168684653,0.7547987191934205,0.0,0.0,3.019194876773682,0,19.10080512322634,0.0,22.120000000000022,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,"[4.381602699335919, 4.775201280806584]",0,0.0,4.775201280806586,4.775201280806586,0.888642036779627,1.5331960198575052,0.0,0.0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182 +99,,False,7.215901450653069,[],7.21590145065307,7.21590145065307,4.775201280806585,[5.5300000000000065],0,0.0,6.489999999999998,6.489999999999998,0.9270510522666118,-0.7259014506530708,0.7259014506530708,0,0.0,26.945461848241987,0.0,0.0,26.945461848241987,,False,7.21590145065307,[],7.21590145065307,7.215901450653064,4.775201280806586,[5.914798719193424],0,0.0,5.5300000000000065,5.5300000000000065,0.8730941541446626,-1.6859014506530636,1.6859014506530636,0.0,0.0,0.0,22.120000000000026,0.0,22.120000000000026,,False,7.21590145065307,[],7.215901450653072,11.991102731459648,4.381602699335919,"[4.775201280806584, 7.215901450653072]",0,0.0,5.914798719193424,5.914798719193424,0.8876910003829541,-1.301102731459646,1.301102731459646,0.0,0.0,0.0,11.829597438386848,0.0,11.829597438386848 diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.txt b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.txt new file mode 100644 index 0000000..b086d4a --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 IDI:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 IDI:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 IDI:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC +--- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ---------- ------- -------------- --------- -------- ---------- -------------- --------------- -------- --------- ------ ----- --------- ------------- ------ --------- ----------- --------- --------- --------- -------------------- ---------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- -------- ----- -------- ------------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------------ ------- --------- --------- -------- ---------- ------------ ---------- ------- ---- -------- ----- -------- +0 | False 5.27627 [] 11.7663 11.7663 0 [0.0] 0 0 0 0 0 -5.27627 5.27627 0 0 195.855 0 0 195.855 | False 11.7663 [] 17.2963 17.2963 0 [0.0] 0 0 0 0 0 -11.7663 11.7663 0 0 0 0 0 0 | False 17.2963 [] 27.9863 27.9863 0 [0, 27.986265890021322] 0 0 0 0 0 -17.2963 17.2963 0 0 0 0 0 0 +1 | False 3.14537 [] 3.14537 14.9116 0 [0.0] 0 0 0 0 0 -8.42164 8.42164 0 0 312.611 0 0 312.611 | False 3.14537 [] 3.14537 20.4416 0 [0.0] 0 0 0 0 0 -14.9116 14.9116 0 0 0 0 0 0 | False 3.14537 [] 3.14537 31.1316 0 [27.986265890021322, 3.145371921193491] 0 0 0 0 0 -20.4416 20.4416 0 0 0 0 0 0 +2 | False 5.6239 [] 5.6239 20.5355 0 [0.0] 0 0 0 0 0 -14.0455 14.0455 0 0 521.37 0 0 521.37 | False 5.6239 [] 5.6239 26.0655 0 [26.06553892254117] 0 0 0 0 0 -20.5355 20.5355 0 0 0 0 0 0 | False 5.6239 [] 5.6239 8.76927 27.9863 [3.145371921193491, 5.623901111326357] 0 0 26.0655 5.6239 0.21576 1.92073 8.88178e-16 0 3.84145 0 52.1311 0 55.9725 +3 | False 6.14531 [] 6.14531 26.6809 0 [26.06553892254117] 0 0 0 0 0 -20.1909 20.1909 0 0 749.484 0 0 749.484 | False 6.14531 [] 6.14531 6.14531 26.0655 [5.066098888673643] 0 0 26.0655 5.53 0.207265 -0.615311 0.615311 0 0 0 104.262 0 104.262 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326357, 6.145311289572089] 0 0 5.0661 5.0661 0.331876 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 +4 | False 6.03719 [] 6.03719 6.6525 26.0655 [5.066098888673643] 0 0 26.0655 5.87469 0.223985 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326357] 0 0 5.0661 4.45079 0.305055 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572089, 6.037190468227889] 0 0 5.6239 4.54469 0.398313 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 +... +95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 0 5.46807 5.04336 0.925264 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 0 6.97664 5.53 0.873854 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 0 4.6864 4.6864 0.887369 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 +96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 0 6.64741 5.56004 0.926104 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 0 4.6864 4.08567 0.872312 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 0 6.0036 4.55927 0.88663 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 +97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122079] 0 0 4.3816 4.3816 0.926753 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 0 5.85597 4.3816 0.873419 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 0 5.38237 4.3816 0.887602 0.748358 0 0 1.49672 0 10.7647 0 12.2615 +98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 0 4.7752 4.7752 0.927447 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 0 4.7752 4.7752 0.874603 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 0 4.7752 4.7752 0.888642 1.5332 0 0 3.06639 0 9.5504 0 12.6168 +99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.5300000000000065] 0 0 6.49 6.49 0.927051 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 0 5.53 5.53 0.873094 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 0 5.9148 5.9148 0.887691 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.csv b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.csv new file mode 100644 index 0000000..32d2c31 --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,OS:EXT|-1000,IL:-1000,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,OS:0|-1,IL:-1,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,OS:1|-2,IL:-2 +0,,5.276265890021318,11.76626589002132,0,0.0,-5.276265890021318,,11.76626589002132,17.29626589002132,0,0.0,-11.76626589002132,,17.29626589002132,27.986265890021322,0,0.0,-17.29626589002132 +1,,3.1453719211934947,3.145371921193494,0.0,0.0,-8.421637811214813,,3.145371921193494,3.145371921193493,0.0,0.0,-14.911637811214813,,3.145371921193493,3.145371921193491,0,0.0,-20.441637811214814 +2,,5.623901111326356,5.623901111326356,0.0,0.0,-14.04553892254117,,5.623901111326356,5.623901111326355,0.0,0.0,-20.53553892254117,,5.623901111326355,5.623901111326357,27.986265890021322,26.06553892254117,1.9207269674801521 +3,,6.14531128957209,6.1453112895720885,0.0,0.0,-20.19085021211326,,6.1453112895720885,6.145311289572091,26.06553892254117,26.06553892254117,-0.6153112895720909,,6.145311289572091,6.145311289572089,3.145371921193491,5.066098888673643,-1.0792124008984478 +4,,6.037190468227883,6.037190468227885,26.06553892254117,26.06553892254117,-0.16250175779997544,,6.037190468227885,6.037190468227887,5.066098888673643,5.066098888673643,-1.5864028691263323,,6.037190468227887,6.037190468227889,5.623901111326357,5.623901111326357,-1.4925017577999782 +... +95,,6.130726446440085,6.130726446440086,5.4680702998326325,5.4680702998326325,-1.0873708669114333,,6.130726446440086,6.130726446440086,6.976644420471352,6.976644420471352,-0.6007264464400803,,6.130726446440086,6.130726446440088,3.7919143161941378,4.686396819846024,-1.4443296265940617 +96,,5.560039692192106,5.560039692192106,6.976644420471352,6.647410559103539,0.32923386136781296,,5.560039692192106,5.560039692192106,4.686396819846024,4.686396819846024,-1.4743693187861622,,5.560039692192106,5.560039692192106,6.003603180153982,6.003603180153982,-1.0007661386321853 +97,,4.381602699335917,4.381602699335917,4.686396819846024,4.381602699335917,0.63402798187792,,4.381602699335917,4.381602699335917,6.003603180153982,5.855972018122079,0.14763116203190307,,4.381602699335917,4.381602699335919,6.130726446440088,5.3823688379681025,0.7483576084719852 +98,,4.775201280806586,4.775201280806585,5.855972018122079,4.775201280806586,1.7147987191934133,,4.775201280806585,4.775201280806586,5.3823688379681025,4.775201280806585,0.7547987191934205,,4.775201280806586,4.775201280806584,5.560039692192106,4.775201280806586,1.5331960198575052 +99,,7.215901450653069,7.21590145065307,4.775201280806585,6.489999999999998,-0.7259014506530708,,7.21590145065307,7.21590145065307,4.775201280806586,5.5300000000000065,-1.6859014506530636,,7.21590145065307,7.215901450653072,4.381602699335919,5.914798719193424,-1.301102731459646 diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.txt b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.txt index 1fdd841..c113b29 100644 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.txt +++ b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.txt @@ -1,13 +1,13 @@ -t | i=0 IO:EXT OQ:1 IS:1 OS:EXT IL | i=1 IO:0 OQ:2 IS:2 OS:0 IL | i=2 IO:1 OQ:EXT IS:EXT OS:1 IL ---- ------- -------- -------- -------- -------- ---------- ------- -------- -------- -------- -------- ---------- ------- -------- -------- -------- -------- ---------- -0 | 5.27627 11.7663 0 0 -5.27627 | 11.7663 17.2963 0 0 -11.7663 | 17.2963 27.9863 0 0 -17.2963 -1 | 3.14537 3.14537 0 0 -8.42164 | 3.14537 3.14537 0 0 -14.9116 | 3.14537 3.14537 0 0 -20.4416 -2 | 5.6239 5.6239 0 0 -14.0455 | 5.6239 5.6239 0 0 -20.5355 | 5.6239 5.6239 27.9863 26.0655 1.92073 -3 | 6.14531 6.14531 0 0 -20.1909 | 6.14531 6.14531 26.0655 26.0655 -0.615311 | 6.14531 6.14531 3.14537 5.0661 -1.07921 -4 | 6.03719 6.03719 26.0655 26.0655 -0.162502 | 6.03719 6.03719 5.0661 5.0661 -1.5864 | 6.03719 6.03719 5.6239 5.6239 -1.4925 +t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 OS:EXT|-1000 IL:-1000 | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 OS:0|-1 IL:-1 | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 OS:1|-2 IL:-2 +--- ---------------- -------------- --------- --------- -------------- ---------- ------------- --------- --------- --------- --------- ---------- ------------- --------- ----------- ----------- --------- ---------- +0 | 5.27627 11.7663 0 0 -5.27627 | 11.7663 17.2963 0 0 -11.7663 | 17.2963 27.9863 0 0 -17.2963 +1 | 3.14537 3.14537 0 0 -8.42164 | 3.14537 3.14537 0 0 -14.9116 | 3.14537 3.14537 0 0 -20.4416 +2 | 5.6239 5.6239 0 0 -14.0455 | 5.6239 5.6239 0 0 -20.5355 | 5.6239 5.6239 27.9863 26.0655 1.92073 +3 | 6.14531 6.14531 0 0 -20.1909 | 6.14531 6.14531 26.0655 26.0655 -0.615311 | 6.14531 6.14531 3.14537 5.0661 -1.07921 +4 | 6.03719 6.03719 26.0655 26.0655 -0.162502 | 6.03719 6.03719 5.0661 5.0661 -1.5864 | 6.03719 6.03719 5.6239 5.6239 -1.4925 ... -95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 | 6.13073 6.13073 6.97664 6.97664 -0.600726 | 6.13073 6.13073 3.79191 4.6864 -1.44433 -96 | 5.56004 5.56004 6.97664 6.64741 0.329234 | 5.56004 5.56004 4.6864 4.6864 -1.47437 | 5.56004 5.56004 6.0036 6.0036 -1.00077 -97 | 4.3816 4.3816 4.6864 4.3816 0.634028 | 4.3816 4.3816 6.0036 5.85597 0.147631 | 4.3816 4.3816 6.13073 5.38237 0.748358 -98 | 4.7752 4.7752 5.85597 4.7752 1.7148 | 4.7752 4.7752 5.38237 4.7752 0.754799 | 4.7752 4.7752 5.56004 4.7752 1.5332 -99 | 7.2159 7.2159 4.7752 6.49 -0.725901 | 7.2159 7.2159 4.7752 5.53 -1.6859 | 7.2159 7.2159 4.3816 5.9148 -1.3011 \ No newline at end of file +95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 | 6.13073 6.13073 6.97664 6.97664 -0.600726 | 6.13073 6.13073 3.79191 4.6864 -1.44433 +96 | 5.56004 5.56004 6.97664 6.64741 0.329234 | 5.56004 5.56004 4.6864 4.6864 -1.47437 | 5.56004 5.56004 6.0036 6.0036 -1.00077 +97 | 4.3816 4.3816 4.6864 4.3816 0.634028 | 4.3816 4.3816 6.0036 5.85597 0.147631 | 4.3816 4.3816 6.13073 5.38237 0.748358 +98 | 4.7752 4.7752 5.85597 4.7752 1.7148 | 4.7752 4.7752 5.38237 4.7752 0.754799 | 4.7752 4.7752 5.56004 4.7752 1.5332 +99 | 7.2159 7.2159 4.7752 6.49 -0.725901 | 7.2159 7.2159 4.7752 5.53 -1.6859 | 7.2159 7.2159 4.3816 5.9148 -1.3011 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_example_6_1.csv b/tests/additional_files/temp_TestWriteResults_test_example_6_1.csv new file mode 100644 index 0000000..0321724 --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_example_6_1.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC +0,,False,5.276265890021318,[],11.76626589002132,11.76626589002132,0,[0.0],0.0,0.0,0.0,0.0,-5.276265890021318,5.276265890021318,0,0.0,195.85498983759132,0.0,0.0,195.85498983759132,,False,11.76626589002132,[],17.29626589002132,17.29626589002132,0,[0.0],0.0,0.0,0.0,0.0,-11.76626589002132,11.76626589002132,0.0,0.0,0.0,0.0,0.0,0.0,,False,17.29626589002132,[],27.986265890021322,27.986265890021322,0,"[0, 27.986265890021322]",0.0,0.0,0.0,0.0,-17.29626589002132,17.29626589002132,0.0,0.0,0.0,0.0,0.0,0.0 +1,,False,3.1453719211934947,[],3.145371921193494,14.911637811214813,0.0,[0.0],0.0,0.0,0.0,0.0,-8.421637811214813,8.421637811214813,0,0.0,312.61119555229385,0.0,0.0,312.61119555229385,,False,3.145371921193494,[],3.145371921193493,20.441637811214814,0.0,[0.0],0.0,0.0,0.0,0.0,-14.911637811214813,14.911637811214813,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.145371921193493,[],3.145371921193491,31.131637811214812,0,"[27.986265890021322, 3.145371921193491]",0.0,0.0,0.0,0.0,-20.441637811214814,20.441637811214814,0.0,0.0,0.0,0.0,0.0,0.0 +2,,False,5.623901111326356,[],5.623901111326356,20.53553892254117,0.0,[0.0],0.0,0.0,0.0,0.0,-14.04553892254117,14.04553892254117,0,0.0,521.3704048047282,0.0,0.0,521.3704048047282,,False,5.623901111326356,[],5.623901111326355,26.06553892254117,0.0,[26.06553892254117],0.0,0.0,0.0,0.0,-20.53553892254117,20.53553892254117,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.623901111326355,[],5.623901111326357,8.769273032519848,27.986265890021322,"[3.145371921193491, 5.623901111326357]",0.0,26.06553892254117,5.623901111326354,0.21576001662727454,1.9207269674801521,8.881784197001252e-16,0.0,3.8414539349603043,0,52.13107784508234,0.0,55.972531780042644 +3,,False,6.14531128957209,[],6.1453112895720885,26.68085021211326,0.0,[26.06553892254117],0.0,0.0,0.0,0.0,-20.19085021211326,20.19085021211326,0,0.0,749.4843598736442,0.0,0.0,749.4843598736442,,False,6.1453112895720885,[],6.145311289572091,6.1453112895720885,26.06553892254117,[5.066098888673643],0.0,26.06553892254117,5.529999999999998,0.20726475940745492,-0.6153112895720909,0.6153112895720909,0.0,0.0,0.0,104.26215569016468,0.0,104.26215569016468,,False,6.145311289572091,[],6.145311289572089,11.769212400898446,3.145371921193491,"[5.623901111326357, 6.145311289572089]",0.0,5.066098888673643,5.066098888673642,0.3318757477559503,-1.0792124008984478,1.0792124008984487,0.0,0.0,0.0,10.132197777347287,0.0,10.132197777347287 +4,,False,6.037190468227883,[],6.037190468227885,6.652501757799978,26.06553892254117,[5.066098888673643],0.0,26.06553892254117,5.8746887104279075,0.22398503883788762,-0.16250175779997544,0.16250175779997544,0,0.0,6.032065249535088,0.0,0.0,6.032065249535088,,False,6.037190468227885,[],6.037190468227887,7.116402869126333,5.066098888673643,[5.623901111326357],0.0,5.066098888673643,4.450787599101552,0.3050545629127044,-1.5864028691263323,1.5864028691263323,0.0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227887,[],6.037190468227889,12.18250175779998,5.623901111326357,"[6.145311289572089, 6.037190468227889]",0.0,5.623901111326357,4.544688710427908,0.39831291850351647,-1.4925017577999782,1.492501757799979,0.0,0.0,0.0,11.247802222652714,0.0,11.247802222652714 +... +95,,False,6.130726446440085,[],6.130726446440086,7.5773708669114335,5.4680702998326325,[6.976644420471352],0.0,5.4680702998326325,5.043355579528652,0.9252643870000954,-1.0873708669114333,1.0873708669114333,0,0.0,40.3632065797524,0.0,0.0,40.3632065797524,,False,6.130726446440086,[],6.130726446440086,6.130726446440081,6.976644420471352,[4.686396819846024],0.0,6.976644420471352,5.530000000000006,0.8738544344297134,-0.6007264464400803,0.6007264464400803,0.0,0.0,0.0,27.90657768188541,0.0,27.90657768188541,,False,6.130726446440086,[],6.130726446440088,12.134329626594061,3.7919143161941378,"[6.003603180153982, 6.130726446440088]",0.0,4.686396819846024,4.686396819846024,0.8873690461055608,-1.4443296265940617,1.4443296265940617,0.0,0.0,0.0,9.372793639692048,0.0,9.372793639692048 +96,,False,5.560039692192106,[],5.560039692192106,6.160766138632187,6.976644420471352,[4.686396819846024],0.0,6.647410559103539,5.560039692192106,0.9261042237442303,0.32923386136781296,0.0,0,2.3046370295746907,0.0,0.0,0.0,2.3046370295746907,,False,5.560039692192106,[],5.560039692192106,7.004369318786162,4.686396819846024,[6.003603180153982],0.0,4.686396819846024,4.085670373405944,0.8723123560510794,-1.4743693187861622,1.4743693187861622,0.0,0.0,0.0,18.745587279384097,0.0,18.745587279384097,,False,5.560039692192106,[],5.560039692192106,11.690766138632183,6.003603180153982,"[6.130726446440088, 5.560039692192106]",0.0,6.003603180153982,4.559273553559921,0.8866300270843277,-1.0007661386321853,1.0007661386321853,0.0,0.0,0.0,12.007206360307965,0.0,12.007206360307965 +97,,False,4.381602699335917,[],4.381602699335917,5.855972018122081,4.686396819846024,[5.855972018122079],0.0,4.381602699335917,4.381602699335917,0.9267528775079436,0.63402798187792,0.0,0,4.43819587314544,0.0,0.0,0.0,4.43819587314544,,False,4.381602699335917,[],4.381602699335917,5.382368837968096,6.003603180153982,[5.3823688379681025],0.0,5.855972018122079,4.381602699335917,0.8734188064848402,0.14763116203190307,0.0,0.0,0.5905246481276123,0,23.423888072488317,0.0,24.01441272061593,,False,4.381602699335917,[],4.381602699335919,9.941642391528015,6.130726446440088,"[5.560039692192106, 4.381602699335919]",0.0,5.3823688379681025,4.381602699335917,0.8876017832155828,0.7483576084719852,0.0,0.0,1.4967152169439704,0,10.764737675936205,0.0,12.261452892880175 +98,,False,4.775201280806586,[],4.775201280806585,4.775201280806586,5.855972018122079,[4.775201280806585],0.0,4.775201280806586,4.775201280806586,0.9274469545198983,1.7147987191934133,0.0,0,12.003591034353892,0.0,0.0,0.0,12.003591034353892,,False,4.775201280806585,[],4.775201280806586,4.77520128080658,5.3823688379681025,[4.775201280806586],0.0,4.775201280806585,4.775201280806585,0.8746030168684653,0.7547987191934205,0.0,0.0,3.019194876773682,0,19.10080512322634,0.0,22.120000000000022,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,"[4.381602699335919, 4.775201280806584]",0.0,4.775201280806586,4.775201280806586,0.888642036779627,1.5331960198575052,0.0,0.0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182 +99,,False,7.215901450653069,[],7.21590145065307,7.21590145065307,4.775201280806585,[5.5300000000000065],0.0,6.489999999999998,6.489999999999998,0.9270510522666118,-0.7259014506530708,0.7259014506530708,0,0.0,26.945461848241987,0.0,0.0,26.945461848241987,,False,7.21590145065307,[],7.21590145065307,7.215901450653064,4.775201280806586,[5.914798719193424],0.0,5.5300000000000065,5.5300000000000065,0.8730941541446626,-1.6859014506530636,1.6859014506530636,0.0,0.0,0.0,22.120000000000026,0.0,22.120000000000026,,False,7.21590145065307,[],7.215901450653072,11.991102731459648,4.381602699335919,"[4.775201280806584, 7.215901450653072]",0.0,5.914798719193424,5.914798719193424,0.8876910003829541,-1.301102731459646,1.301102731459646,0.0,0.0,0.0,11.829597438386848,0.0,11.829597438386848 diff --git a/tests/additional_files/temp_TestWriteResults_test_example_6_1.txt b/tests/additional_files/temp_TestWriteResults_test_example_6_1.txt new file mode 100644 index 0000000..3000341 --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_example_6_1.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC +--- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ------- -------------- --------- -------- ---------- -------------- --------------- -------- --------- ------ ----- --------- ------------- ------ --------- ----------- --------- --------- --------- -------------------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- -------- ----- -------- ------------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------- --------- --------- -------- ---------- ------------ ---------- ------- ---- -------- ----- -------- +0 | False 5.27627 [] 11.7663 11.7663 0 [0.0] 0 0 0 0 -5.27627 5.27627 0 0 195.855 0 0 195.855 | False 11.7663 [] 17.2963 17.2963 0 [0.0] 0 0 0 0 -11.7663 11.7663 0 0 0 0 0 0 | False 17.2963 [] 27.9863 27.9863 0 [0, 27.986265890021322] 0 0 0 0 -17.2963 17.2963 0 0 0 0 0 0 +1 | False 3.14537 [] 3.14537 14.9116 0 [0.0] 0 0 0 0 -8.42164 8.42164 0 0 312.611 0 0 312.611 | False 3.14537 [] 3.14537 20.4416 0 [0.0] 0 0 0 0 -14.9116 14.9116 0 0 0 0 0 0 | False 3.14537 [] 3.14537 31.1316 0 [27.986265890021322, 3.145371921193491] 0 0 0 0 -20.4416 20.4416 0 0 0 0 0 0 +2 | False 5.6239 [] 5.6239 20.5355 0 [0.0] 0 0 0 0 -14.0455 14.0455 0 0 521.37 0 0 521.37 | False 5.6239 [] 5.6239 26.0655 0 [26.06553892254117] 0 0 0 0 -20.5355 20.5355 0 0 0 0 0 0 | False 5.6239 [] 5.6239 8.76927 27.9863 [3.145371921193491, 5.623901111326357] 0 26.0655 5.6239 0.21576 1.92073 8.88178e-16 0 3.84145 0 52.1311 0 55.9725 +3 | False 6.14531 [] 6.14531 26.6809 0 [26.06553892254117] 0 0 0 0 -20.1909 20.1909 0 0 749.484 0 0 749.484 | False 6.14531 [] 6.14531 6.14531 26.0655 [5.066098888673643] 0 26.0655 5.53 0.207265 -0.615311 0.615311 0 0 0 104.262 0 104.262 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326357, 6.145311289572089] 0 5.0661 5.0661 0.331876 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 +4 | False 6.03719 [] 6.03719 6.6525 26.0655 [5.066098888673643] 0 26.0655 5.87469 0.223985 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326357] 0 5.0661 4.45079 0.305055 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572089, 6.037190468227889] 0 5.6239 4.54469 0.398313 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 +... +95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 5.46807 5.04336 0.925264 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 6.97664 5.53 0.873854 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 4.6864 4.6864 0.887369 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 +96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 6.64741 5.56004 0.926104 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 4.6864 4.08567 0.872312 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 6.0036 4.55927 0.88663 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 +97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122079] 0 4.3816 4.3816 0.926753 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 5.85597 4.3816 0.873419 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 5.38237 4.3816 0.887602 0.748358 0 0 1.49672 0 10.7647 0 12.2615 +98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 4.7752 4.7752 0.927447 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 4.7752 4.7752 0.874603 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 4.7752 4.7752 0.888642 1.5332 0 0 3.06639 0 9.5504 0 12.6168 +99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.5300000000000065] 0 6.49 6.49 0.927051 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 5.53 5.53 0.873094 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 5.9148 5.9148 0.887691 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_periods_to_print.csv b/tests/additional_files/temp_TestWriteResults_test_periods_to_print.csv new file mode 100644 index 0000000..ebf0569 --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_periods_to_print.csv @@ -0,0 +1,4 @@ +t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC +2,,False,5.623901111326356,[],5.623901111326356,20.53553892254117,0.0,[0.0],0.0,0.0,0.0,0.0,-14.04553892254117,14.04553892254117,0,0.0,521.3704048047282,0.0,0.0,521.3704048047282,,False,5.623901111326356,[],5.623901111326355,26.06553892254117,0.0,[26.06553892254117],0.0,0.0,0.0,0.0,-20.53553892254117,20.53553892254117,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.623901111326355,[],5.623901111326357,8.769273032519848,27.986265890021322,"[3.145371921193491, 5.623901111326357]",0.0,26.06553892254117,5.623901111326354,0.21576001662727454,1.9207269674801521,8.881784197001252e-16,0.0,3.8414539349603043,0,52.13107784508234,0.0,55.972531780042644 +7,,False,4.637898661600952,[],4.637898661600951,6.230029769481679,6.145311289572089,[6.037190468227889],0.0,5.8853410590537685,4.637898661600952,0.44691957163047596,0.2599702305183209,0.0,0,1.8197916136282464,0.0,0.0,0.0,1.8197916136282464,,False,4.637898661600951,[],4.637898661600952,5.722839301253787,6.037190468227889,[5.722839301253794],0.0,6.037190468227889,4.445059360347163,0.4428887862743481,-0.19283930125378745,0.19283930125378745,0.0,0.0,0.0,24.148761872911557,0.0,24.148761872911557,,False,4.637898661600952,[],4.63789866160095,9.526200371472186,6.886638929781603,"[4.888301709871235, 4.63789866160095]",0.0,5.722839301253794,4.637898661600952,0.5182638476284692,1.1637996285278103,0.0,0.0,2.3275992570556205,0,11.445678602507588,0.0,13.773277859563208 +43,,False,4.305821103558777,[],4.3058211035587775,5.402292414882573,6.845413294824685,[3.8445867051753195],0.0,5.757705709707258,4.305821103558777,0.8694855956154881,1.0877075851174274,0.0,0,7.613953095821992,0.0,0.0,0.0,7.613953095821992,,False,4.3058211035587775,[],4.3058211035587775,7.087705709707255,3.8445867051753195,[7.087705709707265],0.0,3.8445867051753195,2.7481153938515215,0.8191846453959901,-1.557705709707256,1.557705709707256,0.0,0.0,0.0,15.378346820701278,0.0,15.378346820701278,,False,4.3058211035587775,[],4.305821103558779,9.43254831480432,8.345157394902943,"[5.126727211245548, 4.305821103558779]",0.0,7.087705709707265,4.3058211035587775,0.834206268959877,1.2574516851956776,0.0,0.0,2.5149033703913553,0,14.17541141941453,0.0,16.690314789805885 diff --git a/tests/additional_files/temp_TestWriteResults_test_periods_to_print.txt b/tests/additional_files/temp_TestWriteResults_test_periods_to_print.txt new file mode 100644 index 0000000..0f9aa2f --- /dev/null +++ b/tests/additional_files/temp_TestWriteResults_test_periods_to_print.txt @@ -0,0 +1,5 @@ + t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC +--- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ------- -------------- --------- -------- ---------- -------------- --------------- ------- ------ ------ ----- --------- ------------- ------ --------- ----------- --------- --------- --------- ------------------- ------- --------- --------- -------- ---------- --------- ---------- ---- ---- ------- ----- ------- ------------- ------ --------- ----------- ----------- ----------- ----------- -------------------------------------- ------- --------- --------- -------- ------- ----------- ---------- ------- ---- ------- ----- ------- + 2 | False 5.6239 [] 5.6239 20.5355 0 [0.0] 0 0 0 0 -14.0455 14.0455 0 0 521.37 0 0 521.37 | False 5.6239 [] 5.6239 26.0655 0 [26.06553892254117] 0 0 0 0 -20.5355 20.5355 0 0 0 0 0 0 | False 5.6239 [] 5.6239 8.76927 27.9863 [3.145371921193491, 5.623901111326357] 0 26.0655 5.6239 0.21576 1.92073 8.88178e-16 0 3.84145 0 52.1311 0 55.9725 + 7 | False 4.6379 [] 4.6379 6.23003 6.14531 [6.037190468227889] 0 5.88534 4.6379 0.44692 0.25997 0 0 1.81979 0 0 0 1.81979 | False 4.6379 [] 4.6379 5.72284 6.03719 [5.722839301253794] 0 6.03719 4.44506 0.442889 -0.192839 0.192839 0 0 0 24.1488 0 24.1488 | False 4.6379 [] 4.6379 9.5262 6.88664 [4.888301709871235, 4.63789866160095] 0 5.72284 4.6379 0.518264 1.1638 0 0 2.3276 0 11.4457 0 13.7733 + 43 | False 4.30582 [] 4.30582 5.40229 6.84541 [3.8445867051753195] 0 5.75771 4.30582 0.869486 1.08771 0 0 7.61395 0 0 0 7.61395 | False 4.30582 [] 4.30582 7.08771 3.84459 [7.087705709707265] 0 3.84459 2.74812 0.819185 -1.55771 1.55771 0 0 0 15.3783 0 15.3783 | False 4.30582 [] 4.30582 9.43255 8.34516 [5.126727211245548, 4.305821103558779] 0 7.08771 4.30582 0.834206 1.25745 0 0 2.5149 0 14.1754 0 16.6903 \ No newline at end of file diff --git a/tests/additional_files/test_sim_disruption_example_6_1_OP.csv b/tests/additional_files/test_sim_disruption_example_6_1_OP.csv index b7da165..b58f641 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_OP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_OP.csv @@ -1,4 +1,4 @@ -t,i=1,DISR,IO:EXT,IOPL:EXT,OQ:2,OO:2,IS:2,ISPL:2,IDI:2,RM:2,OS:EXT,DMFS,FR,IL,BO:EXT,ODI:EXT,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1,IOPL:1,OQ:3,OO:3,IS:3,ISPL:3,IDI:3,RM:3,OS:1,DMFS,FR,IL,BO:1,ODI:1,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2,IOPL:2,OQ:EXT,OO:EXT,IS:EXT,ISPL:EXT,IDI:EXT,RM:EXT,OS:2,DMFS,FR,IL,BO:2,ODI:2,HC,SC,ITHC,REV,TC +t,i=1 pr=-1,DISR,IO:EXT|-1,IOPL:EXT|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:EXT|-1,DMFS:-2,FR:-2,IL:-1,BO:EXT|-1,ODI:EXT|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:3|-3,OO:3|-3,IS:3|-3,ISPL:3|-3,IDI:3|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC,i=3 pr=-3,DISR,IO:2|-3,IOPL:2|-3,OQ:EXT|-4,OO:EXT|-4,IS:EXT|-4,ISPL:EXT|-4,IDI:EXT|-4,RM:-4,OS:2|-3,DMFS:-4,FR:-4,IL:-3,BO:2|-3,ODI:2|-3,HC,SC,ITHC,REV,TC 0,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,2.6018801180469200,0,0,18.213160826328400,0.0,0.0,0.0,18.213160826328400,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,1.6418801180469200,0,0,6.567520472187680,0,15.552479527812300,0.0,22.12,,False,3.8881198819530800,[],3.888119881953080,3.888119881953080,0,"[0, 3.888119881953079]",0,0,3.8881198819530800,3.8881198819530800,1.0,6.80188011804692,0,0,13.60376023609380,0,7.776239763906160,0.0,21.38 1,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,1.1710978153106200,0,0,8.197684707174320,0.0,0.0,0.0,8.197684707174320,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,0.2110978153106170,0,0,0.8443912612424680,0,21.275608738757500,0.0,22.12,,False,5.318902184689380,[],5.318902184689380,9.207022066642460,0,"[3.888119881953079, 5.318902184689383]",0,0,5.318902184689380,5.318902184689380,1.0,1.482977933357540,0,0,2.965955866715070,0,10.637804369378800,0.0,13.60376023609380 2,,False,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[5.279041292200137],0,0.0,5.279041292200140,5.279041292200140,1.0,1.210958707799860,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200140,[],0,0.0,5.318902184689380,[0],0,0.0,5.279041292200140,5.279041292200140,1.0,0.25095870779986300,0,0,1.0038348311994500,0,21.11616516880060,0.0,22.12,,False,0,[],0.0,5.318902184689380,3.888119881953080,"[5.318902184689383, 0.0]",0,0.0,0,0.0,1.0,5.371097815310620,0,0,10.742195630621200,0,0,0,10.742195630621200 diff --git a/tests/additional_files/test_sim_disruption_example_6_1_RP.csv b/tests/additional_files/test_sim_disruption_example_6_1_RP.csv index 08d8e89..b52a1cd 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_RP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_RP.csv @@ -1,4 +1,4 @@ -t,i=1,DISR,IO:EXT,IOPL:EXT,OQ:2,OO:2,IS:2,ISPL:2,IDI:2,RM:2,OS:EXT,DMFS,FR,IL,BO:EXT,ODI:EXT,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1,IOPL:1,OQ:3,OO:3,IS:3,ISPL:3,IDI:3,RM:3,OS:1,DMFS,FR,IL,BO:1,ODI:1,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2,IOPL:2,OQ:EXT,OO:EXT,IS:EXT,ISPL:EXT,IDI:EXT,RM:EXT,OS:2,DMFS,FR,IL,BO:2,ODI:2,HC,SC,ITHC,REV,TC +t,i=1 pr=-1,DISR,IO:EXT|-1,IOPL:EXT|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:EXT|-1,DMFS:-2,FR:-2,IL:-1,BO:EXT|-1,ODI:EXT|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:3|-3,OO:3|-3,IS:3|-3,ISPL:3|-3,IDI:3|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC,i=3 pr=-3,DISR,IO:2|-3,IOPL:2|-3,OQ:EXT|-4,OO:EXT|-4,IS:EXT|-4,ISPL:EXT|-4,IDI:EXT|-4,RM:-4,OS:2|-3,DMFS:-4,FR:-4,IL:-3,BO:2|-3,ODI:2|-3,HC,SC,ITHC,REV,TC 0,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,2.6018801180469200,0,0,18.213160826328400,0.0,0.0,0.0,18.213160826328400,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,1.6418801180469200,0,0,6.567520472187680,0,15.552479527812300,0.0,22.12,,False,3.8881198819530800,[],3.888119881953080,3.888119881953080,0,"[0, 3.888119881953079]",0,0,3.8881198819530800,3.8881198819530800,1.0,6.80188011804692,0,0,13.60376023609380,0,7.776239763906160,0.0,21.38 1,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,1.1710978153106200,0,0,8.197684707174320,0.0,0.0,0.0,8.197684707174320,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,0.2110978153106170,0,0,0.8443912612424680,0,21.275608738757500,0.0,22.12,,False,5.318902184689380,[],5.318902184689380,9.207022066642460,0,"[3.888119881953079, 5.318902184689383]",0,0,5.318902184689380,5.318902184689380,1.0,1.482977933357540,0,0,2.965955866715070,0,10.637804369378800,0.0,13.60376023609380 2,,False,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[0.2110978153106169],0,0.0,5.279041292200140,5.279041292200140,1.0,1.210958707799860,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200140,[],5.279041292200140,5.279041292200140,0,[5.279041292200137],5.318902184689380,0.0,0.2110978153106170,0.2110978153106170,0.6501503996393930,-5.06794347688952,5.06794347688952,0,10.637804369378800,0.0,0.8443912612424680,0.0,11.482195630621200,,False,5.279041292200140,[],5.279041292200140,10.59794347688950,3.888119881953080,"[5.318902184689383, 5.279041292200137]",0,0.0,5.279041292200140,5.279041292200140,1.0,0.09205652311047890,0,0,0.1841130462209580,0,10.558082584400300,0.0,10.742195630621200 diff --git a/tests/additional_files/test_sim_disruption_example_6_1_SP.csv b/tests/additional_files/test_sim_disruption_example_6_1_SP.csv index c3693d1..0ef2391 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_SP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_SP.csv @@ -1,4 +1,4 @@ -t,i=1,DISR,IO:EXT,IOPL:EXT,OQ:2,OO:2,IS:2,ISPL:2,IDI:2,RM:2,OS:EXT,DMFS,FR,IL,BO:EXT,ODI:EXT,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1,IOPL:1,OQ:3,OO:3,IS:3,ISPL:3,IDI:3,RM:3,OS:1,DMFS,FR,IL,BO:1,ODI:1,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2,IOPL:2,OQ:EXT,OO:EXT,IS:EXT,ISPL:EXT,IDI:EXT,RM:EXT,OS:2,DMFS,FR,IL,BO:2,ODI:2,HC,SC,ITHC,REV,TC +t,i=1 pr=-1,DISR,IO:EXT|-1,IOPL:EXT|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:EXT|-1,DMFS:-2,FR:-2,IL:-1,BO:EXT|-1,ODI:EXT|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:3|-3,OO:3|-3,IS:3|-3,ISPL:3|-3,IDI:3|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC,i=3 pr=-3,DISR,IO:2|-3,IOPL:2|-3,OQ:EXT|-4,OO:EXT|-4,IS:EXT|-4,ISPL:EXT|-4,IDI:EXT|-4,RM:-4,OS:2|-3,DMFS:-4,FR:-4,IL:-3,BO:2|-3,ODI:2|-3,HC,SC,ITHC,REV,TC 0,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,2.6018801180469200,0,0,18.213160826328400,0.0,0.0,0.0,18.213160826328400,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,1.6418801180469200,0,0,6.567520472187680,0,15.552479527812300,0.0,22.12,,False,3.8881198819530800,[],3.888119881953080,3.888119881953080,0,"[0, 3.888119881953079]",0,0,3.8881198819530800,3.8881198819530800,1.0,6.80188011804692,0,0,13.60376023609380,0,7.776239763906160,0.0,21.38 1,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,1.1710978153106200,0,0,8.197684707174320,0.0,0.0,0.0,8.197684707174320,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,0.2110978153106170,0,0,0.8443912612424680,0,21.275608738757500,0.0,22.12,,False,5.318902184689380,[],5.318902184689380,9.207022066642460,0,"[3.888119881953079, 5.318902184689383]",0,0,5.318902184689380,5.318902184689380,1.0,1.482977933357540,0,0,2.965955866715070,0,10.637804369378800,0.0,13.60376023609380 2,,False,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[5.279041292200137],0,0.0,5.279041292200140,5.279041292200140,1.0,1.210958707799860,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[0],0,0.0,5.279041292200140,5.279041292200140,1.0,0.25095870779986300,0,0,1.0038348311994500,0,21.11616516880060,0.0,22.12,,False,5.279041292200140,[],5.279041292200140,10.59794347688950,3.888119881953080,"[5.318902184689383, 5.279041292200137]",0,0.0,0,0.0,0.6355779233163650,0.09205652311047890,0,5.279041292200140,10.742195630621200,0,0,0,10.742195630621200 diff --git a/tests/additional_files/test_sim_disruption_example_6_1_TP.csv b/tests/additional_files/test_sim_disruption_example_6_1_TP.csv index a108a16..1fb9bfd 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_TP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_TP.csv @@ -1,4 +1,4 @@ -t,i=1,DISR,IO:EXT,IOPL:EXT,OQ:2,OO:2,IS:2,ISPL:2,IDI:2,RM:2,OS:EXT,DMFS,FR,IL,BO:EXT,ODI:EXT,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1,IOPL:1,OQ:3,OO:3,IS:3,ISPL:3,IDI:3,RM:3,OS:1,DMFS,FR,IL,BO:1,ODI:1,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2,IOPL:2,OQ:EXT,OO:EXT,IS:EXT,ISPL:EXT,IDI:EXT,RM:EXT,OS:2,DMFS,FR,IL,BO:2,ODI:2,HC,SC,ITHC,REV,TC +t,i=1 pr=-1,DISR,IO:EXT|-1,IOPL:EXT|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:EXT|-1,DMFS:-2,FR:-2,IL:-1,BO:EXT|-1,ODI:EXT|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:3|-3,OO:3|-3,IS:3|-3,ISPL:3|-3,IDI:3|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC,i=3 pr=-3,DISR,IO:2|-3,IOPL:2|-3,OQ:EXT|-4,OO:EXT|-4,IS:EXT|-4,ISPL:EXT|-4,IDI:EXT|-4,RM:-4,OS:2|-3,DMFS:-4,FR:-4,IL:-3,BO:2|-3,ODI:2|-3,HC,SC,ITHC,REV,TC 0,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,2.6018801180469200,0,0,18.213160826328400,0.0,0.0,0.0,18.213160826328400,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,1.6418801180469200,0,0,6.567520472187680,0,15.552479527812300,0.0,22.12,,False,3.8881198819530800,[],3.888119881953080,3.888119881953080,0,"[0, 3.888119881953079]",0,0,3.8881198819530800,3.8881198819530800,1.0,6.80188011804692,0,0,13.60376023609380,0,7.776239763906160,0.0,21.38 1,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,1.1710978153106200,0,0,8.197684707174320,0.0,0.0,0.0,8.197684707174320,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,0.2110978153106170,0,0,0.8443912612424680,0,21.275608738757500,0.0,22.12,,False,5.318902184689380,[],5.318902184689380,9.207022066642460,0,"[3.888119881953079, 5.318902184689383]",0,0,5.318902184689380,5.318902184689380,1.0,1.482977933357540,0,0,2.965955866715070,0,10.637804369378800,0.0,13.60376023609380 2,,False,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[5.279041292200137],0,0.0,5.279041292200140,5.279041292200140,1.0,1.210958707799860,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[5.279041292200137],0,0.0,5.279041292200140,5.279041292200140,1.0,0.25095870779986300,0,0,1.0038348311994500,0,21.11616516880060,0.0,22.12,,False,5.279041292200140,[],5.279041292200140,10.59794347688950,3.888119881953080,"[5.318902184689383, 5.279041292200137]",0,0.0,5.279041292200140,5.279041292200140,1.0,0.09205652311047890,0,0,0.1841130462209580,0,10.558082584400300,0.0,10.742195630621200 diff --git a/tests/test_sim.py b/tests/test_sim.py index 28f616e..97eb5d9 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -486,6 +486,11 @@ def test_example_6_1_order_quantity_override(self): network2 = load_instance("example_6_1") T = 100 + nodes1 = {n.index: n for n in network1.nodes} + # dummy_prods = {n.index: n._dummy_product.index for n in network1.nodes} + # ext_dummy_prod = nodes1[2]._external_supplier_dummy_product.index + nodes2 = {n.index: n for n in network2.nodes} + # Via simulation(). total_cost1 = simulation(network1, num_periods=T, rand_seed=17, progress_bar=False, consistency_checks='E') @@ -494,18 +499,18 @@ def test_example_6_1_order_quantity_override(self): for t in range(T): if t == 40: step(network2, consistency_checks='E', order_quantity_override={ - network2.get_node_from_index(2): 33, - network2.get_node_from_index(3): 77, + nodes2[2]: {nodes2[3]._dummy_product: 33}, + nodes2[3]: {nodes2[3]._external_supplier_dummy_product: 77}, }) else: step(network2, consistency_checks='E') total_cost2 = close(network2) # Compare order quantities in period 40. - self.assertEqual(network2.get_node_from_index(2).state_vars[40].order_quantity[3], 33.0) - self.assertEqual(network2.get_node_from_index(3).state_vars[40].order_quantity[None], 77.0) - self.assertAlmostEqual(network2.get_node_from_index(1).state_vars[40].order_quantity[2], - network1.get_node_from_index(1).state_vars[40].order_quantity[2]) + self.assertEqual(nodes2[2].state_vars[40].order_quantity[3][nodes2[3]._dummy_product.index], 33.0) + self.assertEqual(nodes2[3].state_vars[40].order_quantity[None][nodes2[3]._external_supplier_dummy_product.index], 77.0) + self.assertAlmostEqual(nodes2[1].state_vars[40].order_quantity[2][nodes2[2]._dummy_product.index], + nodes1[1].state_vars[40].order_quantity[2][nodes1[2]._dummy_product.index]) def test_problem_6_2a(self): """Test that initialize() + step() + close() match the results from simulation() for @@ -862,20 +867,37 @@ def test_example_6_1(self): # Compare a few performance measures. for i in range(len(network_ech.nodes)): - np.testing.assert_allclose([network_local.nodes[i].state_vars[99].order_quantity[p_ind] for p_ind in - network_local.nodes[i].predecessor_indices(include_external=True)], - [network_ech.nodes[i].state_vars[99].order_quantity[p_ind] for p_ind in - network_local.nodes[i].predecessor_indices(include_external=True)]) - np.testing.assert_allclose(network_local.nodes[i].state_vars[99].inventory_level, - network_ech.nodes[i].state_vars[99].inventory_level) + for p in network_local.nodes[i].predecessors(include_external=True): + if p is None: + self.assertAlmostEqual( + network_local.nodes[i].state_vars[99].order_quantity[None][network_local.nodes[i]._external_supplier_dummy_product.index], + network_ech.nodes[i].state_vars[99].order_quantity[None][network_ech.nodes[i]._external_supplier_dummy_product.index], + places=6 + ) + else: + self.assertAlmostEqual( + network_local.nodes[i].state_vars[99].order_quantity[p.index][p._dummy_product.index], + network_ech.nodes[i].state_vars[99].order_quantity[p.index][p._dummy_product.index], + places=6 + ) + self.assertAlmostEqual( + network_local.nodes[i].state_vars[99].inventory_level[network_local.nodes[i]._dummy_product.index], + network_ech.nodes[i].state_vars[99].inventory_level[network_ech.nodes[i]._dummy_product.index], + places=6 + ) for s in network_ech.nodes[i].successor_indices(): - np.testing.assert_allclose(network_local.nodes[i].state_vars[99].inbound_order[s], - network_ech.nodes[i].state_vars[99].inbound_order[s]) - for p in network_ech.nodes[i].predecessor_indices(): - np.testing.assert_allclose(network_local.nodes[i].state_vars[99].inbound_shipment[p], - network_ech.nodes[i].state_vars[99].inbound_shipment[p]) - np.testing.assert_allclose(network_local.nodes[i].state_vars[99].backorders, - network_ech.nodes[i].state_vars[99].backorders) + self.assertAlmostEqual(network_local.nodes[i].state_vars[99].inbound_order[s][network_local.nodes[i]._dummy_product.index], + network_ech.nodes[i].state_vars[99].inbound_order[s][network_ech.nodes[i]._dummy_product.index], + places=6) + for p in network_ech.nodes[i].predecessors(): + p_ind = p.index if p is not None else None + dpi = p._dummy_product.index if p is not None else network_ech.nodes[i]._external_supplier_dummy_product.index + self.assertAlmostEqual(network_local.nodes[i].state_vars[99].inbound_shipment[p_ind][dpi], + network_ech.nodes[i].state_vars[99].inbound_shipment[p_ind][dpi], + places=6) + self.assertAlmostEqual(network_local.nodes[i].state_vars[99].backorders, + network_ech.nodes[i].state_vars[99].backorders, + places=6) def test_problem_6_2a(self): """Test that echelon policy results agree with local policy results @@ -919,20 +941,37 @@ def test_problem_6_2a(self): # Compare a few performance measures. for i in range(len(network_ech.nodes)): - np.testing.assert_allclose([network_local.nodes[i].state_vars[99].order_quantity[p_ind] for p_ind in - network_local.nodes[i].predecessor_indices(include_external=True)], - [network_ech.nodes[i].state_vars[99].order_quantity[p_ind] for p_ind in - network_local.nodes[i].predecessor_indices(include_external=True)]) - np.testing.assert_allclose(network_local.nodes[i].state_vars[99].inventory_level, - network_ech.nodes[i].state_vars[99].inventory_level) + for p in network_local.nodes[i].predecessors(include_external=True): + if p is None: + self.assertAlmostEqual( + network_local.nodes[i].state_vars[99].order_quantity[None][network_local.nodes[i]._external_supplier_dummy_product.index], + network_ech.nodes[i].state_vars[99].order_quantity[None][network_ech.nodes[i]._external_supplier_dummy_product.index], + places=6 + ) + else: + self.assertAlmostEqual( + network_local.nodes[i].state_vars[99].order_quantity[p.index][p._dummy_product.index], + network_ech.nodes[i].state_vars[99].order_quantity[p.index][p._dummy_product.index], + places=6 + ) + self.assertAlmostEqual( + network_local.nodes[i].state_vars[99].inventory_level[network_local.nodes[i]._dummy_product.index], + network_ech.nodes[i].state_vars[99].inventory_level[network_ech.nodes[i]._dummy_product.index], + places=6 + ) for s in network_ech.nodes[i].successor_indices(): - np.testing.assert_allclose(network_local.nodes[i].state_vars[99].inbound_order[s], - network_ech.nodes[i].state_vars[99].inbound_order[s]) - for p in network_ech.nodes[i].predecessor_indices(): - np.testing.assert_allclose(network_local.nodes[i].state_vars[99].inbound_shipment[p], - network_ech.nodes[i].state_vars[99].inbound_shipment[p]) - np.testing.assert_allclose(network_local.nodes[i].state_vars[99].backorders, - network_ech.nodes[i].state_vars[99].backorders) + self.assertAlmostEqual(network_local.nodes[i].state_vars[99].inbound_order[s][network_local.nodes[i]._dummy_product.index], + network_ech.nodes[i].state_vars[99].inbound_order[s][network_ech.nodes[i]._dummy_product.index], + places=6) + for p in network_ech.nodes[i].predecessors(): + p_ind = p.index if p is not None else None + dpi = p._dummy_product.index if p is not None else network_ech.nodes[i]._external_supplier_dummy_product.index + self.assertAlmostEqual(network_local.nodes[i].state_vars[99].inbound_shipment[p_ind][dpi], + network_ech.nodes[i].state_vars[99].inbound_shipment[p_ind][dpi], + places=6) + self.assertAlmostEqual(network_local.nodes[i].state_vars[99].backorders, + network_ech.nodes[i].state_vars[99].backorders, + places=6) class TestBadBackorders(unittest.TestCase): From ed1466a0a26ec736d0654a742b87c2739fde78c0 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 15 Apr 2024 11:53:38 -0400 Subject: [PATCH 31/94] Working on debugging; about to rewrite all instance files --- CHANGELOG.md | 1 + src/stockpyl/demand_source.py | 72 +++++++++++-------- src/stockpyl/supply_chain_network.py | 3 + src/stockpyl/supply_chain_node.py | 11 ++- .../temp_TestSaveInstance_example_6_1.json | 1 - tests/test_demand_source.py | 49 +++++++------ tests/test_gsm_tree.py | 27 ++++--- tests/test_instances.py | 44 ++++++------ 8 files changed, 122 insertions(+), 86 deletions(-) delete mode 100644 tests/additional_files/temp_TestSaveInstance_example_6_1.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 6abadc7..2b8ea65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ a given number and return the corresponding value. ### Fixed - Bug in ``helpers.ensure_list_for_time_period()`` that caused it to handle numpy arrays improperly. +- Bug in ``demand_source.py`` that sometimes caused infinite recursion when some attributes were ``None``. ## [0.0.15] -- 2024-02-10 diff --git a/src/stockpyl/demand_source.py b/src/stockpyl/demand_source.py index a66e59f..46ccf9c 100644 --- a/src/stockpyl/demand_source.py +++ b/src/stockpyl/demand_source.py @@ -54,6 +54,7 @@ # DemandSource Class # =============================================================================== +ALLOWABLE_TYPES = ('N', 'P', 'UD', 'UC', 'NB', 'D', 'CD', None) class DemandSource(object): """ A |class_demand_source| object represents external demand observed by a node. @@ -205,9 +206,13 @@ def type(self, value): @property def mean(self): + """Return mean set by user, if any; or, for distributions whose mean is not + set but is calculated from other parameters, returns the calculated mean. + If neither is true, return ``None``. + """ if self._mean: return self._mean - elif self.demand_distribution: + elif self.type in ('UC', 'UD', 'D', 'NB', 'CD'): return self.demand_distribution.mean() else: return None @@ -218,9 +223,13 @@ def mean(self, value): @property def standard_deviation(self): + """Return standard deviation set by user, if any; or, for distributions whose standard deviation is not + set but is calculated from other parameters, returns the calculated standard deviation. + If neither is true, return ``None``. + """ if self._standard_deviation: return self._standard_deviation - elif self.demand_distribution: + elif self.type in ('P', 'UC', 'UD', 'D', 'NB', 'CD'): return self.demand_distribution.std() else: return None @@ -291,6 +300,9 @@ def demand_distribution(self): """Demand distribution, as a ``scipy.stats.rv_continuous`` or ``scipy.stats.rv_discrete`` object. Read only. """ + # Check that the appropriate parameters have been set. If not, raise an exception. + self.validate_parameters() + if self.type is None: distribution = None elif self.type == 'N': @@ -390,40 +402,44 @@ def validate_parameters(self): """Check that appropriate parameters have been provided for the given demand type. Raise an exception if not. """ - if self.type not in (None, 'N', 'UD', 'UC', 'D', 'CD'): raise AttributeError("Valid type in (None, 'N', 'UD', 'UC', 'D', 'CD') must be provided") + if self.type not in ALLOWABLE_TYPES: raise AttributeError(f"Valid type in {ALLOWABLE_TYPES} must be provided") + # Note: Importane to use the '_' attributes here, rather than associated properties, + # to avoid infinite recursion. (For example, if self._mean is None, calling self.mean calls + # self.demand_distribution(), which calls self.mean.) Plus, these attributes have to be set by + # user, not just calculated. if self.type == 'N': - if self.mean is None: raise AttributeError("For 'N' (normal) demand, mean must be provided") - if self.mean < 0: raise AttributeError("For 'N' (normal) demand, mean must be non-negative") - if self.standard_deviation is None: raise AttributeError("For 'N' (normal) demand, standard_deviation must be provided") - if self.standard_deviation < 0: raise AttributeError("For 'N' (normal) demand, standard_deviation must be non-negative") + if self._mean is None: raise AttributeError("For 'N' (normal) demand, mean must be provided") + if self._mean < 0: raise AttributeError("For 'N' (normal) demand, mean must be non-negative") + if self._standard_deviation is None: raise AttributeError("For 'N' (normal) demand, standard_deviation must be provided") + if self._standard_deviation < 0: raise AttributeError("For 'N' (normal) demand, standard_deviation must be non-negative") elif self.type == 'P': - if self.mean is None: raise AttributeError("For 'P' (Poisson) demand, mean must be provided") - if self.mean < 0: raise AttributeError("For 'P' (Poisson) demand, mean must be non-negative") + if self._mean is None: raise AttributeError("For 'P' (Poisson) demand, mean must be provided") + if self._mean < 0: raise AttributeError("For 'P' (Poisson) demand, mean must be non-negative") elif self.type == 'UD': - if self.lo is None: raise AttributeError("For 'UD' (uniform discrete) demand, lo must be provided") - if self.lo < 0 or not is_integer(self.lo): raise AttributeError("For 'UD' (uniform discrete) demand, lo must be a non-negative integer") - if self.hi is None: raise AttributeError("For 'UD' (uniform discrete) demand, hi must be provided") - if self.hi < 0 or not is_integer(self.hi): raise AttributeError("For 'UD' (uniform discrete) demand, hi must be a non-negative integer") - if self.lo > self.hi: raise AttributeError("For 'UD' (uniform discrete) demand, lo must be <= hi") + if self._lo is None: raise AttributeError("For 'UD' (uniform discrete) demand, lo must be provided") + if self._lo < 0 or not is_integer(self._lo): raise AttributeError("For 'UD' (uniform discrete) demand, lo must be a non-negative integer") + if self._hi is None: raise AttributeError("For 'UD' (uniform discrete) demand, hi must be provided") + if self._hi < 0 or not is_integer(self._hi): raise AttributeError("For 'UD' (uniform discrete) demand, hi must be a non-negative integer") + if self._lo > self._hi: raise AttributeError("For 'UD' (uniform discrete) demand, lo must be <= hi") elif self.type == 'UC': - if self.lo is None: raise AttributeError("For 'UC' (uniform continuous) demand, lo must be provided") - if self.lo < 0: raise AttributeError("For 'UC' (uniform continuous) demand, lo must be non-negative") - if self.hi is None: raise AttributeError("For 'UC' (uniform continuous) demand, hi must be provided") - if self.hi < 0: raise AttributeError("For 'UC' (uniform continuous) demand, hi must be non-negative") - if self.lo > self.hi: raise AttributeError("For 'UC' (uniform continuous) demand, lo must be <= hi") + if self._lo is None: raise AttributeError("For 'UC' (uniform continuous) demand, lo must be provided") + if self._lo < 0: raise AttributeError("For 'UC' (uniform continuous) demand, lo must be non-negative") + if self._hi is None: raise AttributeError("For 'UC' (uniform continuous) demand, hi must be provided") + if self._hi < 0: raise AttributeError("For 'UC' (uniform continuous) demand, hi must be non-negative") + if self._lo > self._hi: raise AttributeError("For 'UC' (uniform continuous) demand, lo must be <= hi") elif self.type == 'NB': - if self.n is None: raise AttributeError("For 'NB' (negative binomial) demand, n must be provided") - if self.n <= 0: raise AttributeError("For 'NB' (negative binomial) demand, n must be positive") - if self.p is None: raise AttributeError("For 'NB' (negative binomial) demand, p must be provided") - if self.p < 0 or self.p > 1: raise AttributeError("For 'NB' (negative binomial) demand, p must be in [0, 1]") + if self._n is None: raise AttributeError("For 'NB' (negative binomial) demand, n must be provided") + if self._n <= 0: raise AttributeError("For 'NB' (negative binomial) demand, n must be positive") + if self._p is None: raise AttributeError("For 'NB' (negative binomial) demand, p must be provided") + if self._p < 0 or self._p > 1: raise AttributeError("For 'NB' (negative binomial) demand, p must be in [0, 1]") elif self.type == 'D': - if self.demand_list is None: raise AttributeError("For 'D' (deterministic) demand, demand_list must be provided") + if self._demand_list is None: raise AttributeError("For 'D' (deterministic) demand, demand_list must be provided") elif self.type == 'CD': - if self.demand_list is None: raise AttributeError("For 'CD' (custom discrete) demand, demand_list must be provided") - if self.probabilities is None: raise AttributeError("For 'CD' (custom discrete) demand, probabilities must be provided") - if len(self.demand_list) != len(self.probabilities): raise AttributeError("For 'CD' (custom discrete) demand, demand_list and probabilities must have equal lengths") - if np.sum(self.probabilities) != 1: raise AttributeError("For 'CD' (custom discrete) demand, probabilities must sum to 1") + if self._demand_list is None: raise AttributeError("For 'CD' (custom discrete) demand, demand_list must be provided") + if self._probabilities is None: raise AttributeError("For 'CD' (custom discrete) demand, probabilities must be provided") + if len(self._demand_list) != len(self._probabilities): raise AttributeError("For 'CD' (custom discrete) demand, demand_list and probabilities must have equal lengths") + if np.sum(self._probabilities) != 1: raise AttributeError("For 'CD' (custom discrete) demand, probabilities must sum to 1") # CONVERSION TO/FROM DICTS diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 908e49f..62ef627 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -361,6 +361,9 @@ def from_dict(cls, the_dict): node._products_by_index = {} for prod_ind in prod_indices: node.add_product(network.products_by_index[prod_ind]) + # Replace dummy-product indices with product objects. + node._dummy_product = network.products_by_index[node._dummy_product] + node._external_supplier_dummy_product = network.products_by_index[node._external_supplier_dummy_product] # Add node to network. network.add_node(node) for n in network.nodes: diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 28033fb..cb96e21 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1174,6 +1174,7 @@ def to_dict(self): * Successors and predecessors are stored as their indices only, not |class_node| objects. * Values in ``_products_by_index`` dict are replaced with indices only, not |class_product| objects. (This means that the keys and values in the dict are the same.) + * Dummy product attributes are replaced with indices only, not |class_product| objects. * ``network`` object is not filled. These should be replaced with the corresponding node objects if this function is called @@ -1193,7 +1194,11 @@ def to_dict(self): if attr == 'network': node_dict[attr] = None elif attr == '_products_by_index': + # Replace product objects with their indices. node_dict[attr] = {prod_ind: prod_ind for prod_ind in self._products_by_index.keys()} + elif attr in ('_dummy_product', '_external_supplier_dummy_product'): + # Replace dummy products with their indices. + node_dict[attr] = None if getattr(self, attr) is None else getattr(self, attr).index elif attr == '_predecessors': node_dict[attr] = copy.deepcopy(self.predecessor_indices(include_external=True)) elif attr == '_successors': @@ -1220,8 +1225,10 @@ def from_dict(cls, the_dict): function is called recursively from a |class_network|'s ``from_dict()`` method. ``_products_by_index`` is set to a dict in which the keys and values are both product indices, - like they are in the dict, but should be converted to a dict if this function is - called recursively from a |class_network|'s ``from_dict()`` method. + like they are in the dict, but should be converted to |class_product| objects if this function is + called recursively from a |class_network|'s ``from_dict()`` method. + ``_dummy_product`` and ``_external_supplier_dummy_product`` are set to indices, like they are + in the dict, but should be converted to |class_product| objects if this function is called recursively. Similarly, ``network`` object is not filled, but should be filled with the network object if this function is called recursively from a |class_network|'s ``from_dict()`` method. diff --git a/tests/additional_files/temp_TestSaveInstance_example_6_1.json b/tests/additional_files/temp_TestSaveInstance_example_6_1.json deleted file mode 100644 index 75a2d36..0000000 --- a/tests/additional_files/temp_TestSaveInstance_example_6_1.json +++ /dev/null @@ -1 +0,0 @@ -{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-3": -3}, "_dummy_product": \ No newline at end of file diff --git a/tests/test_demand_source.py b/tests/test_demand_source.py index 61ece79..5ff3d94 100644 --- a/tests/test_demand_source.py +++ b/tests/test_demand_source.py @@ -277,6 +277,8 @@ def test_uniform(self): 'probabilities': None, 'lo': 100, 'hi': 200, + 'mean': 150.0, + 'standard_deviation': 28.867513459481287, 'n': None, 'p': None } @@ -302,6 +304,8 @@ def test_custom_discrete(self): 'standard_deviation': None, 'demand_list': [0, 1, 2, 3], 'probabilities': [0.25, 0.1, 0.5, 0.15], + 'mean': 1.55, + 'standard_deviation': 1.023474474522936, 'lo': None, 'hi': None, 'n': None, @@ -334,7 +338,9 @@ def test_negative_binomial(self): 'lo': None, 'hi': None, 'n': 20, - 'p': 0.1 + 'p': 0.1, + 'mean': 180.0, + 'standard_deviation': 42.426406871192845, } self.assertDictEqual(ds_dict, correct_dict) @@ -465,26 +471,26 @@ def test_negative_binomial(self): self.assertEqual(ds, correct_ds) -def test_missing_values(self): - """Test that from_dict() correctly fills missing attribute values to their defaults. - """ - print_status('TestFromDict', 'test_missing_values()') - - # In this instance, demand_source at node 1 is missing the ``mean`` attribute. - network1 = load_instance("missing_mean", "tests/additional_files/test_demand_source_TestFromDict_data.json") - network2 = load_instance("example_6_1") - ds1 = network1.get_node_from_index(1).demand_source - ds2 = network2.get_node_from_index(1).demand_source - ds2.mean = DemandSource._DEFAULT_VALUES['_mean'] - self.assertEqual(ds1, ds2) - - # In this instance, demand_source at node 2 is missing the ``demand_list`` attribute. - network1 = load_instance("missing_demand_list", "tests/additional_files/test_demand_source_TestFromDict_data.json") - network2 = load_instance("example_6_1") - ds1 = network1.get_node_from_index(2).demand_source - ds2 = network2.get_node_from_index(2).demand_source - ds2.mean = DemandSource._DEFAULT_VALUES['_demand_list'] - self.assertEqual(ds1, ds2) + def test_missing_values(self): + """Test that from_dict() correctly fills missing attribute values to their defaults. + """ + print_status('TestFromDict', 'test_missing_values()') + + # In this instance, demand_source at node 1 is missing the ``mean`` attribute. + network1 = load_instance("missing_mean", "tests/additional_files/test_demand_source_TestFromDict_data.json") + network2 = load_instance("example_6_1") + ds1 = network1.get_node_from_index(1).demand_source + ds2 = network2.get_node_from_index(1).demand_source + ds2.mean = DemandSource._DEFAULT_VALUES['_mean'] + self.assertEqual(ds1, ds2) + + # In this instance, demand_source at node 2 is missing the ``demand_list`` attribute. + network1 = load_instance("missing_demand_list", "tests/additional_files/test_demand_source_TestFromDict_data.json") + network2 = load_instance("example_6_1") + ds1 = network1.get_node_from_index(2).demand_source + ds2 = network2.get_node_from_index(2).demand_source + ds2.mean = DemandSource._DEFAULT_VALUES['_demand_list'] + self.assertEqual(ds1, ds2) class TestValidateParameters(unittest.TestCase): @classmethod @@ -514,6 +520,7 @@ def test_normal(self): demand_source.standard_deviation = -100 with self.assertRaises(AttributeError): demand_source.validate_parameters() + # TODO: if mean is not set, mean property calls demand_distribution property which calls mean property... def test_poisson(self): """Test that TestValidateParameters correctly raises errors on invalid parameters diff --git a/tests/test_gsm_tree.py b/tests/test_gsm_tree.py index 0dd23ca..ecbf060 100644 --- a/tests/test_gsm_tree.py +++ b/tests/test_gsm_tree.py @@ -206,6 +206,19 @@ def test_problem_6_9(self): correct_node.larger_adjacent_node = correct_larger_adjacent[correct_node.index] correct_node.larger_adjacent_node_is_downstream = correct_downstream[correct_node.index] + def test_bad_index(self): + """Test that reindex_nodes() correctly raises an exception if an index is not a positive integer. + """ + + print_status('TestRelabelNodes', 'test_bad_index()') + + orig_G = load_instance("figure_6_14") + + with self.assertRaises(ValueError): + orig_G.reindex_nodes({1: 4.5, 2: 3, 3: 9, 4: 1, 5: 10, 6: 8, 7: 7, 8: 2, 9: 5, 10: 6}) + orig_G.reindex_nodes({1: -4, 2: 3, 3: 9, 4: 1, 5: 10, 6: 8, 7: 7, 8: 2, 9: 5, 10: 6}) + + class TestIsCorrectlyLabeled(unittest.TestCase): @classmethod @@ -231,20 +244,6 @@ def test_correct(self): self.assertEqual(is_correct, True) - def test_noninteger(self): - """Test that is_correctly_labeled() works for if network has a - non-integer label. - """ - - print_status('TestFindLargerAdjacentNodes', 'test_noninteger()') - - new_G = gsm_tree.relabel_nodes(load_instance("figure_6_12"), start_index=1) - new_G.reindex_nodes({1: 1.3, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7}) - - is_correct = gsm_tree.is_correctly_labeled(new_G) - - self.assertEqual(is_correct, False) - def test_nonconsecutive(self): """Test that is_correctly_labeled() works for if network labels are non-consecutive integers. diff --git a/tests/test_instances.py b/tests/test_instances.py index f258fa5..9c5297a 100644 --- a/tests/test_instances.py +++ b/tests/test_instances.py @@ -226,27 +226,31 @@ def test_example_6_1(self): # Save. temp_filename = 'tests/additional_files/temp_TestSaveInstance_example_6_1.json' - instances.save_instance( - instance_name='test_example_6_1', - instance_data=instance, - instance_description='this is test_example_6_1', - filepath=temp_filename - ) + try: + instances.save_instance( + instance_name='test_example_6_1', + instance_data=instance, + instance_description='this is test_example_6_1', + filepath=temp_filename + ) + + # Load saved JSON and correct JSON. + correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json' + with open(temp_filename) as f: + saved_json = json.load(f) + with open(correct_contents_filename) as f: + correct_json = json.load(f) + + # Remove the timestamp entry. + del saved_json['last_updated'] + del correct_json['last_updated'] + + # Compare. + self.assertDictEqual(saved_json, correct_json) + finally: + if os.path.exists(temp_filename): + os.remove(temp_filename) - # Load saved JSON and correct JSON. - correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json' - with open(temp_filename) as f: - saved_json = json.load(f) - os.remove(temp_filename) - with open(correct_contents_filename) as f: - correct_json = json.load(f) - - # Remove the timestamp entry. - del saved_json['last_updated'] - del correct_json['last_updated'] - - # Compare. - self.assertDictEqual(saved_json, correct_json) def test_example_6_1_with_order_capacity(self): """Test that save_instance() correctly saves Example 6.1 with a few order capacities. From 3b41987997636e800ea6c69794e4b179c302b498 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 15 Apr 2024 21:39:01 -0400 Subject: [PATCH 32/94] Bug hunting --- src/stockpyl/datasets/stockpyl_instances.json | 13040 ++++++++--- src/stockpyl/demand_source.py | 4 +- src/stockpyl/supply_chain_network.py | 17 +- src/stockpyl/supply_chain_product.py | 4 +- ...tance_example_6_1_with_order_capacity.json | 1 - ...estSaveInstance_omit_state_vars_false.json | 1 - ...nstance_omit_state_vars_false_rosling.json | 1 - ...TestSaveInstance_omit_state_vars_true.json | 1 - .../test_demand_source_TestFromDict_data.json | 416 +- ..._disruption_process_TestFromDict_data.json | 801 +- ..._TestSaveInstance_example_6_1_correct.json | 210 +- ...ample_6_1_with_order_capacity_correct.json | 210 +- ..._TestSaveInstance_figure_6_14_correct.json | 590 +- ...nstance_omit_state_vars_false_correct.json | 10406 ++++++--- ...omit_state_vars_false_rosling_correct.json | 18290 +++++++++++----- ...Instance_omit_state_vars_true_correct.json | 322 +- .../test_multiproduct_5_7.json | 907 +- .../test_policy_TestFromDict_data.json | 801 +- ...ply_chain_network_TestToFromDict_data.json | 1767 +- tests/test_instances.py | 223 +- tests/test_supply_chain_network.py | 6 +- tests/test_supply_chain_node.py | 120 +- 22 files changed, 36843 insertions(+), 11295 deletions(-) delete mode 100644 tests/additional_files/temp_TestSaveInstance_example_6_1_with_order_capacity.json delete mode 100644 tests/additional_files/temp_TestSaveInstance_omit_state_vars_false.json delete mode 100644 tests/additional_files/temp_TestSaveInstance_omit_state_vars_false_rosling.json delete mode 100644 tests/additional_files/temp_TestSaveInstance_omit_state_vars_true.json diff --git a/src/stockpyl/datasets/stockpyl_instances.json b/src/stockpyl/datasets/stockpyl_instances.json index 9048386..44d6181 100644 --- a/src/stockpyl/datasets/stockpyl_instances.json +++ b/src/stockpyl/datasets/stockpyl_instances.json @@ -300,9 +300,14 @@ "data": { "nodes": [ { - "index": 0, + "_index": 0, "name": null, "network": null, + "_products_by_index": { + "-1000": -1000 + }, + "_dummy_product": -1000, + "_external_supplier_dummy_product": -1001, "_predecessors": [ null ], @@ -326,6 +331,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -334,6 +341,7 @@ "_inventory_policy": { "type": "BS", "node": 0, + "product": null, "base_stock_level": 56.6, "order_quantity": null, "reorder_point": null, @@ -348,6 +356,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -362,6 +371,94 @@ "state_vars": null } ], + "_products": [ + { + "_index": -1000, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], "period": 0, "max_max_replenishment_time": null }, @@ -616,9 +713,14 @@ "data": { "nodes": [ { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ null ], @@ -642,6 +744,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -650,6 +754,7 @@ "_inventory_policy": { "type": "BS", "node": 3, + "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, @@ -664,6 +769,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -678,9 +784,14 @@ "state_vars": null }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 3 ], @@ -704,6 +815,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -712,6 +825,7 @@ "_inventory_policy": { "type": "BS", "node": 2, + "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, @@ -726,6 +840,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -740,9 +855,14 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2 ], @@ -766,6 +886,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -774,6 +896,7 @@ "_inventory_policy": { "type": "BS", "node": 1, + "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, @@ -788,6 +911,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -802,6 +926,180 @@ "state_vars": null } ], + "_products": [ + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], "period": 0, "max_max_replenishment_time": null }, @@ -813,9 +1111,14 @@ "data": { "nodes": [ { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ null ], @@ -839,6 +1142,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -847,6 +1152,7 @@ "_inventory_policy": { "type": "BS", "node": 2, + "product": null, "base_stock_level": 94, "order_quantity": null, "reorder_point": null, @@ -861,6 +1167,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -875,9 +1182,14 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2 ], @@ -901,6 +1213,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -909,6 +1223,7 @@ "_inventory_policy": { "type": "BS", "node": 1, + "product": null, "base_stock_level": 100, "order_quantity": null, "reorder_point": null, @@ -923,6 +1238,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -937,34 +1253,21 @@ "state_vars": null } ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_2a", - "description": "Problem 6.2(a) (serial SSM)", - "data": { - "nodes": [ + "_products": [ { - "index": 5, + "_index": -3, "name": null, "network": null, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 7, - "echelon_holding_cost": 1, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.5, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -974,121 +1277,40 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 5, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "index": 4, - "name": null, - "network": null, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 5, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "base_stock_level": 33.3, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 3, + "_index": -2, "name": null, "network": null, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 3, - "echelon_holding_cost": 1, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.5, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -1098,59 +1320,40 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 3, - "base_stock_level": 35.14, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 2, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.5, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -1160,102 +1363,25 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 2, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "index": 1, - "name": null, - "network": null, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 24, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 64, - "standard_deviation": 8, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "base_stock_level": 40.59, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] } ], "period": 0, @@ -1264,14 +1390,19 @@ "type": "network" }, { - "name": "problem_6_2b", - "description": "Problem 6.2(a) (serial SSM with Poisson demand)", + "name": "problem_6_2a", + "description": "Problem 6.2(a) (serial SSM)", "data": { "nodes": [ { - "index": 5, + "_index": 5, "name": null, "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ null ], @@ -1295,6 +1426,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -1303,6 +1436,7 @@ "_inventory_policy": { "type": "BS", "node": 5, + "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, @@ -1317,6 +1451,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -1331,9 +1466,14 @@ "state_vars": null }, { - "index": 4, + "_index": 4, "name": null, "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [ 5 ], @@ -1357,6 +1497,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -1365,6 +1507,7 @@ "_inventory_policy": { "type": "BS", "node": 4, + "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, @@ -1379,6 +1522,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -1393,9 +1537,14 @@ "state_vars": null }, { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ 4 ], @@ -1419,6 +1568,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -1427,6 +1578,7 @@ "_inventory_policy": { "type": "BS", "node": 3, + "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, @@ -1441,6 +1593,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -1455,9 +1608,14 @@ "state_vars": null }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 3 ], @@ -1481,6 +1639,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -1489,6 +1649,7 @@ "_inventory_policy": { "type": "BS", "node": 2, + "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, @@ -1503,6 +1664,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -1517,9 +1679,14 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2 ], @@ -1536,13 +1703,15 @@ "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": { - "type": "P", + "type": "N", "mean": 64, - "standard_deviation": null, + "standard_deviation": 8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -1551,6 +1720,7 @@ "_inventory_policy": { "type": "BS", "node": 1, + "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, @@ -1565,6 +1735,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -1579,34 +1750,21 @@ "state_vars": null } ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_2a_adj", - "description": "Problem 6.2(a) (serial SSM), adjusted for periodic review", - "data": { - "nodes": [ + "_products": [ { - "index": 5, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 3.5, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -1616,59 +1774,40 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 5, - "base_stock_level": 32.93, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 4, + "_index": -6, "name": null, "network": null, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 2.5, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -1678,59 +1817,40 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 4, - "base_stock_level": 33.3, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 3, + "_index": -5, "name": null, "network": null, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 1.5, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -1740,59 +1860,40 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 3, - "base_stock_level": 35.14, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 2, + "_index": -4, "name": null, "network": null, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 1.0, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -1802,102 +1903,111 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 2, - "base_stock_level": 33.87, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 1, + "_index": -3, "name": null, "network": null, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 12.0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 32.0, - "standard_deviation": 5.65685424949238, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 1, - "base_stock_level": 40.59, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] } ], "period": 0, @@ -1906,28 +2016,33 @@ "type": "network" }, { - "name": "problem_6_2b_adj", - "description": "Problem 6.2(b) (serial SSM with Poisson demand), adjusted for periodic review", + "name": "problem_6_2b", + "description": "Problem 6.2(a) (serial SSM with Poisson demand)", "data": { "nodes": [ { - "index": 5, + "_index": 5, "name": null, "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ null ], "_successors": [ 4 ], - "local_holding_cost": 3.5, - "echelon_holding_cost": null, + "local_holding_cost": 7, + "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": { "type": null, @@ -1937,6 +2052,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -1945,6 +2062,7 @@ "_inventory_policy": { "type": "BS", "node": 5, + "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, @@ -1959,6 +2077,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -1973,23 +2092,28 @@ "state_vars": null }, { - "index": 4, + "_index": 4, "name": null, "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [ 5 ], "_successors": [ 3 ], - "local_holding_cost": 2.5, - "echelon_holding_cost": null, + "local_holding_cost": 5, + "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": { "type": null, @@ -1999,6 +2123,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -2007,6 +2133,7 @@ "_inventory_policy": { "type": "BS", "node": 4, + "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, @@ -2021,6 +2148,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -2035,23 +2163,28 @@ "state_vars": null }, { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ 4 ], "_successors": [ 2 ], - "local_holding_cost": 1.5, - "echelon_holding_cost": null, + "local_holding_cost": 3, + "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": { "type": null, @@ -2061,6 +2194,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -2069,6 +2204,7 @@ "_inventory_policy": { "type": "BS", "node": 3, + "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, @@ -2083,6 +2219,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -2097,23 +2234,28 @@ "state_vars": null }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 3 ], "_successors": [ 1 ], - "local_holding_cost": 1.0, - "echelon_holding_cost": null, + "local_holding_cost": 2, + "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": { "type": null, @@ -2123,6 +2265,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -2131,6 +2275,7 @@ "_inventory_policy": { "type": "BS", "node": 2, + "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, @@ -2145,6 +2290,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -2159,32 +2305,39 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2 ], "_successors": [ null ], - "local_holding_cost": 0.5, - "echelon_holding_cost": null, + "local_holding_cost": 1, + "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 12.0, + "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": { "type": "P", - "mean": 32.0, - "standard_deviation": null, + "mean": 64, + "standard_deviation": 8.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -2193,6 +2346,7 @@ "_inventory_policy": { "type": "BS", "node": 1, + "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, @@ -2207,6 +2361,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -2221,34 +2376,21 @@ "state_vars": null } ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_16", - "description": "Problem 6.16 (serial SSM)", - "data": { - "nodes": [ + "_products": [ { - "index": 2, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - null - ], - "_successors": [ - 1 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 3, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -2258,132 +2400,83 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 20, - "initial_orders": 20, - "initial_shipments": 20, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 2, - "base_stock_level": 57.7257, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 1, + "_index": -6, "name": null, "network": null, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 5, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 24, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 8, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 20, - "standard_deviation": 4, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 20, - "initial_orders": 20, - "initial_shipments": 20, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 1, - "base_stock_level": 171.1912, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_1", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 1", - "data": { - "nodes": [ + "order_capacity": null, + "state_vars": [] + }, { - "index": 4, + "_index": -5, "name": null, "network": null, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -2393,59 +2486,40 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 4, + "type": null, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 3, + "_index": -4, "name": null, "network": null, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -2455,59 +2529,40 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 3, + "type": null, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 2, + "_index": -3, "name": null, "network": null, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -2517,102 +2572,68 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 2, + "type": null, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 1, + "_index": -2, "name": null, "network": null, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 9, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "P", - "mean": 16, + "type": null, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 1, + "type": null, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] } ], "period": 0, @@ -2621,28 +2642,33 @@ "type": "network" }, { - "name": "shang_song_9", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 9", + "name": "problem_6_2a_adj", + "description": "Problem 6.2(a) (serial SSM), adjusted for periodic review", "data": { "nodes": [ { - "index": 4, + "_index": 5, "name": null, "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ null ], "_successors": [ - 3 + 4 ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "local_holding_cost": 3.5, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": 1, "order_lead_time": null, "demand_source": { "type": null, @@ -2652,6 +2678,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -2659,8 +2687,9 @@ "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 4, - "base_stock_level": null, + "node": 5, + "product": null, + "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -2674,6 +2703,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -2688,23 +2718,28 @@ "state_vars": null }, { - "index": 3, + "_index": 4, "name": null, "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [ - 4 + 5 ], "_successors": [ - 2 + 3 ], - "local_holding_cost": null, - "echelon_holding_cost": 2.5, + "local_holding_cost": 2.5, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": 1, "order_lead_time": null, "demand_source": { "type": null, @@ -2714,6 +2749,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -2721,8 +2758,9 @@ "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 3, - "base_stock_level": null, + "node": 4, + "product": null, + "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -2736,6 +2774,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -2750,23 +2789,28 @@ "state_vars": null }, { - "index": 2, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ - 3 + 4 ], "_successors": [ - 1 + 2 ], - "local_holding_cost": null, - "echelon_holding_cost": 2.5, + "local_holding_cost": 1.5, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": 1, "order_lead_time": null, "demand_source": { "type": null, @@ -2776,6 +2820,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -2783,8 +2829,9 @@ "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 2, - "base_stock_level": null, + "node": 3, + "product": null, + "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -2798,6 +2845,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -2812,32 +2860,39 @@ "state_vars": null }, { - "index": 1, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ - 2 + 3 ], "_successors": [ - null + 1 ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "local_holding_cost": 1.0, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 9, + "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": 1, "order_lead_time": null, "demand_source": { - "type": "P", - "mean": 16, + "type": null, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -2845,8 +2900,9 @@ "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 1, - "base_stock_level": null, + "node": 2, + "product": null, + "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -2860,6 +2916,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -2872,45 +2929,41 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_17", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 17", - "data": { - "nodes": [ + }, { - "index": 4, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ - null + 2 ], "_successors": [ - 3 + null ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "local_holding_cost": 0.5, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": 1, "order_lead_time": null, "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, + "type": "N", + "mean": 32.0, + "standard_deviation": 5.65685424949238, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -2918,13 +2971,14 @@ "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 4, - "base_stock_level": null, + "node": 1, + "product": null, + "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", + "supply_type": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -2933,6 +2987,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -2945,25 +3000,23 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - }, + } + ], + "_products": [ { - "index": 3, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -2973,59 +3026,40 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 3, + "type": null, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 2, + "_index": -6, "name": null, "network": null, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -3035,132 +3069,83 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 2, + "type": null, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 1, + "_index": -5, "name": null, "network": null, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 99, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "P", - "mean": 16, + "type": null, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 1, + "type": null, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_25", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 25", - "data": { - "nodes": [ + "order_capacity": null, + "state_vars": [] + }, { - "index": 4, + "_index": -4, "name": null, "network": null, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -3170,59 +3155,40 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 4, + "type": null, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 3, + "_index": -3, "name": null, "network": null, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, - "echelon_holding_cost": 2.5, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -3232,59 +3198,40 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 3, + "type": null, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 2, + "_index": -2, "name": null, "network": null, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, - "echelon_holding_cost": 2.5, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 0, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -3294,68 +3241,71 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 2, + "type": null, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_2b_adj", + "description": "Problem 6.2(b) (serial SSM with Poisson demand), adjusted for periodic review", + "data": { + "nodes": [ { - "index": 1, + "_index": 5, "name": null, "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ - 2 + null ], "_successors": [ - null + 4 ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, + "local_holding_cost": 3.5, + "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 99, + "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 0.25, + "shipment_lead_time": 1, "order_lead_time": null, "demand_source": { - "type": "P", - "mean": 16, + "type": null, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -3363,13 +3313,14 @@ "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 1, - "base_stock_level": null, + "node": 5, + "product": null, + "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": null, + "supply_type": "U", "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -3378,6 +3329,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -3390,36 +3342,30 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "assembly_3_stage", - "description": "3-stage assembly system (2 warehouses, 1 retailer)", - "data": { - "nodes": [ + }, { - "index": 1, + "_index": 4, "name": null, "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [ - null + 5 ], "_successors": [ - 0 + 3 ], - "local_holding_cost": 1, + "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 2, + "shipment_lead_time": 1, "order_lead_time": null, "demand_source": { "type": null, @@ -3429,20 +3375,23 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 13, + "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 1, - "base_stock_level": 13, + "node": 4, + "product": null, + "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", + "supply_type": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -3451,6 +3400,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -3465,42 +3415,49 @@ "state_vars": null }, { - "index": 0, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ - 1, - 2 + 4 ], "_successors": [ - null + 2 ], - "local_holding_cost": 2, + "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 20, + "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, - "round_to_int": true + "n": null, + "p": null, + "round_to_int": null }, - "initial_inventory_level": 7, + "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 0, - "base_stock_level": 7, + "node": 3, + "product": null, + "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -3514,6 +3471,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -3528,23 +3486,28 @@ "state_vars": null }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ - null + 3 ], "_successors": [ - 0 + 1 ], - "local_holding_cost": 1, + "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 2, + "shipment_lead_time": 1, "order_lead_time": null, "demand_source": { "type": null, @@ -3554,20 +3517,23 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 11, + "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { "type": "BS", "node": 2, - "base_stock_level": 11, + "product": null, + "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", + "supply_type": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -3576,6 +3542,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -3588,55 +3555,51 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rosling_figure_1", - "description": "Assembly system from Figure 1 in Rosling (1989)", - "data": { - "nodes": [ + }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ - 2, - 3 + 2 ], "_successors": [ null ], - "local_holding_cost": null, + "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": null, + "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": { - "type": "UD", - "mean": null, - "standard_deviation": null, + "type": "P", + "mean": 32.0, + "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, - "lo": 0, - "hi": 10, + "lo": null, + "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 8, + "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BEBS", + "type": "BS", "node": 1, - "base_stock_level": 8, + "product": null, + "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -3650,6 +3613,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -3662,17 +3626,15 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - }, + } + ], + "_products": [ { - "index": 2, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - 5 - ], - "_successors": [ - 1 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -3680,7 +3642,7 @@ "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -3690,51 +3652,32 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 8, + "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BEBS", - "node": 2, - "base_stock_level": 24, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 3, + "_index": -6, "name": null, "network": null, - "_predecessors": [ - 4 - ], - "_successors": [ - 1 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -3742,7 +3685,7 @@ "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 3, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -3752,52 +3695,32 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 24, + "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BEBS", - "node": 3, - "base_stock_level": 40, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 4, + "_index": -5, "name": null, "network": null, - "_predecessors": [ - 6, - 7 - ], - "_successors": [ - 3 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -3805,7 +3728,7 @@ "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 2, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -3815,51 +3738,32 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 16, + "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BEBS", - "node": 4, - "base_stock_level": 76, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 5, + "_index": -4, "name": null, "network": null, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -3867,7 +3771,7 @@ "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 4, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -3877,51 +3781,32 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 32, + "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BEBS", - "node": 5, - "base_stock_level": 62, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 6, + "_index": -3, "name": null, "network": null, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -3929,7 +3814,7 @@ "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -3939,51 +3824,32 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 8, + "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BEBS", - "node": 6, - "base_stock_level": 84, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 7, + "_index": -2, "name": null, "network": null, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -3991,7 +3857,7 @@ "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 2, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, @@ -4001,40 +3867,25 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": 16, + "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BEBS", - "node": 7, - "base_stock_level": 92, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "supply_type": null, + "order_capacity": null, + "state_vars": [] } ], "period": 0, @@ -4043,47 +3894,54 @@ "type": "network" }, { - "name": "rong_atan_snyder_figure_1a", - "description": "Distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)", + "name": "problem_6_16", + "description": "Problem 6.16 (serial SSM)", "data": { "nodes": [ { - "index": 0, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ null ], "_successors": [ - 1, - 2 + 1 ], - "local_holding_cost": 0.3333333333333333, - "echelon_holding_cost": null, + "local_holding_cost": 2, + "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 20, + "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": 3, "order_lead_time": null, "demand_source": { "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, + "initial_inventory_level": 20, + "initial_orders": 20, + "initial_shipments": 20, "_inventory_policy": { "type": "BS", - "node": 0, - "base_stock_level": 0, + "node": 2, + "product": null, + "base_stock_level": 57.7257, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -4097,6 +3955,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -4111,42 +3970,49 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ - 0 + 2 ], "_successors": [ - 3, - 4 + null ], - "local_holding_cost": 0.6666666666666666, - "echelon_holding_cost": null, + "local_holding_cost": 7, + "echelon_holding_cost": 5, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 20, + "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": 8, "order_lead_time": null, "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": "N", + "mean": 20, + "standard_deviation": 4, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, + "initial_inventory_level": 20, + "initial_orders": 20, + "initial_shipments": 20, "_inventory_policy": { "type": "BS", "node": 1, - "base_stock_level": 0, + "product": null, + "base_stock_level": 171.1912, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -4160,6 +4026,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -4172,221 +4039,183 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - }, + } + ], + "_products": [ { - "index": 2, + "_index": -3, "name": null, "network": null, - "_predecessors": [ - 0 - ], - "_successors": [ - 5, - 6 - ], - "local_holding_cost": 0.6666666666666666, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 20, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 2, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 3, + "_index": -2, "name": null, "network": null, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 20, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 3, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 4, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 20, + "stockout_cost": null, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 4, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_1", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 1", + "data": { + "nodes": [ { - "index": 5, + "_index": 4, "name": null, "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [ - 2 + null ], "_successors": [ - null + 3 ], - "local_holding_cost": 1, - "echelon_holding_cost": null, + "local_holding_cost": null, + "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 20, + "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -4394,13 +4223,14 @@ "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 5, - "base_stock_level": 0, + "node": 4, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": null, + "supply_type": "U", "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -4409,6 +4239,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -4423,32 +4254,39 @@ "state_vars": null }, { - "index": 6, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ - 2 + 4 ], "_successors": [ - null + 2 ], - "local_holding_cost": 1, - "echelon_holding_cost": null, + "local_holding_cost": null, + "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": 20, + "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": 1, + "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -4456,8 +4294,9 @@ "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 6, - "base_stock_level": 0, + "node": 3, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -4471,6 +4310,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -4483,46 +4323,41 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rong_atan_snyder_figure_1b", - "description": "Distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)", - "data": { - "nodes": [ + }, { - "index": 0, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ - null + 3 ], "_successors": [ - 1, - 2 + 1 ], "local_holding_cost": null, - "echelon_holding_cost": null, + "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": null, + "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": null, + "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": { "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -4530,13 +4365,14 @@ "initial_shipments": null, "_inventory_policy": { "type": "BS", - "node": 0, - "base_stock_level": 0, + "node": 2, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", + "supply_type": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -4545,6 +4381,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -4559,36 +4396,39 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ - 0 + 2 ], "_successors": [ - 3, - 4, - 5, - 6, - 7 + null ], "local_holding_cost": null, - "echelon_holding_cost": null, + "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, - "stockout_cost": null, + "stockout_cost": 9, "stockout_cost_function": null, "revenue": null, - "shipment_lead_time": null, + "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": "P", + "mean": 16, + "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -4597,7 +4437,8 @@ "_inventory_policy": { "type": "BS", "node": 1, - "base_stock_level": 0, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -4611,6 +4452,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -4623,19 +4465,15 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - }, + } + ], + "_products": [ { - "index": 2, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - 0 - ], - "_successors": [ - 8, - 9, - 10 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -4647,34 +4485,273 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 2, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_9", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 9", + "data": { + "nodes": [ + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -4689,15 +4766,7670 @@ "state_vars": null }, { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ - 1 + 4 ], "_successors": [ - null + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 9, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": 4.0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_17", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 17", + "data": { + "nodes": [ + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 99, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": 4.0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_25", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 25", + "data": { + "nodes": [ + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 99, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": 4.0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "assembly_3_stage", + "description": "3-stage assembly system (2 warehouses, 1 retailer)", + "data": { + "nodes": [ + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + null + ], + "_successors": [ + 0 + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 13, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 13, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 0, + "name": null, + "network": null, + "_products_by_index": { + "-1000": -1000 + }, + "_dummy_product": -1000, + "_external_supplier_dummy_product": -1001, + "_predecessors": [ + 1, + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": true + }, + "initial_inventory_level": 7, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "product": null, + "base_stock_level": 7, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + null + ], + "_successors": [ + 0 + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 11, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 11, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1000, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rosling_figure_1", + "description": "Assembly system from Figure 1 in Rosling (1989)", + "data": { + "nodes": [ + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2, + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "UD", + "mean": 5.0, + "standard_deviation": 3.1622776601683795, + "demand_list": null, + "probabilities": null, + "lo": 0, + "hi": 10, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 8, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 1, + "product": null, + "base_stock_level": 8, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 5 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 8, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 2, + "product": null, + "base_stock_level": 24, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + 4 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 3, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 24, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 3, + "product": null, + "base_stock_level": 40, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 6, + 7 + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 16, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 4, + "product": null, + "base_stock_level": 76, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 4, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 32, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 5, + "product": null, + "base_stock_level": 62, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 8, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 6, + "product": null, + "base_stock_level": 84, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 7, + "name": null, + "network": null, + "_products_by_index": { + "-7": -7 + }, + "_dummy_product": -7, + "_external_supplier_dummy_product": -8, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 16, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 7, + "product": null, + "base_stock_level": 92, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rong_atan_snyder_figure_1a", + "description": "Distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)", + "data": { + "nodes": [ + { + "_index": 0, + "name": null, + "network": null, + "_products_by_index": { + "-1000": -1000 + }, + "_dummy_product": -1000, + "_external_supplier_dummy_product": -1001, + "_predecessors": [ + null + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": 0.3333333333333333, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 0 + ], + "_successors": [ + 3, + 4 + ], + "local_holding_cost": 0.6666666666666666, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 0 + ], + "_successors": [ + 5, + 6 + ], + "local_holding_cost": 0.6666666666666666, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 6, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1000, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rong_atan_snyder_figure_1b", + "description": "Distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)", + "data": { + "nodes": [ + { + "_index": 0, + "name": null, + "network": null, + "_products_by_index": { + "-1000": -1000 + }, + "_dummy_product": -1000, + "_external_supplier_dummy_product": -1001, + "_predecessors": [ + null + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 0 + ], + "_successors": [ + 3, + 4, + 5, + 6, + 7 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 0 + ], + "_successors": [ + 8, + 9, + 10 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 6, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 7, + "name": null, + "network": null, + "_products_by_index": { + "-7": -7 + }, + "_dummy_product": -7, + "_external_supplier_dummy_product": -8, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 7, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 8, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 8, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 9, + "name": null, + "network": null, + "_products_by_index": { + "-9": -9 + }, + "_dummy_product": -9, + "_external_supplier_dummy_product": -10, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 9, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 10, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 10, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1000, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rong_atan_snyder_figure_1c", + "description": "Distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)", + "data": { + "nodes": [ + { + "_index": 0, + "name": null, + "network": null, + "_products_by_index": { + "-1000": -1000 + }, + "_dummy_product": -1000, + "_external_supplier_dummy_product": -1001, + "_predecessors": [ + null + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 0 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 0 + ], + "_successors": [ + 3, + 4, + 5 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1000, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "example_6_3", + "description": "Example 6.3 (serial GSM)", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": 0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": 1, + "external_outbound_cst": null, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": 0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 0, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": 1, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_7", + "description": "Problem 6.7 (serial GSM)", + "data": { + "nodes": [ + { + "_index": 3, + "name": "Forming", + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": 1, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": "Firing", + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 3, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": "Glazing", + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 4, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 45, + "standard_deviation": 10, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": 0, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_8", + "description": "Problem 6.8 (serial GSM)", + "data": { + "nodes": [ + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4.56, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 10, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 5.73, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 15.8, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 5, + "external_inbound_cst": null, + "external_outbound_cst": 3, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 3.04, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 2.93, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 15, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, + "_predecessors": [ + 6 + ], + "_successors": [ + 4 + ], + "local_holding_cost": 2.47, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 8, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 7 + ], + "_successors": [ + 5 + ], + "local_holding_cost": 2.37, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 5, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 7, + "name": null, + "network": null, + "_products_by_index": { + "-7": -7 + }, + "_dummy_product": -7, + "_external_supplier_dummy_product": -8, + "_predecessors": [ + 8 + ], + "_successors": [ + 6 + ], + "local_holding_cost": 1.15, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 7, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 9, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 8, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 9 + ], + "_successors": [ + 7 + ], + "local_holding_cost": 1.1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 8, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 5, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 9, + "name": null, + "network": null, + "_products_by_index": { + "-9": -9 + }, + "_dummy_product": -9, + "_external_supplier_dummy_product": -10, + "_predecessors": [ + 10 + ], + "_successors": [ + 8 + ], + "local_holding_cost": 0.98, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 9, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 10, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + null + ], + "_successors": [ + 9 + ], + "local_holding_cost": 0.87, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 10, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 5, + "external_inbound_cst": 7, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -4708,58 +12440,39 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 3, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 4, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -4770,58 +12483,39 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 4, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 5, + "_index": -10, "name": null, "network": null, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -4832,59 +12526,60 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 5, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_9", + "description": "Problem 6.9 (tree GSM)", + "data": { + "nodes": [ { - "index": 6, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ - 1 + 3 ], "_successors": [ null ], - "local_holding_cost": null, + "local_holding_cost": 0.12054794520547946, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -4895,21 +12590,24 @@ "order_lead_time": null, "demand_source": { "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "mean": 22.0, + "standard_deviation": 4.1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 6, - "base_stock_level": 0, + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -4923,10 +12621,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 7, "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, + "external_outbound_cst": 3, + "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -4937,16 +12636,21 @@ "state_vars": null }, { - "index": 7, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ - 1 + 3 ], "_successors": [ null ], - "local_holding_cost": null, + "local_holding_cost": 0.07671232876712329, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -4957,21 +12661,24 @@ "order_lead_time": null, "demand_source": { "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "mean": 15.3, + "standard_deviation": 6.2, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 7, - "base_stock_level": 0, + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -4985,10 +12692,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 7, "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, + "external_outbound_cst": 3, + "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -4999,16 +12707,23 @@ "state_vars": null }, { - "index": 8, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ - 2 + 4, + 5 ], "_successors": [ - null + 1, + 2 ], - "local_holding_cost": null, + "local_holding_cost": 0.049315068493150684, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -5018,22 +12733,25 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 8, - "base_stock_level": 0, + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -5047,10 +12765,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 21, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -5061,16 +12780,19 @@ "state_vars": null }, { - "index": 9, + "_index": 4, "name": null, "network": null, - "_predecessors": [ - 2 - ], + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [], "_successors": [ - null + 3 ], - "local_holding_cost": null, + "local_holding_cost": 0.0027397260273972603, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -5080,22 +12802,25 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 9, - "base_stock_level": 0, + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -5109,10 +12834,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -5123,16 +12849,21 @@ "state_vars": null }, { - "index": 10, + "_index": 5, "name": null, "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ - 2 + 6 ], "_successors": [ - null + 3 ], - "local_holding_cost": null, + "local_holding_cost": 0.010958904109589041, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -5142,22 +12873,25 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 10, - "base_stock_level": 0, + "type": null, + "node": 5, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null @@ -5171,10 +12905,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 8, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -5183,30 +12918,21 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rong_atan_snyder_figure_1c", - "description": "Distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)", - "data": { - "nodes": [ + }, { - "index": 0, + "_index": 6, "name": null, "network": null, - "_predecessors": [ - null - ], + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [], "_successors": [ - 1, - 2 + 5 ], - "local_holding_cost": null, + "local_holding_cost": 0.00410958904109589, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -5217,26 +12943,29 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 0, - "base_stock_level": 0, + "type": null, + "node": 6, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", + "supply_type": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -5245,10 +12974,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -5257,17 +12987,15 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - }, + } + ], + "_products": [ { - "index": 1, + "_index": -2, "name": null, "network": null, - "_predecessors": [ - 0 - ], - "_successors": [ - null - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -5278,60 +13006,39 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 1, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 2, + "_index": -7, "name": null, "network": null, - "_predecessors": [ - 0 - ], - "_successors": [ - 3, - 4, - 5 - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -5343,57 +13050,38 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 2, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 3, + "_index": -6, "name": null, "network": null, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -5404,58 +13092,39 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 3, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 4, + "_index": -5, "name": null, "network": null, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -5466,58 +13135,39 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 4, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 5, + "_index": -4, "name": null, "network": null, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], + "is_dummy": true, + "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, @@ -5528,70 +13178,40 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": { - "type": "BS", - "node": 5, - "base_stock_level": 0, + "type": null, + "node": null, + "product": null, + "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "example_6_3", - "description": "Example 6.3 (serial GSM)", - "data": { - "nodes": [ + "order_capacity": null, + "state_vars": [] + }, { - "index": 3, + "_index": -3, "name": null, "network": null, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -5602,12 +13222,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, - "standard_deviation": 0, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -5615,45 +13237,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 3, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 1, - "external_inbound_cst": 1, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 2, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -5664,12 +13265,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, - "standard_deviation": 0, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -5677,45 +13280,44 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 2, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 0, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "example_6_5", + "description": "Example 6.5 (tree GSM)", + "data": { + "nodes": [ { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ - 2 + null ], "_successors": [ - null + 3 ], - "local_holding_cost": 7, + "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -5725,13 +13327,15 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 1, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -5740,12 +13344,13 @@ "_inventory_policy": { "type": null, "node": 1, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": null, + "supply_type": "U", "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -5754,9 +13359,10 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": 1, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": 1, + "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, @@ -5766,25 +13372,22 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_7", - "description": "Problem 6.7 (serial GSM)", - "data": { - "nodes": [ + }, { - "index": 3, - "name": "Forming", + "_index": 3, + "name": null, "network": null, - "_predecessors": [], + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + 1 + ], "_successors": [ - 2 + 2, + 4 ], "local_holding_cost": 2, "echelon_holding_cost": null, @@ -5803,6 +13406,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -5811,6 +13416,7 @@ "_inventory_policy": { "type": null, "node": 3, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -5825,10 +13431,11 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 1, - "external_inbound_cst": 1, + "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": 4, + "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -5839,14 +13446,19 @@ "state_vars": null }, { - "index": 2, - "name": "Firing", + "_index": 2, + "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 3 ], "_successors": [ - 1 + null ], "local_holding_cost": 3, "echelon_holding_cost": null, @@ -5858,13 +13470,15 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, + "type": "N", + "mean": 0, + "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -5873,6 +13487,7 @@ "_inventory_policy": { "type": null, "node": 2, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -5887,10 +13502,11 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, + "external_outbound_cst": 0, + "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -5901,16 +13517,21 @@ "state_vars": null }, { - "index": 1, - "name": "Glazing", + "_index": 4, + "name": null, "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [ - 2 + 3 ], "_successors": [ null ], - "local_holding_cost": 4, + "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -5921,12 +13542,14 @@ "order_lead_time": null, "demand_source": { "type": "N", - "mean": 45, - "standard_deviation": 10, + "mean": 0, + "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -5934,7 +13557,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 1, + "node": 4, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -5949,10 +13573,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 2, + "order_capacity": null, + "processing_time": 1, "external_inbound_cst": null, - "external_outbound_cst": 0, - "demand_bound_constant": 4, + "external_outbound_cst": 1, + "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -5963,27 +13588,14 @@ "state_vars": null } ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_8", - "description": "Problem 6.8 (serial GSM)", - "data": { - "nodes": [ + "_products": [ { - "index": 2, + "_index": -2, "name": null, "network": null, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4.56, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -5994,12 +13606,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6007,45 +13621,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 2, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 10, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 1, + "_index": -5, "name": null, "network": null, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 5.73, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6055,13 +13648,15 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 15.8, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6069,45 +13664,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 1, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 5, - "external_inbound_cst": null, - "external_outbound_cst": 3, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 3, + "_index": -4, "name": null, "network": null, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 3.04, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6118,12 +13692,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6131,45 +13707,67 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 3, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null }, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 4, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 2.93, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6180,12 +13778,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6193,45 +13793,45 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 4, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 15, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "figure_6_12", + "description": "Figure 6.12 (tree GSM)", + "data": { + "nodes": [ { - "index": 5, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ - 6 + null ], "_successors": [ - 4 + 2, + 3 ], - "local_holding_cost": 2.47, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6242,12 +13842,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6255,13 +13857,14 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 5, + "node": 1, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": null, + "supply_type": "U", "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -6270,10 +13873,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 8, + "order_capacity": null, + "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, + "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -6284,16 +13888,19 @@ "state_vars": null }, { - "index": 6, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ - 7 - ], - "_successors": [ - 5 + 1 ], - "local_holding_cost": 2.37, + "_successors": [], + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6304,12 +13911,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6317,7 +13926,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 6, + "node": 2, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -6332,10 +13942,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 5, + "order_capacity": null, + "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, + "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -6346,16 +13957,21 @@ "state_vars": null }, { - "index": 7, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ - 8 + 1 ], "_successors": [ - 6 + 5 ], - "local_holding_cost": 1.15, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6366,12 +13982,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6379,7 +13997,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 7, + "node": 3, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -6394,10 +14013,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 9, + "order_capacity": null, + "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, + "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -6408,16 +14028,23 @@ "state_vars": null }, { - "index": 8, + "_index": 5, "name": null, "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ - 9 + 3, + 4 ], "_successors": [ + 6, 7 ], - "local_holding_cost": 1.1, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6428,12 +14055,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6441,7 +14070,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 8, + "node": 5, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -6456,10 +14086,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 5, + "order_capacity": null, + "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, + "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -6470,16 +14101,21 @@ "state_vars": null }, { - "index": 9, + "_index": 4, "name": null, "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [ - 10 + null ], "_successors": [ - 8 + 5 ], - "local_holding_cost": 0.98, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6490,12 +14126,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6503,13 +14141,14 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 9, + "node": 4, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": null, + "supply_type": "U", "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -6518,10 +14157,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 1, + "order_capacity": null, + "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, + "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -6532,16 +14172,19 @@ "state_vars": null }, { - "index": 10, + "_index": 6, "name": null, "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, "_predecessors": [ - null - ], - "_successors": [ - 9 + 5 ], - "local_holding_cost": 0.87, + "_successors": [], + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6552,12 +14195,14 @@ "order_lead_time": null, "demand_source": { "type": null, - "mean": 0, + "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6565,13 +14210,14 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 10, + "node": 6, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", + "supply_type": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -6580,10 +14226,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 5, - "external_inbound_cst": 7, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, + "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -6592,29 +14239,21 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_9", - "description": "Problem 6.9 (tree GSM)", - "data": { - "nodes": [ + }, { - "index": 1, + "_index": 7, "name": null, "network": null, + "_products_by_index": { + "-7": -7 + }, + "_dummy_product": -7, + "_external_supplier_dummy_product": -8, "_predecessors": [ - 3 - ], - "_successors": [ - null + 5 ], - "local_holding_cost": 0.12054794520547946, + "_successors": [], + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6624,13 +14263,15 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 22.0, - "standard_deviation": 4.1, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6638,7 +14279,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 1, + "node": 7, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -6653,10 +14295,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 7, + "order_capacity": null, + "processing_time": null, "external_inbound_cst": null, - "external_outbound_cst": 3, - "demand_bound_constant": 4, + "external_outbound_cst": null, + "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -6665,18 +14308,16 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - }, + } + ], + "_products": [ { - "index": 2, + "_index": -2, "name": null, "network": null, - "_predecessors": [ - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.07671232876712329, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6686,13 +14327,15 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 15.3, - "standard_deviation": 6.2, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6700,47 +14343,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 2, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 7, - "external_inbound_cst": null, - "external_outbound_cst": 3, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 3, + "_index": -8, "name": null, "network": null, - "_predecessors": [ - 4, - 5 - ], - "_successors": [ - 1, - 2 - ], - "local_holding_cost": 0.049315068493150684, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6757,6 +14377,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6764,43 +14386,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 3, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 21, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 4, + "_index": -7, "name": null, "network": null, - "_predecessors": [], - "_successors": [ - 3 - ], - "local_holding_cost": 0.0027397260273972603, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6817,6 +14420,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6824,45 +14429,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 4, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 5, + "_index": -6, "name": null, "network": null, - "_predecessors": [ - 6 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 0.010958904109589041, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6879,6 +14463,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6886,43 +14472,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 5, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 8, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 6, + "_index": -5, "name": null, "network": null, - "_predecessors": [], - "_successors": [ - 5 - ], - "local_holding_cost": 0.00410958904109589, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -6939,6 +14506,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6946,56 +14515,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 6, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "example_6_5", - "description": "Example 6.5 (tree GSM)", - "data": { - "nodes": [ + "order_capacity": null, + "state_vars": [] + }, { - "index": 1, + "_index": -4, "name": null, "network": null, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": 1, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7012,6 +14549,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7019,46 +14558,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 1, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 2, - "external_inbound_cst": 1, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 3, + "_index": -3, "name": null, "network": null, - "_predecessors": [ - 1 - ], - "_successors": [ - 2, - 4 - ], - "local_holding_cost": 2, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7075,6 +14592,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7082,45 +14601,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 3, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 2, + "_index": -1, "name": null, "network": null, - "_predecessors": [ - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": 3, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7130,13 +14628,15 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 1, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7144,45 +14644,42 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 2, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": 0, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "figure_6_14", + "description": "Figure 6.14 (tree GSM)", + "data": { + "nodes": [ { - "index": 4, - "name": null, + "_index": 1, + "name": "Raw_Material", "network": null, - "_predecessors": [ - 3 - ], + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [], "_successors": [ - null + 2 ], - "local_holding_cost": 3, + "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7192,13 +14689,15 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 1, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7206,7 +14705,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 4, + "node": 1, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -7221,10 +14721,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 1, + "order_capacity": null, + "processing_time": 2, "external_inbound_cst": null, - "external_outbound_cst": 1, - "demand_bound_constant": 1, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -7233,30 +14734,23 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "figure_6_12", - "description": "Figure 6.12 (tree GSM)", - "data": { - "nodes": [ + }, { - "index": 1, - "name": null, + "_index": 2, + "name": "Process_Wafers", "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ - null + 1 ], "_successors": [ - 2, 3 ], - "local_holding_cost": null, + "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7273,6 +14767,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7280,13 +14776,14 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 1, + "node": 2, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", + "supply_type": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -7295,10 +14792,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -7309,14 +14807,21 @@ "state_vars": null }, { - "index": 2, - "name": null, + "_index": 3, + "name": "Package_Test_Wafers", "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ - 1 + 2 ], - "_successors": [], - "local_holding_cost": null, + "_successors": [ + 5 + ], + "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7333,6 +14838,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7340,7 +14847,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 2, + "node": 3, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -7355,10 +14863,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -7369,16 +14878,19 @@ "state_vars": null }, { - "index": 3, - "name": null, + "_index": 4, + "name": "Imager_Base", "network": null, - "_predecessors": [ - 1 - ], + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [], "_successors": [ 5 ], - "local_holding_cost": null, + "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7395,6 +14907,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7402,7 +14916,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 3, + "node": 4, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -7417,10 +14932,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -7431,18 +14947,22 @@ "state_vars": null }, { - "index": 5, - "name": null, + "_index": 5, + "name": "Imager_Assembly", "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ 3, 4 ], "_successors": [ - 6, - 7 + 6 ], - "local_holding_cost": null, + "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7459,6 +14979,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7467,6 +14989,7 @@ "_inventory_policy": { "type": null, "node": 5, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -7481,10 +15004,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -7495,16 +15019,21 @@ "state_vars": null }, { - "index": 4, - "name": null, + "_index": 6, + "name": "Ship_to_Final_Assembly", "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, "_predecessors": [ - null + 5 ], "_successors": [ - 5 + 10 ], - "local_holding_cost": null, + "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7521,6 +15050,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7528,13 +15059,14 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 4, + "node": 6, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, - "supply_type": "U", + "supply_type": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -7543,10 +15075,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -7557,14 +15090,19 @@ "state_vars": null }, { - "index": 6, - "name": null, + "_index": 7, + "name": "Camera", "network": null, - "_predecessors": [ - 5 + "_products_by_index": { + "-7": -7 + }, + "_dummy_product": -7, + "_external_supplier_dummy_product": -8, + "_predecessors": [], + "_successors": [ + 10 ], - "_successors": [], - "local_holding_cost": null, + "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7581,6 +15119,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7588,7 +15128,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 6, + "node": 7, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -7603,10 +15144,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -7617,14 +15159,19 @@ "state_vars": null }, { - "index": 7, - "name": null, + "_index": 8, + "name": "Circuit_Board", "network": null, - "_predecessors": [ - 5 + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [], + "_successors": [ + 10 ], - "_successors": [], - "local_holding_cost": null, + "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7641,6 +15188,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7648,7 +15197,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 7, + "node": 8, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -7663,10 +15213,11 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": null, + "order_capacity": null, + "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, - "demand_bound_constant": null, + "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, @@ -7675,27 +15226,21 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "figure_6_14", - "description": "Figure 6.14 (tree GSM)", - "data": { - "nodes": [ + }, { - "index": 1, - "name": "Raw_Material", + "_index": 9, + "name": "Other_Parts", "network": null, + "_products_by_index": { + "-9": -9 + }, + "_dummy_product": -9, + "_external_supplier_dummy_product": -10, "_predecessors": [], "_successors": [ - 2 + 10 ], - "local_holding_cost": 0.01, + "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7712,6 +15257,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7719,7 +15266,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 1, + "node": 9, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -7734,7 +15282,8 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 2, + "order_capacity": null, + "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, @@ -7748,16 +15297,24 @@ "state_vars": null }, { - "index": 2, - "name": "Process_Wafers", + "_index": 10, + "name": "Build_Test_Pack", "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, "_predecessors": [ - 1 + 7, + 6, + 8, + 9 ], "_successors": [ - 3 + null ], - "local_holding_cost": 0.03, + "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7767,13 +15324,15 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, + "type": "N", + "mean": 0, + "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7781,7 +15340,8 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 2, + "node": 10, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -7796,9 +15356,10 @@ "disruption_state_list": null, "disrupted": false }, - "processing_time": 3, + "order_capacity": null, + "processing_time": 2, "external_inbound_cst": null, - "external_outbound_cst": null, + "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, @@ -7808,18 +15369,145 @@ "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null + } + ], + "_products": [ + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] }, { - "index": 3, - "name": "Package_Test_Wafers", + "_index": -8, + "name": null, "network": null, - "_predecessors": [ - 2 - ], - "_successors": [ - 5 - ], - "local_holding_cost": 0.04, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7836,6 +15524,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7843,43 +15533,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 3, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 4, - "name": "Imager_Base", + "_index": -7, + "name": null, "network": null, - "_predecessors": [], - "_successors": [ - 5 - ], - "local_holding_cost": 0.06, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7896,6 +15567,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7903,46 +15576,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 4, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 4, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 5, - "name": "Imager_Assembly", + "_index": -6, + "name": null, "network": null, - "_predecessors": [ - 3, - 4 - ], - "_successors": [ - 6 - ], - "local_holding_cost": 0.12, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -7959,6 +15610,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -7966,45 +15619,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 5, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 6, - "name": "Ship_to_Final_Assembly", + "_index": -5, + "name": null, "network": null, - "_predecessors": [ - 5 - ], - "_successors": [ - 10 - ], - "local_holding_cost": 0.13, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -8021,6 +15653,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -8028,43 +15662,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 6, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 7, - "name": "Camera", + "_index": -4, + "name": null, "network": null, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.2, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -8081,6 +15696,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -8088,43 +15705,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 7, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 6, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 8, - "name": "Circuit_Board", + "_index": -3, + "name": null, "network": null, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.08, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -8141,6 +15739,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -8148,43 +15748,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 8, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 4, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 9, - "name": "Other_Parts", + "_index": -2, + "name": null, "network": null, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.04, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -8201,6 +15782,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -8208,48 +15791,24 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 9, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] }, { - "index": 10, - "name": "Build_Test_Pack", + "_index": -10, + "name": null, "network": null, - "_predecessors": [ - 7, - 6, - 8, - 9 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, @@ -8259,13 +15818,15 @@ "shipment_lead_time": null, "order_lead_time": null, "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 10, + "type": null, + "mean": null, + "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -8273,33 +15834,16 @@ "initial_shipments": null, "_inventory_policy": { "type": null, - "node": 10, + "node": null, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": 2, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null + "order_capacity": null, + "state_vars": [] } ], "period": 0, @@ -8418,5 +15962,5 @@ "type": "dict" } ], - "last_updated": "2022-08-20 21:06:36.134676" + "last_updated": "2024-04-15 20:00:19.838270" } \ No newline at end of file diff --git a/src/stockpyl/demand_source.py b/src/stockpyl/demand_source.py index 46ccf9c..197c364 100644 --- a/src/stockpyl/demand_source.py +++ b/src/stockpyl/demand_source.py @@ -210,7 +210,7 @@ def mean(self): set but is calculated from other parameters, returns the calculated mean. If neither is true, return ``None``. """ - if self._mean: + if self._mean is not None: return self._mean elif self.type in ('UC', 'UD', 'D', 'NB', 'CD'): return self.demand_distribution.mean() @@ -227,7 +227,7 @@ def standard_deviation(self): set but is calculated from other parameters, returns the calculated standard deviation. If neither is true, return ``None``. """ - if self._standard_deviation: + if self._standard_deviation is not None: return self._standard_deviation elif self.type in ('P', 'UC', 'UD', 'D', 'NB', 'CD'): return self.demand_distribution.std() diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 62ef627..3998642 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -126,6 +126,8 @@ def products(self): product_set = set(self._products) for node in self.nodes: product_set |= set(node.products) + if node._external_supplier_dummy_product is not None: + product_set |= {node._external_supplier_dummy_product} return list(product_set) @property @@ -148,12 +150,17 @@ def products_by_index(self): with index 4. Includes "dummy products" that are added internally to nodes that do not have a |class_product| - object added. Dummy products are identifiable by their index, which is always negative. + object added. Dummy products are identifiable as such by their index, which is always negative. Read only. """ # Include all products in network (including in nodes). - return {prod.index: prod for prod in self.products} + prod_by_ind = {prod.index: prod for prod in self.products} + # Add external supplier dummy products. + prod_by_ind.update({node._external_supplier_dummy_product.index: node._external_supplier_dummy_product \ + for node in self.nodes if node._external_supplier_dummy_product is not None}) + + return prod_by_ind @property def period(self): @@ -362,8 +369,10 @@ def from_dict(cls, the_dict): for prod_ind in prod_indices: node.add_product(network.products_by_index[prod_ind]) # Replace dummy-product indices with product objects. - node._dummy_product = network.products_by_index[node._dummy_product] - node._external_supplier_dummy_product = network.products_by_index[node._external_supplier_dummy_product] + if node._dummy_product is not None: + node._dummy_product = network.products_by_index[node._dummy_product] + if node._external_supplier_dummy_product is not None: + node._external_supplier_dummy_product = network.products_by_index[node._external_supplier_dummy_product] # Add node to network. network.add_node(node) for n in network.nodes: diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 6fea158..40b3ed0 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -458,7 +458,7 @@ def initialize(self): elif attr == 'disruption_process': self.disruption_process = disruption_process.DisruptionProcess() elif attr == '_inventory_policy': - self.inventory_policy = policy.Policy(node=self) + self.inventory_policy = policy.Policy() elif is_list(self._DEFAULT_VALUES[attr]) or is_dict(self._DEFAULT_VALUES[attr]): setattr(self, attr, copy.deepcopy(self._DEFAULT_VALUES[attr])) else: @@ -576,7 +576,7 @@ def from_dict(cls, the_dict): product = cls() else: # Build empty SupplyChainProduct. - product = cls(the_dict['_index']) + product = cls(the_dict['_index'], is_dummy=the_dict['is_dummy']) # Fill attributes. for attr in cls._DEFAULT_VALUES.keys(): # Some attributes require special handling. diff --git a/tests/additional_files/temp_TestSaveInstance_example_6_1_with_order_capacity.json b/tests/additional_files/temp_TestSaveInstance_example_6_1_with_order_capacity.json deleted file mode 100644 index 646ba6e..0000000 --- a/tests/additional_files/temp_TestSaveInstance_example_6_1_with_order_capacity.json +++ /dev/null @@ -1 +0,0 @@ -{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-3": -3}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false.json b/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false.json deleted file mode 100644 index dde0d8c..0000000 --- a/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false.json +++ /dev/null @@ -1 +0,0 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-5": -5}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false_rosling.json b/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false_rosling.json deleted file mode 100644 index 7359851..0000000 --- a/tests/additional_files/temp_TestSaveInstance_omit_state_vars_false_rosling.json +++ /dev/null @@ -1 +0,0 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_rosling_false", "description": "this is test_omit_state_vars_rosling_false", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-1": -1}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestSaveInstance_omit_state_vars_true.json b/tests/additional_files/temp_TestSaveInstance_omit_state_vars_true.json deleted file mode 100644 index 45933f9..0000000 --- a/tests/additional_files/temp_TestSaveInstance_omit_state_vars_true.json +++ /dev/null @@ -1 +0,0 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-5": -5}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/test_demand_source_TestFromDict_data.json b/tests/additional_files/test_demand_source_TestFromDict_data.json index cf2d021..4e2476d 100644 --- a/tests/additional_files/test_demand_source_TestFromDict_data.json +++ b/tests/additional_files/test_demand_source_TestFromDict_data.json @@ -7,9 +7,14 @@ "data": { "nodes": [ { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ null ], @@ -33,6 +38,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -41,6 +48,7 @@ "_inventory_policy": { "type": "BS", "node": 3, + "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, @@ -55,6 +63,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -69,9 +78,14 @@ "state_vars": null }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 3 ], @@ -95,6 +109,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -103,6 +119,7 @@ "_inventory_policy": { "type": "BS", "node": 2, + "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, @@ -117,6 +134,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -131,9 +149,14 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2 ], @@ -156,6 +179,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -164,6 +189,7 @@ "_inventory_policy": { "type": "BS", "node": 1, + "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, @@ -178,6 +204,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -192,6 +219,180 @@ "state_vars": null } ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], "period": 0, "max_max_replenishment_time": null }, @@ -203,9 +404,14 @@ "data": { "nodes": [ { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ null ], @@ -229,6 +435,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -237,6 +445,7 @@ "_inventory_policy": { "type": "BS", "node": 3, + "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, @@ -251,6 +460,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -265,9 +475,14 @@ "state_vars": null }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 3 ], @@ -287,10 +502,11 @@ "type": null, "mean": null, "standard_deviation": null, - "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -299,6 +515,7 @@ "_inventory_policy": { "type": "BS", "node": 2, + "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, @@ -313,6 +530,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -327,9 +545,14 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2 ], @@ -349,9 +572,12 @@ "type": "N", "mean": 5, "standard_deviation": 1, + "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -360,6 +586,7 @@ "_inventory_policy": { "type": "BS", "node": 1, + "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, @@ -374,6 +601,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -388,6 +616,180 @@ "state_vars": null } ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], "period": 0, "max_max_replenishment_time": null }, diff --git a/tests/additional_files/test_disruption_process_TestFromDict_data.json b/tests/additional_files/test_disruption_process_TestFromDict_data.json index 9bda3d6..b460ba1 100644 --- a/tests/additional_files/test_disruption_process_TestFromDict_data.json +++ b/tests/additional_files/test_disruption_process_TestFromDict_data.json @@ -1 +1,800 @@ -{"_id": "", "instances": [{"name": "missing_disruption_probability", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_disruption_state_list", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2022-07-16 10:56:28.399244"} \ No newline at end of file +{ + "_id": "", + "instances": [ + { + "name": "missing_disruption_probability", + "description": "", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "missing_disruption_state_list", + "description": "", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + } + ], + "last_updated": "2022-07-16 10:56:28.399244" +} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json index 6492780..68d9081 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json @@ -7,9 +7,14 @@ "data": { "nodes": [ { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ null ], @@ -33,6 +38,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -41,13 +48,13 @@ "_inventory_policy": { "type": "BS", "node": 3, + "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": "U", - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -56,6 +63,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -70,9 +78,14 @@ "state_vars": null }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 3 ], @@ -96,6 +109,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -104,13 +119,13 @@ "_inventory_policy": { "type": "BS", "node": 2, + "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -119,6 +134,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -133,9 +149,14 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2 ], @@ -159,6 +180,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -167,13 +190,13 @@ "_inventory_policy": { "type": "BS", "node": 1, + "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -182,6 +205,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -196,6 +220,180 @@ "state_vars": null } ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], "period": 0, "max_max_replenishment_time": null }, diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json index f255ecf..6374bd9 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json @@ -7,9 +7,14 @@ "data": { "nodes": [ { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ null ], @@ -33,6 +38,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -41,13 +48,13 @@ "_inventory_policy": { "type": "BS", "node": 3, + "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": "U", - "order_capacity": 25, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -56,6 +63,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -70,9 +78,14 @@ "state_vars": null }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 3 ], @@ -96,6 +109,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -104,13 +119,13 @@ "_inventory_policy": { "type": "BS", "node": 2, + "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -119,6 +134,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -133,9 +149,14 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2 ], @@ -159,6 +180,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -167,13 +190,13 @@ "_inventory_policy": { "type": "BS", "node": 1, + "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": 40, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -182,6 +205,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -196,6 +220,180 @@ "state_vars": null } ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], "period": 0, "max_max_replenishment_time": null }, diff --git a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json index e5de4f0..3b2f0e5 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json @@ -7,9 +7,14 @@ "data": { "nodes": [ { - "index": 1, + "_index": 1, "name": "Raw_Material", "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [], "_successors": [ 2 @@ -31,6 +36,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -39,13 +46,13 @@ "_inventory_policy": { "type": null, "node": 1, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -54,6 +61,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, @@ -68,9 +76,14 @@ "state_vars": null }, { - "index": 2, + "_index": 2, "name": "Process_Wafers", "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 1 ], @@ -94,6 +107,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -102,13 +117,13 @@ "_inventory_policy": { "type": null, "node": 2, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -117,6 +132,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, @@ -131,9 +147,14 @@ "state_vars": null }, { - "index": 3, + "_index": 3, "name": "Package_Test_Wafers", "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ 2 ], @@ -157,6 +178,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -165,13 +188,13 @@ "_inventory_policy": { "type": null, "node": 3, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -180,6 +203,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, @@ -194,9 +218,14 @@ "state_vars": null }, { - "index": 4, + "_index": 4, "name": "Imager_Base", "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [], "_successors": [ 5 @@ -218,6 +247,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -226,13 +257,13 @@ "_inventory_policy": { "type": null, "node": 4, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -241,6 +272,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, @@ -255,9 +287,14 @@ "state_vars": null }, { - "index": 5, + "_index": 5, "name": "Imager_Assembly", "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ 3, 4 @@ -282,6 +319,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -290,13 +329,13 @@ "_inventory_policy": { "type": null, "node": 5, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -305,6 +344,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, @@ -319,9 +359,14 @@ "state_vars": null }, { - "index": 6, + "_index": 6, "name": "Ship_to_Final_Assembly", "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, "_predecessors": [ 5 ], @@ -345,6 +390,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -353,6 +400,7 @@ "_inventory_policy": { "type": null, "node": 6, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -367,6 +415,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, @@ -381,9 +430,14 @@ "state_vars": null }, { - "index": 7, + "_index": 7, "name": "Camera", "network": null, + "_products_by_index": { + "-7": -7 + }, + "_dummy_product": -7, + "_external_supplier_dummy_product": -8, "_predecessors": [], "_successors": [ 10 @@ -405,6 +459,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -413,6 +469,7 @@ "_inventory_policy": { "type": null, "node": 7, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -427,6 +484,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, @@ -441,9 +499,14 @@ "state_vars": null }, { - "index": 8, + "_index": 8, "name": "Circuit_Board", "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [ 10 @@ -465,6 +528,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -473,6 +538,7 @@ "_inventory_policy": { "type": null, "node": 8, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -487,6 +553,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, @@ -501,9 +568,14 @@ "state_vars": null }, { - "index": 9, + "_index": 9, "name": "Other_Parts", "network": null, + "_products_by_index": { + "-9": -9 + }, + "_dummy_product": -9, + "_external_supplier_dummy_product": -10, "_predecessors": [], "_successors": [ 10 @@ -525,6 +597,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -533,6 +607,7 @@ "_inventory_policy": { "type": null, "node": 9, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -547,6 +622,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, @@ -561,9 +637,14 @@ "state_vars": null }, { - "index": 10, + "_index": 10, "name": "Build_Test_Pack", "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, "_predecessors": [ 7, 6, @@ -590,6 +671,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -598,6 +681,7 @@ "_inventory_policy": { "type": null, "node": 10, + "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, @@ -612,6 +696,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, @@ -626,6 +711,481 @@ "state_vars": null } ], + "_products": [ + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], "period": 0, "max_max_replenishment_time": null }, diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json index 024e125..47ff8f2 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json @@ -7,9 +7,14 @@ "data": { "nodes": [ { - "index": 5, + "_index": 5, "name": null, "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ null ], @@ -33,6 +38,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -41,13 +48,13 @@ "_inventory_policy": { "type": "BS", "node": 5, + "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": "U", - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -56,6 +63,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -72,1492 +80,2337 @@ "node": 5, "period": 0, "inbound_shipment_pipeline": { - "null": [ - 0, - 30.0 - ] + "null": { + "-6": [ + 0, + 30.0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 30.0 + "4": { + "-5": 30.0 + } }, "outbound_shipment": { - "4": 30.0 + "4": { + "-5": 30.0 + } }, "on_order_by_predecessor": { - "null": 30.0 + "null": { + "-6": 30.0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-5": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 30.0 + "null": { + "-6": 30.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 2.9299999999999997 }, - "inventory_level": 2.9299999999999997, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 30.0, - "demand_met_from_stock": 30.0, - "demand_met_from_stock_cumul": 30.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 30.0 + }, + "demand_met_from_stock": { + "-5": 30.0 + }, + "demand_met_from_stock_cumul": { + "-5": 30.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 1, "inbound_shipment_pipeline": { - "null": [ - 0, - 36.0 - ] + "null": { + "-6": [ + 0, + 36.0 + ] + } }, "inbound_shipment": { - "null": 30.0 + "null": { + "-6": 30.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 36.0 + "4": { + "-5": 36.0 + } }, "outbound_shipment": { - "4": 32.93 + "4": { + "-5": 32.93 + } }, "on_order_by_predecessor": { - "null": 36.0 + "null": { + "-6": 36.0 + } }, "backorders_by_successor": { - "4": 3.0700000000000003 + "4": { + "-5": 3.0700000000000003 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 36.0 + "null": { + "-6": 36.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -3.0700000000000003 }, - "inventory_level": -3.0700000000000003, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 66.0, - "demand_met_from_stock": 32.93, - "demand_met_from_stock_cumul": 62.93, - "fill_rate": 0.9534848484848485 + "demand_cumul": { + "-5": 66.0 + }, + "demand_met_from_stock": { + "-5": 32.93 + }, + "demand_met_from_stock_cumul": { + "-5": 62.93 + }, + "fill_rate": { + "-5": 0.9534848484848485 + } }, { "node": 5, "period": 2, "inbound_shipment_pipeline": { - "null": [ - 0, - 25.0 - ] + "null": { + "-6": [ + 0, + 25.0 + ] + } }, "inbound_shipment": { - "null": 36.0 + "null": { + "-6": 36.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 25.0 + "4": { + "-5": 25.0 + } }, "outbound_shipment": { - "4": 28.07 + "4": { + "-5": 28.07 + } }, "on_order_by_predecessor": { - "null": 25.0 + "null": { + "-6": 25.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 25.0 + "null": { + "-6": 25.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 7.93 }, - "inventory_level": 7.93, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, - "demand_cumul": 91.0, - "demand_met_from_stock": 25.0, - "demand_met_from_stock_cumul": 87.93, - "fill_rate": 0.9662637362637363 + "demand_cumul": { + "-5": 91.0 + }, + "demand_met_from_stock": { + "-5": 25.0 + }, + "demand_met_from_stock_cumul": { + "-5": 87.93 + }, + "fill_rate": { + "-5": 0.9662637362637363 + } }, { "node": 5, "period": 3, "inbound_shipment_pipeline": { - "null": [ - 0, - 34.0 - ] + "null": { + "-6": [ + 0, + 34.0 + ] + } }, "inbound_shipment": { - "null": 25.0 + "null": { + "-6": 25.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 34.0 + "4": { + "-5": 34.0 + } }, "outbound_shipment": { - "4": 32.93 + "4": { + "-5": 32.93 + } }, "on_order_by_predecessor": { - "null": 34.0 + "null": { + "-6": 34.0 + } }, "backorders_by_successor": { - "4": 1.0700000000000003 + "4": { + "-5": 1.0700000000000003 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 34.0 + "null": { + "-6": 34.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -1.0700000000000003 }, - "inventory_level": -1.0700000000000003, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 125.0, - "demand_met_from_stock": 32.93, - "demand_met_from_stock_cumul": 120.86000000000001, - "fill_rate": 0.9668800000000001 + "demand_cumul": { + "-5": 125.0 + }, + "demand_met_from_stock": { + "-5": 32.93 + }, + "demand_met_from_stock_cumul": { + "-5": 120.86000000000001 + }, + "fill_rate": { + "-5": 0.9668800000000001 + } }, { "node": 5, "period": 4, "inbound_shipment_pipeline": { - "null": [ - 0, - 38.0 - ] + "null": { + "-6": [ + 0, + 38.0 + ] + } }, "inbound_shipment": { - "null": 34.0 + "null": { + "-6": 34.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 38.0 + "4": { + "-5": 38.0 + } }, "outbound_shipment": { - "4": 34.0 + "4": { + "-5": 34.0 + } }, "on_order_by_predecessor": { - "null": 38.0 + "null": { + "-6": 38.0 + } }, "backorders_by_successor": { - "4": 5.07 + "4": { + "-5": 5.07 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 38.0 + "null": { + "-6": 38.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -5.07 }, - "inventory_level": -5.07, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, - "demand_cumul": 163.0, - "demand_met_from_stock": 32.93, - "demand_met_from_stock_cumul": 153.79000000000002, - "fill_rate": 0.9434969325153375 + "demand_cumul": { + "-5": 163.0 + }, + "demand_met_from_stock": { + "-5": 32.93 + }, + "demand_met_from_stock_cumul": { + "-5": 153.79000000000002 + }, + "fill_rate": { + "-5": 0.9434969325153375 + } }, { "node": 5, "period": 5, "inbound_shipment_pipeline": { - "null": [ - 0, - 26.0 - ] + "null": { + "-6": [ + 0, + 26.0 + ] + } }, "inbound_shipment": { - "null": 38.0 + "null": { + "-6": 38.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 26.0 + "4": { + "-5": 26.0 + } }, "outbound_shipment": { - "4": 31.07 + "4": { + "-5": 31.07 + } }, "on_order_by_predecessor": { - "null": 26.0 + "null": { + "-6": 26.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 26.0 + "null": { + "-6": 26.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 6.93 }, - "inventory_level": 6.93, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, - "demand_cumul": 189.0, - "demand_met_from_stock": 26.0, - "demand_met_from_stock_cumul": 179.79000000000002, - "fill_rate": 0.9512698412698414 + "demand_cumul": { + "-5": 189.0 + }, + "demand_met_from_stock": { + "-5": 26.0 + }, + "demand_met_from_stock_cumul": { + "-5": 179.79000000000002 + }, + "fill_rate": { + "-5": 0.9512698412698414 + } }, { "node": 5, "period": 6, "inbound_shipment_pipeline": { - "null": [ - 0, - 29.000000000000014 - ] + "null": { + "-6": [ + 0, + 29.000000000000014 + ] + } }, "inbound_shipment": { - "null": 26.0 + "null": { + "-6": 26.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 29.000000000000014 + "4": { + "-5": 29.000000000000014 + } }, "outbound_shipment": { - "4": 29.000000000000014 + "4": { + "-5": 29.000000000000014 + } }, "on_order_by_predecessor": { - "null": 29.000000000000014 + "null": { + "-6": 29.000000000000014 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 29.000000000000014 + "null": { + "-6": 29.000000000000014 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 3.9299999999999855 }, - "inventory_level": 3.9299999999999855, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, - "demand_cumul": 218.0, - "demand_met_from_stock": 29.000000000000014, - "demand_met_from_stock_cumul": 208.79000000000002, - "fill_rate": 0.9577522935779818 + "demand_cumul": { + "-5": 218.0 + }, + "demand_met_from_stock": { + "-5": 29.000000000000014 + }, + "demand_met_from_stock_cumul": { + "-5": 208.79000000000002 + }, + "fill_rate": { + "-5": 0.9577522935779818 + } }, { "node": 5, "period": 7, "inbound_shipment_pipeline": { - "null": [ - 0, - 31.0 - ] + "null": { + "-6": [ + 0, + 31.0 + ] + } }, "inbound_shipment": { - "null": 29.000000000000014 + "null": { + "-6": 29.000000000000014 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 31.0 + "4": { + "-5": 31.0 + } }, "outbound_shipment": { - "4": 31.0 + "4": { + "-5": 31.0 + } }, "on_order_by_predecessor": { - "null": 31.0 + "null": { + "-6": 31.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 31.0 + "null": { + "-6": 31.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 1.9299999999999997 }, - "inventory_level": 1.9299999999999997, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 249.0, - "demand_met_from_stock": 31.0, - "demand_met_from_stock_cumul": 239.79000000000002, - "fill_rate": 0.9630120481927712 + "demand_cumul": { + "-5": 249.0 + }, + "demand_met_from_stock": { + "-5": 31.0 + }, + "demand_met_from_stock_cumul": { + "-5": 239.79000000000002 + }, + "fill_rate": { + "-5": 0.9630120481927712 + } }, { "node": 5, "period": 8, "inbound_shipment_pipeline": { - "null": [ - 0, - 34.0 - ] + "null": { + "-6": [ + 0, + 34.0 + ] + } }, "inbound_shipment": { - "null": 31.0 + "null": { + "-6": 31.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 34.0 + "4": { + "-5": 34.0 + } }, "outbound_shipment": { - "4": 32.93 + "4": { + "-5": 32.93 + } }, "on_order_by_predecessor": { - "null": 34.0 + "null": { + "-6": 34.0 + } }, "backorders_by_successor": { - "4": 1.0700000000000003 + "4": { + "-5": 1.0700000000000003 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 34.0 + "null": { + "-6": 34.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -1.0700000000000003 }, - "inventory_level": -1.0700000000000003, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 283.0, - "demand_met_from_stock": 32.93, - "demand_met_from_stock_cumul": 272.72, - "fill_rate": 0.9636749116607775 + "demand_cumul": { + "-5": 283.0 + }, + "demand_met_from_stock": { + "-5": 32.93 + }, + "demand_met_from_stock_cumul": { + "-5": 272.72 + }, + "fill_rate": { + "-5": 0.9636749116607775 + } }, { "node": 5, "period": 9, "inbound_shipment_pipeline": { - "null": [ - 0, - 27.999999999999986 - ] + "null": { + "-6": [ + 0, + 27.999999999999986 + ] + } }, "inbound_shipment": { - "null": 34.0 + "null": { + "-6": 34.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 27.999999999999986 + "4": { + "-5": 27.999999999999986 + } }, "outbound_shipment": { - "4": 29.069999999999986 + "4": { + "-5": 29.069999999999986 + } }, "on_order_by_predecessor": { - "null": 27.999999999999986 + "null": { + "-6": 27.999999999999986 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 27.999999999999986 + "null": { + "-6": 27.999999999999986 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 4.930000000000014 }, - "inventory_level": 4.930000000000014, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, - "demand_cumul": 311.0, - "demand_met_from_stock": 27.999999999999986, - "demand_met_from_stock_cumul": 300.72, - "fill_rate": 0.9669453376205789 + "demand_cumul": { + "-5": 311.0 + }, + "demand_met_from_stock": { + "-5": 27.999999999999986 + }, + "demand_met_from_stock_cumul": { + "-5": 300.72 + }, + "fill_rate": { + "-5": 0.9669453376205789 + } }, { "node": 5, "period": 10, "inbound_shipment_pipeline": { - "null": [ - 0, - 31.0 - ] + "null": { + "-6": [ + 0, + 31.0 + ] + } }, "inbound_shipment": { - "null": 27.999999999999986 + "null": { + "-6": 27.999999999999986 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 31.0 + "4": { + "-5": 31.0 + } }, "outbound_shipment": { - "4": 31.0 + "4": { + "-5": 31.0 + } }, "on_order_by_predecessor": { - "null": 31.0 + "null": { + "-6": 31.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 31.0 + "null": { + "-6": 31.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 1.9299999999999997 }, - "inventory_level": 1.9299999999999997, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 342.0, - "demand_met_from_stock": 31.0, - "demand_met_from_stock_cumul": 331.72, - "fill_rate": 0.9699415204678363 + "demand_cumul": { + "-5": 342.0 + }, + "demand_met_from_stock": { + "-5": 31.0 + }, + "demand_met_from_stock_cumul": { + "-5": 331.72 + }, + "fill_rate": { + "-5": 0.9699415204678363 + } }, { "node": 5, "period": 11, "inbound_shipment_pipeline": { - "null": [ - 0, - 26.0 - ] + "null": { + "-6": [ + 0, + 26.0 + ] + } }, "inbound_shipment": { - "null": 31.0 + "null": { + "-6": 31.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 26.0 + "4": { + "-5": 26.0 + } }, "outbound_shipment": { - "4": 26.0 + "4": { + "-5": 26.0 + } }, "on_order_by_predecessor": { - "null": 26.0 + "null": { + "-6": 26.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 26.0 + "null": { + "-6": 26.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 6.93 }, - "inventory_level": 6.93, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 368.0, - "demand_met_from_stock": 26.0, - "demand_met_from_stock_cumul": 357.72, - "fill_rate": 0.9720652173913045 + "demand_cumul": { + "-5": 368.0 + }, + "demand_met_from_stock": { + "-5": 26.0 + }, + "demand_met_from_stock_cumul": { + "-5": 357.72 + }, + "fill_rate": { + "-5": 0.9720652173913045 + } }, { "node": 5, "period": 12, "inbound_shipment_pipeline": { - "null": [ - 0, - 33.0 - ] + "null": { + "-6": [ + 0, + 33.0 + ] + } }, "inbound_shipment": { - "null": 26.0 + "null": { + "-6": 26.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 33.0 + "4": { + "-5": 33.0 + } }, "outbound_shipment": { - "4": 32.93 + "4": { + "-5": 32.93 + } }, "on_order_by_predecessor": { - "null": 33.0 + "null": { + "-6": 33.0 + } }, "backorders_by_successor": { - "4": 0.07000000000000028 + "4": { + "-5": 0.07000000000000028 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 33.0 + "null": { + "-6": 33.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -0.07000000000000028 }, - "inventory_level": -0.07000000000000028, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 401.0, - "demand_met_from_stock": 32.93, - "demand_met_from_stock_cumul": 390.65000000000003, - "fill_rate": 0.9741895261845387 + "demand_cumul": { + "-5": 401.0 + }, + "demand_met_from_stock": { + "-5": 32.93 + }, + "demand_met_from_stock_cumul": { + "-5": 390.65000000000003 + }, + "fill_rate": { + "-5": 0.9741895261845387 + } }, { "node": 5, "period": 13, "inbound_shipment_pipeline": { - "null": [ - 0, - 34.0 - ] + "null": { + "-6": [ + 0, + 34.0 + ] + } }, "inbound_shipment": { - "null": 33.0 + "null": { + "-6": 33.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 34.0 + "4": { + "-5": 34.0 + } }, "outbound_shipment": { - "4": 33.0 + "4": { + "-5": 33.0 + } }, "on_order_by_predecessor": { - "null": 34.0 + "null": { + "-6": 34.0 + } }, "backorders_by_successor": { - "4": 1.0700000000000003 + "4": { + "-5": 1.0700000000000003 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 34.0 + "null": { + "-6": 34.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -1.0700000000000003 }, - "inventory_level": -1.0700000000000003, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, - "demand_cumul": 435.0, - "demand_met_from_stock": 32.93, - "demand_met_from_stock_cumul": 423.58000000000004, - "fill_rate": 0.9737471264367817 + "demand_cumul": { + "-5": 435.0 + }, + "demand_met_from_stock": { + "-5": 32.93 + }, + "demand_met_from_stock_cumul": { + "-5": 423.58000000000004 + }, + "fill_rate": { + "-5": 0.9737471264367817 + } }, { "node": 5, "period": 14, "inbound_shipment_pipeline": { - "null": [ - 0, - 29.0 - ] + "null": { + "-6": [ + 0, + 29.0 + ] + } }, "inbound_shipment": { - "null": 34.0 + "null": { + "-6": 34.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 29.0 + "4": { + "-5": 29.0 + } }, "outbound_shipment": { - "4": 30.07 + "4": { + "-5": 30.07 + } }, "on_order_by_predecessor": { - "null": 29.0 + "null": { + "-6": 29.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 29.0 + "null": { + "-6": 29.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 3.9299999999999997 }, - "inventory_level": 3.9299999999999997, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, - "demand_cumul": 464.0, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 452.58000000000004, - "fill_rate": 0.9753879310344828 + "demand_cumul": { + "-5": 464.0 + }, + "demand_met_from_stock": { + "-5": 29.0 + }, + "demand_met_from_stock_cumul": { + "-5": 452.58000000000004 + }, + "fill_rate": { + "-5": 0.9753879310344828 + } }, { "node": 5, "period": 15, "inbound_shipment_pipeline": { - "null": [ - 0, - 35.0 - ] + "null": { + "-6": [ + 0, + 35.0 + ] + } }, "inbound_shipment": { - "null": 29.0 + "null": { + "-6": 29.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 35.0 + "4": { + "-5": 35.0 + } }, "outbound_shipment": { - "4": 32.93 + "4": { + "-5": 32.93 + } }, "on_order_by_predecessor": { - "null": 35.0 + "null": { + "-6": 35.0 + } }, "backorders_by_successor": { - "4": 2.0700000000000003 + "4": { + "-5": 2.0700000000000003 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 35.0 + "null": { + "-6": 35.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -2.0700000000000003 }, - "inventory_level": -2.0700000000000003, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 499.0, - "demand_met_from_stock": 32.93, - "demand_met_from_stock_cumul": 485.51000000000005, - "fill_rate": 0.9729659318637276 + "demand_cumul": { + "-5": 499.0 + }, + "demand_met_from_stock": { + "-5": 32.93 + }, + "demand_met_from_stock_cumul": { + "-5": 485.51000000000005 + }, + "fill_rate": { + "-5": 0.9729659318637276 + } }, { "node": 5, "period": 16, "inbound_shipment_pipeline": { - "null": [ - 0, - 24.000000000000007 - ] + "null": { + "-6": [ + 0, + 24.000000000000007 + ] + } }, "inbound_shipment": { - "null": 35.0 + "null": { + "-6": 35.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 24.000000000000007 + "4": { + "-5": 24.000000000000007 + } }, "outbound_shipment": { - "4": 26.070000000000007 + "4": { + "-5": 26.070000000000007 + } }, "on_order_by_predecessor": { - "null": 24.000000000000007 + "null": { + "-6": 24.000000000000007 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 24.000000000000007 + "null": { + "-6": 24.000000000000007 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 8.929999999999993 }, - "inventory_level": 8.929999999999993, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, - "demand_cumul": 523.0, - "demand_met_from_stock": 24.000000000000007, - "demand_met_from_stock_cumul": 509.51000000000005, - "fill_rate": 0.974206500956023 + "demand_cumul": { + "-5": 523.0 + }, + "demand_met_from_stock": { + "-5": 24.000000000000007 + }, + "demand_met_from_stock_cumul": { + "-5": 509.51000000000005 + }, + "fill_rate": { + "-5": 0.974206500956023 + } }, { "node": 5, "period": 17, "inbound_shipment_pipeline": { - "null": [ - 0, - 28.0 - ] + "null": { + "-6": [ + 0, + 28.0 + ] + } }, "inbound_shipment": { - "null": 24.000000000000007 + "null": { + "-6": 24.000000000000007 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 28.0 + "4": { + "-5": 28.0 + } }, "outbound_shipment": { - "4": 28.0 + "4": { + "-5": 28.0 + } }, "on_order_by_predecessor": { - "null": 28.0 + "null": { + "-6": 28.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 28.0 + "null": { + "-6": 28.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 4.93 }, - "inventory_level": 4.93, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 551.0, - "demand_met_from_stock": 28.0, - "demand_met_from_stock_cumul": 537.51, - "fill_rate": 0.9755172413793103 + "demand_cumul": { + "-5": 551.0 + }, + "demand_met_from_stock": { + "-5": 28.0 + }, + "demand_met_from_stock_cumul": { + "-5": 537.51 + }, + "fill_rate": { + "-5": 0.9755172413793103 + } }, { "node": 5, "period": 18, "inbound_shipment_pipeline": { - "null": [ - 0, - 29.0 - ] + "null": { + "-6": [ + 0, + 29.0 + ] + } }, "inbound_shipment": { - "null": 28.0 + "null": { + "-6": 28.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 29.0 + "4": { + "-5": 29.0 + } }, "outbound_shipment": { - "4": 29.0 + "4": { + "-5": 29.0 + } }, "on_order_by_predecessor": { - "null": 29.0 + "null": { + "-6": 29.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 29.0 + "null": { + "-6": 29.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 3.9299999999999997 }, - "inventory_level": 3.9299999999999997, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 580.0, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 566.51, - "fill_rate": 0.9767413793103448 + "demand_cumul": { + "-5": 580.0 + }, + "demand_met_from_stock": { + "-5": 29.0 + }, + "demand_met_from_stock_cumul": { + "-5": 566.51 + }, + "fill_rate": { + "-5": 0.9767413793103448 + } }, { "node": 5, "period": 19, "inbound_shipment_pipeline": { - "null": [ - 0, - 33.0 - ] + "null": { + "-6": [ + 0, + 33.0 + ] + } }, "inbound_shipment": { - "null": 29.0 + "null": { + "-6": 29.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 33.0 + "4": { + "-5": 33.0 + } }, "outbound_shipment": { - "4": 32.93 + "4": { + "-5": 32.93 + } }, "on_order_by_predecessor": { - "null": 33.0 + "null": { + "-6": 33.0 + } }, "backorders_by_successor": { - "4": 0.07000000000000028 + "4": { + "-5": 0.07000000000000028 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 33.0 + "null": { + "-6": 33.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -0.07000000000000028 }, - "inventory_level": -0.07000000000000028, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 613.0, - "demand_met_from_stock": 32.93, - "demand_met_from_stock_cumul": 599.4399999999999, - "fill_rate": 0.977879282218597 + "demand_cumul": { + "-5": 613.0 + }, + "demand_met_from_stock": { + "-5": 32.93 + }, + "demand_met_from_stock_cumul": { + "-5": 599.4399999999999 + }, + "fill_rate": { + "-5": 0.977879282218597 + } }, { "node": 5, "period": 20, "inbound_shipment_pipeline": { - "null": [ - 0, - 43.0 - ] + "null": { + "-6": [ + 0, + 43.0 + ] + } }, "inbound_shipment": { - "null": 33.0 + "null": { + "-6": 33.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 43.0 + "4": { + "-5": 43.0 + } }, "outbound_shipment": { - "4": 33.0 + "4": { + "-5": 33.0 + } }, "on_order_by_predecessor": { - "null": 43.0 + "null": { + "-6": 43.0 + } }, "backorders_by_successor": { - "4": 10.07 + "4": { + "-5": 10.07 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 43.0 + "null": { + "-6": 43.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -10.07 }, - "inventory_level": -10.07, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, - "demand_cumul": 656.0, - "demand_met_from_stock": 32.93, - "demand_met_from_stock_cumul": 632.3699999999999, - "fill_rate": 0.9639786585365852 + "demand_cumul": { + "-5": 656.0 + }, + "demand_met_from_stock": { + "-5": 32.93 + }, + "demand_met_from_stock_cumul": { + "-5": 632.3699999999999 + }, + "fill_rate": { + "-5": 0.9639786585365852 + } }, { "node": 5, "period": 21, "inbound_shipment_pipeline": { - "null": [ - 0, - 22.999999999999993 - ] + "null": { + "-6": [ + 0, + 22.999999999999993 + ] + } }, "inbound_shipment": { - "null": 43.0 + "null": { + "-6": 43.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 22.999999999999993 + "4": { + "-5": 22.999999999999993 + } }, "outbound_shipment": { - "4": 33.06999999999999 + "4": { + "-5": 33.06999999999999 + } }, "on_order_by_predecessor": { - "null": 23.0 + "null": { + "-6": 23.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 22.999999999999993 + "null": { + "-6": 22.999999999999993 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 9.930000000000007 }, - "inventory_level": 9.930000000000007, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, - "demand_cumul": 679.0, - "demand_met_from_stock": 22.999999999999993, - "demand_met_from_stock_cumul": 655.3699999999999, - "fill_rate": 0.9651988217967598 + "demand_cumul": { + "-5": 679.0 + }, + "demand_met_from_stock": { + "-5": 22.999999999999993 + }, + "demand_met_from_stock_cumul": { + "-5": 655.3699999999999 + }, + "fill_rate": { + "-5": 0.9651988217967598 + } }, { "node": 5, "period": 22, "inbound_shipment_pipeline": { - "null": [ - 0, - 18.99999999999998 - ] + "null": { + "-6": [ + 0, + 18.99999999999998 + ] + } }, "inbound_shipment": { - "null": 22.999999999999993 + "null": { + "-6": 22.999999999999993 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 18.999999999999986 + "4": { + "-5": 18.999999999999986 + } }, "outbound_shipment": { - "4": 18.999999999999986 + "4": { + "-5": 18.999999999999986 + } }, "on_order_by_predecessor": { - "null": 18.999999999999986 + "null": { + "-6": 18.999999999999986 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 18.99999999999998 + "null": { + "-6": 18.99999999999998 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 13.930000000000014 }, - "inventory_level": 13.930000000000014, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, - "demand_cumul": 698.0, - "demand_met_from_stock": 18.999999999999986, - "demand_met_from_stock_cumul": 674.3699999999999, - "fill_rate": 0.9661461318051574 + "demand_cumul": { + "-5": 698.0 + }, + "demand_met_from_stock": { + "-5": 18.999999999999986 + }, + "demand_met_from_stock_cumul": { + "-5": 674.3699999999999 + }, + "fill_rate": { + "-5": 0.9661461318051574 + } }, { "node": 5, "period": 23, "inbound_shipment_pipeline": { - "null": [ - 0, - 30.0 - ] + "null": { + "-6": [ + 0, + 30.0 + ] + } }, "inbound_shipment": { - "null": 18.99999999999998 + "null": { + "-6": 18.99999999999998 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 30.0 + "4": { + "-5": 30.0 + } }, "outbound_shipment": { - "4": 30.0 + "4": { + "-5": 30.0 + } }, "on_order_by_predecessor": { - "null": 30.000000000000007 + "null": { + "-6": 30.000000000000007 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 30.0 + "null": { + "-6": 30.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 2.9299999999999926 }, - "inventory_level": 2.9299999999999926, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, - "demand_cumul": 728.0, - "demand_met_from_stock": 30.0, - "demand_met_from_stock_cumul": 704.3699999999999, - "fill_rate": 0.9675412087912086 + "demand_cumul": { + "-5": 728.0 + }, + "demand_met_from_stock": { + "-5": 30.0 + }, + "demand_met_from_stock_cumul": { + "-5": 704.3699999999999 + }, + "fill_rate": { + "-5": 0.9675412087912086 + } }, { "node": 5, "period": 24, "inbound_shipment_pipeline": { - "null": [ - 0, - 38.0 - ] + "null": { + "-6": [ + 0, + 38.0 + ] + } }, "inbound_shipment": { - "null": 30.0 + "null": { + "-6": 30.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 38.0 + "4": { + "-5": 38.0 + } }, "outbound_shipment": { - "4": 32.92999999999999 + "4": { + "-5": 32.92999999999999 + } }, "on_order_by_predecessor": { - "null": 38.0 + "null": { + "-6": 38.0 + } }, "backorders_by_successor": { - "4": 5.070000000000007 + "4": { + "-5": 5.070000000000007 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 38.0 + "null": { + "-6": 38.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -5.070000000000007 }, - "inventory_level": -5.070000000000007, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, - "demand_cumul": 766.0, - "demand_met_from_stock": 32.92999999999999, - "demand_met_from_stock_cumul": 737.2999999999998, - "fill_rate": 0.9625326370757178 + "demand_cumul": { + "-5": 766.0 + }, + "demand_met_from_stock": { + "-5": 32.92999999999999 + }, + "demand_met_from_stock_cumul": { + "-5": 737.2999999999998 + }, + "fill_rate": { + "-5": 0.9625326370757178 + } }, { "node": 5, "period": 25, "inbound_shipment_pipeline": { - "null": [ - 38.0, - 0 - ] + "null": { + "-6": [ + 38.0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-5": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-5": 0 + } }, "on_order_by_predecessor": { - "null": 38.0 + "null": { + "-6": 38.0 + } }, "backorders_by_successor": { - "4": 5.070000000000007 + "4": { + "-5": 5.070000000000007 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-6": 0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": -5.070000000000007 }, - "inventory_level": -5.070000000000007, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 766.0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 737.2999999999998, - "fill_rate": 0 + "demand_cumul": { + "-5": 766.0 + }, + "demand_met_from_stock": { + "-5": 0 + }, + "demand_met_from_stock_cumul": { + "-5": 737.2999999999998 + }, + "fill_rate": { + "-5": 0 + } }, { "node": 5, "period": 26, "inbound_shipment_pipeline": { - "null": [ - 0, - 0 - ] + "null": { + "-6": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-5": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-5": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-6": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-5": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-6": 0 + } }, "raw_material_inventory": { - "null": 0 + "-6": 0 + }, + "inventory_level": { + "-5": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-5": 0 + }, + "demand_met_from_stock": { + "-5": 0 + }, + "demand_met_from_stock_cumul": { + "-5": 0 + }, + "fill_rate": { + "-5": 0 + } }, { "node": 5, "period": 27, "inbound_shipment_pipeline": { - "null": [ - 0, - 0 - ] + "null": { + "-6": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-5": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-5": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-6": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-5": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-6": 0 + } }, "raw_material_inventory": { - "null": 0 + "-6": 0 + }, + "inventory_level": { + "-5": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-5": 0 + }, + "demand_met_from_stock": { + "-5": 0 + }, + "demand_met_from_stock_cumul": { + "-5": 0 + }, + "fill_rate": { + "-5": 0 + } } ] }, { - "index": 4, + "_index": 4, "name": null, "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [ 5 ], @@ -1581,6 +2434,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -1589,13 +2444,13 @@ "_inventory_policy": { "type": "BS", "node": 4, + "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -1604,6 +2459,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -1620,1492 +2476,2337 @@ "node": 4, "period": 0, "inbound_shipment_pipeline": { - "5": [ - 0, - 30.0 - ] + "5": { + "-5": [ + 0, + 30.0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 30.0 + "3": { + "-4": 30.0 + } }, "outbound_shipment": { - "3": 30.0 + "3": { + "-4": 30.0 + } }, "on_order_by_predecessor": { - "5": 30.0 + "5": { + "-5": 30.0 + } }, "backorders_by_successor": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 30.0 + "5": { + "-5": 30.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 3.299999999999997 }, - "inventory_level": 3.299999999999997, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, - "demand_cumul": 30.0, - "demand_met_from_stock": 30.0, - "demand_met_from_stock_cumul": 30.0, - "fill_rate": 1.0 + "demand_cumul": { + "-4": 30.0 + }, + "demand_met_from_stock": { + "-4": 30.0 + }, + "demand_met_from_stock_cumul": { + "-4": 30.0 + }, + "fill_rate": { + "-4": 1.0 + } }, { "node": 4, "period": 1, "inbound_shipment_pipeline": { - "5": [ - 0, - 32.93 - ] + "5": { + "-5": [ + 0, + 32.93 + ] + } }, "inbound_shipment": { - "5": 30.0 + "5": { + "-5": 30.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 36.0 + "3": { + "-4": 36.0 + } }, "outbound_shipment": { - "3": 33.3 + "3": { + "-4": 33.3 + } }, "on_order_by_predecessor": { - "5": 36.0 + "5": { + "-5": 36.0 + } }, "backorders_by_successor": { - "3": 2.700000000000003 + "3": { + "-4": 2.700000000000003 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 36.0 + "5": { + "-5": 36.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": -2.700000000000003 }, - "inventory_level": -2.700000000000003, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, - "demand_cumul": 66.0, - "demand_met_from_stock": 33.3, - "demand_met_from_stock_cumul": 63.3, - "fill_rate": 0.959090909090909 + "demand_cumul": { + "-4": 66.0 + }, + "demand_met_from_stock": { + "-4": 33.3 + }, + "demand_met_from_stock_cumul": { + "-4": 63.3 + }, + "fill_rate": { + "-4": 0.959090909090909 + } }, { "node": 4, "period": 2, "inbound_shipment_pipeline": { - "5": [ - 0, - 28.07 - ] + "5": { + "-5": [ + 0, + 28.07 + ] + } }, "inbound_shipment": { - "5": 32.93 + "5": { + "-5": 32.93 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 25.0 + "3": { + "-4": 25.0 + } }, "outbound_shipment": { - "3": 27.700000000000003 + "3": { + "-4": 27.700000000000003 + } }, "on_order_by_predecessor": { - "5": 28.07 + "5": { + "-5": 28.07 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 25.0 + "5": { + "-5": 25.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 5.229999999999997 }, - "inventory_level": 5.229999999999997, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, - "demand_cumul": 91.0, - "demand_met_from_stock": 25.0, - "demand_met_from_stock_cumul": 88.3, - "fill_rate": 0.9703296703296703 + "demand_cumul": { + "-4": 91.0 + }, + "demand_met_from_stock": { + "-4": 25.0 + }, + "demand_met_from_stock_cumul": { + "-4": 88.3 + }, + "fill_rate": { + "-4": 0.9703296703296703 + } }, { "node": 4, "period": 3, "inbound_shipment_pipeline": { - "5": [ - 0, - 32.93 - ] + "5": { + "-5": [ + 0, + 32.93 + ] + } }, "inbound_shipment": { - "5": 28.07 + "5": { + "-5": 28.07 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 34.0 + "3": { + "-4": 34.0 + } }, "outbound_shipment": { - "3": 33.3 + "3": { + "-4": 33.3 + } }, "on_order_by_predecessor": { - "5": 34.0 + "5": { + "-5": 34.0 + } }, "backorders_by_successor": { - "3": 0.7000000000000028 + "3": { + "-4": 0.7000000000000028 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 34.0 + "5": { + "-5": 34.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": -0.7000000000000028 }, - "inventory_level": -0.7000000000000028, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, - "demand_cumul": 125.0, - "demand_met_from_stock": 33.3, - "demand_met_from_stock_cumul": 121.6, - "fill_rate": 0.9728 + "demand_cumul": { + "-4": 125.0 + }, + "demand_met_from_stock": { + "-4": 33.3 + }, + "demand_met_from_stock_cumul": { + "-4": 121.6 + }, + "fill_rate": { + "-4": 0.9728 + } }, { "node": 4, "period": 4, "inbound_shipment_pipeline": { - "5": [ - 0, - 34.0 - ] + "5": { + "-5": [ + 0, + 34.0 + ] + } }, "inbound_shipment": { - "5": 32.93 + "5": { + "-5": 32.93 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 38.0 + "3": { + "-4": 38.0 + } }, "outbound_shipment": { - "3": 32.93 + "3": { + "-4": 32.93 + } }, "on_order_by_predecessor": { - "5": 39.07 + "5": { + "-5": 39.07 + } }, "backorders_by_successor": { - "3": 5.770000000000003 + "3": { + "-4": 5.770000000000003 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 38.0 + "5": { + "-5": 38.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": -5.770000000000003 }, - "inventory_level": -5.770000000000003, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, - "demand_cumul": 163.0, - "demand_met_from_stock": 32.23, - "demand_met_from_stock_cumul": 153.82999999999998, - "fill_rate": 0.9437423312883435 + "demand_cumul": { + "-4": 163.0 + }, + "demand_met_from_stock": { + "-4": 32.23 + }, + "demand_met_from_stock_cumul": { + "-4": 153.82999999999998 + }, + "fill_rate": { + "-4": 0.9437423312883435 + } }, { "node": 4, "period": 5, "inbound_shipment_pipeline": { - "5": [ - 0, - 31.07 - ] + "5": { + "-5": [ + 0, + 31.07 + ] + } }, "inbound_shipment": { - "5": 34.0 + "5": { + "-5": 34.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 26.0 + "3": { + "-4": 26.0 + } }, "outbound_shipment": { - "3": 31.770000000000003 + "3": { + "-4": 31.770000000000003 + } }, "on_order_by_predecessor": { - "5": 31.069999999999993 + "5": { + "-5": 31.069999999999993 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 26.0 + "5": { + "-5": 26.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 2.229999999999997 }, - "inventory_level": 2.229999999999997, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, - "demand_cumul": 189.0, - "demand_met_from_stock": 26.0, - "demand_met_from_stock_cumul": 179.82999999999998, - "fill_rate": 0.9514814814814814 + "demand_cumul": { + "-4": 189.0 + }, + "demand_met_from_stock": { + "-4": 26.0 + }, + "demand_met_from_stock_cumul": { + "-4": 179.82999999999998 + }, + "fill_rate": { + "-4": 0.9514814814814814 + } }, { "node": 4, "period": 6, "inbound_shipment_pipeline": { - "5": [ - 0, - 29.000000000000014 - ] + "5": { + "-5": [ + 0, + 29.000000000000014 + ] + } }, "inbound_shipment": { - "5": 31.07 + "5": { + "-5": 31.07 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 29.000000000000007 + "3": { + "-4": 29.000000000000007 + } }, "outbound_shipment": { - "3": 29.000000000000007 + "3": { + "-4": 29.000000000000007 + } }, "on_order_by_predecessor": { - "5": 29.000000000000007 + "5": { + "-5": 29.000000000000007 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 29.000000000000014 + "5": { + "-5": 29.000000000000014 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 4.29999999999999 }, - "inventory_level": 4.29999999999999, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, - "demand_cumul": 218.0, - "demand_met_from_stock": 29.000000000000007, - "demand_met_from_stock_cumul": 208.82999999999998, - "fill_rate": 0.9579357798165137 + "demand_cumul": { + "-4": 218.0 + }, + "demand_met_from_stock": { + "-4": 29.000000000000007 + }, + "demand_met_from_stock_cumul": { + "-4": 208.82999999999998 + }, + "fill_rate": { + "-4": 0.9579357798165137 + } }, { "node": 4, "period": 7, "inbound_shipment_pipeline": { - "5": [ - 0, - 31.0 - ] + "5": { + "-5": [ + 0, + 31.0 + ] + } }, "inbound_shipment": { - "5": 29.000000000000014 + "5": { + "-5": 29.000000000000014 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 31.0 + "3": { + "-4": 31.0 + } }, "outbound_shipment": { - "3": 31.0 + "3": { + "-4": 31.0 + } }, "on_order_by_predecessor": { - "5": 30.999999999999993 + "5": { + "-5": 30.999999999999993 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 31.0 + "5": { + "-5": 31.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 2.3000000000000043 }, - "inventory_level": 2.3000000000000043, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, - "demand_cumul": 249.0, - "demand_met_from_stock": 31.0, - "demand_met_from_stock_cumul": 239.82999999999998, - "fill_rate": 0.9631726907630521 + "demand_cumul": { + "-4": 249.0 + }, + "demand_met_from_stock": { + "-4": 31.0 + }, + "demand_met_from_stock_cumul": { + "-4": 239.82999999999998 + }, + "fill_rate": { + "-4": 0.9631726907630521 + } }, { "node": 4, "period": 8, "inbound_shipment_pipeline": { - "5": [ - 0, - 32.93 - ] + "5": { + "-5": [ + 0, + 32.93 + ] + } }, "inbound_shipment": { - "5": 31.0 + "5": { + "-5": 31.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 34.0 + "3": { + "-4": 34.0 + } }, "outbound_shipment": { - "3": 33.300000000000004 + "3": { + "-4": 33.300000000000004 + } }, "on_order_by_predecessor": { - "5": 34.0 + "5": { + "-5": 34.0 + } }, "backorders_by_successor": { - "3": 0.6999999999999957 + "3": { + "-4": 0.6999999999999957 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 34.0 + "5": { + "-5": 34.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": -0.6999999999999957 }, - "inventory_level": -0.6999999999999957, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, - "demand_cumul": 283.0, - "demand_met_from_stock": 33.300000000000004, - "demand_met_from_stock_cumul": 273.13, - "fill_rate": 0.9651236749116607 + "demand_cumul": { + "-4": 283.0 + }, + "demand_met_from_stock": { + "-4": 33.300000000000004 + }, + "demand_met_from_stock_cumul": { + "-4": 273.13 + }, + "fill_rate": { + "-4": 0.9651236749116607 + } }, { "node": 4, "period": 9, "inbound_shipment_pipeline": { - "5": [ - 0, - 29.069999999999986 - ] + "5": { + "-5": [ + 0, + 29.069999999999986 + ] + } }, "inbound_shipment": { - "5": 32.93 + "5": { + "-5": 32.93 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 27.999999999999993 + "3": { + "-4": 27.999999999999993 + } }, "outbound_shipment": { - "3": 28.69999999999999 + "3": { + "-4": 28.69999999999999 + } }, "on_order_by_predecessor": { - "5": 29.069999999999986 + "5": { + "-5": 29.069999999999986 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 27.999999999999986 + "5": { + "-5": 27.999999999999986 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 4.230000000000011 }, - "inventory_level": 4.230000000000011, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, - "demand_cumul": 311.0, - "demand_met_from_stock": 27.999999999999993, - "demand_met_from_stock_cumul": 301.13, - "fill_rate": 0.9682636655948553 + "demand_cumul": { + "-4": 311.0 + }, + "demand_met_from_stock": { + "-4": 27.999999999999993 + }, + "demand_met_from_stock_cumul": { + "-4": 301.13 + }, + "fill_rate": { + "-4": 0.9682636655948553 + } }, { "node": 4, "period": 10, "inbound_shipment_pipeline": { - "5": [ - 0, - 31.0 - ] + "5": { + "-5": [ + 0, + 31.0 + ] + } }, "inbound_shipment": { - "5": 29.069999999999986 + "5": { + "-5": 29.069999999999986 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 31.0 + "3": { + "-4": 31.0 + } }, "outbound_shipment": { - "3": 31.0 + "3": { + "-4": 31.0 + } }, "on_order_by_predecessor": { - "5": 31.0 + "5": { + "-5": 31.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 31.0 + "5": { + "-5": 31.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 2.299999999999997 }, - "inventory_level": 2.299999999999997, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, - "demand_cumul": 342.0, - "demand_met_from_stock": 31.0, - "demand_met_from_stock_cumul": 332.13, - "fill_rate": 0.971140350877193 + "demand_cumul": { + "-4": 342.0 + }, + "demand_met_from_stock": { + "-4": 31.0 + }, + "demand_met_from_stock_cumul": { + "-4": 332.13 + }, + "fill_rate": { + "-4": 0.971140350877193 + } }, { "node": 4, "period": 11, "inbound_shipment_pipeline": { - "5": [ - 0, - 26.0 - ] + "5": { + "-5": [ + 0, + 26.0 + ] + } }, "inbound_shipment": { - "5": 31.0 + "5": { + "-5": 31.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 26.0 + "3": { + "-4": 26.0 + } }, "outbound_shipment": { - "3": 26.0 + "3": { + "-4": 26.0 + } }, "on_order_by_predecessor": { - "5": 26.0 + "5": { + "-5": 26.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 26.0 + "5": { + "-5": 26.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 7.299999999999997 }, - "inventory_level": 7.299999999999997, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, - "demand_cumul": 368.0, - "demand_met_from_stock": 26.0, - "demand_met_from_stock_cumul": 358.13, - "fill_rate": 0.973179347826087 + "demand_cumul": { + "-4": 368.0 + }, + "demand_met_from_stock": { + "-4": 26.0 + }, + "demand_met_from_stock_cumul": { + "-4": 358.13 + }, + "fill_rate": { + "-4": 0.973179347826087 + } }, { "node": 4, "period": 12, "inbound_shipment_pipeline": { - "5": [ - 0, - 32.93 - ] + "5": { + "-5": [ + 0, + 32.93 + ] + } }, "inbound_shipment": { - "5": 26.0 + "5": { + "-5": 26.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 33.0 + "3": { + "-4": 33.0 + } }, "outbound_shipment": { - "3": 33.0 + "3": { + "-4": 33.0 + } }, "on_order_by_predecessor": { - "5": 33.0 + "5": { + "-5": 33.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 33.0 + "5": { + "-5": 33.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 0.29999999999999716 }, - "inventory_level": 0.29999999999999716, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, - "demand_cumul": 401.0, - "demand_met_from_stock": 33.0, - "demand_met_from_stock_cumul": 391.13, - "fill_rate": 0.9753865336658354 + "demand_cumul": { + "-4": 401.0 + }, + "demand_met_from_stock": { + "-4": 33.0 + }, + "demand_met_from_stock_cumul": { + "-4": 391.13 + }, + "fill_rate": { + "-4": 0.9753865336658354 + } }, { "node": 4, "period": 13, "inbound_shipment_pipeline": { - "5": [ - 0, - 33.0 - ] + "5": { + "-5": [ + 0, + 33.0 + ] + } }, "inbound_shipment": { - "5": 32.93 + "5": { + "-5": 32.93 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 34.0 + "3": { + "-4": 34.0 + } }, "outbound_shipment": { - "3": 33.23 + "3": { + "-4": 33.23 + } }, "on_order_by_predecessor": { - "5": 34.07 + "5": { + "-5": 34.07 + } }, "backorders_by_successor": { - "3": 0.7700000000000031 + "3": { + "-4": 0.7700000000000031 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 34.0 + "5": { + "-5": 34.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": -0.7700000000000031 }, - "inventory_level": -0.7700000000000031, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, - "demand_cumul": 435.0, - "demand_met_from_stock": 33.23, - "demand_met_from_stock_cumul": 424.36, - "fill_rate": 0.9755402298850575 + "demand_cumul": { + "-4": 435.0 + }, + "demand_met_from_stock": { + "-4": 33.23 + }, + "demand_met_from_stock_cumul": { + "-4": 424.36 + }, + "fill_rate": { + "-4": 0.9755402298850575 + } }, { "node": 4, "period": 14, "inbound_shipment_pipeline": { - "5": [ - 0, - 30.07 - ] + "5": { + "-5": [ + 0, + 30.07 + ] + } }, "inbound_shipment": { - "5": 33.0 + "5": { + "-5": 33.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 29.0 + "3": { + "-4": 29.0 + } }, "outbound_shipment": { - "3": 29.770000000000003 + "3": { + "-4": 29.770000000000003 + } }, "on_order_by_predecessor": { - "5": 30.07 + "5": { + "-5": 30.07 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 29.0 + "5": { + "-5": 29.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 3.229999999999997 }, - "inventory_level": 3.229999999999997, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, - "demand_cumul": 464.0, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 453.36, - "fill_rate": 0.9770689655172414 + "demand_cumul": { + "-4": 464.0 + }, + "demand_met_from_stock": { + "-4": 29.0 + }, + "demand_met_from_stock_cumul": { + "-4": 453.36 + }, + "fill_rate": { + "-4": 0.9770689655172414 + } }, { "node": 4, "period": 15, "inbound_shipment_pipeline": { - "5": [ - 0, - 32.93 - ] + "5": { + "-5": [ + 0, + 32.93 + ] + } }, "inbound_shipment": { - "5": 30.07 + "5": { + "-5": 30.07 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 35.0 + "3": { + "-4": 35.0 + } }, "outbound_shipment": { - "3": 33.3 + "3": { + "-4": 33.3 + } }, "on_order_by_predecessor": { - "5": 34.99999999999999 + "5": { + "-5": 34.99999999999999 + } }, "backorders_by_successor": { - "3": 1.7000000000000028 + "3": { + "-4": 1.7000000000000028 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 35.0 + "5": { + "-5": 35.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": -1.7000000000000028 }, - "inventory_level": -1.7000000000000028, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, - "demand_cumul": 499.0, - "demand_met_from_stock": 33.3, - "demand_met_from_stock_cumul": 486.66, - "fill_rate": 0.9752705410821644 + "demand_cumul": { + "-4": 499.0 + }, + "demand_met_from_stock": { + "-4": 33.3 + }, + "demand_met_from_stock_cumul": { + "-4": 486.66 + }, + "fill_rate": { + "-4": 0.9752705410821644 + } }, { "node": 4, "period": 16, "inbound_shipment_pipeline": { - "5": [ - 0, - 26.070000000000007 - ] + "5": { + "-5": [ + 0, + 26.070000000000007 + ] + } }, "inbound_shipment": { - "5": 32.93 + "5": { + "-5": 32.93 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 24.0 + "3": { + "-4": 24.0 + } }, "outbound_shipment": { - "3": 25.700000000000003 + "3": { + "-4": 25.700000000000003 + } }, "on_order_by_predecessor": { - "5": 26.07 + "5": { + "-5": 26.07 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 24.000000000000007 + "5": { + "-5": 24.000000000000007 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 7.229999999999997 }, - "inventory_level": 7.229999999999997, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, - "demand_cumul": 523.0, - "demand_met_from_stock": 24.0, - "demand_met_from_stock_cumul": 510.66, - "fill_rate": 0.9764053537284896 + "demand_cumul": { + "-4": 523.0 + }, + "demand_met_from_stock": { + "-4": 24.0 + }, + "demand_met_from_stock_cumul": { + "-4": 510.66 + }, + "fill_rate": { + "-4": 0.9764053537284896 + } }, { "node": 4, "period": 17, "inbound_shipment_pipeline": { - "5": [ - 0, - 28.0 - ] + "5": { + "-5": [ + 0, + 28.0 + ] + } }, "inbound_shipment": { - "5": 26.070000000000007 + "5": { + "-5": 26.070000000000007 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 28.0 + "3": { + "-4": 28.0 + } }, "outbound_shipment": { - "3": 28.0 + "3": { + "-4": 28.0 + } }, "on_order_by_predecessor": { - "5": 27.999999999999993 + "5": { + "-5": 27.999999999999993 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 28.0 + "5": { + "-5": 28.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 5.300000000000004 }, - "inventory_level": 5.300000000000004, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, - "demand_cumul": 551.0, - "demand_met_from_stock": 28.0, - "demand_met_from_stock_cumul": 538.6600000000001, - "fill_rate": 0.9776043557168785 + "demand_cumul": { + "-4": 551.0 + }, + "demand_met_from_stock": { + "-4": 28.0 + }, + "demand_met_from_stock_cumul": { + "-4": 538.6600000000001 + }, + "fill_rate": { + "-4": 0.9776043557168785 + } }, { "node": 4, "period": 18, "inbound_shipment_pipeline": { - "5": [ - 0, - 29.0 - ] + "5": { + "-5": [ + 0, + 29.0 + ] + } }, "inbound_shipment": { - "5": 28.0 + "5": { + "-5": 28.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 29.0 + "3": { + "-4": 29.0 + } }, "outbound_shipment": { - "3": 29.0 + "3": { + "-4": 29.0 + } }, "on_order_by_predecessor": { - "5": 28.999999999999993 + "5": { + "-5": 28.999999999999993 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 29.0 + "5": { + "-5": 29.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 4.300000000000004 }, - "inventory_level": 4.300000000000004, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, - "demand_cumul": 580.0, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 567.6600000000001, - "fill_rate": 0.9787241379310346 + "demand_cumul": { + "-4": 580.0 + }, + "demand_met_from_stock": { + "-4": 29.0 + }, + "demand_met_from_stock_cumul": { + "-4": 567.6600000000001 + }, + "fill_rate": { + "-4": 0.9787241379310346 + } }, { "node": 4, "period": 19, "inbound_shipment_pipeline": { - "5": [ - 0, - 32.93 - ] + "5": { + "-5": [ + 0, + 32.93 + ] + } }, "inbound_shipment": { - "5": 29.0 + "5": { + "-5": 29.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 33.0 + "3": { + "-4": 33.0 + } }, "outbound_shipment": { - "3": 33.0 + "3": { + "-4": 33.0 + } }, "on_order_by_predecessor": { - "5": 32.99999999999999 + "5": { + "-5": 32.99999999999999 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 33.0 + "5": { + "-5": 33.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 0.30000000000000426 }, - "inventory_level": 0.30000000000000426, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, - "demand_cumul": 613.0, - "demand_met_from_stock": 33.0, - "demand_met_from_stock_cumul": 600.6600000000001, - "fill_rate": 0.9798694942903753 + "demand_cumul": { + "-4": 613.0 + }, + "demand_met_from_stock": { + "-4": 33.0 + }, + "demand_met_from_stock_cumul": { + "-4": 600.6600000000001 + }, + "fill_rate": { + "-4": 0.9798694942903753 + } }, { "node": 4, "period": 20, "inbound_shipment_pipeline": { - "5": [ - 0, - 33.0 - ] + "5": { + "-5": [ + 0, + 33.0 + ] + } }, "inbound_shipment": { - "5": 32.93 + "5": { + "-5": 32.93 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 43.0 + "3": { + "-4": 43.0 + } }, "outbound_shipment": { - "3": 33.230000000000004 + "3": { + "-4": 33.230000000000004 + } }, "on_order_by_predecessor": { - "5": 43.07 + "5": { + "-5": 43.07 + } }, "backorders_by_successor": { - "3": 9.769999999999996 + "3": { + "-4": 9.769999999999996 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 43.0 + "5": { + "-5": 43.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": -9.769999999999996 }, - "inventory_level": -9.769999999999996, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, - "demand_cumul": 656.0, - "demand_met_from_stock": 33.230000000000004, - "demand_met_from_stock_cumul": 633.8900000000001, - "fill_rate": 0.9662957317073172 + "demand_cumul": { + "-4": 656.0 + }, + "demand_met_from_stock": { + "-4": 33.230000000000004 + }, + "demand_met_from_stock_cumul": { + "-4": 633.8900000000001 + }, + "fill_rate": { + "-4": 0.9662957317073172 + } }, { "node": 4, "period": 21, "inbound_shipment_pipeline": { - "5": [ - 0, - 33.06999999999999 - ] + "5": { + "-5": [ + 0, + 33.06999999999999 + ] + } }, "inbound_shipment": { - "5": 33.0 + "5": { + "-5": 33.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 23.0 + "3": { + "-4": 23.0 + } }, "outbound_shipment": { - "3": 32.769999999999996 + "3": { + "-4": 32.769999999999996 + } }, "on_order_by_predecessor": { - "5": 33.06999999999999 + "5": { + "-5": 33.06999999999999 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 22.999999999999993 + "5": { + "-5": 22.999999999999993 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 0.23000000000000398 }, - "inventory_level": 0.23000000000000398, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, - "demand_cumul": 679.0, - "demand_met_from_stock": 23.0, - "demand_met_from_stock_cumul": 656.8900000000001, - "fill_rate": 0.967437407952872 + "demand_cumul": { + "-4": 679.0 + }, + "demand_met_from_stock": { + "-4": 23.0 + }, + "demand_met_from_stock_cumul": { + "-4": 656.8900000000001 + }, + "fill_rate": { + "-4": 0.967437407952872 + } }, { "node": 4, "period": 22, "inbound_shipment_pipeline": { - "5": [ - 0, - 18.999999999999986 - ] + "5": { + "-5": [ + 0, + 18.999999999999986 + ] + } }, "inbound_shipment": { - "5": 33.06999999999999 + "5": { + "-5": 33.06999999999999 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 18.999999999999986 + "3": { + "-4": 18.999999999999986 + } }, "outbound_shipment": { - "3": 18.999999999999986 + "3": { + "-4": 18.999999999999986 + } }, "on_order_by_predecessor": { - "5": 18.999999999999986 + "5": { + "-5": 18.999999999999986 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 18.999999999999986 + "5": { + "-5": 18.999999999999986 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 14.300000000000011 }, - "inventory_level": 14.300000000000011, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, - "demand_cumul": 698.0, - "demand_met_from_stock": 18.999999999999986, - "demand_met_from_stock_cumul": 675.8900000000001, - "fill_rate": 0.9683237822349572 + "demand_cumul": { + "-4": 698.0 + }, + "demand_met_from_stock": { + "-4": 18.999999999999986 + }, + "demand_met_from_stock_cumul": { + "-4": 675.8900000000001 + }, + "fill_rate": { + "-4": 0.9683237822349572 + } }, { "node": 4, "period": 23, "inbound_shipment_pipeline": { - "5": [ - 0, - 30.0 - ] + "5": { + "-5": [ + 0, + 30.0 + ] + } }, "inbound_shipment": { - "5": 18.999999999999986 + "5": { + "-5": 18.999999999999986 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 30.0 + "3": { + "-4": 30.0 + } }, "outbound_shipment": { - "3": 30.0 + "3": { + "-4": 30.0 + } }, "on_order_by_predecessor": { - "5": 30.0 + "5": { + "-5": 30.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 30.0 + "5": { + "-5": 30.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": 3.299999999999997 }, - "inventory_level": 3.299999999999997, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, - "demand_cumul": 728.0, - "demand_met_from_stock": 30.0, - "demand_met_from_stock_cumul": 705.8900000000001, - "fill_rate": 0.969629120879121 + "demand_cumul": { + "-4": 728.0 + }, + "demand_met_from_stock": { + "-4": 30.0 + }, + "demand_met_from_stock_cumul": { + "-4": 705.8900000000001 + }, + "fill_rate": { + "-4": 0.969629120879121 + } }, { "node": 4, "period": 24, "inbound_shipment_pipeline": { - "5": [ - 0, - 32.92999999999999 - ] + "5": { + "-5": [ + 0, + 32.92999999999999 + ] + } }, "inbound_shipment": { - "5": 30.0 + "5": { + "-5": 30.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 38.0 + "3": { + "-4": 38.0 + } }, "outbound_shipment": { - "3": 33.3 + "3": { + "-4": 33.3 + } }, "on_order_by_predecessor": { - "5": 38.0 + "5": { + "-5": 38.0 + } }, "backorders_by_successor": { - "3": 4.700000000000003 + "3": { + "-4": 4.700000000000003 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 38.0 + "5": { + "-5": 38.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": -4.700000000000003 }, - "inventory_level": -4.700000000000003, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, - "demand_cumul": 766.0, - "demand_met_from_stock": 33.3, - "demand_met_from_stock_cumul": 739.19, - "fill_rate": 0.9650000000000001 + "demand_cumul": { + "-4": 766.0 + }, + "demand_met_from_stock": { + "-4": 33.3 + }, + "demand_met_from_stock_cumul": { + "-4": 739.19 + }, + "fill_rate": { + "-4": 0.9650000000000001 + } }, { "node": 4, "period": 25, "inbound_shipment_pipeline": { - "5": [ - 32.92999999999999, - 0 - ] + "5": { + "-5": [ + 32.92999999999999, + 0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_shipment": { - "3": 0 + "3": { + "-4": 0 + } }, "on_order_by_predecessor": { - "5": 38.0 + "5": { + "-5": 38.0 + } }, "backorders_by_successor": { - "3": 4.700000000000003 + "3": { + "-4": 4.700000000000003 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0 + "5": { + "-5": 0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-4": -4.700000000000003 }, - "inventory_level": -4.700000000000003, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 766.0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 739.19, - "fill_rate": 0 + "demand_cumul": { + "-4": 766.0 + }, + "demand_met_from_stock": { + "-4": 0 + }, + "demand_met_from_stock_cumul": { + "-4": 739.19 + }, + "fill_rate": { + "-4": 0 + } }, { "node": 4, "period": 26, "inbound_shipment_pipeline": { - "5": [ - 0, - 0 - ] + "5": { + "-5": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_shipment": { - "3": 0 + "3": { + "-4": 0 + } }, "on_order_by_predecessor": { - "5": 0 + "5": { + "-5": 0 + } }, "backorders_by_successor": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0 + "5": { + "-5": 0 + } }, "raw_material_inventory": { - "5": 0 + "-5": 0 + }, + "inventory_level": { + "-4": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-4": 0 + }, + "demand_met_from_stock": { + "-4": 0 + }, + "demand_met_from_stock_cumul": { + "-4": 0 + }, + "fill_rate": { + "-4": 0 + } }, { "node": 4, "period": 27, "inbound_shipment_pipeline": { - "5": [ - 0, - 0 - ] + "5": { + "-5": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_shipment": { - "3": 0 + "3": { + "-4": 0 + } }, "on_order_by_predecessor": { - "5": 0 + "5": { + "-5": 0 + } }, "backorders_by_successor": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0 + "5": { + "-5": 0 + } }, "raw_material_inventory": { - "5": 0 + "-5": 0 + }, + "inventory_level": { + "-4": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-4": 0 + }, + "demand_met_from_stock": { + "-4": 0 + }, + "demand_met_from_stock_cumul": { + "-4": 0 + }, + "fill_rate": { + "-4": 0 + } } ] }, { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ 4 ], @@ -3129,6 +4830,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -3137,13 +4840,13 @@ "_inventory_policy": { "type": "BS", "node": 3, + "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -3152,6 +4855,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -3168,1492 +4872,2337 @@ "node": 3, "period": 0, "inbound_shipment_pipeline": { - "4": [ - 0, - 30.0 - ] + "4": { + "-4": [ + 0, + 30.0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 30.0 + "2": { + "-3": 30.0 + } }, "outbound_shipment": { - "2": 30.0 + "2": { + "-3": 30.0 + } }, "on_order_by_predecessor": { - "4": 30.0 + "4": { + "-4": 30.0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-3": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 30.0 + "4": { + "-4": 30.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 5.140000000000001 }, - "inventory_level": 5.140000000000001, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 30.0, - "demand_met_from_stock": 30.0, - "demand_met_from_stock_cumul": 30.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 30.0 + }, + "demand_met_from_stock": { + "-3": 30.0 + }, + "demand_met_from_stock_cumul": { + "-3": 30.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 1, "inbound_shipment_pipeline": { - "4": [ - 0, - 33.3 - ] + "4": { + "-4": [ + 0, + 33.3 + ] + } }, "inbound_shipment": { - "4": 30.0 + "4": { + "-4": 30.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 36.0 + "2": { + "-3": 36.0 + } }, "outbound_shipment": { - "2": 35.14 + "2": { + "-3": 35.14 + } }, "on_order_by_predecessor": { - "4": 36.0 + "4": { + "-4": 36.0 + } }, "backorders_by_successor": { - "2": 0.8599999999999994 + "2": { + "-3": 0.8599999999999994 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 36.0 + "4": { + "-4": 36.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": -0.8599999999999994 }, - "inventory_level": -0.8599999999999994, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 66.0, - "demand_met_from_stock": 35.14, - "demand_met_from_stock_cumul": 65.14, - "fill_rate": 0.9869696969696969 + "demand_cumul": { + "-3": 66.0 + }, + "demand_met_from_stock": { + "-3": 35.14 + }, + "demand_met_from_stock_cumul": { + "-3": 65.14 + }, + "fill_rate": { + "-3": 0.9869696969696969 + } }, { "node": 3, "period": 2, "inbound_shipment_pipeline": { - "4": [ - 0, - 27.700000000000003 - ] + "4": { + "-4": [ + 0, + 27.700000000000003 + ] + } }, "inbound_shipment": { - "4": 33.3 + "4": { + "-4": 33.3 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 25.0 + "2": { + "-3": 25.0 + } }, "outbound_shipment": { - "2": 25.86 + "2": { + "-3": 25.86 + } }, "on_order_by_predecessor": { - "4": 27.700000000000003 + "4": { + "-4": 27.700000000000003 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 25.0 + "4": { + "-4": 25.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 7.439999999999998 }, - "inventory_level": 7.439999999999998, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, - "demand_cumul": 91.0, - "demand_met_from_stock": 25.0, - "demand_met_from_stock_cumul": 90.14, - "fill_rate": 0.9905494505494505 + "demand_cumul": { + "-3": 91.0 + }, + "demand_met_from_stock": { + "-3": 25.0 + }, + "demand_met_from_stock_cumul": { + "-3": 90.14 + }, + "fill_rate": { + "-3": 0.9905494505494505 + } }, { "node": 3, "period": 3, "inbound_shipment_pipeline": { - "4": [ - 0, - 33.3 - ] + "4": { + "-4": [ + 0, + 33.3 + ] + } }, "inbound_shipment": { - "4": 27.700000000000003 + "4": { + "-4": 27.700000000000003 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 34.0 + "2": { + "-3": 34.0 + } }, "outbound_shipment": { - "2": 34.0 + "2": { + "-3": 34.0 + } }, "on_order_by_predecessor": { - "4": 34.0 + "4": { + "-4": 34.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 34.0 + "4": { + "-4": 34.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 1.1400000000000006 }, - "inventory_level": 1.1400000000000006, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 125.0, - "demand_met_from_stock": 34.0, - "demand_met_from_stock_cumul": 124.14, - "fill_rate": 0.99312 + "demand_cumul": { + "-3": 125.0 + }, + "demand_met_from_stock": { + "-3": 34.0 + }, + "demand_met_from_stock_cumul": { + "-3": 124.14 + }, + "fill_rate": { + "-3": 0.99312 + } }, { "node": 3, "period": 4, "inbound_shipment_pipeline": { - "4": [ - 0, - 32.93 - ] + "4": { + "-4": [ + 0, + 32.93 + ] + } }, "inbound_shipment": { - "4": 33.3 + "4": { + "-4": 33.3 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 38.0 + "2": { + "-3": 38.0 + } }, "outbound_shipment": { - "2": 34.44 + "2": { + "-3": 34.44 + } }, "on_order_by_predecessor": { - "4": 38.7 + "4": { + "-4": 38.7 + } }, "backorders_by_successor": { - "2": 3.5600000000000023 + "2": { + "-3": 3.5600000000000023 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 38.0 + "4": { + "-4": 38.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": -3.5600000000000023 }, - "inventory_level": -3.5600000000000023, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, - "demand_cumul": 163.0, - "demand_met_from_stock": 34.44, - "demand_met_from_stock_cumul": 158.57999999999998, - "fill_rate": 0.972883435582822 + "demand_cumul": { + "-3": 163.0 + }, + "demand_met_from_stock": { + "-3": 34.44 + }, + "demand_met_from_stock_cumul": { + "-3": 158.57999999999998 + }, + "fill_rate": { + "-3": 0.972883435582822 + } }, { "node": 3, "period": 5, "inbound_shipment_pipeline": { - "4": [ - 0, - 31.770000000000003 - ] + "4": { + "-4": [ + 0, + 31.770000000000003 + ] + } }, "inbound_shipment": { - "4": 32.93 + "4": { + "-4": 32.93 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 26.0 + "2": { + "-3": 26.0 + } }, "outbound_shipment": { - "2": 29.560000000000002 + "2": { + "-3": 29.560000000000002 + } }, "on_order_by_predecessor": { - "4": 31.770000000000003 + "4": { + "-4": 31.770000000000003 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 26.0 + "4": { + "-4": 26.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 3.3699999999999974 }, - "inventory_level": 3.3699999999999974, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, - "demand_cumul": 189.0, - "demand_met_from_stock": 26.0, - "demand_met_from_stock_cumul": 184.57999999999998, - "fill_rate": 0.9766137566137565 - }, - { + "demand_cumul": { + "-3": 189.0 + }, + "demand_met_from_stock": { + "-3": 26.0 + }, + "demand_met_from_stock_cumul": { + "-3": 184.57999999999998 + }, + "fill_rate": { + "-3": 0.9766137566137565 + } + }, + { "node": 3, "period": 6, "inbound_shipment_pipeline": { - "4": [ - 0, - 29.000000000000007 - ] + "4": { + "-4": [ + 0, + 29.000000000000007 + ] + } }, "inbound_shipment": { - "4": 31.770000000000003 + "4": { + "-4": 31.770000000000003 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 29.000000000000007 + "2": { + "-3": 29.000000000000007 + } }, "outbound_shipment": { - "2": 29.000000000000007 + "2": { + "-3": 29.000000000000007 + } }, "on_order_by_predecessor": { - "4": 29.000000000000007 + "4": { + "-4": 29.000000000000007 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 29.000000000000007 + "4": { + "-4": 29.000000000000007 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 6.1399999999999935 }, - "inventory_level": 6.1399999999999935, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, - "demand_cumul": 218.0, - "demand_met_from_stock": 29.000000000000007, - "demand_met_from_stock_cumul": 213.57999999999998, - "fill_rate": 0.9797247706422018 + "demand_cumul": { + "-3": 218.0 + }, + "demand_met_from_stock": { + "-3": 29.000000000000007 + }, + "demand_met_from_stock_cumul": { + "-3": 213.57999999999998 + }, + "fill_rate": { + "-3": 0.9797247706422018 + } }, { "node": 3, "period": 7, "inbound_shipment_pipeline": { - "4": [ - 0, - 31.0 - ] + "4": { + "-4": [ + 0, + 31.0 + ] + } }, "inbound_shipment": { - "4": 29.000000000000007 + "4": { + "-4": 29.000000000000007 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 31.0 + "2": { + "-3": 31.0 + } }, "outbound_shipment": { - "2": 31.0 + "2": { + "-3": 31.0 + } }, "on_order_by_predecessor": { - "4": 31.0 + "4": { + "-4": 31.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 31.0 + "4": { + "-4": 31.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 4.140000000000001 }, - "inventory_level": 4.140000000000001, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 249.0, - "demand_met_from_stock": 31.0, - "demand_met_from_stock_cumul": 244.57999999999998, - "fill_rate": 0.9822489959839357 + "demand_cumul": { + "-3": 249.0 + }, + "demand_met_from_stock": { + "-3": 31.0 + }, + "demand_met_from_stock_cumul": { + "-3": 244.57999999999998 + }, + "fill_rate": { + "-3": 0.9822489959839357 + } }, { "node": 3, "period": 8, "inbound_shipment_pipeline": { - "4": [ - 0, - 33.300000000000004 - ] + "4": { + "-4": [ + 0, + 33.300000000000004 + ] + } }, "inbound_shipment": { - "4": 31.0 + "4": { + "-4": 31.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 34.0 + "2": { + "-3": 34.0 + } }, "outbound_shipment": { - "2": 34.0 + "2": { + "-3": 34.0 + } }, "on_order_by_predecessor": { - "4": 34.0 + "4": { + "-4": 34.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 34.0 + "4": { + "-4": 34.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 1.1400000000000006 }, - "inventory_level": 1.1400000000000006, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 283.0, - "demand_met_from_stock": 34.0, - "demand_met_from_stock_cumul": 278.58, - "fill_rate": 0.984381625441696 + "demand_cumul": { + "-3": 283.0 + }, + "demand_met_from_stock": { + "-3": 34.0 + }, + "demand_met_from_stock_cumul": { + "-3": 278.58 + }, + "fill_rate": { + "-3": 0.984381625441696 + } }, { "node": 3, "period": 9, "inbound_shipment_pipeline": { - "4": [ - 0, - 28.69999999999999 - ] + "4": { + "-4": [ + 0, + 28.69999999999999 + ] + } }, "inbound_shipment": { - "4": 33.300000000000004 + "4": { + "-4": 33.300000000000004 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 27.999999999999993 + "2": { + "-3": 27.999999999999993 + } }, "outbound_shipment": { - "2": 27.999999999999993 + "2": { + "-3": 27.999999999999993 + } }, "on_order_by_predecessor": { - "4": 28.69999999999999 + "4": { + "-4": 28.69999999999999 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 27.999999999999993 + "4": { + "-4": 27.999999999999993 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 6.440000000000012 }, - "inventory_level": 6.440000000000012, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, - "demand_cumul": 311.0, - "demand_met_from_stock": 27.999999999999993, - "demand_met_from_stock_cumul": 306.58, - "fill_rate": 0.9857877813504823 + "demand_cumul": { + "-3": 311.0 + }, + "demand_met_from_stock": { + "-3": 27.999999999999993 + }, + "demand_met_from_stock_cumul": { + "-3": 306.58 + }, + "fill_rate": { + "-3": 0.9857877813504823 + } }, { "node": 3, "period": 10, "inbound_shipment_pipeline": { - "4": [ - 0, - 31.0 - ] + "4": { + "-4": [ + 0, + 31.0 + ] + } }, "inbound_shipment": { - "4": 28.69999999999999 + "4": { + "-4": 28.69999999999999 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 31.0 + "2": { + "-3": 31.0 + } }, "outbound_shipment": { - "2": 31.0 + "2": { + "-3": 31.0 + } }, "on_order_by_predecessor": { - "4": 31.0 + "4": { + "-4": 31.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 31.0 + "4": { + "-4": 31.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 4.140000000000001 }, - "inventory_level": 4.140000000000001, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 342.0, - "demand_met_from_stock": 31.0, - "demand_met_from_stock_cumul": 337.58, - "fill_rate": 0.9870760233918128 + "demand_cumul": { + "-3": 342.0 + }, + "demand_met_from_stock": { + "-3": 31.0 + }, + "demand_met_from_stock_cumul": { + "-3": 337.58 + }, + "fill_rate": { + "-3": 0.9870760233918128 + } }, { "node": 3, "period": 11, "inbound_shipment_pipeline": { - "4": [ - 0, - 26.0 - ] + "4": { + "-4": [ + 0, + 26.0 + ] + } }, "inbound_shipment": { - "4": 31.0 + "4": { + "-4": 31.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 26.0 + "2": { + "-3": 26.0 + } }, "outbound_shipment": { - "2": 26.0 + "2": { + "-3": 26.0 + } }, "on_order_by_predecessor": { - "4": 26.0 + "4": { + "-4": 26.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 26.0 + "4": { + "-4": 26.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 9.14 }, - "inventory_level": 9.14, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 368.0, - "demand_met_from_stock": 26.0, - "demand_met_from_stock_cumul": 363.58, - "fill_rate": 0.9879891304347825 + "demand_cumul": { + "-3": 368.0 + }, + "demand_met_from_stock": { + "-3": 26.0 + }, + "demand_met_from_stock_cumul": { + "-3": 363.58 + }, + "fill_rate": { + "-3": 0.9879891304347825 + } }, { "node": 3, "period": 12, "inbound_shipment_pipeline": { - "4": [ - 0, - 33.0 - ] + "4": { + "-4": [ + 0, + 33.0 + ] + } }, "inbound_shipment": { - "4": 26.0 + "4": { + "-4": 26.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 33.0 + "2": { + "-3": 33.0 + } }, "outbound_shipment": { - "2": 33.0 + "2": { + "-3": 33.0 + } }, "on_order_by_predecessor": { - "4": 33.0 + "4": { + "-4": 33.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 33.0 + "4": { + "-4": 33.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 2.1400000000000006 }, - "inventory_level": 2.1400000000000006, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 401.0, - "demand_met_from_stock": 33.0, - "demand_met_from_stock_cumul": 396.58, - "fill_rate": 0.9889775561097256 + "demand_cumul": { + "-3": 401.0 + }, + "demand_met_from_stock": { + "-3": 33.0 + }, + "demand_met_from_stock_cumul": { + "-3": 396.58 + }, + "fill_rate": { + "-3": 0.9889775561097256 + } }, { "node": 3, "period": 13, "inbound_shipment_pipeline": { - "4": [ - 0, - 33.23 - ] + "4": { + "-4": [ + 0, + 33.23 + ] + } }, "inbound_shipment": { - "4": 33.0 + "4": { + "-4": 33.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 34.0 + "2": { + "-3": 34.0 + } }, "outbound_shipment": { - "2": 34.0 + "2": { + "-3": 34.0 + } }, "on_order_by_predecessor": { - "4": 34.0 + "4": { + "-4": 34.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 34.0 + "4": { + "-4": 34.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 1.1400000000000006 }, - "inventory_level": 1.1400000000000006, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 435.0, - "demand_met_from_stock": 34.0, - "demand_met_from_stock_cumul": 430.58, - "fill_rate": 0.9898390804597701 + "demand_cumul": { + "-3": 435.0 + }, + "demand_met_from_stock": { + "-3": 34.0 + }, + "demand_met_from_stock_cumul": { + "-3": 430.58 + }, + "fill_rate": { + "-3": 0.9898390804597701 + } }, { "node": 3, "period": 14, "inbound_shipment_pipeline": { - "4": [ - 0, - 29.770000000000003 - ] + "4": { + "-4": [ + 0, + 29.770000000000003 + ] + } }, "inbound_shipment": { - "4": 33.23 + "4": { + "-4": 33.23 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 29.0 + "2": { + "-3": 29.0 + } }, "outbound_shipment": { - "2": 29.0 + "2": { + "-3": 29.0 + } }, "on_order_by_predecessor": { - "4": 29.770000000000003 + "4": { + "-4": 29.770000000000003 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 29.0 + "4": { + "-4": 29.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 5.369999999999997 }, - "inventory_level": 5.369999999999997, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, - "demand_cumul": 464.0, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 459.58, - "fill_rate": 0.9904741379310344 + "demand_cumul": { + "-3": 464.0 + }, + "demand_met_from_stock": { + "-3": 29.0 + }, + "demand_met_from_stock_cumul": { + "-3": 459.58 + }, + "fill_rate": { + "-3": 0.9904741379310344 + } }, { "node": 3, "period": 15, "inbound_shipment_pipeline": { - "4": [ - 0, - 33.3 - ] + "4": { + "-4": [ + 0, + 33.3 + ] + } }, "inbound_shipment": { - "4": 29.770000000000003 + "4": { + "-4": 29.770000000000003 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 35.0 + "2": { + "-3": 35.0 + } }, "outbound_shipment": { - "2": 35.0 + "2": { + "-3": 35.0 + } }, "on_order_by_predecessor": { - "4": 35.00000000000001 + "4": { + "-4": 35.00000000000001 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 35.0 + "4": { + "-4": 35.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 0.14000000000000057 }, - "inventory_level": 0.14000000000000057, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 499.0, - "demand_met_from_stock": 35.0, - "demand_met_from_stock_cumul": 494.58, - "fill_rate": 0.9911422845691382 + "demand_cumul": { + "-3": 499.0 + }, + "demand_met_from_stock": { + "-3": 35.0 + }, + "demand_met_from_stock_cumul": { + "-3": 494.58 + }, + "fill_rate": { + "-3": 0.9911422845691382 + } }, { "node": 3, "period": 16, "inbound_shipment_pipeline": { - "4": [ - 0, - 25.700000000000003 - ] + "4": { + "-4": [ + 0, + 25.700000000000003 + ] + } }, "inbound_shipment": { - "4": 33.3 + "4": { + "-4": 33.3 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 24.000000000000007 + "2": { + "-3": 24.000000000000007 + } }, "outbound_shipment": { - "2": 24.000000000000007 + "2": { + "-3": 24.000000000000007 + } }, "on_order_by_predecessor": { - "4": 25.70000000000001 + "4": { + "-4": 25.70000000000001 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 24.0 + "4": { + "-4": 24.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 9.43999999999999 }, - "inventory_level": 9.43999999999999, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, - "demand_cumul": 523.0, - "demand_met_from_stock": 24.000000000000007, - "demand_met_from_stock_cumul": 518.58, - "fill_rate": 0.9915487571701722 + "demand_cumul": { + "-3": 523.0 + }, + "demand_met_from_stock": { + "-3": 24.000000000000007 + }, + "demand_met_from_stock_cumul": { + "-3": 518.58 + }, + "fill_rate": { + "-3": 0.9915487571701722 + } }, { "node": 3, "period": 17, "inbound_shipment_pipeline": { - "4": [ - 0, - 28.0 - ] + "4": { + "-4": [ + 0, + 28.0 + ] + } }, "inbound_shipment": { - "4": 25.700000000000003 + "4": { + "-4": 25.700000000000003 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 28.0 + "2": { + "-3": 28.0 + } }, "outbound_shipment": { - "2": 28.0 + "2": { + "-3": 28.0 + } }, "on_order_by_predecessor": { - "4": 28.000000000000007 + "4": { + "-4": 28.000000000000007 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 28.0 + "4": { + "-4": 28.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 7.1399999999999935 }, - "inventory_level": 7.1399999999999935, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, - "demand_cumul": 551.0, - "demand_met_from_stock": 28.0, - "demand_met_from_stock_cumul": 546.58, - "fill_rate": 0.9919782214156081 + "demand_cumul": { + "-3": 551.0 + }, + "demand_met_from_stock": { + "-3": 28.0 + }, + "demand_met_from_stock_cumul": { + "-3": 546.58 + }, + "fill_rate": { + "-3": 0.9919782214156081 + } }, { "node": 3, "period": 18, "inbound_shipment_pipeline": { - "4": [ - 0, - 29.0 - ] + "4": { + "-4": [ + 0, + 29.0 + ] + } }, "inbound_shipment": { - "4": 28.0 + "4": { + "-4": 28.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 29.0 + "2": { + "-3": 29.0 + } }, "outbound_shipment": { - "2": 29.0 + "2": { + "-3": 29.0 + } }, "on_order_by_predecessor": { - "4": 29.000000000000007 + "4": { + "-4": 29.000000000000007 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 29.0 + "4": { + "-4": 29.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 6.1399999999999935 }, - "inventory_level": 6.1399999999999935, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, - "demand_cumul": 580.0, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 575.58, - "fill_rate": 0.9923793103448276 + "demand_cumul": { + "-3": 580.0 + }, + "demand_met_from_stock": { + "-3": 29.0 + }, + "demand_met_from_stock_cumul": { + "-3": 575.58 + }, + "fill_rate": { + "-3": 0.9923793103448276 + } }, { "node": 3, "period": 19, "inbound_shipment_pipeline": { - "4": [ - 0, - 33.0 - ] + "4": { + "-4": [ + 0, + 33.0 + ] + } }, "inbound_shipment": { - "4": 29.0 + "4": { + "-4": 29.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 33.0 + "2": { + "-3": 33.0 + } }, "outbound_shipment": { - "2": 33.0 + "2": { + "-3": 33.0 + } }, "on_order_by_predecessor": { - "4": 33.00000000000001 + "4": { + "-4": 33.00000000000001 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 33.0 + "4": { + "-4": 33.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 2.1399999999999935 }, - "inventory_level": 2.1399999999999935, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, - "demand_cumul": 613.0, - "demand_met_from_stock": 33.0, - "demand_met_from_stock_cumul": 608.58, - "fill_rate": 0.9927895595432301 + "demand_cumul": { + "-3": 613.0 + }, + "demand_met_from_stock": { + "-3": 33.0 + }, + "demand_met_from_stock_cumul": { + "-3": 608.58 + }, + "fill_rate": { + "-3": 0.9927895595432301 + } }, { "node": 3, "period": 20, "inbound_shipment_pipeline": { - "4": [ - 0, - 33.230000000000004 - ] + "4": { + "-4": [ + 0, + 33.230000000000004 + ] + } }, "inbound_shipment": { - "4": 33.0 + "4": { + "-4": 33.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 43.0 + "2": { + "-3": 43.0 + } }, "outbound_shipment": { - "2": 35.13999999999999 + "2": { + "-3": 35.13999999999999 + } }, "on_order_by_predecessor": { - "4": 43.0 + "4": { + "-4": 43.0 + } }, "backorders_by_successor": { - "2": 7.8600000000000065 + "2": { + "-3": 7.8600000000000065 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 43.0 + "4": { + "-4": 43.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": -7.8600000000000065 }, - "inventory_level": -7.8600000000000065, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, - "demand_cumul": 656.0, - "demand_met_from_stock": 35.13999999999999, - "demand_met_from_stock_cumul": 643.72, - "fill_rate": 0.9812804878048781 + "demand_cumul": { + "-3": 656.0 + }, + "demand_met_from_stock": { + "-3": 35.13999999999999 + }, + "demand_met_from_stock_cumul": { + "-3": 643.72 + }, + "fill_rate": { + "-3": 0.9812804878048781 + } }, { "node": 3, "period": 21, "inbound_shipment_pipeline": { - "4": [ - 0, - 32.769999999999996 - ] + "4": { + "-4": [ + 0, + 32.769999999999996 + ] + } }, "inbound_shipment": { - "4": 33.230000000000004 + "4": { + "-4": 33.230000000000004 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 22.999999999999993 + "2": { + "-3": 22.999999999999993 + } }, "outbound_shipment": { - "2": 30.86 + "2": { + "-3": 30.86 + } }, "on_order_by_predecessor": { - "4": 32.769999999999996 + "4": { + "-4": 32.769999999999996 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 23.0 + "4": { + "-4": 23.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 2.3700000000000045 }, - "inventory_level": 2.3700000000000045, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, - "demand_cumul": 679.0, - "demand_met_from_stock": 22.999999999999993, - "demand_met_from_stock_cumul": 666.72, - "fill_rate": 0.9819145802650958 + "demand_cumul": { + "-3": 679.0 + }, + "demand_met_from_stock": { + "-3": 22.999999999999993 + }, + "demand_met_from_stock_cumul": { + "-3": 666.72 + }, + "fill_rate": { + "-3": 0.9819145802650958 + } }, { "node": 3, "period": 22, "inbound_shipment_pipeline": { - "4": [ - 0, - 18.999999999999986 - ] + "4": { + "-4": [ + 0, + 18.999999999999986 + ] + } }, "inbound_shipment": { - "4": 32.769999999999996 + "4": { + "-4": 32.769999999999996 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 18.999999999999986 + "2": { + "-3": 18.999999999999986 + } }, "outbound_shipment": { - "2": 18.999999999999986 + "2": { + "-3": 18.999999999999986 + } }, "on_order_by_predecessor": { - "4": 18.999999999999986 + "4": { + "-4": 18.999999999999986 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 18.999999999999986 + "4": { + "-4": 18.999999999999986 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 16.140000000000015 }, - "inventory_level": 16.140000000000015, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 698.0, - "demand_met_from_stock": 18.999999999999986, - "demand_met_from_stock_cumul": 685.72, - "fill_rate": 0.9824068767908309 + "demand_cumul": { + "-3": 698.0 + }, + "demand_met_from_stock": { + "-3": 18.999999999999986 + }, + "demand_met_from_stock_cumul": { + "-3": 685.72 + }, + "fill_rate": { + "-3": 0.9824068767908309 + } }, { "node": 3, "period": 23, "inbound_shipment_pipeline": { - "4": [ - 0, - 30.0 - ] + "4": { + "-4": [ + 0, + 30.0 + ] + } }, "inbound_shipment": { - "4": 18.999999999999986 + "4": { + "-4": 18.999999999999986 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 30.0 + "2": { + "-3": 30.0 + } }, "outbound_shipment": { - "2": 30.0 + "2": { + "-3": 30.0 + } }, "on_order_by_predecessor": { - "4": 30.0 + "4": { + "-4": 30.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 30.0 + "4": { + "-4": 30.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 5.140000000000001 }, - "inventory_level": 5.140000000000001, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 728.0, - "demand_met_from_stock": 30.0, - "demand_met_from_stock_cumul": 715.72, - "fill_rate": 0.9831318681318681 + "demand_cumul": { + "-3": 728.0 + }, + "demand_met_from_stock": { + "-3": 30.0 + }, + "demand_met_from_stock_cumul": { + "-3": 715.72 + }, + "fill_rate": { + "-3": 0.9831318681318681 + } }, { "node": 3, "period": 24, "inbound_shipment_pipeline": { - "4": [ - 0, - 33.3 - ] + "4": { + "-4": [ + 0, + 33.3 + ] + } }, "inbound_shipment": { - "4": 30.0 + "4": { + "-4": 30.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 38.0 + "2": { + "-3": 38.0 + } }, "outbound_shipment": { - "2": 35.14 + "2": { + "-3": 35.14 + } }, "on_order_by_predecessor": { - "4": 38.0 + "4": { + "-4": 38.0 + } }, "backorders_by_successor": { - "2": 2.8599999999999994 + "2": { + "-3": 2.8599999999999994 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 38.0 + "4": { + "-4": 38.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": -2.8599999999999994 }, - "inventory_level": -2.8599999999999994, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, - "demand_cumul": 766.0, - "demand_met_from_stock": 35.14, - "demand_met_from_stock_cumul": 750.86, - "fill_rate": 0.9802349869451698 + "demand_cumul": { + "-3": 766.0 + }, + "demand_met_from_stock": { + "-3": 35.14 + }, + "demand_met_from_stock_cumul": { + "-3": 750.86 + }, + "fill_rate": { + "-3": 0.9802349869451698 + } }, { "node": 3, "period": 25, "inbound_shipment_pipeline": { - "4": [ - 33.3, - 0 - ] + "4": { + "-4": [ + 33.3, + 0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 0 + "2": { + "-3": 0 + } }, "outbound_shipment": { - "2": 0 + "2": { + "-3": 0 + } }, "on_order_by_predecessor": { - "4": 38.0 + "4": { + "-4": 38.0 + } }, "backorders_by_successor": { - "2": 2.8599999999999994 + "2": { + "-3": 2.8599999999999994 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 0 + "4": { + "-4": 0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": -2.8599999999999994 }, - "inventory_level": -2.8599999999999994, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 766.0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 750.86, - "fill_rate": 0 + "demand_cumul": { + "-3": 766.0 + }, + "demand_met_from_stock": { + "-3": 0 + }, + "demand_met_from_stock_cumul": { + "-3": 750.86 + }, + "fill_rate": { + "-3": 0 + } }, { "node": 3, "period": 26, "inbound_shipment_pipeline": { - "4": [ - 0, - 0 - ] + "4": { + "-4": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 0 + "2": { + "-3": 0 + } }, "outbound_shipment": { - "2": 0 + "2": { + "-3": 0 + } }, "on_order_by_predecessor": { - "4": 0 + "4": { + "-4": 0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-3": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 0 + "4": { + "-4": 0 + } }, "raw_material_inventory": { - "4": 0 + "-4": 0 + }, + "inventory_level": { + "-3": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-3": 0 + }, + "demand_met_from_stock": { + "-3": 0 + }, + "demand_met_from_stock_cumul": { + "-3": 0 + }, + "fill_rate": { + "-3": 0 + } }, { "node": 3, "period": 27, "inbound_shipment_pipeline": { - "4": [ - 0, - 0 - ] + "4": { + "-4": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "2": 0 + "2": { + "-3": 0 + } }, "outbound_shipment": { - "2": 0 + "2": { + "-3": 0 + } }, "on_order_by_predecessor": { - "4": 0 + "4": { + "-4": 0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-3": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 0 + "4": { + "-4": 0 + } }, "raw_material_inventory": { - "4": 0 + "-4": 0 + }, + "inventory_level": { + "-3": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-3": 0 + }, + "demand_met_from_stock": { + "-3": 0 + }, + "demand_met_from_stock_cumul": { + "-3": 0 + }, + "fill_rate": { + "-3": 0 + } } ] }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 3 ], @@ -4677,6 +7226,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -4685,13 +7236,13 @@ "_inventory_policy": { "type": "BS", "node": 2, + "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -4700,6 +7251,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -4716,1492 +7268,2337 @@ "node": 2, "period": 0, "inbound_shipment_pipeline": { - "3": [ - 0, - 30.0 - ] + "3": { + "-3": [ + 0, + 30.0 + ] + } }, "inbound_shipment": { - "3": 0 + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 30.0 + "1": { + "-2": 30.0 + } }, "outbound_shipment": { - "1": 30.0 + "1": { + "-2": 30.0 + } }, "on_order_by_predecessor": { - "3": 30.0 + "3": { + "-3": 30.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 30.0 + "3": { + "-3": 30.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 3.8699999999999974 }, - "inventory_level": 3.8699999999999974, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 30.0, - "demand_met_from_stock": 30.0, - "demand_met_from_stock_cumul": 30.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 30.0 + }, + "demand_met_from_stock": { + "-2": 30.0 + }, + "demand_met_from_stock_cumul": { + "-2": 30.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 1, "inbound_shipment_pipeline": { - "3": [ - 0, - 35.14 - ] + "3": { + "-3": [ + 0, + 35.14 + ] + } }, "inbound_shipment": { - "3": 30.0 + "3": { + "-3": 30.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 36.0 + "1": { + "-2": 36.0 + } }, "outbound_shipment": { - "1": 33.87 + "1": { + "-2": 33.87 + } }, "on_order_by_predecessor": { - "3": 36.0 + "3": { + "-3": 36.0 + } }, "backorders_by_successor": { - "1": 2.1300000000000026 + "1": { + "-2": 2.1300000000000026 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 36.0 + "3": { + "-3": 36.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": -2.1300000000000026 }, - "inventory_level": -2.1300000000000026, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 66.0, - "demand_met_from_stock": 33.87, - "demand_met_from_stock_cumul": 63.87, - "fill_rate": 0.9677272727272727 + "demand_cumul": { + "-2": 66.0 + }, + "demand_met_from_stock": { + "-2": 33.87 + }, + "demand_met_from_stock_cumul": { + "-2": 63.87 + }, + "fill_rate": { + "-2": 0.9677272727272727 + } }, { "node": 2, "period": 2, "inbound_shipment_pipeline": { - "3": [ - 0, - 25.86 - ] + "3": { + "-3": [ + 0, + 25.86 + ] + } }, "inbound_shipment": { - "3": 35.14 + "3": { + "-3": 35.14 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 25.0 + "1": { + "-2": 25.0 + } }, "outbound_shipment": { - "1": 27.130000000000003 + "1": { + "-2": 27.130000000000003 + } }, "on_order_by_predecessor": { - "3": 25.86 + "3": { + "-3": 25.86 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 25.0 + "3": { + "-3": 25.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 8.009999999999998 }, - "inventory_level": 8.009999999999998, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, - "demand_cumul": 91.0, - "demand_met_from_stock": 25.0, - "demand_met_from_stock_cumul": 88.87, - "fill_rate": 0.9765934065934067 + "demand_cumul": { + "-2": 91.0 + }, + "demand_met_from_stock": { + "-2": 25.0 + }, + "demand_met_from_stock_cumul": { + "-2": 88.87 + }, + "fill_rate": { + "-2": 0.9765934065934067 + } }, { "node": 2, "period": 3, "inbound_shipment_pipeline": { - "3": [ - 0, - 34.0 - ] + "3": { + "-3": [ + 0, + 34.0 + ] + } }, "inbound_shipment": { - "3": 25.86 + "3": { + "-3": 25.86 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 34.0 + "1": { + "-2": 34.0 + } }, "outbound_shipment": { - "1": 33.87 + "1": { + "-2": 33.87 + } }, "on_order_by_predecessor": { - "3": 34.0 + "3": { + "-3": 34.0 + } }, "backorders_by_successor": { - "1": 0.13000000000000256 + "1": { + "-2": 0.13000000000000256 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 34.0 + "3": { + "-3": 34.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": -0.13000000000000256 }, - "inventory_level": -0.13000000000000256, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 125.0, - "demand_met_from_stock": 33.87, - "demand_met_from_stock_cumul": 122.74000000000001, - "fill_rate": 0.9819200000000001 + "demand_cumul": { + "-2": 125.0 + }, + "demand_met_from_stock": { + "-2": 33.87 + }, + "demand_met_from_stock_cumul": { + "-2": 122.74000000000001 + }, + "fill_rate": { + "-2": 0.9819200000000001 + } }, { "node": 2, "period": 4, "inbound_shipment_pipeline": { - "3": [ - 0, - 34.44 - ] + "3": { + "-3": [ + 0, + 34.44 + ] + } }, "inbound_shipment": { - "3": 34.0 + "3": { + "-3": 34.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 38.0 + "1": { + "-2": 38.0 + } }, "outbound_shipment": { - "1": 34.0 + "1": { + "-2": 34.0 + } }, "on_order_by_predecessor": { - "3": 38.0 + "3": { + "-3": 38.0 + } }, "backorders_by_successor": { - "1": 4.130000000000003 + "1": { + "-2": 4.130000000000003 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 38.0 + "3": { + "-3": 38.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": -4.130000000000003 }, - "inventory_level": -4.130000000000003, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, - "demand_cumul": 163.0, - "demand_met_from_stock": 33.87, - "demand_met_from_stock_cumul": 156.61, - "fill_rate": 0.9607975460122701 + "demand_cumul": { + "-2": 163.0 + }, + "demand_met_from_stock": { + "-2": 33.87 + }, + "demand_met_from_stock_cumul": { + "-2": 156.61 + }, + "fill_rate": { + "-2": 0.9607975460122701 + } }, { "node": 2, "period": 5, "inbound_shipment_pipeline": { - "3": [ - 0, - 29.560000000000002 - ] + "3": { + "-3": [ + 0, + 29.560000000000002 + ] + } }, "inbound_shipment": { - "3": 34.44 + "3": { + "-3": 34.44 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 26.0 + "1": { + "-2": 26.0 + } }, "outbound_shipment": { - "1": 30.130000000000003 + "1": { + "-2": 30.130000000000003 + } }, "on_order_by_predecessor": { - "3": 29.560000000000002 + "3": { + "-3": 29.560000000000002 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 26.0 + "3": { + "-3": 26.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 4.309999999999995 }, - "inventory_level": 4.309999999999995, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, - "demand_cumul": 189.0, - "demand_met_from_stock": 26.0, - "demand_met_from_stock_cumul": 182.61, - "fill_rate": 0.9661904761904763 + "demand_cumul": { + "-2": 189.0 + }, + "demand_met_from_stock": { + "-2": 26.0 + }, + "demand_met_from_stock_cumul": { + "-2": 182.61 + }, + "fill_rate": { + "-2": 0.9661904761904763 + } }, { "node": 2, "period": 6, "inbound_shipment_pipeline": { - "3": [ - 0, - 29.000000000000007 - ] + "3": { + "-3": [ + 0, + 29.000000000000007 + ] + } }, "inbound_shipment": { - "3": 29.560000000000002 + "3": { + "-3": 29.560000000000002 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 29.000000000000007 + "1": { + "-2": 29.000000000000007 + } }, "outbound_shipment": { - "1": 29.000000000000007 + "1": { + "-2": 29.000000000000007 + } }, "on_order_by_predecessor": { - "3": 29.000000000000007 + "3": { + "-3": 29.000000000000007 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 29.000000000000007 + "3": { + "-3": 29.000000000000007 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 4.86999999999999 }, - "inventory_level": 4.86999999999999, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 218.0, - "demand_met_from_stock": 29.000000000000007, - "demand_met_from_stock_cumul": 211.61, - "fill_rate": 0.9706880733944955 + "demand_cumul": { + "-2": 218.0 + }, + "demand_met_from_stock": { + "-2": 29.000000000000007 + }, + "demand_met_from_stock_cumul": { + "-2": 211.61 + }, + "fill_rate": { + "-2": 0.9706880733944955 + } }, { "node": 2, "period": 7, "inbound_shipment_pipeline": { - "3": [ - 0, - 31.0 - ] + "3": { + "-3": [ + 0, + 31.0 + ] + } }, "inbound_shipment": { - "3": 29.000000000000007 + "3": { + "-3": 29.000000000000007 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 31.0 + "1": { + "-2": 31.0 + } }, "outbound_shipment": { - "1": 31.0 + "1": { + "-2": 31.0 + } }, "on_order_by_predecessor": { - "3": 31.0 + "3": { + "-3": 31.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 31.0 + "3": { + "-3": 31.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 2.8699999999999974 }, - "inventory_level": 2.8699999999999974, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 249.0, - "demand_met_from_stock": 31.0, - "demand_met_from_stock_cumul": 242.61, - "fill_rate": 0.9743373493975904 + "demand_cumul": { + "-2": 249.0 + }, + "demand_met_from_stock": { + "-2": 31.0 + }, + "demand_met_from_stock_cumul": { + "-2": 242.61 + }, + "fill_rate": { + "-2": 0.9743373493975904 + } }, { "node": 2, "period": 8, "inbound_shipment_pipeline": { - "3": [ - 0, - 34.0 - ] + "3": { + "-3": [ + 0, + 34.0 + ] + } }, "inbound_shipment": { - "3": 31.0 + "3": { + "-3": 31.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 34.0 + "1": { + "-2": 34.0 + } }, "outbound_shipment": { - "1": 33.87 + "1": { + "-2": 33.87 + } }, "on_order_by_predecessor": { - "3": 34.0 + "3": { + "-3": 34.0 + } }, "backorders_by_successor": { - "1": 0.13000000000000256 + "1": { + "-2": 0.13000000000000256 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 34.0 + "3": { + "-3": 34.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": -0.13000000000000256 }, - "inventory_level": -0.13000000000000256, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 283.0, - "demand_met_from_stock": 33.87, - "demand_met_from_stock_cumul": 276.48, - "fill_rate": 0.9769611307420495 + "demand_cumul": { + "-2": 283.0 + }, + "demand_met_from_stock": { + "-2": 33.87 + }, + "demand_met_from_stock_cumul": { + "-2": 276.48 + }, + "fill_rate": { + "-2": 0.9769611307420495 + } }, { "node": 2, "period": 9, "inbound_shipment_pipeline": { - "3": [ - 0, - 27.999999999999993 - ] + "3": { + "-3": [ + 0, + 27.999999999999993 + ] + } }, "inbound_shipment": { - "3": 34.0 + "3": { + "-3": 34.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 27.999999999999993 + "1": { + "-2": 27.999999999999993 + } }, "outbound_shipment": { - "1": 28.129999999999995 + "1": { + "-2": 28.129999999999995 + } }, "on_order_by_predecessor": { - "3": 27.999999999999993 + "3": { + "-3": 27.999999999999993 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 27.999999999999993 + "3": { + "-3": 27.999999999999993 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 5.8700000000000045 }, - "inventory_level": 5.8700000000000045, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, - "demand_cumul": 311.0, - "demand_met_from_stock": 27.999999999999993, - "demand_met_from_stock_cumul": 304.48, - "fill_rate": 0.9790353697749197 + "demand_cumul": { + "-2": 311.0 + }, + "demand_met_from_stock": { + "-2": 27.999999999999993 + }, + "demand_met_from_stock_cumul": { + "-2": 304.48 + }, + "fill_rate": { + "-2": 0.9790353697749197 + } }, { "node": 2, "period": 10, "inbound_shipment_pipeline": { - "3": [ - 0, - 31.0 - ] + "3": { + "-3": [ + 0, + 31.0 + ] + } }, "inbound_shipment": { - "3": 27.999999999999993 + "3": { + "-3": 27.999999999999993 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 31.0 + "1": { + "-2": 31.0 + } }, "outbound_shipment": { - "1": 31.0 + "1": { + "-2": 31.0 + } }, "on_order_by_predecessor": { - "3": 31.0 + "3": { + "-3": 31.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 31.0 + "3": { + "-3": 31.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 2.8699999999999974 }, - "inventory_level": 2.8699999999999974, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 342.0, - "demand_met_from_stock": 31.0, - "demand_met_from_stock_cumul": 335.48, - "fill_rate": 0.9809356725146199 + "demand_cumul": { + "-2": 342.0 + }, + "demand_met_from_stock": { + "-2": 31.0 + }, + "demand_met_from_stock_cumul": { + "-2": 335.48 + }, + "fill_rate": { + "-2": 0.9809356725146199 + } }, { "node": 2, "period": 11, "inbound_shipment_pipeline": { - "3": [ - 0, - 26.0 - ] + "3": { + "-3": [ + 0, + 26.0 + ] + } }, "inbound_shipment": { - "3": 31.0 + "3": { + "-3": 31.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 26.0 + "1": { + "-2": 26.0 + } }, "outbound_shipment": { - "1": 26.0 + "1": { + "-2": 26.0 + } }, "on_order_by_predecessor": { - "3": 26.0 + "3": { + "-3": 26.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 26.0 + "3": { + "-3": 26.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 7.869999999999997 }, - "inventory_level": 7.869999999999997, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 368.0, - "demand_met_from_stock": 26.0, - "demand_met_from_stock_cumul": 361.48, - "fill_rate": 0.9822826086956522 + "demand_cumul": { + "-2": 368.0 + }, + "demand_met_from_stock": { + "-2": 26.0 + }, + "demand_met_from_stock_cumul": { + "-2": 361.48 + }, + "fill_rate": { + "-2": 0.9822826086956522 + } }, { "node": 2, "period": 12, "inbound_shipment_pipeline": { - "3": [ - 0, - 33.0 - ] + "3": { + "-3": [ + 0, + 33.0 + ] + } }, "inbound_shipment": { - "3": 26.0 + "3": { + "-3": 26.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 33.0 + "1": { + "-2": 33.0 + } }, "outbound_shipment": { - "1": 33.0 + "1": { + "-2": 33.0 + } }, "on_order_by_predecessor": { - "3": 33.0 + "3": { + "-3": 33.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 33.0 + "3": { + "-3": 33.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 0.8699999999999974 }, - "inventory_level": 0.8699999999999974, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 401.0, - "demand_met_from_stock": 33.0, - "demand_met_from_stock_cumul": 394.48, - "fill_rate": 0.9837406483790524 + "demand_cumul": { + "-2": 401.0 + }, + "demand_met_from_stock": { + "-2": 33.0 + }, + "demand_met_from_stock_cumul": { + "-2": 394.48 + }, + "fill_rate": { + "-2": 0.9837406483790524 + } }, { "node": 2, "period": 13, "inbound_shipment_pipeline": { - "3": [ - 0, - 34.0 - ] + "3": { + "-3": [ + 0, + 34.0 + ] + } }, "inbound_shipment": { - "3": 33.0 + "3": { + "-3": 33.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 34.0 + "1": { + "-2": 34.0 + } }, "outbound_shipment": { - "1": 33.87 + "1": { + "-2": 33.87 + } }, "on_order_by_predecessor": { - "3": 34.0 + "3": { + "-3": 34.0 + } }, "backorders_by_successor": { - "1": 0.13000000000000256 + "1": { + "-2": 0.13000000000000256 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 34.0 + "3": { + "-3": 34.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": -0.13000000000000256 }, - "inventory_level": -0.13000000000000256, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 435.0, - "demand_met_from_stock": 33.87, - "demand_met_from_stock_cumul": 428.35, - "fill_rate": 0.984712643678161 + "demand_cumul": { + "-2": 435.0 + }, + "demand_met_from_stock": { + "-2": 33.87 + }, + "demand_met_from_stock_cumul": { + "-2": 428.35 + }, + "fill_rate": { + "-2": 0.984712643678161 + } }, { "node": 2, "period": 14, "inbound_shipment_pipeline": { - "3": [ - 0, - 29.0 - ] + "3": { + "-3": [ + 0, + 29.0 + ] + } }, "inbound_shipment": { - "3": 34.0 + "3": { + "-3": 34.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 29.0 + "1": { + "-2": 29.0 + } }, "outbound_shipment": { - "1": 29.130000000000003 + "1": { + "-2": 29.130000000000003 + } }, "on_order_by_predecessor": { - "3": 29.0 + "3": { + "-3": 29.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 29.0 + "3": { + "-3": 29.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 4.869999999999997 }, - "inventory_level": 4.869999999999997, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, - "demand_cumul": 464.0, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 457.35, - "fill_rate": 0.9856681034482759 + "demand_cumul": { + "-2": 464.0 + }, + "demand_met_from_stock": { + "-2": 29.0 + }, + "demand_met_from_stock_cumul": { + "-2": 457.35 + }, + "fill_rate": { + "-2": 0.9856681034482759 + } }, { "node": 2, "period": 15, "inbound_shipment_pipeline": { - "3": [ - 0, - 35.0 - ] + "3": { + "-3": [ + 0, + 35.0 + ] + } }, "inbound_shipment": { - "3": 29.0 + "3": { + "-3": 29.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 35.0 + "1": { + "-2": 35.0 + } }, "outbound_shipment": { - "1": 33.87 + "1": { + "-2": 33.87 + } }, "on_order_by_predecessor": { - "3": 35.0 + "3": { + "-3": 35.0 + } }, "backorders_by_successor": { - "1": 1.1300000000000026 + "1": { + "-2": 1.1300000000000026 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 35.0 + "3": { + "-3": 35.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": -1.1300000000000026 }, - "inventory_level": -1.1300000000000026, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 499.0, - "demand_met_from_stock": 33.87, - "demand_met_from_stock_cumul": 491.22, - "fill_rate": 0.9844088176352705 + "demand_cumul": { + "-2": 499.0 + }, + "demand_met_from_stock": { + "-2": 33.87 + }, + "demand_met_from_stock_cumul": { + "-2": 491.22 + }, + "fill_rate": { + "-2": 0.9844088176352705 + } }, { "node": 2, "period": 16, "inbound_shipment_pipeline": { - "3": [ - 0, - 24.000000000000007 - ] + "3": { + "-3": [ + 0, + 24.000000000000007 + ] + } }, "inbound_shipment": { - "3": 35.0 + "3": { + "-3": 35.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 24.000000000000007 + "1": { + "-2": 24.000000000000007 + } }, "outbound_shipment": { - "1": 25.13000000000001 + "1": { + "-2": 25.13000000000001 + } }, "on_order_by_predecessor": { - "3": 24.000000000000007 + "3": { + "-3": 24.000000000000007 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 24.000000000000007 + "3": { + "-3": 24.000000000000007 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 9.86999999999999 }, - "inventory_level": 9.86999999999999, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, - "demand_cumul": 523.0, - "demand_met_from_stock": 24.000000000000007, - "demand_met_from_stock_cumul": 515.22, - "fill_rate": 0.9851242829827916 + "demand_cumul": { + "-2": 523.0 + }, + "demand_met_from_stock": { + "-2": 24.000000000000007 + }, + "demand_met_from_stock_cumul": { + "-2": 515.22 + }, + "fill_rate": { + "-2": 0.9851242829827916 + } }, { "node": 2, "period": 17, "inbound_shipment_pipeline": { - "3": [ - 0, - 28.0 - ] + "3": { + "-3": [ + 0, + 28.0 + ] + } }, "inbound_shipment": { - "3": 24.000000000000007 + "3": { + "-3": 24.000000000000007 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 28.0 + "1": { + "-2": 28.0 + } }, "outbound_shipment": { - "1": 28.0 + "1": { + "-2": 28.0 + } }, "on_order_by_predecessor": { - "3": 28.0 + "3": { + "-3": 28.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 28.0 + "3": { + "-3": 28.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 5.869999999999997 }, - "inventory_level": 5.869999999999997, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 551.0, - "demand_met_from_stock": 28.0, - "demand_met_from_stock_cumul": 543.22, - "fill_rate": 0.985880217785844 + "demand_cumul": { + "-2": 551.0 + }, + "demand_met_from_stock": { + "-2": 28.0 + }, + "demand_met_from_stock_cumul": { + "-2": 543.22 + }, + "fill_rate": { + "-2": 0.985880217785844 + } }, { "node": 2, "period": 18, "inbound_shipment_pipeline": { - "3": [ - 0, - 29.0 - ] + "3": { + "-3": [ + 0, + 29.0 + ] + } }, "inbound_shipment": { - "3": 28.0 + "3": { + "-3": 28.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 29.0 + "1": { + "-2": 29.0 + } }, "outbound_shipment": { - "1": 29.0 + "1": { + "-2": 29.0 + } }, "on_order_by_predecessor": { - "3": 29.0 + "3": { + "-3": 29.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 29.0 + "3": { + "-3": 29.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 4.869999999999997 }, - "inventory_level": 4.869999999999997, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 580.0, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 572.22, - "fill_rate": 0.9865862068965517 + "demand_cumul": { + "-2": 580.0 + }, + "demand_met_from_stock": { + "-2": 29.0 + }, + "demand_met_from_stock_cumul": { + "-2": 572.22 + }, + "fill_rate": { + "-2": 0.9865862068965517 + } }, { "node": 2, "period": 19, "inbound_shipment_pipeline": { - "3": [ - 0, - 33.0 - ] + "3": { + "-3": [ + 0, + 33.0 + ] + } }, "inbound_shipment": { - "3": 29.0 + "3": { + "-3": 29.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 33.0 + "1": { + "-2": 33.0 + } }, "outbound_shipment": { - "1": 33.0 + "1": { + "-2": 33.0 + } }, "on_order_by_predecessor": { - "3": 33.0 + "3": { + "-3": 33.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 33.0 + "3": { + "-3": 33.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 0.8699999999999974 }, - "inventory_level": 0.8699999999999974, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 613.0, - "demand_met_from_stock": 33.0, - "demand_met_from_stock_cumul": 605.22, - "fill_rate": 0.9873083197389886 + "demand_cumul": { + "-2": 613.0 + }, + "demand_met_from_stock": { + "-2": 33.0 + }, + "demand_met_from_stock_cumul": { + "-2": 605.22 + }, + "fill_rate": { + "-2": 0.9873083197389886 + } }, { "node": 2, "period": 20, "inbound_shipment_pipeline": { - "3": [ - 0, - 35.13999999999999 - ] + "3": { + "-3": [ + 0, + 35.13999999999999 + ] + } }, "inbound_shipment": { - "3": 33.0 + "3": { + "-3": 33.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 43.0 + "1": { + "-2": 43.0 + } }, "outbound_shipment": { - "1": 33.87 + "1": { + "-2": 33.87 + } }, "on_order_by_predecessor": { - "3": 43.0 + "3": { + "-3": 43.0 + } }, "backorders_by_successor": { - "1": 9.130000000000003 + "1": { + "-2": 9.130000000000003 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 43.0 + "3": { + "-3": 43.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": -9.130000000000003 }, - "inventory_level": -9.130000000000003, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 656.0, - "demand_met_from_stock": 33.87, - "demand_met_from_stock_cumul": 639.09, - "fill_rate": 0.9742225609756098 + "demand_cumul": { + "-2": 656.0 + }, + "demand_met_from_stock": { + "-2": 33.87 + }, + "demand_met_from_stock_cumul": { + "-2": 639.09 + }, + "fill_rate": { + "-2": 0.9742225609756098 + } }, { "node": 2, "period": 21, "inbound_shipment_pipeline": { - "3": [ - 0, - 30.86 - ] + "3": { + "-3": [ + 0, + 30.86 + ] + } }, "inbound_shipment": { - "3": 35.13999999999999 + "3": { + "-3": 35.13999999999999 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 22.999999999999993 + "1": { + "-2": 22.999999999999993 + } }, "outbound_shipment": { - "1": 32.129999999999995 + "1": { + "-2": 32.129999999999995 + } }, "on_order_by_predecessor": { - "3": 30.860000000000007 + "3": { + "-3": 30.860000000000007 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 22.999999999999993 + "3": { + "-3": 22.999999999999993 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 3.009999999999998 }, - "inventory_level": 3.009999999999998, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, - "demand_cumul": 679.0, - "demand_met_from_stock": 22.999999999999993, - "demand_met_from_stock_cumul": 662.09, - "fill_rate": 0.9750957290132548 + "demand_cumul": { + "-2": 679.0 + }, + "demand_met_from_stock": { + "-2": 22.999999999999993 + }, + "demand_met_from_stock_cumul": { + "-2": 662.09 + }, + "fill_rate": { + "-2": 0.9750957290132548 + } }, { "node": 2, "period": 22, "inbound_shipment_pipeline": { - "3": [ - 0, - 18.999999999999986 - ] + "3": { + "-3": [ + 0, + 18.999999999999986 + ] + } }, "inbound_shipment": { - "3": 30.86 + "3": { + "-3": 30.86 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 18.999999999999993 + "1": { + "-2": 18.999999999999993 + } }, "outbound_shipment": { - "1": 18.999999999999993 + "1": { + "-2": 18.999999999999993 + } }, "on_order_by_predecessor": { - "3": 18.999999999999993 + "3": { + "-3": 18.999999999999993 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 18.999999999999986 + "3": { + "-3": 18.999999999999986 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 14.870000000000005 }, - "inventory_level": 14.870000000000005, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, - "demand_cumul": 698.0, - "demand_met_from_stock": 18.999999999999993, - "demand_met_from_stock_cumul": 681.09, - "fill_rate": 0.9757736389684815 + "demand_cumul": { + "-2": 698.0 + }, + "demand_met_from_stock": { + "-2": 18.999999999999993 + }, + "demand_met_from_stock_cumul": { + "-2": 681.09 + }, + "fill_rate": { + "-2": 0.9757736389684815 + } }, { "node": 2, "period": 23, "inbound_shipment_pipeline": { - "3": [ - 0, - 30.0 - ] + "3": { + "-3": [ + 0, + 30.0 + ] + } }, "inbound_shipment": { - "3": 18.999999999999986 + "3": { + "-3": 18.999999999999986 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 30.0 + "1": { + "-2": 30.0 + } }, "outbound_shipment": { - "1": 30.0 + "1": { + "-2": 30.0 + } }, "on_order_by_predecessor": { - "3": 30.000000000000007 + "3": { + "-3": 30.000000000000007 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 30.0 + "3": { + "-3": 30.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": 3.8699999999999903 }, - "inventory_level": 3.8699999999999903, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, - "demand_cumul": 728.0, - "demand_met_from_stock": 30.0, - "demand_met_from_stock_cumul": 711.09, - "fill_rate": 0.976771978021978 + "demand_cumul": { + "-2": 728.0 + }, + "demand_met_from_stock": { + "-2": 30.0 + }, + "demand_met_from_stock_cumul": { + "-2": 711.09 + }, + "fill_rate": { + "-2": 0.976771978021978 + } }, { "node": 2, "period": 24, "inbound_shipment_pipeline": { - "3": [ - 0, - 35.14 - ] + "3": { + "-3": [ + 0, + 35.14 + ] + } }, "inbound_shipment": { - "3": 30.0 + "3": { + "-3": 30.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 38.0 + "1": { + "-2": 38.0 + } }, "outbound_shipment": { - "1": 33.86999999999999 + "1": { + "-2": 33.86999999999999 + } }, "on_order_by_predecessor": { - "3": 38.0 + "3": { + "-3": 38.0 + } }, "backorders_by_successor": { - "1": 4.13000000000001 + "1": { + "-2": 4.13000000000001 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 38.0 + "3": { + "-3": 38.0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": -4.13000000000001 }, - "inventory_level": -4.13000000000001, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, - "demand_cumul": 766.0, - "demand_met_from_stock": 33.86999999999999, - "demand_met_from_stock_cumul": 744.96, - "fill_rate": 0.972532637075718 + "demand_cumul": { + "-2": 766.0 + }, + "demand_met_from_stock": { + "-2": 33.86999999999999 + }, + "demand_met_from_stock_cumul": { + "-2": 744.96 + }, + "fill_rate": { + "-2": 0.972532637075718 + } }, { "node": 2, "period": 25, "inbound_shipment_pipeline": { - "3": [ - 35.14, - 0 - ] + "3": { + "-3": [ + 35.14, + 0 + ] + } }, "inbound_shipment": { - "3": 0 + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-2": 0 + } }, "on_order_by_predecessor": { - "3": 38.0 + "3": { + "-3": 38.0 + } }, "backorders_by_successor": { - "1": 4.13000000000001 + "1": { + "-2": 4.13000000000001 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 0 + "3": { + "-3": 0 + } }, "raw_material_inventory": { - "3": 0.0 + "-3": 0.0 + }, + "inventory_level": { + "-2": -4.13000000000001 }, - "inventory_level": -4.13000000000001, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 766.0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 744.96, - "fill_rate": 0 + "demand_cumul": { + "-2": 766.0 + }, + "demand_met_from_stock": { + "-2": 0 + }, + "demand_met_from_stock_cumul": { + "-2": 744.96 + }, + "fill_rate": { + "-2": 0 + } }, { "node": 2, "period": 26, "inbound_shipment_pipeline": { - "3": [ - 0, - 0 - ] + "3": { + "-3": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "3": 0 + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-2": 0 + } }, "on_order_by_predecessor": { - "3": 0 + "3": { + "-3": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 0 + "3": { + "-3": 0 + } }, "raw_material_inventory": { - "3": 0 + "-3": 0 + }, + "inventory_level": { + "-2": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-2": 0 + }, + "demand_met_from_stock": { + "-2": 0 + }, + "demand_met_from_stock_cumul": { + "-2": 0 + }, + "fill_rate": { + "-2": 0 + } }, { "node": 2, "period": 27, "inbound_shipment_pipeline": { - "3": [ - 0, - 0 - ] + "3": { + "-3": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "3": 0 + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-2": 0 + } }, "on_order_by_predecessor": { - "3": 0 + "3": { + "-3": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "3": 0 + "3": { + "-3": 0 + } }, "order_quantity": { - "3": 0 + "3": { + "-3": 0 + } }, "raw_material_inventory": { - "3": 0 + "-3": 0 + }, + "inventory_level": { + "-2": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-2": 0 + }, + "demand_met_from_stock": { + "-2": 0 + }, + "demand_met_from_stock_cumul": { + "-2": 0 + }, + "fill_rate": { + "-2": 0 + } } ] }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2 ], @@ -6220,11 +9617,13 @@ "demand_source": { "type": "P", "mean": 32.0, - "standard_deviation": null, + "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -6233,13 +9632,13 @@ "_inventory_policy": { "type": "BS", "node": 1, + "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -6248,6 +9647,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -6264,1489 +9664,2589 @@ "node": 1, "period": 0, "inbound_shipment_pipeline": { - "2": [ - 0, - 30.0 - ] + "2": { + "-2": [ + 0, + 30.0 + ] + } }, "inbound_shipment": { - "2": 0 + "2": { + "-2": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 30 + "null": { + "-1": 30 + } }, "outbound_shipment": { - "null": 30 + "null": { + "-1": 30 + } }, "on_order_by_predecessor": { - "2": 30.0 + "2": { + "-2": 30.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 30.0 + "2": { + "-2": 30.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 10.590000000000003 }, - "inventory_level": 10.590000000000003, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, - "demand_cumul": 30, - "demand_met_from_stock": 30.0, - "demand_met_from_stock_cumul": 30, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 30 + }, + "demand_met_from_stock": { + "-1": 30.0 + }, + "demand_met_from_stock_cumul": { + "-1": 30 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 1, "inbound_shipment_pipeline": { - "2": [ - 0, - 33.87 - ] + "2": { + "-2": [ + 0, + 33.87 + ] + } }, "inbound_shipment": { - "2": 30.0 + "2": { + "-2": 30.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 36 + "null": { + "-1": 36 + } }, "outbound_shipment": { - "null": 36 + "null": { + "-1": 36 + } }, "on_order_by_predecessor": { - "2": 36.0 + "2": { + "-2": 36.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 36.0 + "2": { + "-2": 36.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 4.590000000000003 }, - "inventory_level": 4.590000000000003, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, - "demand_cumul": 66, - "demand_met_from_stock": 36.0, - "demand_met_from_stock_cumul": 66, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 66 + }, + "demand_met_from_stock": { + "-1": 36.0 + }, + "demand_met_from_stock_cumul": { + "-1": 66 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 2, "inbound_shipment_pipeline": { - "2": [ - 0, - 27.130000000000003 - ] + "2": { + "-2": [ + 0, + 27.130000000000003 + ] + } }, "inbound_shipment": { - "2": 33.87 + "2": { + "-2": 33.87 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 25 + "null": { + "-1": 25 + } }, "outbound_shipment": { - "null": 25 + "null": { + "-1": 25 + } }, "on_order_by_predecessor": { - "2": 27.130000000000003 + "2": { + "-2": 27.130000000000003 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 25.0 + "2": { + "-2": 25.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 13.46 }, - "inventory_level": 13.46, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, - "demand_cumul": 91, - "demand_met_from_stock": 25.0, - "demand_met_from_stock_cumul": 91, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 91 + }, + "demand_met_from_stock": { + "-1": 25.0 + }, + "demand_met_from_stock_cumul": { + "-1": 91 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 3, "inbound_shipment_pipeline": { - "2": [ - 0, - 33.87 - ] + "2": { + "-2": [ + 0, + 33.87 + ] + } }, "inbound_shipment": { - "2": 27.130000000000003 + "2": { + "-2": 27.130000000000003 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 34 + "null": { + "-1": 34 + } }, "outbound_shipment": { - "null": 34 + "null": { + "-1": 34 + } }, "on_order_by_predecessor": { - "2": 34.0 + "2": { + "-2": 34.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 34.0 + "2": { + "-2": 34.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 6.590000000000003 }, - "inventory_level": 6.590000000000003, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, - "demand_cumul": 125, - "demand_met_from_stock": 34.0, - "demand_met_from_stock_cumul": 125, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 125 + }, + "demand_met_from_stock": { + "-1": 34.0 + }, + "demand_met_from_stock_cumul": { + "-1": 125 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 4, "inbound_shipment_pipeline": { - "2": [ - 0, - 34.0 - ] + "2": { + "-2": [ + 0, + 34.0 + ] + } }, "inbound_shipment": { - "2": 33.87 + "2": { + "-2": 33.87 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 38 + "null": { + "-1": 38 + } }, "outbound_shipment": { - "null": 38 + "null": { + "-1": 38 + } }, "on_order_by_predecessor": { - "2": 38.13 + "2": { + "-2": 38.13 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 38.0 + "2": { + "-2": 38.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 2.460000000000001 }, - "inventory_level": 2.460000000000001, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, - "demand_cumul": 163, - "demand_met_from_stock": 38.0, - "demand_met_from_stock_cumul": 163, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 163 + }, + "demand_met_from_stock": { + "-1": 38.0 + }, + "demand_met_from_stock_cumul": { + "-1": 163 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 5, "inbound_shipment_pipeline": { - "2": [ - 0, - 30.130000000000003 - ] + "2": { + "-2": [ + 0, + 30.130000000000003 + ] + } }, "inbound_shipment": { - "2": 34.0 + "2": { + "-2": 34.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 26 + "null": { + "-1": 26 + } }, "outbound_shipment": { - "null": 26 + "null": { + "-1": 26 + } }, "on_order_by_predecessor": { - "2": 30.129999999999995 + "2": { + "-2": 30.129999999999995 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 26.0 + "2": { + "-2": 26.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 10.46 }, - "inventory_level": 10.46, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, - "demand_cumul": 189, - "demand_met_from_stock": 26.0, - "demand_met_from_stock_cumul": 189, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 189 + }, + "demand_met_from_stock": { + "-1": 26.0 + }, + "demand_met_from_stock_cumul": { + "-1": 189 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 6, "inbound_shipment_pipeline": { - "2": [ - 0, - 29.000000000000007 - ] + "2": { + "-2": [ + 0, + 29.000000000000007 + ] + } }, "inbound_shipment": { - "2": 30.130000000000003 + "2": { + "-2": 30.130000000000003 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 29 + "null": { + "-1": 29 + } }, "outbound_shipment": { - "null": 29 + "null": { + "-1": 29 + } }, "on_order_by_predecessor": { - "2": 29.0 + "2": { + "-2": 29.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 29.000000000000007 + "2": { + "-2": 29.000000000000007 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 11.590000000000003 }, - "inventory_level": 11.590000000000003, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, - "demand_cumul": 218, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 218, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 218 + }, + "demand_met_from_stock": { + "-1": 29.0 + }, + "demand_met_from_stock_cumul": { + "-1": 218 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 7, "inbound_shipment_pipeline": { - "2": [ - 0, - 31.0 - ] + "2": { + "-2": [ + 0, + 31.0 + ] + } }, "inbound_shipment": { - "2": 29.000000000000007 + "2": { + "-2": 29.000000000000007 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 31 + "null": { + "-1": 31 + } }, "outbound_shipment": { - "null": 31 + "null": { + "-1": 31 + } }, "on_order_by_predecessor": { - "2": 30.999999999999993 + "2": { + "-2": 30.999999999999993 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 31.0 + "2": { + "-2": 31.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 9.59000000000001 }, - "inventory_level": 9.59000000000001, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, - "demand_cumul": 249, - "demand_met_from_stock": 31.0, - "demand_met_from_stock_cumul": 249, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 249 + }, + "demand_met_from_stock": { + "-1": 31.0 + }, + "demand_met_from_stock_cumul": { + "-1": 249 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 8, "inbound_shipment_pipeline": { - "2": [ - 0, - 33.87 - ] + "2": { + "-2": [ + 0, + 33.87 + ] + } }, "inbound_shipment": { - "2": 31.0 + "2": { + "-2": 31.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 34 + "null": { + "-1": 34 + } }, "outbound_shipment": { - "null": 34 + "null": { + "-1": 34 + } }, "on_order_by_predecessor": { - "2": 34.0 + "2": { + "-2": 34.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 34.0 + "2": { + "-2": 34.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 6.5900000000000105 }, - "inventory_level": 6.5900000000000105, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, - "demand_cumul": 283, - "demand_met_from_stock": 34.0, - "demand_met_from_stock_cumul": 283, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 283 + }, + "demand_met_from_stock": { + "-1": 34.0 + }, + "demand_met_from_stock_cumul": { + "-1": 283 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 9, "inbound_shipment_pipeline": { - "2": [ - 0, - 28.129999999999995 - ] + "2": { + "-2": [ + 0, + 28.129999999999995 + ] + } }, "inbound_shipment": { - "2": 33.87 + "2": { + "-2": 33.87 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 28 + "null": { + "-1": 28 + } }, "outbound_shipment": { - "null": 28 + "null": { + "-1": 28 + } }, "on_order_by_predecessor": { - "2": 28.129999999999995 + "2": { + "-2": 28.129999999999995 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 27.999999999999993 + "2": { + "-2": 27.999999999999993 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 12.460000000000008 }, - "inventory_level": 12.460000000000008, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, - "demand_cumul": 311, - "demand_met_from_stock": 28.0, - "demand_met_from_stock_cumul": 311, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 311 + }, + "demand_met_from_stock": { + "-1": 28.0 + }, + "demand_met_from_stock_cumul": { + "-1": 311 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 10, "inbound_shipment_pipeline": { - "2": [ - 0, - 31.0 - ] + "2": { + "-2": [ + 0, + 31.0 + ] + } }, "inbound_shipment": { - "2": 28.129999999999995 + "2": { + "-2": 28.129999999999995 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 31 + "null": { + "-1": 31 + } }, "outbound_shipment": { - "null": 31 + "null": { + "-1": 31 + } }, "on_order_by_predecessor": { - "2": 31.0 + "2": { + "-2": 31.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 31.0 + "2": { + "-2": 31.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 9.590000000000003 }, - "inventory_level": 9.590000000000003, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, - "demand_cumul": 342, - "demand_met_from_stock": 31.0, - "demand_met_from_stock_cumul": 342, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 342 + }, + "demand_met_from_stock": { + "-1": 31.0 + }, + "demand_met_from_stock_cumul": { + "-1": 342 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 11, "inbound_shipment_pipeline": { - "2": [ - 0, - 26.0 - ] + "2": { + "-2": [ + 0, + 26.0 + ] + } }, "inbound_shipment": { - "2": 31.0 + "2": { + "-2": 31.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 26 + "null": { + "-1": 26 + } }, "outbound_shipment": { - "null": 26 + "null": { + "-1": 26 + } }, "on_order_by_predecessor": { - "2": 26.0 + "2": { + "-2": 26.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 26.0 + "2": { + "-2": 26.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 14.590000000000003 }, - "inventory_level": 14.590000000000003, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, - "demand_cumul": 368, - "demand_met_from_stock": 26.0, - "demand_met_from_stock_cumul": 368, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 368 + }, + "demand_met_from_stock": { + "-1": 26.0 + }, + "demand_met_from_stock_cumul": { + "-1": 368 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 12, "inbound_shipment_pipeline": { - "2": [ - 0, - 33.0 - ] + "2": { + "-2": [ + 0, + 33.0 + ] + } }, "inbound_shipment": { - "2": 26.0 + "2": { + "-2": 26.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 33 + "null": { + "-1": 33 + } }, "outbound_shipment": { - "null": 33 + "null": { + "-1": 33 + } }, "on_order_by_predecessor": { - "2": 33.0 + "2": { + "-2": 33.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 33.0 + "2": { + "-2": 33.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 7.590000000000003 }, - "inventory_level": 7.590000000000003, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, - "demand_cumul": 401, - "demand_met_from_stock": 33.0, - "demand_met_from_stock_cumul": 401, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 401 + }, + "demand_met_from_stock": { + "-1": 33.0 + }, + "demand_met_from_stock_cumul": { + "-1": 401 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 13, "inbound_shipment_pipeline": { - "2": [ - 0, - 33.87 - ] + "2": { + "-2": [ + 0, + 33.87 + ] + } }, "inbound_shipment": { - "2": 33.0 + "2": { + "-2": 33.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 34 + "null": { + "-1": 34 + } }, "outbound_shipment": { - "null": 34 + "null": { + "-1": 34 + } }, "on_order_by_predecessor": { - "2": 34.0 + "2": { + "-2": 34.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 34.0 + "2": { + "-2": 34.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 6.590000000000003 }, - "inventory_level": 6.590000000000003, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, - "demand_cumul": 435, - "demand_met_from_stock": 34.0, - "demand_met_from_stock_cumul": 435, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 435 + }, + "demand_met_from_stock": { + "-1": 34.0 + }, + "demand_met_from_stock_cumul": { + "-1": 435 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 14, "inbound_shipment_pipeline": { - "2": [ - 0, - 29.130000000000003 - ] + "2": { + "-2": [ + 0, + 29.130000000000003 + ] + } }, "inbound_shipment": { - "2": 33.87 + "2": { + "-2": 33.87 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 29 + "null": { + "-1": 29 + } }, "outbound_shipment": { - "null": 29 + "null": { + "-1": 29 + } }, "on_order_by_predecessor": { - "2": 29.130000000000003 + "2": { + "-2": 29.130000000000003 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 29.0 + "2": { + "-2": 29.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 11.46 }, - "inventory_level": 11.46, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, - "demand_cumul": 464, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 464, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 464 + }, + "demand_met_from_stock": { + "-1": 29.0 + }, + "demand_met_from_stock_cumul": { + "-1": 464 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 15, "inbound_shipment_pipeline": { - "2": [ - 0, - 33.87 - ] + "2": { + "-2": [ + 0, + 33.87 + ] + } }, "inbound_shipment": { - "2": 29.130000000000003 + "2": { + "-2": 29.130000000000003 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 35 + "null": { + "-1": 35 + } }, "outbound_shipment": { - "null": 35 + "null": { + "-1": 35 + } }, "on_order_by_predecessor": { - "2": 34.99999999999999 + "2": { + "-2": 34.99999999999999 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 35.0 + "2": { + "-2": 35.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 5.590000000000003 }, - "inventory_level": 5.590000000000003, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, - "demand_cumul": 499, - "demand_met_from_stock": 35.0, - "demand_met_from_stock_cumul": 499, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 499 + }, + "demand_met_from_stock": { + "-1": 35.0 + }, + "demand_met_from_stock_cumul": { + "-1": 499 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 16, "inbound_shipment_pipeline": { - "2": [ - 0, - 25.13000000000001 - ] + "2": { + "-2": [ + 0, + 25.13000000000001 + ] + } }, "inbound_shipment": { - "2": 33.87 + "2": { + "-2": 33.87 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 24 + "null": { + "-1": 24 + } }, "outbound_shipment": { - "null": 24 + "null": { + "-1": 24 + } }, "on_order_by_predecessor": { - "2": 25.130000000000003 + "2": { + "-2": 25.130000000000003 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 24.000000000000007 + "2": { + "-2": 24.000000000000007 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 15.46 }, - "inventory_level": 15.46, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, - "demand_cumul": 523, - "demand_met_from_stock": 24.0, - "demand_met_from_stock_cumul": 523, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 523 + }, + "demand_met_from_stock": { + "-1": 24.0 + }, + "demand_met_from_stock_cumul": { + "-1": 523 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 17, "inbound_shipment_pipeline": { - "2": [ - 0, - 28.0 - ] + "2": { + "-2": [ + 0, + 28.0 + ] + } }, "inbound_shipment": { - "2": 25.13000000000001 + "2": { + "-2": 25.13000000000001 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 28 + "null": { + "-1": 28 + } }, "outbound_shipment": { - "null": 28 + "null": { + "-1": 28 + } }, "on_order_by_predecessor": { - "2": 27.999999999999993 + "2": { + "-2": 27.999999999999993 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 28.0 + "2": { + "-2": 28.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 12.59000000000001 }, - "inventory_level": 12.59000000000001, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, - "demand_cumul": 551, - "demand_met_from_stock": 28.0, - "demand_met_from_stock_cumul": 551, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 551 + }, + "demand_met_from_stock": { + "-1": 28.0 + }, + "demand_met_from_stock_cumul": { + "-1": 551 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 18, "inbound_shipment_pipeline": { - "2": [ - 0, - 29.0 - ] + "2": { + "-2": [ + 0, + 29.0 + ] + } }, "inbound_shipment": { - "2": 28.0 + "2": { + "-2": 28.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 29 + "null": { + "-1": 29 + } }, "outbound_shipment": { - "null": 29 + "null": { + "-1": 29 + } }, "on_order_by_predecessor": { - "2": 28.999999999999993 + "2": { + "-2": 28.999999999999993 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 29.0 + "2": { + "-2": 29.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 11.59000000000001 }, - "inventory_level": 11.59000000000001, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, - "demand_cumul": 580, - "demand_met_from_stock": 29.0, - "demand_met_from_stock_cumul": 580, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 580 + }, + "demand_met_from_stock": { + "-1": 29.0 + }, + "demand_met_from_stock_cumul": { + "-1": 580 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 19, "inbound_shipment_pipeline": { - "2": [ - 0, - 33.0 - ] + "2": { + "-2": [ + 0, + 33.0 + ] + } }, "inbound_shipment": { - "2": 29.0 + "2": { + "-2": 29.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 33 + "null": { + "-1": 33 + } }, "outbound_shipment": { - "null": 33 + "null": { + "-1": 33 + } }, "on_order_by_predecessor": { - "2": 32.99999999999999 + "2": { + "-2": 32.99999999999999 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 33.0 + "2": { + "-2": 33.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 7.5900000000000105 }, - "inventory_level": 7.5900000000000105, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, - "demand_cumul": 613, - "demand_met_from_stock": 33.0, - "demand_met_from_stock_cumul": 613, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 613 + }, + "demand_met_from_stock": { + "-1": 33.0 + }, + "demand_met_from_stock_cumul": { + "-1": 613 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 20, "inbound_shipment_pipeline": { - "2": [ - 0, - 33.87 - ] + "2": { + "-2": [ + 0, + 33.87 + ] + } }, "inbound_shipment": { - "2": 33.0 + "2": { + "-2": 33.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 43 + "null": { + "-1": 43 + } }, "outbound_shipment": { - "null": 40.59000000000001 + "null": { + "-1": 40.59000000000001 + } }, "on_order_by_predecessor": { - "2": 43.0 + "2": { + "-2": 43.0 + } }, "backorders_by_successor": { - "null": 2.4099999999999895 + "null": { + "-1": 2.4099999999999895 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 43.0 + "2": { + "-2": 43.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": -2.4099999999999895 }, - "inventory_level": -2.4099999999999895, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, - "demand_cumul": 656, - "demand_met_from_stock": 40.59000000000001, - "demand_met_from_stock_cumul": 653.59, - "fill_rate": 0.9963262195121951 + "demand_cumul": { + "-1": 656 + }, + "demand_met_from_stock": { + "-1": 40.59000000000001 + }, + "demand_met_from_stock_cumul": { + "-1": 653.59 + }, + "fill_rate": { + "-1": 0.9963262195121951 + } }, { "node": 1, "period": 21, "inbound_shipment_pipeline": { - "2": [ - 0, - 32.129999999999995 - ] + "2": { + "-2": [ + 0, + 32.129999999999995 + ] + } }, "inbound_shipment": { - "2": 33.87 + "2": { + "-2": 33.87 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 23 + "null": { + "-1": 23 + } }, "outbound_shipment": { - "null": 25.40999999999999 + "null": { + "-1": 25.40999999999999 + } }, "on_order_by_predecessor": { - "2": 32.13 + "2": { + "-2": 32.13 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 22.999999999999993 + "2": { + "-2": 22.999999999999993 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 8.460000000000008 }, - "inventory_level": 8.460000000000008, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, - "demand_cumul": 679, - "demand_met_from_stock": 23.0, - "demand_met_from_stock_cumul": 676.59, - "fill_rate": 0.9964506627393226 + "demand_cumul": { + "-1": 679 + }, + "demand_met_from_stock": { + "-1": 23.0 + }, + "demand_met_from_stock_cumul": { + "-1": 676.59 + }, + "fill_rate": { + "-1": 0.9964506627393226 + } }, { "node": 1, "period": 22, "inbound_shipment_pipeline": { - "2": [ - 0, - 18.999999999999993 - ] + "2": { + "-2": [ + 0, + 18.999999999999993 + ] + } }, "inbound_shipment": { - "2": 32.129999999999995 + "2": { + "-2": 32.129999999999995 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 19 + "null": { + "-1": 19 + } }, "outbound_shipment": { - "null": 19.0 + "null": { + "-1": 19.0 + } }, "on_order_by_predecessor": { - "2": 19.0 + "2": { + "-2": 19.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 18.999999999999993 + "2": { + "-2": 18.999999999999993 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 21.590000000000003 }, - "inventory_level": 21.590000000000003, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, - "demand_cumul": 698, - "demand_met_from_stock": 19.0, - "demand_met_from_stock_cumul": 695.59, - "fill_rate": 0.9965472779369628 + "demand_cumul": { + "-1": 698 + }, + "demand_met_from_stock": { + "-1": 19.0 + }, + "demand_met_from_stock_cumul": { + "-1": 695.59 + }, + "fill_rate": { + "-1": 0.9965472779369628 + } }, { "node": 1, "period": 23, "inbound_shipment_pipeline": { - "2": [ - 0, - 30.0 - ] + "2": { + "-2": [ + 0, + 30.0 + ] + } }, "inbound_shipment": { - "2": 18.999999999999993 + "2": { + "-2": 18.999999999999993 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 30 + "null": { + "-1": 30 + } }, "outbound_shipment": { - "null": 30.0 + "null": { + "-1": 30.0 + } }, "on_order_by_predecessor": { - "2": 30.000000000000007 + "2": { + "-2": 30.000000000000007 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 30.0 + "2": { + "-2": 30.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 10.589999999999996 }, - "inventory_level": 10.589999999999996, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, - "demand_cumul": 728, - "demand_met_from_stock": 30.0, - "demand_met_from_stock_cumul": 725.59, - "fill_rate": 0.9966895604395605 + "demand_cumul": { + "-1": 728 + }, + "demand_met_from_stock": { + "-1": 30.0 + }, + "demand_met_from_stock_cumul": { + "-1": 725.59 + }, + "fill_rate": { + "-1": 0.9966895604395605 + } }, { "node": 1, "period": 24, "inbound_shipment_pipeline": { - "2": [ - 0, - 33.86999999999999 - ] + "2": { + "-2": [ + 0, + 33.86999999999999 + ] + } }, "inbound_shipment": { - "2": 30.0 + "2": { + "-2": 30.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 38 + "null": { + "-1": 38 + } }, "outbound_shipment": { - "null": 38.0 + "null": { + "-1": 38.0 + } }, "on_order_by_predecessor": { - "2": 38.0 + "2": { + "-2": 38.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 38.0 + "2": { + "-2": 38.0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 2.5899999999999963 }, - "inventory_level": 2.5899999999999963, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, - "demand_cumul": 766, - "demand_met_from_stock": 38.0, - "demand_met_from_stock_cumul": 763.59, - "fill_rate": 0.9968537859007833 + "demand_cumul": { + "-1": 766 + }, + "demand_met_from_stock": { + "-1": 38.0 + }, + "demand_met_from_stock_cumul": { + "-1": 763.59 + }, + "fill_rate": { + "-1": 0.9968537859007833 + } }, { "node": 1, "period": 25, "inbound_shipment_pipeline": { - "2": [ - 33.86999999999999, - 0 - ] + "2": { + "-2": [ + 33.86999999999999, + 0 + ] + } }, "inbound_shipment": { - "2": 0 + "2": { + "-2": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_shipment": { - "null": 0 + "null": { + "-1": 0 + } }, "on_order_by_predecessor": { - "2": 38.0 + "2": { + "-2": 38.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 0 + "2": { + "-2": 0 + } }, "raw_material_inventory": { - "2": 0.0 + "-2": 0.0 + }, + "inventory_level": { + "-1": 2.5899999999999963 }, - "inventory_level": 2.5899999999999963, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 766, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 763.59, - "fill_rate": 0 + "demand_cumul": { + "-1": 766 + }, + "demand_met_from_stock": { + "-1": 0 + }, + "demand_met_from_stock_cumul": { + "-1": 763.59 + }, + "fill_rate": { + "-1": 0 + } }, { "node": 1, "period": 26, "inbound_shipment_pipeline": { - "2": [ - 0, - 0 - ] + "2": { + "-2": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "2": 0 + "2": { + "-2": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_shipment": { - "null": 0 + "null": { + "-1": 0 + } }, "on_order_by_predecessor": { - "2": 0 + "2": { + "-2": 0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 0 + "2": { + "-2": 0 + } }, "raw_material_inventory": { - "2": 0 + "-2": 0 + }, + "inventory_level": { + "-1": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-1": 0 + }, + "demand_met_from_stock": { + "-1": 0 + }, + "demand_met_from_stock_cumul": { + "-1": 0 + }, + "fill_rate": { + "-1": 0 + } }, { "node": 1, "period": 27, "inbound_shipment_pipeline": { - "2": [ - 0, - 0 - ] + "2": { + "-2": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "2": 0 + "2": { + "-2": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_shipment": { - "null": 0 + "null": { + "-1": 0 + } }, "on_order_by_predecessor": { - "2": 0 + "2": { + "-2": 0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0 + "2": { + "-2": 0 + } }, "order_quantity": { - "2": 0 + "2": { + "-2": 0 + } }, "raw_material_inventory": { - "2": 0 + "-2": 0 + }, + "inventory_level": { + "-1": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-1": 0 + }, + "demand_met_from_stock": { + "-1": 0 + }, + "demand_met_from_stock_cumul": { + "-1": 0 + }, + "fill_rate": { + "-1": 0 + } } ] } ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], "period": 24, "max_max_replenishment_time": null }, diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json index 0b32adc..e08ce3d 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json @@ -7,9 +7,14 @@ "data": { "nodes": [ { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2, 3 @@ -28,12 +33,14 @@ "order_lead_time": null, "demand_source": { "type": "UD", - "mean": null, - "standard_deviation": null, + "mean": 5.0, + "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": 8, @@ -42,13 +49,13 @@ "_inventory_policy": { "type": "BEBS", "node": 1, + "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -57,6 +64,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -73,1930 +81,3175 @@ "node": 1, "period": 0, "inbound_shipment_pipeline": { - "2": [ - 0, - 6.0 - ], - "3": [ - 0, - 6.0 - ] + "2": { + "-2": [ + 0, + 6.0 + ] + }, + "3": { + "-3": [ + 0, + 6.0 + ] + } }, "inbound_shipment": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 6 + "null": { + "-1": 6 + } }, "outbound_shipment": { - "null": 6 + "null": { + "-1": 6 + } }, "on_order_by_predecessor": { - "2": 6.0, - "3": 6.0 + "2": { + "-2": 6.0 + }, + "3": { + "-3": 6.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 6.0, - "3": 6.0 + "2": { + "-2": 6.0 + }, + "3": { + "-3": 6.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 2.0 }, - "inventory_level": 2.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 6, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 6, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 6 + }, + "demand_met_from_stock": { + "-1": 6.0 + }, + "demand_met_from_stock_cumul": { + "-1": 6 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 1, "inbound_shipment_pipeline": { - "2": [ - 0, - 3.0 - ], - "3": [ - 0, - 3.0 - ] + "2": { + "-2": [ + 0, + 3.0 + ] + }, + "3": { + "-3": [ + 0, + 3.0 + ] + } }, "inbound_shipment": { - "2": 6.0, - "3": 6.0 + "2": { + "-2": 6.0 + }, + "3": { + "-3": 6.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 3 + "null": { + "-1": 3 + } }, "outbound_shipment": { - "null": 3 + "null": { + "-1": 3 + } }, "on_order_by_predecessor": { - "2": 3.0, - "3": 3.0 + "2": { + "-2": 3.0 + }, + "3": { + "-3": 3.0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 3.0, - "3": 3.0 + "2": { + "-2": 3.0 + }, + "3": { + "-3": 3.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 5.0 }, - "inventory_level": 5.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 9, - "demand_met_from_stock": 3.0, - "demand_met_from_stock_cumul": 9, - "fill_rate": 1.0 + "demand_cumul": { + "-1": 9 + }, + "demand_met_from_stock": { + "-1": 3.0 + }, + "demand_met_from_stock_cumul": { + "-1": 9 + }, + "fill_rate": { + "-1": 1.0 + } }, { "node": 1, "period": 2, "inbound_shipment_pipeline": { - "2": [ - 0, - 10.0 - ], - "3": [ - 0, - 10.0 - ] + "2": { + "-2": [ + 0, + 10.0 + ] + }, + "3": { + "-3": [ + 0, + 10.0 + ] + } }, "inbound_shipment": { - "2": 3.0, - "3": 3.0 + "2": { + "-2": 3.0 + }, + "3": { + "-3": 3.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 10 + "null": { + "-1": 10 + } }, "outbound_shipment": { - "null": 8.0 + "null": { + "-1": 8.0 + } }, "on_order_by_predecessor": { - "2": 10.0, - "3": 10.0 + "2": { + "-2": 10.0 + }, + "3": { + "-3": 10.0 + } }, "backorders_by_successor": { - "null": 2.0 + "null": { + "-1": 2.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 10.0, - "3": 10.0 + "2": { + "-2": 10.0 + }, + "3": { + "-3": 10.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": -2.0 }, - "inventory_level": -2.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 19, - "demand_met_from_stock": 8.0, - "demand_met_from_stock_cumul": 17.0, - "fill_rate": 0.8947368421052632 + "demand_cumul": { + "-1": 19 + }, + "demand_met_from_stock": { + "-1": 8.0 + }, + "demand_met_from_stock_cumul": { + "-1": 17.0 + }, + "fill_rate": { + "-1": 0.8947368421052632 + } }, { "node": 1, "period": 3, "inbound_shipment_pipeline": { - "2": [ - 0, - 7.0 - ], - "3": [ - 0, - 7.0 - ] + "2": { + "-2": [ + 0, + 7.0 + ] + }, + "3": { + "-3": [ + 0, + 7.0 + ] + } }, "inbound_shipment": { - "2": 10.0, - "3": 10.0 + "2": { + "-2": 10.0 + }, + "3": { + "-3": 10.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 7 + "null": { + "-1": 7 + } }, "outbound_shipment": { - "null": 9.0 + "null": { + "-1": 9.0 + } }, "on_order_by_predecessor": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 1.0 }, - "inventory_level": 1.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 26, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 24.0, - "fill_rate": 0.9230769230769231 + "demand_cumul": { + "-1": 26 + }, + "demand_met_from_stock": { + "-1": 7.0 + }, + "demand_met_from_stock_cumul": { + "-1": 24.0 + }, + "fill_rate": { + "-1": 0.9230769230769231 + } }, { "node": 1, "period": 4, "inbound_shipment_pipeline": { - "2": [ - 0, - 4.0 - ], - "3": [ - 0, - 4.0 - ] + "2": { + "-2": [ + 0, + 4.0 + ] + }, + "3": { + "-3": [ + 0, + 4.0 + ] + } }, "inbound_shipment": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 4 + "null": { + "-1": 4 + } }, "outbound_shipment": { - "null": 4.0 + "null": { + "-1": 4.0 + } }, "on_order_by_predecessor": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 4.0 }, - "inventory_level": 4.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 30, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 28.0, - "fill_rate": 0.9333333333333333 + "demand_cumul": { + "-1": 30 + }, + "demand_met_from_stock": { + "-1": 4.0 + }, + "demand_met_from_stock_cumul": { + "-1": 28.0 + }, + "fill_rate": { + "-1": 0.9333333333333333 + } }, { "node": 1, "period": 5, "inbound_shipment_pipeline": { - "2": [ - 0, - 6.0 - ], - "3": [ - 0, - 6.0 - ] + "2": { + "-2": [ + 0, + 6.0 + ] + }, + "3": { + "-3": [ + 0, + 6.0 + ] + } }, "inbound_shipment": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 6 + "null": { + "-1": 6 + } }, "outbound_shipment": { - "null": 6.0 + "null": { + "-1": 6.0 + } }, "on_order_by_predecessor": { - "2": 6.0, - "3": 6.0 + "2": { + "-2": 6.0 + }, + "3": { + "-3": 6.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 6.0, - "3": 6.0 + "2": { + "-2": 6.0 + }, + "3": { + "-3": 6.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 2.0 }, - "inventory_level": 2.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 36, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 34.0, - "fill_rate": 0.9444444444444444 + "demand_cumul": { + "-1": 36 + }, + "demand_met_from_stock": { + "-1": 6.0 + }, + "demand_met_from_stock_cumul": { + "-1": 34.0 + }, + "fill_rate": { + "-1": 0.9444444444444444 + } }, { "node": 1, "period": 6, "inbound_shipment_pipeline": { - "2": [ - 0, - 9.0 - ], - "3": [ - 0, - 9.0 - ] + "2": { + "-2": [ + 0, + 9.0 + ] + }, + "3": { + "-3": [ + 0, + 9.0 + ] + } }, "inbound_shipment": { - "2": 6.0, - "3": 6.0 + "2": { + "-2": 6.0 + }, + "3": { + "-3": 6.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 9 + "null": { + "-1": 9 + } }, "outbound_shipment": { - "null": 8.0 + "null": { + "-1": 8.0 + } }, "on_order_by_predecessor": { - "2": 9.0, - "3": 9.0 + "2": { + "-2": 9.0 + }, + "3": { + "-3": 9.0 + } }, "backorders_by_successor": { - "null": 1.0 + "null": { + "-1": 1.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 9.0, - "3": 9.0 + "2": { + "-2": 9.0 + }, + "3": { + "-3": 9.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": -1.0 }, - "inventory_level": -1.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 45, - "demand_met_from_stock": 8.0, - "demand_met_from_stock_cumul": 42.0, - "fill_rate": 0.9333333333333333 + "demand_cumul": { + "-1": 45 + }, + "demand_met_from_stock": { + "-1": 8.0 + }, + "demand_met_from_stock_cumul": { + "-1": 42.0 + }, + "fill_rate": { + "-1": 0.9333333333333333 + } }, { "node": 1, "period": 7, "inbound_shipment_pipeline": { - "2": [ - 0, - 2.0 - ], - "3": [ - 0, - 2.0 - ] + "2": { + "-2": [ + 0, + 2.0 + ] + }, + "3": { + "-3": [ + 0, + 2.0 + ] + } }, "inbound_shipment": { - "2": 9.0, - "3": 9.0 + "2": { + "-2": 9.0 + }, + "3": { + "-3": 9.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 2 + "null": { + "-1": 2 + } }, "outbound_shipment": { - "null": 3.0 + "null": { + "-1": 3.0 + } }, "on_order_by_predecessor": { - "2": 2.0, - "3": 2.0 + "2": { + "-2": 2.0 + }, + "3": { + "-3": 2.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 2.0, - "3": 2.0 + "2": { + "-2": 2.0 + }, + "3": { + "-3": 2.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 6.0 }, - "inventory_level": 6.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 47, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 44.0, - "fill_rate": 0.9361702127659575 + "demand_cumul": { + "-1": 47 + }, + "demand_met_from_stock": { + "-1": 2.0 + }, + "demand_met_from_stock_cumul": { + "-1": 44.0 + }, + "fill_rate": { + "-1": 0.9361702127659575 + } }, { "node": 1, "period": 8, "inbound_shipment_pipeline": { - "2": [ - 0, - 6.0 - ], - "3": [ - 0, - 6.0 - ] + "2": { + "-2": [ + 0, + 6.0 + ] + }, + "3": { + "-3": [ + 0, + 6.0 + ] + } }, "inbound_shipment": { - "2": 2.0, - "3": 2.0 + "2": { + "-2": 2.0 + }, + "3": { + "-3": 2.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 6 + "null": { + "-1": 6 + } }, "outbound_shipment": { - "null": 6.0 + "null": { + "-1": 6.0 + } }, "on_order_by_predecessor": { - "2": 6.0, - "3": 6.0 + "2": { + "-2": 6.0 + }, + "3": { + "-3": 6.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 6.0, - "3": 6.0 + "2": { + "-2": 6.0 + }, + "3": { + "-3": 6.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 2.0 }, - "inventory_level": 2.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 53, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 50.0, - "fill_rate": 0.9433962264150944 + "demand_cumul": { + "-1": 53 + }, + "demand_met_from_stock": { + "-1": 6.0 + }, + "demand_met_from_stock_cumul": { + "-1": 50.0 + }, + "fill_rate": { + "-1": 0.9433962264150944 + } }, { "node": 1, "period": 9, "inbound_shipment_pipeline": { - "2": [ - 0, - 10.0 - ], - "3": [ - 0, - 10.0 - ] + "2": { + "-2": [ + 0, + 10.0 + ] + }, + "3": { + "-3": [ + 0, + 10.0 + ] + } }, "inbound_shipment": { - "2": 6.0, - "3": 6.0 + "2": { + "-2": 6.0 + }, + "3": { + "-3": 6.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 10 + "null": { + "-1": 10 + } }, "outbound_shipment": { - "null": 8.0 + "null": { + "-1": 8.0 + } }, "on_order_by_predecessor": { - "2": 10.0, - "3": 10.0 + "2": { + "-2": 10.0 + }, + "3": { + "-3": 10.0 + } }, "backorders_by_successor": { - "null": 2.0 + "null": { + "-1": 2.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 10.0, - "3": 10.0 + "2": { + "-2": 10.0 + }, + "3": { + "-3": 10.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": -2.0 }, - "inventory_level": -2.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 63, - "demand_met_from_stock": 8.0, - "demand_met_from_stock_cumul": 58.0, - "fill_rate": 0.9206349206349206 + "demand_cumul": { + "-1": 63 + }, + "demand_met_from_stock": { + "-1": 8.0 + }, + "demand_met_from_stock_cumul": { + "-1": 58.0 + }, + "fill_rate": { + "-1": 0.9206349206349206 + } }, { "node": 1, "period": 10, "inbound_shipment_pipeline": { - "2": [ - 0, - 10.0 - ], - "3": [ - 0, - 10.0 - ] + "2": { + "-2": [ + 0, + 10.0 + ] + }, + "3": { + "-3": [ + 0, + 10.0 + ] + } }, "inbound_shipment": { - "2": 10.0, - "3": 10.0 + "2": { + "-2": 10.0 + }, + "3": { + "-3": 10.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 10 + "null": { + "-1": 10 + } }, "outbound_shipment": { - "null": 10.0 + "null": { + "-1": 10.0 + } }, "on_order_by_predecessor": { - "2": 10.0, - "3": 10.0 + "2": { + "-2": 10.0 + }, + "3": { + "-3": 10.0 + } }, "backorders_by_successor": { - "null": 2.0 + "null": { + "-1": 2.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 10.0, - "3": 10.0 + "2": { + "-2": 10.0 + }, + "3": { + "-3": 10.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": -2.0 }, - "inventory_level": -2.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 73, - "demand_met_from_stock": 8.0, - "demand_met_from_stock_cumul": 66.0, - "fill_rate": 0.9041095890410958 + "demand_cumul": { + "-1": 73 + }, + "demand_met_from_stock": { + "-1": 8.0 + }, + "demand_met_from_stock_cumul": { + "-1": 66.0 + }, + "fill_rate": { + "-1": 0.9041095890410958 + } }, { "node": 1, "period": 11, "inbound_shipment_pipeline": { - "2": [ - 0, - 7.0 - ], - "3": [ - 0, - 7.0 - ] + "2": { + "-2": [ + 0, + 7.0 + ] + }, + "3": { + "-3": [ + 0, + 7.0 + ] + } }, "inbound_shipment": { - "2": 10.0, - "3": 10.0 + "2": { + "-2": 10.0 + }, + "3": { + "-3": 10.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 7 + "null": { + "-1": 7 + } }, "outbound_shipment": { - "null": 9.0 + "null": { + "-1": 9.0 + } }, "on_order_by_predecessor": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 1.0 }, - "inventory_level": 1.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 80, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 73.0, - "fill_rate": 0.9125 + "demand_cumul": { + "-1": 80 + }, + "demand_met_from_stock": { + "-1": 7.0 + }, + "demand_met_from_stock_cumul": { + "-1": 73.0 + }, + "fill_rate": { + "-1": 0.9125 + } }, { "node": 1, "period": 12, "inbound_shipment_pipeline": { - "2": [ - 0, - 4.0 - ], - "3": [ - 0, - 4.0 - ] + "2": { + "-2": [ + 0, + 4.0 + ] + }, + "3": { + "-3": [ + 0, + 4.0 + ] + } }, "inbound_shipment": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 4 + "null": { + "-1": 4 + } }, "outbound_shipment": { - "null": 4.0 + "null": { + "-1": 4.0 + } }, "on_order_by_predecessor": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 4.0 }, - "inventory_level": 4.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 84, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 77.0, - "fill_rate": 0.9166666666666666 + "demand_cumul": { + "-1": 84 + }, + "demand_met_from_stock": { + "-1": 4.0 + }, + "demand_met_from_stock_cumul": { + "-1": 77.0 + }, + "fill_rate": { + "-1": 0.9166666666666666 + } }, { "node": 1, "period": 13, "inbound_shipment_pipeline": { - "2": [ - 0, - 3.0 - ], - "3": [ - 0, - 3.0 - ] + "2": { + "-2": [ + 0, + 3.0 + ] + }, + "3": { + "-3": [ + 0, + 3.0 + ] + } }, "inbound_shipment": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 3 + "null": { + "-1": 3 + } }, "outbound_shipment": { - "null": 3.0 + "null": { + "-1": 3.0 + } }, "on_order_by_predecessor": { - "2": 3.0, - "3": 3.0 + "2": { + "-2": 3.0 + }, + "3": { + "-3": 3.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 3.0, - "3": 3.0 + "2": { + "-2": 3.0 + }, + "3": { + "-3": 3.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 5.0 }, - "inventory_level": 5.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 87, - "demand_met_from_stock": 3.0, - "demand_met_from_stock_cumul": 80.0, - "fill_rate": 0.9195402298850575 + "demand_cumul": { + "-1": 87 + }, + "demand_met_from_stock": { + "-1": 3.0 + }, + "demand_met_from_stock_cumul": { + "-1": 80.0 + }, + "fill_rate": { + "-1": 0.9195402298850575 + } }, { "node": 1, "period": 14, "inbound_shipment_pipeline": { - "2": [ - 0, - 7.0 - ], - "3": [ - 0, - 7.0 - ] + "2": { + "-2": [ + 0, + 7.0 + ] + }, + "3": { + "-3": [ + 0, + 7.0 + ] + } }, "inbound_shipment": { - "2": 3.0, - "3": 3.0 + "2": { + "-2": 3.0 + }, + "3": { + "-3": 3.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 7 + "null": { + "-1": 7 + } }, "outbound_shipment": { - "null": 7.0 + "null": { + "-1": 7.0 + } }, "on_order_by_predecessor": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 1.0 }, - "inventory_level": 1.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 94, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 87.0, - "fill_rate": 0.925531914893617 + "demand_cumul": { + "-1": 94 + }, + "demand_met_from_stock": { + "-1": 7.0 + }, + "demand_met_from_stock_cumul": { + "-1": 87.0 + }, + "fill_rate": { + "-1": 0.925531914893617 + } }, { "node": 1, "period": 15, "inbound_shipment_pipeline": { - "2": [ - 0, - 7.0 - ], - "3": [ - 0, - 7.0 - ] + "2": { + "-2": [ + 0, + 7.0 + ] + }, + "3": { + "-3": [ + 0, + 7.0 + ] + } }, "inbound_shipment": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 7 + "null": { + "-1": 7 + } }, "outbound_shipment": { - "null": 7.0 + "null": { + "-1": 7.0 + } }, "on_order_by_predecessor": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 1.0 }, - "inventory_level": 1.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 101, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 94.0, - "fill_rate": 0.9306930693069307 + "demand_cumul": { + "-1": 101 + }, + "demand_met_from_stock": { + "-1": 7.0 + }, + "demand_met_from_stock_cumul": { + "-1": 94.0 + }, + "fill_rate": { + "-1": 0.9306930693069307 + } }, { "node": 1, "period": 16, "inbound_shipment_pipeline": { - "2": [ - 0, - 2.0 - ], - "3": [ - 0, - 2.0 - ] + "2": { + "-2": [ + 0, + 2.0 + ] + }, + "3": { + "-3": [ + 0, + 2.0 + ] + } }, "inbound_shipment": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 2 + "null": { + "-1": 2 + } }, "outbound_shipment": { - "null": 2.0 + "null": { + "-1": 2.0 + } }, "on_order_by_predecessor": { - "2": 2.0, - "3": 2.0 + "2": { + "-2": 2.0 + }, + "3": { + "-3": 2.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 2.0, - "3": 2.0 + "2": { + "-2": 2.0 + }, + "3": { + "-3": 2.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 6.0 }, - "inventory_level": 6.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 103, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 96.0, - "fill_rate": 0.9320388349514563 + "demand_cumul": { + "-1": 103 + }, + "demand_met_from_stock": { + "-1": 2.0 + }, + "demand_met_from_stock_cumul": { + "-1": 96.0 + }, + "fill_rate": { + "-1": 0.9320388349514563 + } }, { "node": 1, "period": 17, "inbound_shipment_pipeline": { - "2": [ - 0, - 5.0 - ], - "3": [ - 0, - 5.0 - ] + "2": { + "-2": [ + 0, + 5.0 + ] + }, + "3": { + "-3": [ + 0, + 5.0 + ] + } }, "inbound_shipment": { - "2": 2.0, - "3": 2.0 + "2": { + "-2": 2.0 + }, + "3": { + "-3": 2.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 5 + "null": { + "-1": 5 + } }, "outbound_shipment": { - "null": 5.0 + "null": { + "-1": 5.0 + } }, "on_order_by_predecessor": { - "2": 5.0, - "3": 5.0 + "2": { + "-2": 5.0 + }, + "3": { + "-3": 5.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 5.0, - "3": 5.0 + "2": { + "-2": 5.0 + }, + "3": { + "-3": 5.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 3.0 }, - "inventory_level": 3.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 108, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 101.0, - "fill_rate": 0.9351851851851852 + "demand_cumul": { + "-1": 108 + }, + "demand_met_from_stock": { + "-1": 5.0 + }, + "demand_met_from_stock_cumul": { + "-1": 101.0 + }, + "fill_rate": { + "-1": 0.9351851851851852 + } }, { "node": 1, "period": 18, "inbound_shipment_pipeline": { - "2": [ - 0, - 4.0 - ], - "3": [ - 0, - 4.0 - ] + "2": { + "-2": [ + 0, + 4.0 + ] + }, + "3": { + "-3": [ + 0, + 4.0 + ] + } }, "inbound_shipment": { - "2": 5.0, - "3": 5.0 + "2": { + "-2": 5.0 + }, + "3": { + "-3": 5.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 4 + "null": { + "-1": 4 + } }, "outbound_shipment": { - "null": 4.0 + "null": { + "-1": 4.0 + } }, "on_order_by_predecessor": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 4.0 }, - "inventory_level": 4.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 112, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 105.0, - "fill_rate": 0.9375 + "demand_cumul": { + "-1": 112 + }, + "demand_met_from_stock": { + "-1": 4.0 + }, + "demand_met_from_stock_cumul": { + "-1": 105.0 + }, + "fill_rate": { + "-1": 0.9375 + } }, { "node": 1, "period": 19, "inbound_shipment_pipeline": { - "2": [ - 0, - 1.0 - ], - "3": [ - 0, - 1.0 - ] + "2": { + "-2": [ + 0, + 1.0 + ] + }, + "3": { + "-3": [ + 0, + 1.0 + ] + } }, "inbound_shipment": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 1 + "null": { + "-1": 1 + } }, "outbound_shipment": { - "null": 1.0 + "null": { + "-1": 1.0 + } }, "on_order_by_predecessor": { - "2": 1.0, - "3": 1.0 + "2": { + "-2": 1.0 + }, + "3": { + "-3": 1.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 1.0, - "3": 1.0 + "2": { + "-2": 1.0 + }, + "3": { + "-3": 1.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 7.0 }, - "inventory_level": 7.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 113, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 106.0, - "fill_rate": 0.9380530973451328 + "demand_cumul": { + "-1": 113 + }, + "demand_met_from_stock": { + "-1": 1.0 + }, + "demand_met_from_stock_cumul": { + "-1": 106.0 + }, + "fill_rate": { + "-1": 0.9380530973451328 + } }, { "node": 1, "period": 20, "inbound_shipment_pipeline": { - "2": [ - 0, - 7.0 - ], - "3": [ - 0, - 7.0 - ] + "2": { + "-2": [ + 0, + 7.0 + ] + }, + "3": { + "-3": [ + 0, + 7.0 + ] + } }, "inbound_shipment": { - "2": 1.0, - "3": 1.0 + "2": { + "-2": 1.0 + }, + "3": { + "-3": 1.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 7 + "null": { + "-1": 7 + } }, "outbound_shipment": { - "null": 7.0 + "null": { + "-1": 7.0 + } }, "on_order_by_predecessor": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 1.0 }, - "inventory_level": 1.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 120, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 113.0, - "fill_rate": 0.9416666666666667 + "demand_cumul": { + "-1": 120 + }, + "demand_met_from_stock": { + "-1": 7.0 + }, + "demand_met_from_stock_cumul": { + "-1": 113.0 + }, + "fill_rate": { + "-1": 0.9416666666666667 + } }, { "node": 1, "period": 21, "inbound_shipment_pipeline": { - "2": [ - 0, - 5.0 - ], - "3": [ - 0, - 5.0 - ] + "2": { + "-2": [ + 0, + 5.0 + ] + }, + "3": { + "-3": [ + 0, + 5.0 + ] + } }, "inbound_shipment": { - "2": 7.0, - "3": 7.0 + "2": { + "-2": 7.0 + }, + "3": { + "-3": 7.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 5 + "null": { + "-1": 5 + } }, "outbound_shipment": { - "null": 5.0 + "null": { + "-1": 5.0 + } }, "on_order_by_predecessor": { - "2": 5.0, - "3": 5.0 + "2": { + "-2": 5.0 + }, + "3": { + "-3": 5.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 5.0, - "3": 5.0 + "2": { + "-2": 5.0 + }, + "3": { + "-3": 5.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 3.0 }, - "inventory_level": 3.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 125, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 118.0, - "fill_rate": 0.944 + "demand_cumul": { + "-1": 125 + }, + "demand_met_from_stock": { + "-1": 5.0 + }, + "demand_met_from_stock_cumul": { + "-1": 118.0 + }, + "fill_rate": { + "-1": 0.944 + } }, { "node": 1, "period": 22, "inbound_shipment_pipeline": { - "2": [ - 0, - 1.0 - ], - "3": [ - 0, - 1.0 - ] + "2": { + "-2": [ + 0, + 1.0 + ] + }, + "3": { + "-3": [ + 0, + 1.0 + ] + } }, "inbound_shipment": { - "2": 5.0, - "3": 5.0 + "2": { + "-2": 5.0 + }, + "3": { + "-3": 5.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 1 + "null": { + "-1": 1 + } }, "outbound_shipment": { - "null": 1.0 + "null": { + "-1": 1.0 + } }, "on_order_by_predecessor": { - "2": 1.0, - "3": 1.0 + "2": { + "-2": 1.0 + }, + "3": { + "-3": 1.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 1.0, - "3": 1.0 + "2": { + "-2": 1.0 + }, + "3": { + "-3": 1.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 7.0 }, - "inventory_level": 7.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 126, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 119.0, - "fill_rate": 0.9444444444444444 + "demand_cumul": { + "-1": 126 + }, + "demand_met_from_stock": { + "-1": 1.0 + }, + "demand_met_from_stock_cumul": { + "-1": 119.0 + }, + "fill_rate": { + "-1": 0.9444444444444444 + } }, { "node": 1, "period": 23, "inbound_shipment_pipeline": { - "2": [ - 0, - 4.0 - ], - "3": [ - 0, - 4.0 - ] + "2": { + "-2": [ + 0, + 4.0 + ] + }, + "3": { + "-3": [ + 0, + 4.0 + ] + } }, "inbound_shipment": { - "2": 1.0, - "3": 1.0 + "2": { + "-2": 1.0 + }, + "3": { + "-3": 1.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 4 + "null": { + "-1": 4 + } }, "outbound_shipment": { - "null": 4.0 + "null": { + "-1": 4.0 + } }, "on_order_by_predecessor": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 4.0 }, - "inventory_level": 4.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 130, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 123.0, - "fill_rate": 0.9461538461538461 + "demand_cumul": { + "-1": 130 + }, + "demand_met_from_stock": { + "-1": 4.0 + }, + "demand_met_from_stock_cumul": { + "-1": 123.0 + }, + "fill_rate": { + "-1": 0.9461538461538461 + } }, { "node": 1, "period": 24, "inbound_shipment_pipeline": { - "2": [ - 0, - 0.0 - ], - "3": [ - 0, - 0.0 - ] + "2": { + "-2": [ + 0, + 0.0 + ] + }, + "3": { + "-3": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "2": 4.0, - "3": 4.0 + "2": { + "-2": 4.0 + }, + "3": { + "-3": 4.0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_shipment": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "on_order_by_predecessor": { - "2": 0.0, - "3": 0.0 + "2": { + "-2": 0.0 + }, + "3": { + "-3": 0.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 0.0, - "3": 0.0 + "2": { + "-2": 0.0 + }, + "3": { + "-3": 0.0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 8.0 }, - "inventory_level": 8.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 130, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 123.0, - "fill_rate": 0.9461538461538461 + "demand_cumul": { + "-1": 130 + }, + "demand_met_from_stock": { + "-1": 0.0 + }, + "demand_met_from_stock_cumul": { + "-1": 123.0 + }, + "fill_rate": { + "-1": 0.9461538461538461 + } }, { "node": 1, "period": 25, "inbound_shipment_pipeline": { - "2": [ - 0.0, - 0 - ], - "3": [ - 0.0, - 0 - ] + "2": { + "-2": [ + 0.0, + 0 + ] + }, + "3": { + "-3": [ + 0.0, + 0 + ] + } }, "inbound_shipment": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_shipment": { - "null": 0 + "null": { + "-1": 0 + } }, "on_order_by_predecessor": { - "2": 0.0, - "3": 0.0 + "2": { + "-2": 0.0 + }, + "3": { + "-3": 0.0 + } }, "backorders_by_successor": { - "null": 0.0 + "null": { + "-1": 0.0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "raw_material_inventory": { - "2": 0.0, - "3": 0.0 + "-3": 0.0, + "-2": 0.0 + }, + "inventory_level": { + "-1": 8.0 }, - "inventory_level": 8.0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 130, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 123.0, - "fill_rate": 0 + "demand_cumul": { + "-1": 130 + }, + "demand_met_from_stock": { + "-1": 0 + }, + "demand_met_from_stock_cumul": { + "-1": 123.0 + }, + "fill_rate": { + "-1": 0 + } }, { "node": 1, "period": 26, "inbound_shipment_pipeline": { - "2": [ - 0, - 0 - ], - "3": [ - 0, - 0 - ] + "2": { + "-2": [ + 0, + 0 + ] + }, + "3": { + "-3": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_shipment": { - "null": 0 + "null": { + "-1": 0 + } }, "on_order_by_predecessor": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "raw_material_inventory": { - "2": 0, - "3": 0 + "-3": 0, + "-2": 0 + }, + "inventory_level": { + "-1": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-1": 0 + }, + "demand_met_from_stock": { + "-1": 0 + }, + "demand_met_from_stock_cumul": { + "-1": 0 + }, + "fill_rate": { + "-1": 0 + } }, { "node": 1, "period": 27, "inbound_shipment_pipeline": { - "2": [ - 0, - 0 - ], - "3": [ - 0, - 0 - ] + "2": { + "-2": [ + 0, + 0 + ] + }, + "3": { + "-3": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_shipment": { - "null": 0 + "null": { + "-1": 0 + } }, "on_order_by_predecessor": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "raw_material_inventory": { - "2": 0, - "3": 0 + "-3": 0, + "-2": 0 + }, + "inventory_level": { + "-1": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-1": 0 + }, + "demand_met_from_stock": { + "-1": 0 + }, + "demand_met_from_stock_cumul": { + "-1": 0 + }, + "fill_rate": { + "-1": 0 + } }, { "node": 1, "period": 28, "inbound_shipment_pipeline": { - "2": [ - 0, - 0 - ], - "3": [ - 0, - 0 - ] + "2": { + "-2": [ + 0, + 0 + ] + }, + "3": { + "-3": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_shipment": { - "null": 0 + "null": { + "-1": 0 + } }, "on_order_by_predecessor": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "raw_material_inventory": { - "2": 0, - "3": 0 + "-3": 0, + "-2": 0 + }, + "inventory_level": { + "-1": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-1": 0 + }, + "demand_met_from_stock": { + "-1": 0 + }, + "demand_met_from_stock_cumul": { + "-1": 0 + }, + "fill_rate": { + "-1": 0 + } }, { "node": 1, "period": 29, "inbound_shipment_pipeline": { - "2": [ - 0, - 0 - ], - "3": [ - 0, - 0 - ] + "2": { + "-2": [ + 0, + 0 + ] + }, + "3": { + "-3": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_shipment": { - "null": 0 + "null": { + "-1": 0 + } }, "on_order_by_predecessor": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "raw_material_inventory": { - "2": 0, - "3": 0 + "-3": 0, + "-2": 0 + }, + "inventory_level": { + "-1": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-1": 0 + }, + "demand_met_from_stock": { + "-1": 0 + }, + "demand_met_from_stock_cumul": { + "-1": 0 + }, + "fill_rate": { + "-1": 0 + } }, { "node": 1, "period": 30, "inbound_shipment_pipeline": { - "2": [ - 0, - 0 - ], - "3": [ - 0, - 0 - ] + "2": { + "-2": [ + 0, + 0 + ] + }, + "3": { + "-3": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "inbound_order_pipeline": { - "null": [ - 0 - ] + "null": { + "-1": [ + 0 + ] + } }, "inbound_order": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_shipment": { - "null": 0 + "null": { + "-1": 0 + } }, "on_order_by_predecessor": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "backorders_by_successor": { - "null": 0 + "null": { + "-1": 0 + } }, "outbound_disrupted_items": { - "null": 0 + "null": { + "-1": 0 + } }, "inbound_disrupted_items": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "order_quantity": { - "2": 0, - "3": 0 + "2": { + "-2": 0 + }, + "3": { + "-3": 0 + } }, "raw_material_inventory": { - "2": 0, - "3": 0 + "-3": 0, + "-2": 0 + }, + "inventory_level": { + "-1": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-1": 0 + }, + "demand_met_from_stock": { + "-1": 0 + }, + "demand_met_from_stock_cumul": { + "-1": 0 + }, + "fill_rate": { + "-1": 0 + } } ] }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 5 ], @@ -2020,6 +3273,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": 8, @@ -2028,13 +3283,13 @@ "_inventory_policy": { "type": "BEBS", "node": 2, + "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -2043,6 +3298,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -2059,1651 +3315,2586 @@ "node": 2, "period": 0, "inbound_shipment_pipeline": { - "5": [ - 0, - 14.0 - ] + "5": { + "-5": [ + 0, + 14.0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 6.0 + "1": { + "-2": 6.0 + } }, "outbound_shipment": { - "1": 6.0 + "1": { + "-2": 6.0 + } }, "on_order_by_predecessor": { - "5": 14.0 + "5": { + "-5": 14.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 14.0 + "5": { + "-5": 14.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 2.0 }, - "inventory_level": 2.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 6.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 6.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 6.0 + }, + "demand_met_from_stock": { + "-2": 6.0 + }, + "demand_met_from_stock_cumul": { + "-2": 6.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 1, "inbound_shipment_pipeline": { - "5": [ - 0, - 3.0 - ] + "5": { + "-5": [ + 0, + 3.0 + ] + } }, "inbound_shipment": { - "5": 14.0 + "5": { + "-5": 14.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 3.0 + "1": { + "-2": 3.0 + } }, "outbound_shipment": { - "1": 3.0 + "1": { + "-2": 3.0 + } }, "on_order_by_predecessor": { - "5": 3.0 + "5": { + "-5": 3.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 3.0 + "5": { + "-5": 3.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 13.0 }, - "inventory_level": 13.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 9.0, - "demand_met_from_stock": 3.0, - "demand_met_from_stock_cumul": 9.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 9.0 + }, + "demand_met_from_stock": { + "-2": 3.0 + }, + "demand_met_from_stock_cumul": { + "-2": 9.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 2, "inbound_shipment_pipeline": { - "5": [ - 0, - 10.0 - ] + "5": { + "-5": [ + 0, + 10.0 + ] + } }, "inbound_shipment": { - "5": 3.0 + "5": { + "-5": 3.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 10.0 + "1": { + "-2": 10.0 + } }, "outbound_shipment": { - "1": 10.0 + "1": { + "-2": 10.0 + } }, "on_order_by_predecessor": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 6.0 }, - "inventory_level": 6.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 19.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 19.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 19.0 + }, + "demand_met_from_stock": { + "-2": 10.0 + }, + "demand_met_from_stock_cumul": { + "-2": 19.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 3, "inbound_shipment_pipeline": { - "5": [ - 0, - 0.0 - ] + "5": { + "-5": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 7.0 + "1": { + "-2": 7.0 + } }, "outbound_shipment": { - "1": 7.0 + "1": { + "-2": 7.0 + } }, "on_order_by_predecessor": { - "5": 0.0 + "5": { + "-5": 0.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0.0 + "5": { + "-5": 0.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 9.0 }, - "inventory_level": 9.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 26.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 26.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 26.0 + }, + "demand_met_from_stock": { + "-2": 7.0 + }, + "demand_met_from_stock_cumul": { + "-2": 26.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 4, "inbound_shipment_pipeline": { - "5": [ - 0, - 11.0 - ] + "5": { + "-5": [ + 0, + 11.0 + ] + } }, "inbound_shipment": { - "5": 0.0 + "5": { + "-5": 0.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 4.0 + "1": { + "-2": 4.0 + } }, "outbound_shipment": { - "1": 4.0 + "1": { + "-2": 4.0 + } }, "on_order_by_predecessor": { - "5": 11.0 + "5": { + "-5": 11.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 11.0 + "5": { + "-5": 11.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 5.0 }, - "inventory_level": 5.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 30.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 30.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 30.0 + }, + "demand_met_from_stock": { + "-2": 4.0 + }, + "demand_met_from_stock_cumul": { + "-2": 30.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 5, "inbound_shipment_pipeline": { - "5": [ - 0, - 5.0 - ] + "5": { + "-5": [ + 0, + 5.0 + ] + } }, "inbound_shipment": { - "5": 11.0 + "5": { + "-5": 11.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 6.0 + "1": { + "-2": 6.0 + } }, "outbound_shipment": { - "1": 6.0 + "1": { + "-2": 6.0 + } }, "on_order_by_predecessor": { - "5": 5.0 + "5": { + "-5": 5.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 5.0 + "5": { + "-5": 5.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 10.0 }, - "inventory_level": 10.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 36.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 36.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 36.0 + }, + "demand_met_from_stock": { + "-2": 6.0 + }, + "demand_met_from_stock_cumul": { + "-2": 36.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 6, "inbound_shipment_pipeline": { - "5": [ - 0, - 10.0 - ] + "5": { + "-5": [ + 0, + 10.0 + ] + } }, "inbound_shipment": { - "5": 5.0 + "5": { + "-5": 5.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 9.0 + "1": { + "-2": 9.0 + } }, "outbound_shipment": { - "1": 9.0 + "1": { + "-2": 9.0 + } }, "on_order_by_predecessor": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 6.0 }, - "inventory_level": 6.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 45.0, - "demand_met_from_stock": 9.0, - "demand_met_from_stock_cumul": 45.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 45.0 + }, + "demand_met_from_stock": { + "-2": 9.0 + }, + "demand_met_from_stock_cumul": { + "-2": 45.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 7, "inbound_shipment_pipeline": { - "5": [ - 0, - 2.0 - ] + "5": { + "-5": [ + 0, + 2.0 + ] + } }, "inbound_shipment": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 2.0 + "1": { + "-2": 2.0 + } }, "outbound_shipment": { - "1": 2.0 + "1": { + "-2": 2.0 + } }, "on_order_by_predecessor": { - "5": 2.0 + "5": { + "-5": 2.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 2.0 + "5": { + "-5": 2.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 14.0 }, - "inventory_level": 14.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 47.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 47.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 47.0 + }, + "demand_met_from_stock": { + "-2": 2.0 + }, + "demand_met_from_stock_cumul": { + "-2": 47.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 8, "inbound_shipment_pipeline": { - "5": [ - 0, - 6.0 - ] + "5": { + "-5": [ + 0, + 6.0 + ] + } }, "inbound_shipment": { - "5": 2.0 + "5": { + "-5": 2.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 6.0 + "1": { + "-2": 6.0 + } }, "outbound_shipment": { - "1": 6.0 + "1": { + "-2": 6.0 + } }, "on_order_by_predecessor": { - "5": 6.0 + "5": { + "-5": 6.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 6.0 + "5": { + "-5": 6.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 10.0 }, - "inventory_level": 10.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 53.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 53.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 53.0 + }, + "demand_met_from_stock": { + "-2": 6.0 + }, + "demand_met_from_stock_cumul": { + "-2": 53.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 9, "inbound_shipment_pipeline": { - "5": [ - 0, - 10.0 - ] + "5": { + "-5": [ + 0, + 10.0 + ] + } }, "inbound_shipment": { - "5": 6.0 + "5": { + "-5": 6.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 10.0 + "1": { + "-2": 10.0 + } }, "outbound_shipment": { - "1": 10.0 + "1": { + "-2": 10.0 + } }, "on_order_by_predecessor": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 6.0 }, - "inventory_level": 6.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 63.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 63.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 63.0 + }, + "demand_met_from_stock": { + "-2": 10.0 + }, + "demand_met_from_stock_cumul": { + "-2": 63.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 10, "inbound_shipment_pipeline": { - "5": [ - 0, - 10.0 - ] + "5": { + "-5": [ + 0, + 10.0 + ] + } }, "inbound_shipment": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 10.0 + "1": { + "-2": 10.0 + } }, "outbound_shipment": { - "1": 10.0 + "1": { + "-2": 10.0 + } }, "on_order_by_predecessor": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 6.0 }, - "inventory_level": 6.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 73.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 73.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 73.0 + }, + "demand_met_from_stock": { + "-2": 10.0 + }, + "demand_met_from_stock_cumul": { + "-2": 73.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 11, "inbound_shipment_pipeline": { - "5": [ - 0, - 7.0 - ] + "5": { + "-5": [ + 0, + 7.0 + ] + } }, "inbound_shipment": { - "5": 10.0 + "5": { + "-5": 10.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 7.0 + "1": { + "-2": 7.0 + } }, "outbound_shipment": { - "1": 7.0 + "1": { + "-2": 7.0 + } }, "on_order_by_predecessor": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 9.0 }, - "inventory_level": 9.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 80.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 80.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 80.0 + }, + "demand_met_from_stock": { + "-2": 7.0 + }, + "demand_met_from_stock_cumul": { + "-2": 80.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 12, "inbound_shipment_pipeline": { - "5": [ - 0, - 3.0 - ] + "5": { + "-5": [ + 0, + 3.0 + ] + } }, "inbound_shipment": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 4.0 + "1": { + "-2": 4.0 + } }, "outbound_shipment": { - "1": 4.0 + "1": { + "-2": 4.0 + } }, "on_order_by_predecessor": { - "5": 3.0 + "5": { + "-5": 3.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 3.0 + "5": { + "-5": 3.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 12.0 }, - "inventory_level": 12.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 84.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 84.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 84.0 + }, + "demand_met_from_stock": { + "-2": 4.0 + }, + "demand_met_from_stock_cumul": { + "-2": 84.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 13, "inbound_shipment_pipeline": { - "5": [ - 0, - 4.0 - ] + "5": { + "-5": [ + 0, + 4.0 + ] + } }, "inbound_shipment": { - "5": 3.0 + "5": { + "-5": 3.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 3.0 + "1": { + "-2": 3.0 + } }, "outbound_shipment": { - "1": 3.0 + "1": { + "-2": 3.0 + } }, "on_order_by_predecessor": { - "5": 4.0 + "5": { + "-5": 4.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 4.0 + "5": { + "-5": 4.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 12.0 }, - "inventory_level": 12.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 87.0, - "demand_met_from_stock": 3.0, - "demand_met_from_stock_cumul": 87.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 87.0 + }, + "demand_met_from_stock": { + "-2": 3.0 + }, + "demand_met_from_stock_cumul": { + "-2": 87.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 14, "inbound_shipment_pipeline": { - "5": [ - 0, - 7.0 - ] + "5": { + "-5": [ + 0, + 7.0 + ] + } }, "inbound_shipment": { - "5": 4.0 + "5": { + "-5": 4.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 7.0 + "1": { + "-2": 7.0 + } }, "outbound_shipment": { - "1": 7.0 + "1": { + "-2": 7.0 + } }, "on_order_by_predecessor": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 9.0 }, - "inventory_level": 9.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 94.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 94.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 94.0 + }, + "demand_met_from_stock": { + "-2": 7.0 + }, + "demand_met_from_stock_cumul": { + "-2": 94.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 15, "inbound_shipment_pipeline": { - "5": [ - 0, - 7.0 - ] + "5": { + "-5": [ + 0, + 7.0 + ] + } }, "inbound_shipment": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 7.0 + "1": { + "-2": 7.0 + } }, "outbound_shipment": { - "1": 7.0 + "1": { + "-2": 7.0 + } }, "on_order_by_predecessor": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 9.0 }, - "inventory_level": 9.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 101.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 101.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 101.0 + }, + "demand_met_from_stock": { + "-2": 7.0 + }, + "demand_met_from_stock_cumul": { + "-2": 101.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 16, "inbound_shipment_pipeline": { - "5": [ - 0, - 2.0 - ] + "5": { + "-5": [ + 0, + 2.0 + ] + } }, "inbound_shipment": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 2.0 + "1": { + "-2": 2.0 + } }, "outbound_shipment": { - "1": 2.0 + "1": { + "-2": 2.0 + } }, "on_order_by_predecessor": { - "5": 2.0 + "5": { + "-5": 2.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 2.0 + "5": { + "-5": 2.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 14.0 }, - "inventory_level": 14.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 103.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 103.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 103.0 + }, + "demand_met_from_stock": { + "-2": 2.0 + }, + "demand_met_from_stock_cumul": { + "-2": 103.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 17, "inbound_shipment_pipeline": { - "5": [ - 0, - 5.0 - ] + "5": { + "-5": [ + 0, + 5.0 + ] + } }, "inbound_shipment": { - "5": 2.0 + "5": { + "-5": 2.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 5.0 + "1": { + "-2": 5.0 + } }, "outbound_shipment": { - "1": 5.0 + "1": { + "-2": 5.0 + } }, "on_order_by_predecessor": { - "5": 5.0 + "5": { + "-5": 5.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 5.0 + "5": { + "-5": 5.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 11.0 }, - "inventory_level": 11.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 108.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 108.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 108.0 + }, + "demand_met_from_stock": { + "-2": 5.0 + }, + "demand_met_from_stock_cumul": { + "-2": 108.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 18, "inbound_shipment_pipeline": { - "5": [ - 0, - 4.0 - ] + "5": { + "-5": [ + 0, + 4.0 + ] + } }, "inbound_shipment": { - "5": 5.0 + "5": { + "-5": 5.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 4.0 + "1": { + "-2": 4.0 + } }, "outbound_shipment": { - "1": 4.0 + "1": { + "-2": 4.0 + } }, "on_order_by_predecessor": { - "5": 4.0 + "5": { + "-5": 4.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 4.0 + "5": { + "-5": 4.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 12.0 }, - "inventory_level": 12.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 112.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 112.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 112.0 + }, + "demand_met_from_stock": { + "-2": 4.0 + }, + "demand_met_from_stock_cumul": { + "-2": 112.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 19, "inbound_shipment_pipeline": { - "5": [ - 0, - 1.0 - ] + "5": { + "-5": [ + 0, + 1.0 + ] + } }, "inbound_shipment": { - "5": 4.0 + "5": { + "-5": 4.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 1.0 + "1": { + "-2": 1.0 + } }, "outbound_shipment": { - "1": 1.0 + "1": { + "-2": 1.0 + } }, "on_order_by_predecessor": { - "5": 1.0 + "5": { + "-5": 1.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 1.0 + "5": { + "-5": 1.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 15.0 }, - "inventory_level": 15.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 113.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 113.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 113.0 + }, + "demand_met_from_stock": { + "-2": 1.0 + }, + "demand_met_from_stock_cumul": { + "-2": 113.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 20, "inbound_shipment_pipeline": { - "5": [ - 0, - 7.0 - ] + "5": { + "-5": [ + 0, + 7.0 + ] + } }, "inbound_shipment": { - "5": 1.0 + "5": { + "-5": 1.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 7.0 + "1": { + "-2": 7.0 + } }, "outbound_shipment": { - "1": 7.0 + "1": { + "-2": 7.0 + } }, "on_order_by_predecessor": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 9.0 }, - "inventory_level": 9.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 120.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 120.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 120.0 + }, + "demand_met_from_stock": { + "-2": 7.0 + }, + "demand_met_from_stock_cumul": { + "-2": 120.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 21, "inbound_shipment_pipeline": { - "5": [ - 0, - 5.0 - ] + "5": { + "-5": [ + 0, + 5.0 + ] + } }, "inbound_shipment": { - "5": 7.0 + "5": { + "-5": 7.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 5.0 + "1": { + "-2": 5.0 + } }, "outbound_shipment": { - "1": 5.0 + "1": { + "-2": 5.0 + } }, "on_order_by_predecessor": { - "5": 5.0 + "5": { + "-5": 5.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 5.0 + "5": { + "-5": 5.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 11.0 }, - "inventory_level": 11.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 125.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 125.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 125.0 + }, + "demand_met_from_stock": { + "-2": 5.0 + }, + "demand_met_from_stock_cumul": { + "-2": 125.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 22, "inbound_shipment_pipeline": { - "5": [ - 0, - 1.0 - ] + "5": { + "-5": [ + 0, + 1.0 + ] + } }, "inbound_shipment": { - "5": 5.0 + "5": { + "-5": 5.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 1.0 + "1": { + "-2": 1.0 + } }, "outbound_shipment": { - "1": 1.0 + "1": { + "-2": 1.0 + } }, "on_order_by_predecessor": { - "5": 1.0 + "5": { + "-5": 1.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 1.0 + "5": { + "-5": 1.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 15.0 }, - "inventory_level": 15.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 126.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 126.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 126.0 + }, + "demand_met_from_stock": { + "-2": 1.0 + }, + "demand_met_from_stock_cumul": { + "-2": 126.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 23, "inbound_shipment_pipeline": { - "5": [ - 0, - 4.0 - ] + "5": { + "-5": [ + 0, + 4.0 + ] + } }, "inbound_shipment": { - "5": 1.0 + "5": { + "-5": 1.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 4.0 + "1": { + "-2": 4.0 + } }, "outbound_shipment": { - "1": 4.0 + "1": { + "-2": 4.0 + } }, "on_order_by_predecessor": { - "5": 4.0 + "5": { + "-5": 4.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 4.0 + "5": { + "-5": 4.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 12.0 }, - "inventory_level": 12.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 130.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 130.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 130.0 + }, + "demand_met_from_stock": { + "-2": 4.0 + }, + "demand_met_from_stock_cumul": { + "-2": 130.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 24, "inbound_shipment_pipeline": { - "5": [ - 0, - 0.0 - ] + "5": { + "-5": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "5": 4.0 + "5": { + "-5": 4.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_shipment": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "on_order_by_predecessor": { - "5": 0.0 + "5": { + "-5": 0.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0.0 + "5": { + "-5": 0.0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 16.0 }, - "inventory_level": 16.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 130.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 130.0, - "fill_rate": 1.0 + "demand_cumul": { + "-2": 130.0 + }, + "demand_met_from_stock": { + "-2": 0.0 + }, + "demand_met_from_stock_cumul": { + "-2": 130.0 + }, + "fill_rate": { + "-2": 1.0 + } }, { "node": 2, "period": 25, "inbound_shipment_pipeline": { - "5": [ - 0.0, - 0 - ] + "5": { + "-5": [ + 0.0, + 0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-2": 0 + } }, "on_order_by_predecessor": { - "5": 0.0 + "5": { + "-5": 0.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "outbound_disrupted_items": { - "1": 0.0 + "1": { + "-2": 0.0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0 + "5": { + "-5": 0 + } }, "raw_material_inventory": { - "5": 0.0 + "-5": 0.0 + }, + "inventory_level": { + "-2": 16.0 }, - "inventory_level": 16.0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 130.0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 130.0, - "fill_rate": 0 + "demand_cumul": { + "-2": 130.0 + }, + "demand_met_from_stock": { + "-2": 0 + }, + "demand_met_from_stock_cumul": { + "-2": 130.0 + }, + "fill_rate": { + "-2": 0 + } }, { "node": 2, "period": 26, "inbound_shipment_pipeline": { - "5": [ - 0, - 0 - ] + "5": { + "-5": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-2": 0 + } }, "on_order_by_predecessor": { - "5": 0 + "5": { + "-5": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0 + "5": { + "-5": 0 + } }, "raw_material_inventory": { - "5": 0 + "-5": 0 + }, + "inventory_level": { + "-2": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-2": 0 + }, + "demand_met_from_stock": { + "-2": 0 + }, + "demand_met_from_stock_cumul": { + "-2": 0 + }, + "fill_rate": { + "-2": 0 + } }, { "node": 2, "period": 27, "inbound_shipment_pipeline": { - "5": [ - 0, - 0 - ] + "5": { + "-5": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-2": 0 + } }, "on_order_by_predecessor": { - "5": 0 + "5": { + "-5": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0 + "5": { + "-5": 0 + } }, "raw_material_inventory": { - "5": 0 + "-5": 0 + }, + "inventory_level": { + "-2": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-2": 0 + }, + "demand_met_from_stock": { + "-2": 0 + }, + "demand_met_from_stock_cumul": { + "-2": 0 + }, + "fill_rate": { + "-2": 0 + } }, { "node": 2, "period": 28, "inbound_shipment_pipeline": { - "5": [ - 0, - 0 - ] + "5": { + "-5": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-2": 0 + } }, "on_order_by_predecessor": { - "5": 0 + "5": { + "-5": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0 + "5": { + "-5": 0 + } }, "raw_material_inventory": { - "5": 0 + "-5": 0 + }, + "inventory_level": { + "-2": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-2": 0 + }, + "demand_met_from_stock": { + "-2": 0 + }, + "demand_met_from_stock_cumul": { + "-2": 0 + }, + "fill_rate": { + "-2": 0 + } }, { "node": 2, "period": 29, "inbound_shipment_pipeline": { - "5": [ - 0, - 0 - ] + "5": { + "-5": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-2": 0 + } }, "on_order_by_predecessor": { - "5": 0 + "5": { + "-5": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0 + "5": { + "-5": 0 + } }, "raw_material_inventory": { - "5": 0 + "-5": 0 + }, + "inventory_level": { + "-2": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-2": 0 + }, + "demand_met_from_stock": { + "-2": 0 + }, + "demand_met_from_stock_cumul": { + "-2": 0 + }, + "fill_rate": { + "-2": 0 + } }, { "node": 2, "period": 30, "inbound_shipment_pipeline": { - "5": [ - 0, - 0 - ] + "5": { + "-5": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "5": 0 + "5": { + "-5": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-2": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-2": 0 + } }, "on_order_by_predecessor": { - "5": 0 + "5": { + "-5": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-2": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-2": 0 + } }, "inbound_disrupted_items": { - "5": 0 + "5": { + "-5": 0 + } }, "order_quantity": { - "5": 0 + "5": { + "-5": 0 + } }, "raw_material_inventory": { - "5": 0 + "-5": 0 + }, + "inventory_level": { + "-2": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-2": 0 + }, + "demand_met_from_stock": { + "-2": 0 + }, + "demand_met_from_stock_cumul": { + "-2": 0 + }, + "fill_rate": { + "-2": 0 + } } ] }, { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ 4 ], @@ -3727,6 +5918,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": 24, @@ -3735,13 +5928,13 @@ "_inventory_policy": { "type": "BEBS", "node": 3, + "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -3750,6 +5943,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -3766,1713 +5960,2648 @@ "node": 3, "period": 0, "inbound_shipment_pipeline": { - "4": [ - 0, - 0, - 0, - 14.0 - ] + "4": { + "-4": [ + 0, + 0, + 0, + 14.0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 6.0 + "1": { + "-3": 6.0 + } }, "outbound_shipment": { - "1": 6.0 + "1": { + "-3": 6.0 + } }, "on_order_by_predecessor": { - "4": 14.0 + "4": { + "-4": 14.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 14.0 + "4": { + "-4": 14.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 18.0 }, - "inventory_level": 18.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 6.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 6.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 6.0 + }, + "demand_met_from_stock": { + "-3": 6.0 + }, + "demand_met_from_stock_cumul": { + "-3": 6.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 1, "inbound_shipment_pipeline": { - "4": [ - 0, - 0, - 14.0, - 2.0 - ] + "4": { + "-4": [ + 0, + 0, + 14.0, + 2.0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 3.0 + "1": { + "-3": 3.0 + } }, "outbound_shipment": { - "1": 3.0 + "1": { + "-3": 3.0 + } }, "on_order_by_predecessor": { - "4": 17.0 + "4": { + "-4": 17.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 3.0 + "4": { + "-4": 3.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 15.0 }, - "inventory_level": 15.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 9.0, - "demand_met_from_stock": 3.0, - "demand_met_from_stock_cumul": 9.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 9.0 + }, + "demand_met_from_stock": { + "-3": 3.0 + }, + "demand_met_from_stock_cumul": { + "-3": 9.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 2, "inbound_shipment_pipeline": { - "4": [ - 0, - 14.0, - 2.0, - 8.0 - ] + "4": { + "-4": [ + 0, + 14.0, + 2.0, + 8.0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 10.0 + "1": { + "-3": 10.0 + } }, "outbound_shipment": { - "1": 10.0 + "1": { + "-3": 10.0 + } }, "on_order_by_predecessor": { - "4": 26.0 + "4": { + "-4": 26.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 9.0 + "4": { + "-4": 9.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 5.0 }, - "inventory_level": 5.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 19.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 19.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 19.0 + }, + "demand_met_from_stock": { + "-3": 10.0 + }, + "demand_met_from_stock_cumul": { + "-3": 19.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 3, "inbound_shipment_pipeline": { - "4": [ - 0, - 2.0, - 8.0, - 7.0 - ] + "4": { + "-4": [ + 0, + 2.0, + 8.0, + 7.0 + ] + } }, "inbound_shipment": { - "4": 14.0 + "4": { + "-4": 14.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 7.0 + "1": { + "-3": 7.0 + } }, "outbound_shipment": { - "1": 7.0 + "1": { + "-3": 7.0 + } }, "on_order_by_predecessor": { - "4": 17.0 + "4": { + "-4": 17.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 5.0 + "4": { + "-4": 5.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 12.0 }, - "inventory_level": 12.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 26.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 26.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 26.0 + }, + "demand_met_from_stock": { + "-3": 7.0 + }, + "demand_met_from_stock_cumul": { + "-3": 26.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 4, "inbound_shipment_pipeline": { - "4": [ - 0, - 8.0, - 7.0, - 5.0 - ] + "4": { + "-4": [ + 0, + 8.0, + 7.0, + 5.0 + ] + } }, "inbound_shipment": { - "4": 2.0 + "4": { + "-4": 2.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 4.0 + "1": { + "-3": 4.0 + } }, "outbound_shipment": { - "1": 4.0 + "1": { + "-3": 4.0 + } }, "on_order_by_predecessor": { - "4": 20.0 + "4": { + "-4": 20.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 5.0 + "4": { + "-4": 5.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 10.0 }, - "inventory_level": 10.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 30.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 30.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 30.0 + }, + "demand_met_from_stock": { + "-3": 4.0 + }, + "demand_met_from_stock_cumul": { + "-3": 30.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 5, "inbound_shipment_pipeline": { - "4": [ - 0, - 7.0, - 5.0, - 8.0 - ] + "4": { + "-4": [ + 0, + 7.0, + 5.0, + 8.0 + ] + } }, "inbound_shipment": { - "4": 8.0 + "4": { + "-4": 8.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 6.0 + "1": { + "-3": 6.0 + } }, "outbound_shipment": { - "1": 6.0 + "1": { + "-3": 6.0 + } }, "on_order_by_predecessor": { - "4": 20.0 + "4": { + "-4": 20.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 8.0 + "4": { + "-4": 8.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 12.0 }, - "inventory_level": 12.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 36.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 36.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 36.0 + }, + "demand_met_from_stock": { + "-3": 6.0 + }, + "demand_met_from_stock_cumul": { + "-3": 36.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 6, "inbound_shipment_pipeline": { - "4": [ - 0, - 5.0, - 8.0, - 9.0 - ] + "4": { + "-4": [ + 0, + 5.0, + 8.0, + 9.0 + ] + } }, "inbound_shipment": { - "4": 7.0 + "4": { + "-4": 7.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 9.0 + "1": { + "-3": 9.0 + } }, "outbound_shipment": { - "1": 9.0 + "1": { + "-3": 9.0 + } }, "on_order_by_predecessor": { - "4": 22.0 + "4": { + "-4": 22.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 9.0 + "4": { + "-4": 9.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 10.0 }, - "inventory_level": 10.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 45.0, - "demand_met_from_stock": 9.0, - "demand_met_from_stock_cumul": 45.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 45.0 + }, + "demand_met_from_stock": { + "-3": 9.0 + }, + "demand_met_from_stock_cumul": { + "-3": 45.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 7, "inbound_shipment_pipeline": { - "4": [ - 0, - 8.0, - 9.0, - 2.0 - ] + "4": { + "-4": [ + 0, + 8.0, + 9.0, + 2.0 + ] + } }, "inbound_shipment": { - "4": 5.0 + "4": { + "-4": 5.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 2.0 + "1": { + "-3": 2.0 + } }, "outbound_shipment": { - "1": 2.0 + "1": { + "-3": 2.0 + } }, "on_order_by_predecessor": { - "4": 19.0 + "4": { + "-4": 19.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 2.0 + "4": { + "-4": 2.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 13.0 }, - "inventory_level": 13.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 47.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 47.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 47.0 + }, + "demand_met_from_stock": { + "-3": 2.0 + }, + "demand_met_from_stock_cumul": { + "-3": 47.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 8, "inbound_shipment_pipeline": { - "4": [ - 0, - 9.0, - 2.0, - 6.0 - ] + "4": { + "-4": [ + 0, + 9.0, + 2.0, + 6.0 + ] + } }, "inbound_shipment": { - "4": 8.0 + "4": { + "-4": 8.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 6.0 + "1": { + "-3": 6.0 + } }, "outbound_shipment": { - "1": 6.0 + "1": { + "-3": 6.0 + } }, "on_order_by_predecessor": { - "4": 17.0 + "4": { + "-4": 17.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 6.0 + "4": { + "-4": 6.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 15.0 }, - "inventory_level": 15.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 53.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 53.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 53.0 + }, + "demand_met_from_stock": { + "-3": 6.0 + }, + "demand_met_from_stock_cumul": { + "-3": 53.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 9, "inbound_shipment_pipeline": { - "4": [ - 0, - 2.0, - 6.0, - 10.0 - ] + "4": { + "-4": [ + 0, + 2.0, + 6.0, + 10.0 + ] + } }, "inbound_shipment": { - "4": 9.0 + "4": { + "-4": 9.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 10.0 + "1": { + "-3": 10.0 + } }, "outbound_shipment": { - "1": 10.0 + "1": { + "-3": 10.0 + } }, "on_order_by_predecessor": { - "4": 18.0 + "4": { + "-4": 18.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 10.0 + "4": { + "-4": 10.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 14.0 }, - "inventory_level": 14.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 63.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 63.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 63.0 + }, + "demand_met_from_stock": { + "-3": 10.0 + }, + "demand_met_from_stock_cumul": { + "-3": 63.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 10, "inbound_shipment_pipeline": { - "4": [ - 0, - 6.0, - 10.0, - 8.0 - ] + "4": { + "-4": [ + 0, + 6.0, + 10.0, + 8.0 + ] + } }, "inbound_shipment": { - "4": 2.0 + "4": { + "-4": 2.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 10.0 + "1": { + "-3": 10.0 + } }, "outbound_shipment": { - "1": 10.0 + "1": { + "-3": 10.0 + } }, "on_order_by_predecessor": { - "4": 26.0 + "4": { + "-4": 26.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 10.0 + "4": { + "-4": 10.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 6.0 }, - "inventory_level": 6.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 73.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 73.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 73.0 + }, + "demand_met_from_stock": { + "-3": 10.0 + }, + "demand_met_from_stock_cumul": { + "-3": 73.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 11, "inbound_shipment_pipeline": { - "4": [ - 0, - 10.0, - 8.0, - 7.0 - ] + "4": { + "-4": [ + 0, + 10.0, + 8.0, + 7.0 + ] + } }, "inbound_shipment": { - "4": 6.0 + "4": { + "-4": 6.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 7.0 + "1": { + "-3": 7.0 + } }, "outbound_shipment": { - "1": 7.0 + "1": { + "-3": 7.0 + } }, "on_order_by_predecessor": { - "4": 25.0 + "4": { + "-4": 25.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 5.0 + "4": { + "-4": 5.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 5.0 }, - "inventory_level": 5.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 80.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 80.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 80.0 + }, + "demand_met_from_stock": { + "-3": 7.0 + }, + "demand_met_from_stock_cumul": { + "-3": 80.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 12, "inbound_shipment_pipeline": { - "4": [ - 0, - 8.0, - 7.0, - 6.0 - ] + "4": { + "-4": [ + 0, + 8.0, + 7.0, + 6.0 + ] + } }, "inbound_shipment": { - "4": 10.0 + "4": { + "-4": 10.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 4.0 + "1": { + "-3": 4.0 + } }, "outbound_shipment": { - "1": 4.0 + "1": { + "-3": 4.0 + } }, "on_order_by_predecessor": { - "4": 21.0 + "4": { + "-4": 21.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 6.0 + "4": { + "-4": 6.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 11.0 }, - "inventory_level": 11.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 84.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 84.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 84.0 + }, + "demand_met_from_stock": { + "-3": 4.0 + }, + "demand_met_from_stock_cumul": { + "-3": 84.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 13, "inbound_shipment_pipeline": { - "4": [ - 0, - 7.0, - 6.0, - 3.0 - ] + "4": { + "-4": [ + 0, + 7.0, + 6.0, + 3.0 + ] + } }, "inbound_shipment": { - "4": 8.0 + "4": { + "-4": 8.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 3.0 + "1": { + "-3": 3.0 + } }, "outbound_shipment": { - "1": 3.0 + "1": { + "-3": 3.0 + } }, "on_order_by_predecessor": { - "4": 16.0 + "4": { + "-4": 16.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 3.0 + "4": { + "-4": 3.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 16.0 }, - "inventory_level": 16.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 87.0, - "demand_met_from_stock": 3.0, - "demand_met_from_stock_cumul": 87.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 87.0 + }, + "demand_met_from_stock": { + "-3": 3.0 + }, + "demand_met_from_stock_cumul": { + "-3": 87.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 14, "inbound_shipment_pipeline": { - "4": [ - 0, - 6.0, - 3.0, - 7.0 - ] + "4": { + "-4": [ + 0, + 6.0, + 3.0, + 7.0 + ] + } }, "inbound_shipment": { - "4": 7.0 + "4": { + "-4": 7.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 7.0 + "1": { + "-3": 7.0 + } }, "outbound_shipment": { - "1": 7.0 + "1": { + "-3": 7.0 + } }, "on_order_by_predecessor": { - "4": 16.0 + "4": { + "-4": 16.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 7.0 + "4": { + "-4": 7.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 16.0 }, - "inventory_level": 16.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 94.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 94.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 94.0 + }, + "demand_met_from_stock": { + "-3": 7.0 + }, + "demand_met_from_stock_cumul": { + "-3": 94.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 15, "inbound_shipment_pipeline": { - "4": [ - 0, - 3.0, - 7.0, - 7.0 - ] + "4": { + "-4": [ + 0, + 3.0, + 7.0, + 7.0 + ] + } }, "inbound_shipment": { - "4": 6.0 + "4": { + "-4": 6.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 7.0 + "1": { + "-3": 7.0 + } }, "outbound_shipment": { - "1": 7.0 + "1": { + "-3": 7.0 + } }, "on_order_by_predecessor": { - "4": 17.0 + "4": { + "-4": 17.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 7.0 + "4": { + "-4": 7.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 15.0 }, - "inventory_level": 15.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 101.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 101.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 101.0 + }, + "demand_met_from_stock": { + "-3": 7.0 + }, + "demand_met_from_stock_cumul": { + "-3": 101.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 16, "inbound_shipment_pipeline": { - "4": [ - 0, - 7.0, - 7.0, - 2.0 - ] + "4": { + "-4": [ + 0, + 7.0, + 7.0, + 2.0 + ] + } }, "inbound_shipment": { - "4": 3.0 + "4": { + "-4": 3.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 2.0 + "1": { + "-3": 2.0 + } }, "outbound_shipment": { - "1": 2.0 + "1": { + "-3": 2.0 + } }, "on_order_by_predecessor": { - "4": 16.0 + "4": { + "-4": 16.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 2.0 + "4": { + "-4": 2.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 16.0 }, - "inventory_level": 16.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 103.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 103.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 103.0 + }, + "demand_met_from_stock": { + "-3": 2.0 + }, + "demand_met_from_stock_cumul": { + "-3": 103.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 17, "inbound_shipment_pipeline": { - "4": [ - 0, - 7.0, - 2.0, - 5.0 - ] + "4": { + "-4": [ + 0, + 7.0, + 2.0, + 5.0 + ] + } }, "inbound_shipment": { - "4": 7.0 + "4": { + "-4": 7.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 5.0 + "1": { + "-3": 5.0 + } }, "outbound_shipment": { - "1": 5.0 + "1": { + "-3": 5.0 + } }, "on_order_by_predecessor": { - "4": 14.0 + "4": { + "-4": 14.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 5.0 + "4": { + "-4": 5.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 18.0 }, - "inventory_level": 18.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 108.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 108.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 108.0 + }, + "demand_met_from_stock": { + "-3": 5.0 + }, + "demand_met_from_stock_cumul": { + "-3": 108.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 18, "inbound_shipment_pipeline": { - "4": [ - 0, - 2.0, - 5.0, - 4.0 - ] + "4": { + "-4": [ + 0, + 2.0, + 5.0, + 4.0 + ] + } }, "inbound_shipment": { - "4": 7.0 + "4": { + "-4": 7.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 4.0 + "1": { + "-3": 4.0 + } }, "outbound_shipment": { - "1": 4.0 + "1": { + "-3": 4.0 + } }, "on_order_by_predecessor": { - "4": 11.0 + "4": { + "-4": 11.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 4.0 + "4": { + "-4": 4.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 21.0 }, - "inventory_level": 21.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 112.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 112.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 112.0 + }, + "demand_met_from_stock": { + "-3": 4.0 + }, + "demand_met_from_stock_cumul": { + "-3": 112.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 19, "inbound_shipment_pipeline": { - "4": [ - 0, - 5.0, - 4.0, - 1.0 - ] + "4": { + "-4": [ + 0, + 5.0, + 4.0, + 1.0 + ] + } }, "inbound_shipment": { - "4": 2.0 + "4": { + "-4": 2.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 1.0 + "1": { + "-3": 1.0 + } }, "outbound_shipment": { - "1": 1.0 + "1": { + "-3": 1.0 + } }, "on_order_by_predecessor": { - "4": 10.0 + "4": { + "-4": 10.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 1.0 + "4": { + "-4": 1.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 22.0 }, - "inventory_level": 22.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 113.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 113.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 113.0 + }, + "demand_met_from_stock": { + "-3": 1.0 + }, + "demand_met_from_stock_cumul": { + "-3": 113.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 20, "inbound_shipment_pipeline": { - "4": [ - 0, - 4.0, - 1.0, - 7.0 - ] + "4": { + "-4": [ + 0, + 4.0, + 1.0, + 7.0 + ] + } }, "inbound_shipment": { - "4": 5.0 + "4": { + "-4": 5.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 7.0 + "1": { + "-3": 7.0 + } }, "outbound_shipment": { - "1": 7.0 + "1": { + "-3": 7.0 + } }, "on_order_by_predecessor": { - "4": 12.0 + "4": { + "-4": 12.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 7.0 + "4": { + "-4": 7.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 20.0 }, - "inventory_level": 20.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 120.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 120.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 120.0 + }, + "demand_met_from_stock": { + "-3": 7.0 + }, + "demand_met_from_stock_cumul": { + "-3": 120.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 21, "inbound_shipment_pipeline": { - "4": [ - 0, - 1.0, - 7.0, - 5.0 - ] + "4": { + "-4": [ + 0, + 1.0, + 7.0, + 5.0 + ] + } }, "inbound_shipment": { - "4": 4.0 + "4": { + "-4": 4.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 5.0 + "1": { + "-3": 5.0 + } }, "outbound_shipment": { - "1": 5.0 + "1": { + "-3": 5.0 + } }, "on_order_by_predecessor": { - "4": 13.0 + "4": { + "-4": 13.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 5.0 + "4": { + "-4": 5.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 19.0 }, - "inventory_level": 19.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 125.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 125.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 125.0 + }, + "demand_met_from_stock": { + "-3": 5.0 + }, + "demand_met_from_stock_cumul": { + "-3": 125.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 22, "inbound_shipment_pipeline": { - "4": [ - 0, - 7.0, - 5.0, - 1.0 - ] + "4": { + "-4": [ + 0, + 7.0, + 5.0, + 1.0 + ] + } }, "inbound_shipment": { - "4": 1.0 + "4": { + "-4": 1.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 1.0 + "1": { + "-3": 1.0 + } }, "outbound_shipment": { - "1": 1.0 + "1": { + "-3": 1.0 + } }, "on_order_by_predecessor": { - "4": 13.0 + "4": { + "-4": 13.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 1.0 + "4": { + "-4": 1.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 19.0 }, - "inventory_level": 19.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 126.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 126.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 126.0 + }, + "demand_met_from_stock": { + "-3": 1.0 + }, + "demand_met_from_stock_cumul": { + "-3": 126.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 23, "inbound_shipment_pipeline": { - "4": [ - 0, - 5.0, - 1.0, - 4.0 - ] + "4": { + "-4": [ + 0, + 5.0, + 1.0, + 4.0 + ] + } }, "inbound_shipment": { - "4": 7.0 + "4": { + "-4": 7.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 4.0 + "1": { + "-3": 4.0 + } }, "outbound_shipment": { - "1": 4.0 + "1": { + "-3": 4.0 + } }, "on_order_by_predecessor": { - "4": 10.0 + "4": { + "-4": 10.0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 4.0 + "4": { + "-4": 4.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 22.0 }, - "inventory_level": 22.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 130.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 130.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 130.0 + }, + "demand_met_from_stock": { + "-3": 4.0 + }, + "demand_met_from_stock_cumul": { + "-3": 130.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 24, "inbound_shipment_pipeline": { - "4": [ - 0, - 1.0, - 4.0, - 0.0 - ] + "4": { + "-4": [ + 0, + 1.0, + 4.0, + 0.0 + ] + } }, "inbound_shipment": { - "4": 5.0 + "4": { + "-4": 5.0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 0.0 + "1": { + "-3": 0.0 + } }, "outbound_shipment": { - "1": 0.0 + "1": { + "-3": 0.0 + } }, "on_order_by_predecessor": { - "4": 5.0 + "4": { + "-4": 5.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "1": 0.0 + "1": { + "-3": 0.0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 0.0 + "4": { + "-4": 0.0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 27.0 }, - "inventory_level": 27.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 130.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 130.0, - "fill_rate": 1.0 + "demand_cumul": { + "-3": 130.0 + }, + "demand_met_from_stock": { + "-3": 0.0 + }, + "demand_met_from_stock_cumul": { + "-3": 130.0 + }, + "fill_rate": { + "-3": 1.0 + } }, { "node": 3, "period": 25, "inbound_shipment_pipeline": { - "4": [ - 1.0, - 4.0, - 0.0, - 0 - ] + "4": { + "-4": [ + 1.0, + 4.0, + 0.0, + 0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-3": 0 + } }, "on_order_by_predecessor": { - "4": 5.0 + "4": { + "-4": 5.0 + } }, "backorders_by_successor": { - "1": 0.0 + "1": { + "-3": 0.0 + } }, "outbound_disrupted_items": { - "1": 0.0 + "1": { + "-3": 0.0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 0 + "4": { + "-4": 0 + } }, "raw_material_inventory": { - "4": 0.0 + "-4": 0.0 + }, + "inventory_level": { + "-3": 27.0 }, - "inventory_level": 27.0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 130.0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 130.0, - "fill_rate": 0 + "demand_cumul": { + "-3": 130.0 + }, + "demand_met_from_stock": { + "-3": 0 + }, + "demand_met_from_stock_cumul": { + "-3": 130.0 + }, + "fill_rate": { + "-3": 0 + } }, { "node": 3, "period": 26, "inbound_shipment_pipeline": { - "4": [ - 0, - 0, - 0, - 0 - ] + "4": { + "-4": [ + 0, + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-3": 0 + } }, "on_order_by_predecessor": { - "4": 0 + "4": { + "-4": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 0 + "4": { + "-4": 0 + } }, "raw_material_inventory": { - "4": 0 + "-4": 0 + }, + "inventory_level": { + "-3": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-3": 0 + }, + "demand_met_from_stock": { + "-3": 0 + }, + "demand_met_from_stock_cumul": { + "-3": 0 + }, + "fill_rate": { + "-3": 0 + } }, { "node": 3, "period": 27, "inbound_shipment_pipeline": { - "4": [ - 0, - 0, - 0, - 0 - ] + "4": { + "-4": [ + 0, + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-3": 0 + } }, "on_order_by_predecessor": { - "4": 0 + "4": { + "-4": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 0 + "4": { + "-4": 0 + } }, "raw_material_inventory": { - "4": 0 + "-4": 0 + }, + "inventory_level": { + "-3": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-3": 0 + }, + "demand_met_from_stock": { + "-3": 0 + }, + "demand_met_from_stock_cumul": { + "-3": 0 + }, + "fill_rate": { + "-3": 0 + } }, { "node": 3, "period": 28, "inbound_shipment_pipeline": { - "4": [ - 0, - 0, - 0, - 0 - ] + "4": { + "-4": [ + 0, + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-3": 0 + } }, "on_order_by_predecessor": { - "4": 0 + "4": { + "-4": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 0 + "4": { + "-4": 0 + } }, "raw_material_inventory": { - "4": 0 + "-4": 0 + }, + "inventory_level": { + "-3": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-3": 0 + }, + "demand_met_from_stock": { + "-3": 0 + }, + "demand_met_from_stock_cumul": { + "-3": 0 + }, + "fill_rate": { + "-3": 0 + } }, { "node": 3, "period": 29, "inbound_shipment_pipeline": { - "4": [ - 0, - 0, - 0, - 0 - ] + "4": { + "-4": [ + 0, + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-3": 0 + } }, "on_order_by_predecessor": { - "4": 0 + "4": { + "-4": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 0 + "4": { + "-4": 0 + } }, "raw_material_inventory": { - "4": 0 + "-4": 0 + }, + "inventory_level": { + "-3": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-3": 0 + }, + "demand_met_from_stock": { + "-3": 0 + }, + "demand_met_from_stock_cumul": { + "-3": 0 + }, + "fill_rate": { + "-3": 0 + } }, { "node": 3, "period": 30, "inbound_shipment_pipeline": { - "4": [ - 0, - 0, - 0, - 0 - ] + "4": { + "-4": [ + 0, + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "4": 0 + "4": { + "-4": 0 + } }, "inbound_order_pipeline": { - "1": [ - 0 - ] + "1": { + "-3": [ + 0 + ] + } }, "inbound_order": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_shipment": { - "1": 0 + "1": { + "-3": 0 + } }, "on_order_by_predecessor": { - "4": 0 + "4": { + "-4": 0 + } }, "backorders_by_successor": { - "1": 0 + "1": { + "-3": 0 + } }, "outbound_disrupted_items": { - "1": 0 + "1": { + "-3": 0 + } }, "inbound_disrupted_items": { - "4": 0 + "4": { + "-4": 0 + } }, "order_quantity": { - "4": 0 + "4": { + "-4": 0 + } }, "raw_material_inventory": { - "4": 0 + "-4": 0 + }, + "inventory_level": { + "-3": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-3": 0 + }, + "demand_met_from_stock": { + "-3": 0 + }, + "demand_met_from_stock_cumul": { + "-3": 0 + }, + "fill_rate": { + "-3": 0 + } } ] }, { - "index": 4, + "_index": 4, "name": null, "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [ 6, 7 @@ -5497,6 +8626,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": 16, @@ -5505,13 +8636,13 @@ "_inventory_policy": { "type": "BEBS", "node": 4, + "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -5520,6 +8651,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -5536,1992 +8668,3237 @@ "node": 4, "period": 0, "inbound_shipment_pipeline": { - "6": [ - 0, - 0, - 8.0 - ], - "7": [ - 0, - 0, - 16.0 - ] + "6": { + "-6": [ + 0, + 0, + 8.0 + ] + }, + "7": { + "-7": [ + 0, + 0, + 16.0 + ] + } }, "inbound_shipment": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 14.0 + "3": { + "-4": 14.0 + } }, "outbound_shipment": { - "3": 14.0 + "3": { + "-4": 14.0 + } }, "on_order_by_predecessor": { - "6": 36.0, - "7": 36.0 + "6": { + "-6": 36.0 + }, + "7": { + "-7": 36.0 + } }, "backorders_by_successor": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 36.0, - "7": 36.0 + "6": { + "-6": 36.0 + }, + "7": { + "-7": 36.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 2.0 }, - "inventory_level": 2.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 14.0, - "demand_met_from_stock": 14.0, - "demand_met_from_stock_cumul": 14.0, - "fill_rate": 1.0 + "demand_cumul": { + "-4": 14.0 + }, + "demand_met_from_stock": { + "-4": 14.0 + }, + "demand_met_from_stock_cumul": { + "-4": 14.0 + }, + "fill_rate": { + "-4": 1.0 + } }, { "node": 4, "period": 1, "inbound_shipment_pipeline": { - "6": [ - 0, - 8.0, - 28.0 - ], - "7": [ - 0, - 16.0, - 0.0 - ] + "6": { + "-6": [ + 0, + 8.0, + 28.0 + ] + }, + "7": { + "-7": [ + 0, + 16.0, + 0.0 + ] + } }, "inbound_shipment": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 3.0 + "3": { + "-4": 3.0 + } }, "outbound_shipment": { - "3": 2.0 + "3": { + "-4": 2.0 + } }, "on_order_by_predecessor": { - "6": 36.0, - "7": 36.0 + "6": { + "-6": 36.0 + }, + "7": { + "-7": 36.0 + } }, "backorders_by_successor": { - "3": 1.0 + "3": { + "-4": 1.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": -1.0 }, - "inventory_level": -1.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 17.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 16.0, - "fill_rate": 0.9411764705882353 + "demand_cumul": { + "-4": 17.0 + }, + "demand_met_from_stock": { + "-4": 2.0 + }, + "demand_met_from_stock_cumul": { + "-4": 16.0 + }, + "fill_rate": { + "-4": 0.9411764705882353 + } }, { "node": 4, "period": 2, "inbound_shipment_pipeline": { - "6": [ - 0, - 28.0, - 6.0 - ], - "7": [ - 0, - 0.0, - 26.0 - ] + "6": { + "-6": [ + 0, + 28.0, + 6.0 + ] + }, + "7": { + "-7": [ + 0, + 0.0, + 26.0 + ] + } }, "inbound_shipment": { - "6": 8.0, - "7": 16.0 + "6": { + "-6": 8.0 + }, + "7": { + "-7": 16.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 9.0 + "3": { + "-4": 9.0 + } }, "outbound_shipment": { - "3": 8.0 + "3": { + "-4": 8.0 + } }, "on_order_by_predecessor": { - "6": 34.0, - "7": 26.0 + "6": { + "-6": 34.0 + }, + "7": { + "-7": 26.0 + } }, "backorders_by_successor": { - "3": 2.0 + "3": { + "-4": 2.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 6.0, - "7": 6.0 + "6": { + "-6": 6.0 + }, + "7": { + "-7": 6.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 8.0 + "-7": 8.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": -2.0 }, - "inventory_level": -2.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 26.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 23.0, - "fill_rate": 0.8846153846153846 + "demand_cumul": { + "-4": 26.0 + }, + "demand_met_from_stock": { + "-4": 7.0 + }, + "demand_met_from_stock_cumul": { + "-4": 23.0 + }, + "fill_rate": { + "-4": 0.8846153846153846 + } }, { "node": 4, "period": 3, "inbound_shipment_pipeline": { - "6": [ - 0, - 6.0, - 0.0 - ], - "7": [ - 0, - 26.0, - 0.0 - ] + "6": { + "-6": [ + 0, + 6.0, + 0.0 + ] + }, + "7": { + "-7": [ + 0, + 26.0, + 0.0 + ] + } }, "inbound_shipment": { - "6": 28.0, - "7": 0.0 + "6": { + "-6": 28.0 + }, + "7": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 5.0 + "3": { + "-4": 5.0 + } }, "outbound_shipment": { - "3": 7.0 + "3": { + "-4": 7.0 + } }, "on_order_by_predecessor": { - "6": 6.0, - "7": 26.0 + "6": { + "-6": 6.0 + }, + "7": { + "-7": 26.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "raw_material_inventory": { - "6": 20.0, - "7": 0.0 + "-7": 0.0, + "-6": 20.0 + }, + "inventory_level": { + "-4": 1.0 }, - "inventory_level": 1.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 31.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 28.0, - "fill_rate": 0.9032258064516129 + "demand_cumul": { + "-4": 31.0 + }, + "demand_met_from_stock": { + "-4": 5.0 + }, + "demand_met_from_stock_cumul": { + "-4": 28.0 + }, + "fill_rate": { + "-4": 0.9032258064516129 + } }, { "node": 4, "period": 4, "inbound_shipment_pipeline": { - "6": [ - 0, - 0.0, - 0.0 - ], - "7": [ - 0, - 0.0, - 0.0 - ] + "6": { + "-6": [ + 0, + 0.0, + 0.0 + ] + }, + "7": { + "-7": [ + 0, + 0.0, + 0.0 + ] + } }, "inbound_shipment": { - "6": 6.0, - "7": 26.0 + "6": { + "-6": 6.0 + }, + "7": { + "-7": 26.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 5.0 + "3": { + "-4": 5.0 + } }, "outbound_shipment": { - "3": 5.0 + "3": { + "-4": 5.0 + } }, "on_order_by_predecessor": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 22.0 }, - "inventory_level": 22.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 36.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 33.0, - "fill_rate": 0.9166666666666666 + "demand_cumul": { + "-4": 36.0 + }, + "demand_met_from_stock": { + "-4": 5.0 + }, + "demand_met_from_stock_cumul": { + "-4": 33.0 + }, + "fill_rate": { + "-4": 0.9166666666666666 + } }, { "node": 4, "period": 5, "inbound_shipment_pipeline": { - "6": [ - 0, - 0.0, - 15.0 - ], - "7": [ - 0, - 0.0, - 15.0 - ] + "6": { + "-6": [ + 0, + 0.0, + 15.0 + ] + }, + "7": { + "-7": [ + 0, + 0.0, + 15.0 + ] + } }, "inbound_shipment": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 8.0 + "3": { + "-4": 8.0 + } }, "outbound_shipment": { - "3": 8.0 + "3": { + "-4": 8.0 + } }, "on_order_by_predecessor": { - "6": 15.0, - "7": 15.0 + "6": { + "-6": 15.0 + }, + "7": { + "-7": 15.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 15.0, - "7": 15.0 + "6": { + "-6": 15.0 + }, + "7": { + "-7": 15.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 14.0 }, - "inventory_level": 14.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 44.0, - "demand_met_from_stock": 8.0, - "demand_met_from_stock_cumul": 41.0, - "fill_rate": 0.9318181818181818 + "demand_cumul": { + "-4": 44.0 + }, + "demand_met_from_stock": { + "-4": 8.0 + }, + "demand_met_from_stock_cumul": { + "-4": 41.0 + }, + "fill_rate": { + "-4": 0.9318181818181818 + } }, { "node": 4, "period": 6, "inbound_shipment_pipeline": { - "6": [ - 0, - 15.0, - 1.0 - ], - "7": [ - 0, - 15.0, - 1.0 - ] + "6": { + "-6": [ + 0, + 15.0, + 1.0 + ] + }, + "7": { + "-7": [ + 0, + 15.0, + 1.0 + ] + } }, "inbound_shipment": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 9.0 + "3": { + "-4": 9.0 + } }, "outbound_shipment": { - "3": 9.0 + "3": { + "-4": 9.0 + } }, "on_order_by_predecessor": { - "6": 16.0, - "7": 16.0 + "6": { + "-6": 16.0 + }, + "7": { + "-7": 16.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 1.0, - "7": 1.0 + "6": { + "-6": 1.0 + }, + "7": { + "-7": 1.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 5.0 }, - "inventory_level": 5.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 53.0, - "demand_met_from_stock": 9.0, - "demand_met_from_stock_cumul": 50.0, - "fill_rate": 0.9433962264150944 + "demand_cumul": { + "-4": 53.0 + }, + "demand_met_from_stock": { + "-4": 9.0 + }, + "demand_met_from_stock_cumul": { + "-4": 50.0 + }, + "fill_rate": { + "-4": 0.9433962264150944 + } }, { "node": 4, "period": 7, "inbound_shipment_pipeline": { - "6": [ - 0, - 1.0, - 5.0 - ], - "7": [ - 0, - 1.0, - 5.0 - ] + "6": { + "-6": [ + 0, + 1.0, + 5.0 + ] + }, + "7": { + "-7": [ + 0, + 1.0, + 5.0 + ] + } }, "inbound_shipment": { - "6": 15.0, - "7": 15.0 + "6": { + "-6": 15.0 + }, + "7": { + "-7": 15.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 2.0 + "3": { + "-4": 2.0 + } }, "outbound_shipment": { - "3": 2.0 + "3": { + "-4": 2.0 + } }, "on_order_by_predecessor": { - "6": 6.0, - "7": 6.0 + "6": { + "-6": 6.0 + }, + "7": { + "-7": 6.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 5.0, - "7": 5.0 + "6": { + "-6": 5.0 + }, + "7": { + "-7": 5.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 18.0 }, - "inventory_level": 18.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 55.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 52.0, - "fill_rate": 0.9454545454545454 + "demand_cumul": { + "-4": 55.0 + }, + "demand_met_from_stock": { + "-4": 2.0 + }, + "demand_met_from_stock_cumul": { + "-4": 52.0 + }, + "fill_rate": { + "-4": 0.9454545454545454 + } }, { "node": 4, "period": 8, "inbound_shipment_pipeline": { - "6": [ - 0, - 5.0, - 0.0 - ], - "7": [ - 0, - 5.0, - 0.0 - ] + "6": { + "-6": [ + 0, + 5.0, + 0.0 + ] + }, + "7": { + "-7": [ + 0, + 5.0, + 0.0 + ] + } }, "inbound_shipment": { - "6": 1.0, - "7": 1.0 + "6": { + "-6": 1.0 + }, + "7": { + "-7": 1.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 6.0 + "3": { + "-4": 6.0 + } }, "outbound_shipment": { - "3": 6.0 + "3": { + "-4": 6.0 + } }, "on_order_by_predecessor": { - "6": 5.0, - "7": 5.0 + "6": { + "-6": 5.0 + }, + "7": { + "-7": 5.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 13.0 }, - "inventory_level": 13.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 61.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 58.0, - "fill_rate": 0.9508196721311475 + "demand_cumul": { + "-4": 61.0 + }, + "demand_met_from_stock": { + "-4": 6.0 + }, + "demand_met_from_stock_cumul": { + "-4": 58.0 + }, + "fill_rate": { + "-4": 0.9508196721311475 + } }, { "node": 4, "period": 9, "inbound_shipment_pipeline": { - "6": [ - 0, - 0.0, - 18.0 - ], - "7": [ - 0, - 0.0, - 18.0 - ] + "6": { + "-6": [ + 0, + 0.0, + 18.0 + ] + }, + "7": { + "-7": [ + 0, + 0.0, + 18.0 + ] + } }, "inbound_shipment": { - "6": 5.0, - "7": 5.0 + "6": { + "-6": 5.0 + }, + "7": { + "-7": 5.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 10.0 + "3": { + "-4": 10.0 + } }, "outbound_shipment": { - "3": 10.0 + "3": { + "-4": 10.0 + } }, "on_order_by_predecessor": { - "6": 18.0, - "7": 18.0 + "6": { + "-6": 18.0 + }, + "7": { + "-7": 18.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 18.0, - "7": 18.0 + "6": { + "-6": 18.0 + }, + "7": { + "-7": 18.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 8.0 }, - "inventory_level": 8.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 71.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 68.0, - "fill_rate": 0.9577464788732394 + "demand_cumul": { + "-4": 71.0 + }, + "demand_met_from_stock": { + "-4": 10.0 + }, + "demand_met_from_stock_cumul": { + "-4": 68.0 + }, + "fill_rate": { + "-4": 0.9577464788732394 + } }, { "node": 4, "period": 10, "inbound_shipment_pipeline": { - "6": [ - 0, - 18.0, - 5.0 - ], - "7": [ - 0, - 18.0, - 5.0 - ] + "6": { + "-6": [ + 0, + 18.0, + 5.0 + ] + }, + "7": { + "-7": [ + 0, + 18.0, + 5.0 + ] + } }, "inbound_shipment": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 10.0 + "3": { + "-4": 10.0 + } }, "outbound_shipment": { - "3": 8.0 + "3": { + "-4": 8.0 + } }, "on_order_by_predecessor": { - "6": 23.0, - "7": 23.0 + "6": { + "-6": 23.0 + }, + "7": { + "-7": 23.0 + } }, "backorders_by_successor": { - "3": 2.0 + "3": { + "-4": 2.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 5.0, - "7": 5.0 + "6": { + "-6": 5.0 + }, + "7": { + "-7": 5.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": -2.0 }, - "inventory_level": -2.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 81.0, - "demand_met_from_stock": 8.0, - "demand_met_from_stock_cumul": 76.0, - "fill_rate": 0.9382716049382716 + "demand_cumul": { + "-4": 81.0 + }, + "demand_met_from_stock": { + "-4": 8.0 + }, + "demand_met_from_stock_cumul": { + "-4": 76.0 + }, + "fill_rate": { + "-4": 0.9382716049382716 + } }, { "node": 4, "period": 11, "inbound_shipment_pipeline": { - "6": [ - 0, - 5.0, - 12.0 - ], - "7": [ - 0, - 5.0, - 12.0 - ] + "6": { + "-6": [ + 0, + 5.0, + 12.0 + ] + }, + "7": { + "-7": [ + 0, + 5.0, + 12.0 + ] + } }, "inbound_shipment": { - "6": 18.0, - "7": 18.0 + "6": { + "-6": 18.0 + }, + "7": { + "-7": 18.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 5.0 + "3": { + "-4": 5.0 + } }, "outbound_shipment": { - "3": 7.0 + "3": { + "-4": 7.0 + } }, "on_order_by_predecessor": { - "6": 17.0, - "7": 17.0 + "6": { + "-6": 17.0 + }, + "7": { + "-7": 17.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 12.0, - "7": 12.0 + "6": { + "-6": 12.0 + }, + "7": { + "-7": 12.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 11.0 }, - "inventory_level": 11.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 86.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 81.0, - "fill_rate": 0.9418604651162791 + "demand_cumul": { + "-4": 86.0 + }, + "demand_met_from_stock": { + "-4": 5.0 + }, + "demand_met_from_stock_cumul": { + "-4": 81.0 + }, + "fill_rate": { + "-4": 0.9418604651162791 + } }, { "node": 4, "period": 12, "inbound_shipment_pipeline": { - "6": [ - 0, - 12.0, - 0.0 - ], - "7": [ - 0, - 12.0, - 0.0 - ] + "6": { + "-6": [ + 0, + 12.0, + 0.0 + ] + }, + "7": { + "-7": [ + 0, + 12.0, + 0.0 + ] + } }, "inbound_shipment": { - "6": 5.0, - "7": 5.0 + "6": { + "-6": 5.0 + }, + "7": { + "-7": 5.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 6.0 + "3": { + "-4": 6.0 + } }, "outbound_shipment": { - "3": 6.0 + "3": { + "-4": 6.0 + } }, "on_order_by_predecessor": { - "6": 12.0, - "7": 12.0 + "6": { + "-6": 12.0 + }, + "7": { + "-7": 12.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 10.0 }, - "inventory_level": 10.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 92.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 87.0, - "fill_rate": 0.9456521739130435 + "demand_cumul": { + "-4": 92.0 + }, + "demand_met_from_stock": { + "-4": 6.0 + }, + "demand_met_from_stock_cumul": { + "-4": 87.0 + }, + "fill_rate": { + "-4": 0.9456521739130435 + } }, { "node": 4, "period": 13, "inbound_shipment_pipeline": { - "6": [ - 0, - 0.0, - 0.0 - ], - "7": [ - 0, - 0.0, - 0.0 - ] + "6": { + "-6": [ + 0, + 0.0, + 0.0 + ] + }, + "7": { + "-7": [ + 0, + 0.0, + 0.0 + ] + } }, "inbound_shipment": { - "6": 12.0, - "7": 12.0 + "6": { + "-6": 12.0 + }, + "7": { + "-7": 12.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 3.0 + "3": { + "-4": 3.0 + } }, "outbound_shipment": { - "3": 3.0 + "3": { + "-4": 3.0 + } }, "on_order_by_predecessor": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 19.0 }, - "inventory_level": 19.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 95.0, - "demand_met_from_stock": 3.0, - "demand_met_from_stock_cumul": 90.0, - "fill_rate": 0.9473684210526315 + "demand_cumul": { + "-4": 95.0 + }, + "demand_met_from_stock": { + "-4": 3.0 + }, + "demand_met_from_stock_cumul": { + "-4": 90.0 + }, + "fill_rate": { + "-4": 0.9473684210526315 + } }, { "node": 4, "period": 14, "inbound_shipment_pipeline": { - "6": [ - 0, - 0.0, - 7.0 - ], - "7": [ - 0, - 0.0, - 7.0 - ] + "6": { + "-6": [ + 0, + 0.0, + 7.0 + ] + }, + "7": { + "-7": [ + 0, + 0.0, + 7.0 + ] + } }, "inbound_shipment": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 7.0 + "3": { + "-4": 7.0 + } }, "outbound_shipment": { - "3": 7.0 + "3": { + "-4": 7.0 + } }, "on_order_by_predecessor": { - "6": 7.0, - "7": 7.0 + "6": { + "-6": 7.0 + }, + "7": { + "-7": 7.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 7.0, - "7": 7.0 + "6": { + "-6": 7.0 + }, + "7": { + "-7": 7.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 12.0 }, - "inventory_level": 12.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 102.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 97.0, - "fill_rate": 0.9509803921568627 + "demand_cumul": { + "-4": 102.0 + }, + "demand_met_from_stock": { + "-4": 7.0 + }, + "demand_met_from_stock_cumul": { + "-4": 97.0 + }, + "fill_rate": { + "-4": 0.9509803921568627 + } }, { "node": 4, "period": 15, "inbound_shipment_pipeline": { - "6": [ - 0, - 7.0, - 10.0 - ], - "7": [ - 0, - 7.0, - 10.0 - ] + "6": { + "-6": [ + 0, + 7.0, + 10.0 + ] + }, + "7": { + "-7": [ + 0, + 7.0, + 10.0 + ] + } }, "inbound_shipment": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 7.0 + "3": { + "-4": 7.0 + } }, "outbound_shipment": { - "3": 7.0 + "3": { + "-4": 7.0 + } }, "on_order_by_predecessor": { - "6": 17.0, - "7": 17.0 + "6": { + "-6": 17.0 + }, + "7": { + "-7": 17.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 10.0, - "7": 10.0 + "6": { + "-6": 10.0 + }, + "7": { + "-7": 10.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 5.0 }, - "inventory_level": 5.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 109.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 104.0, - "fill_rate": 0.9541284403669725 + "demand_cumul": { + "-4": 109.0 + }, + "demand_met_from_stock": { + "-4": 7.0 + }, + "demand_met_from_stock_cumul": { + "-4": 104.0 + }, + "fill_rate": { + "-4": 0.9541284403669725 + } }, { "node": 4, "period": 16, "inbound_shipment_pipeline": { - "6": [ - 0, - 10.0, - 1.0 - ], - "7": [ - 0, - 10.0, - 1.0 - ] + "6": { + "-6": [ + 0, + 10.0, + 1.0 + ] + }, + "7": { + "-7": [ + 0, + 10.0, + 1.0 + ] + } }, "inbound_shipment": { - "6": 7.0, - "7": 7.0 + "6": { + "-6": 7.0 + }, + "7": { + "-7": 7.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 2.0 + "3": { + "-4": 2.0 + } }, "outbound_shipment": { - "3": 2.0 + "3": { + "-4": 2.0 + } }, "on_order_by_predecessor": { - "6": 11.0, - "7": 11.0 + "6": { + "-6": 11.0 + }, + "7": { + "-7": 11.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 1.0, - "7": 1.0 + "6": { + "-6": 1.0 + }, + "7": { + "-7": 1.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 10.0 }, - "inventory_level": 10.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 111.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 106.0, - "fill_rate": 0.954954954954955 + "demand_cumul": { + "-4": 111.0 + }, + "demand_met_from_stock": { + "-4": 2.0 + }, + "demand_met_from_stock_cumul": { + "-4": 106.0 + }, + "fill_rate": { + "-4": 0.954954954954955 + } }, { "node": 4, "period": 17, "inbound_shipment_pipeline": { - "6": [ - 0, - 1.0, - 6.0 - ], - "7": [ - 0, - 1.0, - 6.0 - ] + "6": { + "-6": [ + 0, + 1.0, + 6.0 + ] + }, + "7": { + "-7": [ + 0, + 1.0, + 6.0 + ] + } }, "inbound_shipment": { - "6": 10.0, - "7": 10.0 + "6": { + "-6": 10.0 + }, + "7": { + "-7": 10.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 5.0 + "3": { + "-4": 5.0 + } }, "outbound_shipment": { - "3": 5.0 + "3": { + "-4": 5.0 + } }, "on_order_by_predecessor": { - "6": 7.0, - "7": 7.0 + "6": { + "-6": 7.0 + }, + "7": { + "-7": 7.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 6.0, - "7": 6.0 + "6": { + "-6": 6.0 + }, + "7": { + "-7": 6.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 15.0 }, - "inventory_level": 15.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 116.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 111.0, - "fill_rate": 0.9568965517241379 + "demand_cumul": { + "-4": 116.0 + }, + "demand_met_from_stock": { + "-4": 5.0 + }, + "demand_met_from_stock_cumul": { + "-4": 111.0 + }, + "fill_rate": { + "-4": 0.9568965517241379 + } }, { "node": 4, "period": 18, "inbound_shipment_pipeline": { - "6": [ - 0, - 6.0, - 2.0 - ], - "7": [ - 0, - 6.0, - 2.0 - ] + "6": { + "-6": [ + 0, + 6.0, + 2.0 + ] + }, + "7": { + "-7": [ + 0, + 6.0, + 2.0 + ] + } }, "inbound_shipment": { - "6": 1.0, - "7": 1.0 + "6": { + "-6": 1.0 + }, + "7": { + "-7": 1.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 4.0 + "3": { + "-4": 4.0 + } }, "outbound_shipment": { - "3": 4.0 + "3": { + "-4": 4.0 + } }, "on_order_by_predecessor": { - "6": 8.0, - "7": 8.0 + "6": { + "-6": 8.0 + }, + "7": { + "-7": 8.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 2.0, - "7": 2.0 + "6": { + "-6": 2.0 + }, + "7": { + "-7": 2.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 12.0 }, - "inventory_level": 12.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 120.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 115.0, - "fill_rate": 0.9583333333333334 + "demand_cumul": { + "-4": 120.0 + }, + "demand_met_from_stock": { + "-4": 4.0 + }, + "demand_met_from_stock_cumul": { + "-4": 115.0 + }, + "fill_rate": { + "-4": 0.9583333333333334 + } }, { "node": 4, "period": 19, "inbound_shipment_pipeline": { - "6": [ - 0, - 2.0, - 0.0 - ], - "7": [ - 0, - 2.0, - 0.0 - ] + "6": { + "-6": [ + 0, + 2.0, + 0.0 + ] + }, + "7": { + "-7": [ + 0, + 2.0, + 0.0 + ] + } }, "inbound_shipment": { - "6": 6.0, - "7": 6.0 + "6": { + "-6": 6.0 + }, + "7": { + "-7": 6.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 1.0 + "3": { + "-4": 1.0 + } }, "outbound_shipment": { - "3": 1.0 + "3": { + "-4": 1.0 + } }, "on_order_by_predecessor": { - "6": 2.0, - "7": 2.0 + "6": { + "-6": 2.0 + }, + "7": { + "-7": 2.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 17.0 }, - "inventory_level": 17.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 121.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 116.0, - "fill_rate": 0.9586776859504132 + "demand_cumul": { + "-4": 121.0 + }, + "demand_met_from_stock": { + "-4": 1.0 + }, + "demand_met_from_stock_cumul": { + "-4": 116.0 + }, + "fill_rate": { + "-4": 0.9586776859504132 + } }, { "node": 4, "period": 20, "inbound_shipment_pipeline": { - "6": [ - 0, - 0.0, - 15.0 - ], - "7": [ - 0, - 0.0, - 15.0 - ] + "6": { + "-6": [ + 0, + 0.0, + 15.0 + ] + }, + "7": { + "-7": [ + 0, + 0.0, + 15.0 + ] + } }, "inbound_shipment": { - "6": 2.0, - "7": 2.0 + "6": { + "-6": 2.0 + }, + "7": { + "-7": 2.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 7.0 + "3": { + "-4": 7.0 + } }, "outbound_shipment": { - "3": 7.0 + "3": { + "-4": 7.0 + } }, "on_order_by_predecessor": { - "6": 15.0, - "7": 15.0 + "6": { + "-6": 15.0 + }, + "7": { + "-7": 15.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 15.0, - "7": 15.0 + "6": { + "-6": 15.0 + }, + "7": { + "-7": 15.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 12.0 }, - "inventory_level": 12.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 128.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 123.0, - "fill_rate": 0.9609375 + "demand_cumul": { + "-4": 128.0 + }, + "demand_met_from_stock": { + "-4": 7.0 + }, + "demand_met_from_stock_cumul": { + "-4": 123.0 + }, + "fill_rate": { + "-4": 0.9609375 + } }, { "node": 4, "period": 21, "inbound_shipment_pipeline": { - "6": [ - 0, - 15.0, - 0.0 - ], - "7": [ - 0, - 15.0, - 0.0 - ] + "6": { + "-6": [ + 0, + 15.0, + 0.0 + ] + }, + "7": { + "-7": [ + 0, + 15.0, + 0.0 + ] + } }, "inbound_shipment": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 5.0 + "3": { + "-4": 5.0 + } }, "outbound_shipment": { - "3": 5.0 + "3": { + "-4": 5.0 + } }, "on_order_by_predecessor": { - "6": 15.0, - "7": 15.0 + "6": { + "-6": 15.0 + }, + "7": { + "-7": 15.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 7.0 }, - "inventory_level": 7.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 133.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 128.0, - "fill_rate": 0.9624060150375939 + "demand_cumul": { + "-4": 133.0 + }, + "demand_met_from_stock": { + "-4": 5.0 + }, + "demand_met_from_stock_cumul": { + "-4": 128.0 + }, + "fill_rate": { + "-4": 0.9624060150375939 + } }, { "node": 4, "period": 22, "inbound_shipment_pipeline": { - "6": [ - 0, - 0.0, - 0.0 - ], - "7": [ - 0, - 0.0, - 0.0 - ] + "6": { + "-6": [ + 0, + 0.0, + 0.0 + ] + }, + "7": { + "-7": [ + 0, + 0.0, + 0.0 + ] + } }, "inbound_shipment": { - "6": 15.0, - "7": 15.0 + "6": { + "-6": 15.0 + }, + "7": { + "-7": 15.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 1.0 + "3": { + "-4": 1.0 + } }, "outbound_shipment": { - "3": 1.0 + "3": { + "-4": 1.0 + } }, "on_order_by_predecessor": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 21.0 }, - "inventory_level": 21.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 134.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 129.0, - "fill_rate": 0.9626865671641791 + "demand_cumul": { + "-4": 134.0 + }, + "demand_met_from_stock": { + "-4": 1.0 + }, + "demand_met_from_stock_cumul": { + "-4": 129.0 + }, + "fill_rate": { + "-4": 0.9626865671641791 + } }, { "node": 4, "period": 23, "inbound_shipment_pipeline": { - "6": [ - 0, - 0.0, - 8.0 - ], - "7": [ - 0, - 0.0, - 8.0 - ] + "6": { + "-6": [ + 0, + 0.0, + 8.0 + ] + }, + "7": { + "-7": [ + 0, + 0.0, + 8.0 + ] + } }, "inbound_shipment": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 4.0 + "3": { + "-4": 4.0 + } }, "outbound_shipment": { - "3": 4.0 + "3": { + "-4": 4.0 + } }, "on_order_by_predecessor": { - "6": 8.0, - "7": 8.0 + "6": { + "-6": 8.0 + }, + "7": { + "-7": 8.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 8.0, - "7": 8.0 + "6": { + "-6": 8.0 + }, + "7": { + "-7": 8.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 17.0 }, - "inventory_level": 17.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 138.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 133.0, - "fill_rate": 0.9637681159420289 + "demand_cumul": { + "-4": 138.0 + }, + "demand_met_from_stock": { + "-4": 4.0 + }, + "demand_met_from_stock_cumul": { + "-4": 133.0 + }, + "fill_rate": { + "-4": 0.9637681159420289 + } }, { "node": 4, "period": 24, "inbound_shipment_pipeline": { - "6": [ - 0, - 8.0, - 0.0 - ], - "7": [ - 0, - 8.0, - 0.0 - ] + "6": { + "-6": [ + 0, + 8.0, + 0.0 + ] + }, + "7": { + "-7": [ + 0, + 8.0, + 0.0 + ] + } }, "inbound_shipment": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_shipment": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "on_order_by_predecessor": { - "6": 8.0, - "7": 8.0 + "6": { + "-6": 8.0 + }, + "7": { + "-7": 8.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0.0, - "7": 0.0 + "6": { + "-6": 0.0 + }, + "7": { + "-7": 0.0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 17.0 }, - "inventory_level": 17.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 138.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 133.0, - "fill_rate": 0.9637681159420289 + "demand_cumul": { + "-4": 138.0 + }, + "demand_met_from_stock": { + "-4": 0.0 + }, + "demand_met_from_stock_cumul": { + "-4": 133.0 + }, + "fill_rate": { + "-4": 0.9637681159420289 + } }, { "node": 4, "period": 25, "inbound_shipment_pipeline": { - "6": [ - 8.0, - 0.0, - 0 - ], - "7": [ - 8.0, - 0.0, - 0 - ] + "6": { + "-6": [ + 8.0, + 0.0, + 0 + ] + }, + "7": { + "-7": [ + 8.0, + 0.0, + 0 + ] + } }, "inbound_shipment": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_shipment": { - "3": 0 + "3": { + "-4": 0 + } }, "on_order_by_predecessor": { - "6": 8.0, - "7": 8.0 + "6": { + "-6": 8.0 + }, + "7": { + "-7": 8.0 + } }, "backorders_by_successor": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "outbound_disrupted_items": { - "3": 0.0 + "3": { + "-4": 0.0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "raw_material_inventory": { - "6": 0.0, - "7": 0.0 + "-7": 0.0, + "-6": 0.0 + }, + "inventory_level": { + "-4": 17.0 }, - "inventory_level": 17.0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 138.0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 133.0, - "fill_rate": 0 + "demand_cumul": { + "-4": 138.0 + }, + "demand_met_from_stock": { + "-4": 0 + }, + "demand_met_from_stock_cumul": { + "-4": 133.0 + }, + "fill_rate": { + "-4": 0 + } }, { "node": 4, "period": 26, "inbound_shipment_pipeline": { - "6": [ - 0, - 0, - 0 - ], - "7": [ - 0, - 0, - 0 - ] + "6": { + "-6": [ + 0, + 0, + 0 + ] + }, + "7": { + "-7": [ + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_shipment": { - "3": 0 + "3": { + "-4": 0 + } }, "on_order_by_predecessor": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "backorders_by_successor": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "raw_material_inventory": { - "6": 0, - "7": 0 + "-7": 0, + "-6": 0 + }, + "inventory_level": { + "-4": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-4": 0 + }, + "demand_met_from_stock": { + "-4": 0 + }, + "demand_met_from_stock_cumul": { + "-4": 0 + }, + "fill_rate": { + "-4": 0 + } }, { "node": 4, "period": 27, "inbound_shipment_pipeline": { - "6": [ - 0, - 0, - 0 - ], - "7": [ - 0, - 0, - 0 - ] + "6": { + "-6": [ + 0, + 0, + 0 + ] + }, + "7": { + "-7": [ + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_shipment": { - "3": 0 + "3": { + "-4": 0 + } }, "on_order_by_predecessor": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "backorders_by_successor": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "raw_material_inventory": { - "6": 0, - "7": 0 + "-7": 0, + "-6": 0 + }, + "inventory_level": { + "-4": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-4": 0 + }, + "demand_met_from_stock": { + "-4": 0 + }, + "demand_met_from_stock_cumul": { + "-4": 0 + }, + "fill_rate": { + "-4": 0 + } }, { "node": 4, "period": 28, "inbound_shipment_pipeline": { - "6": [ - 0, - 0, - 0 - ], - "7": [ - 0, - 0, - 0 - ] + "6": { + "-6": [ + 0, + 0, + 0 + ] + }, + "7": { + "-7": [ + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_shipment": { - "3": 0 + "3": { + "-4": 0 + } }, "on_order_by_predecessor": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "backorders_by_successor": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "raw_material_inventory": { - "6": 0, - "7": 0 + "-7": 0, + "-6": 0 + }, + "inventory_level": { + "-4": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-4": 0 + }, + "demand_met_from_stock": { + "-4": 0 + }, + "demand_met_from_stock_cumul": { + "-4": 0 + }, + "fill_rate": { + "-4": 0 + } }, { "node": 4, "period": 29, "inbound_shipment_pipeline": { - "6": [ - 0, - 0, - 0 - ], - "7": [ - 0, - 0, - 0 - ] + "6": { + "-6": [ + 0, + 0, + 0 + ] + }, + "7": { + "-7": [ + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_shipment": { - "3": 0 + "3": { + "-4": 0 + } }, "on_order_by_predecessor": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "backorders_by_successor": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "raw_material_inventory": { - "6": 0, - "7": 0 + "-7": 0, + "-6": 0 + }, + "inventory_level": { + "-4": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-4": 0 + }, + "demand_met_from_stock": { + "-4": 0 + }, + "demand_met_from_stock_cumul": { + "-4": 0 + }, + "fill_rate": { + "-4": 0 + } }, { "node": 4, "period": 30, "inbound_shipment_pipeline": { - "6": [ - 0, - 0, - 0 - ], - "7": [ - 0, - 0, - 0 - ] + "6": { + "-6": [ + 0, + 0, + 0 + ] + }, + "7": { + "-7": [ + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "inbound_order_pipeline": { - "3": [ - 0 - ] + "3": { + "-4": [ + 0 + ] + } }, "inbound_order": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_shipment": { - "3": 0 + "3": { + "-4": 0 + } }, "on_order_by_predecessor": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "backorders_by_successor": { - "3": 0 + "3": { + "-4": 0 + } }, "outbound_disrupted_items": { - "3": 0 + "3": { + "-4": 0 + } }, "inbound_disrupted_items": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "order_quantity": { - "6": 0, - "7": 0 + "6": { + "-6": 0 + }, + "7": { + "-7": 0 + } }, "raw_material_inventory": { - "6": 0, - "7": 0 + "-7": 0, + "-6": 0 + }, + "inventory_level": { + "-4": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-4": 0 + }, + "demand_met_from_stock": { + "-4": 0 + }, + "demand_met_from_stock_cumul": { + "-4": 0 + }, + "fill_rate": { + "-4": 0 + } } ] }, { - "index": 5, + "_index": 5, "name": null, "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ null ], @@ -7545,6 +11922,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": 32, @@ -7553,13 +11932,13 @@ "_inventory_policy": { "type": "BEBS", "node": 5, + "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": "U", - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -7568,6 +11947,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -7584,1744 +11964,2679 @@ "node": 5, "period": 0, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0, - 0, - 22.0 - ] + "null": { + "-6": [ + 0, + 0, + 0, + 0, + 22.0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 14.0 + "2": { + "-5": 14.0 + } }, "outbound_shipment": { - "2": 14.0 + "2": { + "-5": 14.0 + } }, "on_order_by_predecessor": { - "null": 22.0 + "null": { + "-6": 22.0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 22.0 + "null": { + "-6": 22.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 18.0 }, - "inventory_level": 18.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 14.0, - "demand_met_from_stock": 14.0, - "demand_met_from_stock_cumul": 14.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 14.0 + }, + "demand_met_from_stock": { + "-5": 14.0 + }, + "demand_met_from_stock_cumul": { + "-5": 14.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 1, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0, - 22.0, - 0.0 - ] + "null": { + "-6": [ + 0, + 0, + 0, + 22.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 3.0 + "2": { + "-5": 3.0 + } }, "outbound_shipment": { - "2": 3.0 + "2": { + "-5": 3.0 + } }, "on_order_by_predecessor": { - "null": 22.0 + "null": { + "-6": 22.0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-6": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 15.0 }, - "inventory_level": 15.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 17.0, - "demand_met_from_stock": 3.0, - "demand_met_from_stock_cumul": 17.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 17.0 + }, + "demand_met_from_stock": { + "-5": 3.0 + }, + "demand_met_from_stock_cumul": { + "-5": 17.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 2, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 22.0, - 0.0, - 11.0 - ] + "null": { + "-6": [ + 0, + 0, + 22.0, + 0.0, + 11.0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 10.0 + "2": { + "-5": 10.0 + } }, "outbound_shipment": { - "2": 10.0 + "2": { + "-5": 10.0 + } }, "on_order_by_predecessor": { - "null": 33.0 + "null": { + "-6": 33.0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 11.0 + "null": { + "-6": 11.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 5.0 }, - "inventory_level": 5.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 27.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 27.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 27.0 + }, + "demand_met_from_stock": { + "-5": 10.0 + }, + "demand_met_from_stock_cumul": { + "-5": 27.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 3, "inbound_shipment_pipeline": { - "null": [ - 0, - 22.0, - 0.0, - 11.0, - 0.0 - ] + "null": { + "-6": [ + 0, + 22.0, + 0.0, + 11.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_shipment": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "on_order_by_predecessor": { - "null": 33.0 + "null": { + "-6": 33.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-6": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 5.0 }, - "inventory_level": 5.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 27.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 27.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 27.0 + }, + "demand_met_from_stock": { + "-5": 0.0 + }, + "demand_met_from_stock_cumul": { + "-5": 27.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 4, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 11.0, - 0.0, - 10.0 - ] + "null": { + "-6": [ + 0, + 0.0, + 11.0, + 0.0, + 10.0 + ] + } }, "inbound_shipment": { - "null": 22.0 + "null": { + "-6": 22.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 11.0 + "2": { + "-5": 11.0 + } }, "outbound_shipment": { - "2": 11.0 + "2": { + "-5": 11.0 + } }, "on_order_by_predecessor": { - "null": 21.0 + "null": { + "-6": 21.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 10.0 + "null": { + "-6": 10.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 16.0 }, - "inventory_level": 16.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 38.0, - "demand_met_from_stock": 11.0, - "demand_met_from_stock_cumul": 38.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 38.0 + }, + "demand_met_from_stock": { + "-5": 11.0 + }, + "demand_met_from_stock_cumul": { + "-5": 38.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 5, "inbound_shipment_pipeline": { - "null": [ - 0, - 11.0, - 0.0, - 10.0, - 6.0 - ] + "null": { + "-6": [ + 0, + 11.0, + 0.0, + 10.0, + 6.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-6": 0.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 5.0 + "2": { + "-5": 5.0 + } }, "outbound_shipment": { - "2": 5.0 + "2": { + "-5": 5.0 + } }, "on_order_by_predecessor": { - "null": 27.0 + "null": { + "-6": 27.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 6.0 + "null": { + "-6": 6.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 11.0 }, - "inventory_level": 11.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 43.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 43.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 43.0 + }, + "demand_met_from_stock": { + "-5": 5.0 + }, + "demand_met_from_stock_cumul": { + "-5": 43.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 6, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 10.0, - 6.0, - 11.0 - ] + "null": { + "-6": [ + 0, + 0.0, + 10.0, + 6.0, + 11.0 + ] + } }, "inbound_shipment": { - "null": 11.0 + "null": { + "-6": 11.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 10.0 + "2": { + "-5": 10.0 + } }, "outbound_shipment": { - "2": 10.0 + "2": { + "-5": 10.0 + } }, "on_order_by_predecessor": { - "null": 27.0 + "null": { + "-6": 27.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 11.0 + "null": { + "-6": 11.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 12.0 }, - "inventory_level": 12.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 53.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 53.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 53.0 + }, + "demand_met_from_stock": { + "-5": 10.0 + }, + "demand_met_from_stock_cumul": { + "-5": 53.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 7, "inbound_shipment_pipeline": { - "null": [ - 0, - 10.0, - 6.0, - 11.0, - 1.0 - ] + "null": { + "-6": [ + 0, + 10.0, + 6.0, + 11.0, + 1.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-6": 0.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 2.0 + "2": { + "-5": 2.0 + } }, "outbound_shipment": { - "2": 2.0 + "2": { + "-5": 2.0 + } }, "on_order_by_predecessor": { - "null": 28.0 + "null": { + "-6": 28.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 1.0 + "null": { + "-6": 1.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 10.0 }, - "inventory_level": 10.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 55.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 55.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 55.0 + }, + "demand_met_from_stock": { + "-5": 2.0 + }, + "demand_met_from_stock_cumul": { + "-5": 55.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 8, "inbound_shipment_pipeline": { - "null": [ - 0, - 6.0, - 11.0, - 1.0, - 6.0 - ] + "null": { + "-6": [ + 0, + 6.0, + 11.0, + 1.0, + 6.0 + ] + } }, "inbound_shipment": { - "null": 10.0 + "null": { + "-6": 10.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 6.0 + "2": { + "-5": 6.0 + } }, "outbound_shipment": { - "2": 6.0 + "2": { + "-5": 6.0 + } }, "on_order_by_predecessor": { - "null": 24.0 + "null": { + "-6": 24.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 6.0 + "null": { + "-6": 6.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 14.0 }, - "inventory_level": 14.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 61.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 61.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 61.0 + }, + "demand_met_from_stock": { + "-5": 6.0 + }, + "demand_met_from_stock_cumul": { + "-5": 61.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 9, "inbound_shipment_pipeline": { - "null": [ - 0, - 11.0, - 1.0, - 6.0, - 10.0 - ] + "null": { + "-6": [ + 0, + 11.0, + 1.0, + 6.0, + 10.0 + ] + } }, "inbound_shipment": { - "null": 6.0 + "null": { + "-6": 6.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 10.0 + "2": { + "-5": 10.0 + } }, "outbound_shipment": { - "2": 10.0 + "2": { + "-5": 10.0 + } }, "on_order_by_predecessor": { - "null": 28.0 + "null": { + "-6": 28.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 10.0 + "null": { + "-6": 10.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 10.0 }, - "inventory_level": 10.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 71.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 71.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 71.0 + }, + "demand_met_from_stock": { + "-5": 10.0 + }, + "demand_met_from_stock_cumul": { + "-5": 71.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 10, "inbound_shipment_pipeline": { - "null": [ - 0, - 1.0, - 6.0, - 10.0, - 10.0 - ] + "null": { + "-6": [ + 0, + 1.0, + 6.0, + 10.0, + 10.0 + ] + } }, "inbound_shipment": { - "null": 11.0 + "null": { + "-6": 11.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 10.0 + "2": { + "-5": 10.0 + } }, "outbound_shipment": { - "2": 10.0 + "2": { + "-5": 10.0 + } }, "on_order_by_predecessor": { - "null": 27.0 + "null": { + "-6": 27.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 10.0 + "null": { + "-6": 10.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 11.0 }, - "inventory_level": 11.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 81.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 81.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 81.0 + }, + "demand_met_from_stock": { + "-5": 10.0 + }, + "demand_met_from_stock_cumul": { + "-5": 81.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 11, "inbound_shipment_pipeline": { - "null": [ - 0, - 6.0, - 10.0, - 10.0, - 7.0 - ] + "null": { + "-6": [ + 0, + 6.0, + 10.0, + 10.0, + 7.0 + ] + } }, "inbound_shipment": { - "null": 1.0 + "null": { + "-6": 1.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 7.0 + "2": { + "-5": 7.0 + } }, "outbound_shipment": { - "2": 7.0 + "2": { + "-5": 7.0 + } }, "on_order_by_predecessor": { - "null": 33.0 + "null": { + "-6": 33.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 7.0 + "null": { + "-6": 7.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 5.0 }, - "inventory_level": 5.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 88.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 88.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 88.0 + }, + "demand_met_from_stock": { + "-5": 7.0 + }, + "demand_met_from_stock_cumul": { + "-5": 88.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 12, "inbound_shipment_pipeline": { - "null": [ - 0, - 10.0, - 10.0, - 7.0, - 3.0 - ] + "null": { + "-6": [ + 0, + 10.0, + 10.0, + 7.0, + 3.0 + ] + } }, "inbound_shipment": { - "null": 6.0 + "null": { + "-6": 6.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 3.0 + "2": { + "-5": 3.0 + } }, "outbound_shipment": { - "2": 3.0 + "2": { + "-5": 3.0 + } }, "on_order_by_predecessor": { - "null": 30.0 + "null": { + "-6": 30.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 3.0 + "null": { + "-6": 3.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 8.0 }, - "inventory_level": 8.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 91.0, - "demand_met_from_stock": 3.0, - "demand_met_from_stock_cumul": 91.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 91.0 + }, + "demand_met_from_stock": { + "-5": 3.0 + }, + "demand_met_from_stock_cumul": { + "-5": 91.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 13, "inbound_shipment_pipeline": { - "null": [ - 0, - 10.0, - 7.0, - 3.0, - 5.0 - ] + "null": { + "-6": [ + 0, + 10.0, + 7.0, + 3.0, + 5.0 + ] + } }, "inbound_shipment": { - "null": 10.0 + "null": { + "-6": 10.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 4.0 + "2": { + "-5": 4.0 + } }, "outbound_shipment": { - "2": 4.0 + "2": { + "-5": 4.0 + } }, "on_order_by_predecessor": { - "null": 25.0 + "null": { + "-6": 25.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 5.0 + "null": { + "-6": 5.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 14.0 }, - "inventory_level": 14.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 95.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 95.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 95.0 + }, + "demand_met_from_stock": { + "-5": 4.0 + }, + "demand_met_from_stock_cumul": { + "-5": 95.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 14, "inbound_shipment_pipeline": { - "null": [ - 0, - 7.0, - 3.0, - 5.0, - 6.0 - ] + "null": { + "-6": [ + 0, + 7.0, + 3.0, + 5.0, + 6.0 + ] + } }, "inbound_shipment": { - "null": 10.0 + "null": { + "-6": 10.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 7.0 + "2": { + "-5": 7.0 + } }, "outbound_shipment": { - "2": 7.0 + "2": { + "-5": 7.0 + } }, "on_order_by_predecessor": { - "null": 21.0 + "null": { + "-6": 21.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 6.0 + "null": { + "-6": 6.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 17.0 }, - "inventory_level": 17.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 102.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 102.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 102.0 + }, + "demand_met_from_stock": { + "-5": 7.0 + }, + "demand_met_from_stock_cumul": { + "-5": 102.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 15, "inbound_shipment_pipeline": { - "null": [ - 0, - 3.0, - 5.0, - 6.0, - 7.0 - ] + "null": { + "-6": [ + 0, + 3.0, + 5.0, + 6.0, + 7.0 + ] + } }, "inbound_shipment": { - "null": 7.0 + "null": { + "-6": 7.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 7.0 + "2": { + "-5": 7.0 + } }, "outbound_shipment": { - "2": 7.0 + "2": { + "-5": 7.0 + } }, "on_order_by_predecessor": { - "null": 21.0 + "null": { + "-6": 21.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 7.0 + "null": { + "-6": 7.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 17.0 }, - "inventory_level": 17.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 109.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 109.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 109.0 + }, + "demand_met_from_stock": { + "-5": 7.0 + }, + "demand_met_from_stock_cumul": { + "-5": 109.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 16, "inbound_shipment_pipeline": { - "null": [ - 0, - 5.0, - 6.0, - 7.0, - 2.0 - ] + "null": { + "-6": [ + 0, + 5.0, + 6.0, + 7.0, + 2.0 + ] + } }, "inbound_shipment": { - "null": 3.0 + "null": { + "-6": 3.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 2.0 + "2": { + "-5": 2.0 + } }, "outbound_shipment": { - "2": 2.0 + "2": { + "-5": 2.0 + } }, "on_order_by_predecessor": { - "null": 20.0 + "null": { + "-6": 20.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 2.0 + "null": { + "-6": 2.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 18.0 }, - "inventory_level": 18.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 111.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 111.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 111.0 + }, + "demand_met_from_stock": { + "-5": 2.0 + }, + "demand_met_from_stock_cumul": { + "-5": 111.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 17, "inbound_shipment_pipeline": { - "null": [ - 0, - 6.0, - 7.0, - 2.0, - 5.0 - ] + "null": { + "-6": [ + 0, + 6.0, + 7.0, + 2.0, + 5.0 + ] + } }, "inbound_shipment": { - "null": 5.0 + "null": { + "-6": 5.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 5.0 + "2": { + "-5": 5.0 + } }, "outbound_shipment": { - "2": 5.0 + "2": { + "-5": 5.0 + } }, "on_order_by_predecessor": { - "null": 20.0 + "null": { + "-6": 20.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 5.0 + "null": { + "-6": 5.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 18.0 }, - "inventory_level": 18.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 116.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 116.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 116.0 + }, + "demand_met_from_stock": { + "-5": 5.0 + }, + "demand_met_from_stock_cumul": { + "-5": 116.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 18, "inbound_shipment_pipeline": { - "null": [ - 0, - 7.0, - 2.0, - 5.0, - 4.0 - ] + "null": { + "-6": [ + 0, + 7.0, + 2.0, + 5.0, + 4.0 + ] + } }, "inbound_shipment": { - "null": 6.0 + "null": { + "-6": 6.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 4.0 + "2": { + "-5": 4.0 + } }, "outbound_shipment": { - "2": 4.0 + "2": { + "-5": 4.0 + } }, "on_order_by_predecessor": { - "null": 18.0 + "null": { + "-6": 18.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 4.0 + "null": { + "-6": 4.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 20.0 }, - "inventory_level": 20.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 120.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 120.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 120.0 + }, + "demand_met_from_stock": { + "-5": 4.0 + }, + "demand_met_from_stock_cumul": { + "-5": 120.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 19, "inbound_shipment_pipeline": { - "null": [ - 0, - 2.0, - 5.0, - 4.0, - 1.0 - ] + "null": { + "-6": [ + 0, + 2.0, + 5.0, + 4.0, + 1.0 + ] + } }, "inbound_shipment": { - "null": 7.0 + "null": { + "-6": 7.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 1.0 + "2": { + "-5": 1.0 + } }, "outbound_shipment": { - "2": 1.0 + "2": { + "-5": 1.0 + } }, "on_order_by_predecessor": { - "null": 12.0 + "null": { + "-6": 12.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 1.0 + "null": { + "-6": 1.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 26.0 }, - "inventory_level": 26.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 121.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 121.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 121.0 + }, + "demand_met_from_stock": { + "-5": 1.0 + }, + "demand_met_from_stock_cumul": { + "-5": 121.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 20, "inbound_shipment_pipeline": { - "null": [ - 0, - 5.0, - 4.0, - 1.0, - 7.0 - ] + "null": { + "-6": [ + 0, + 5.0, + 4.0, + 1.0, + 7.0 + ] + } }, "inbound_shipment": { - "null": 2.0 + "null": { + "-6": 2.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 7.0 + "2": { + "-5": 7.0 + } }, "outbound_shipment": { - "2": 7.0 + "2": { + "-5": 7.0 + } }, "on_order_by_predecessor": { - "null": 17.0 + "null": { + "-6": 17.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 7.0 + "null": { + "-6": 7.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 21.0 }, - "inventory_level": 21.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 128.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 128.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 128.0 + }, + "demand_met_from_stock": { + "-5": 7.0 + }, + "demand_met_from_stock_cumul": { + "-5": 128.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 21, "inbound_shipment_pipeline": { - "null": [ - 0, - 4.0, - 1.0, - 7.0, - 5.0 - ] + "null": { + "-6": [ + 0, + 4.0, + 1.0, + 7.0, + 5.0 + ] + } }, "inbound_shipment": { - "null": 5.0 + "null": { + "-6": 5.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 5.0 + "2": { + "-5": 5.0 + } }, "outbound_shipment": { - "2": 5.0 + "2": { + "-5": 5.0 + } }, "on_order_by_predecessor": { - "null": 17.0 + "null": { + "-6": 17.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 5.0 + "null": { + "-6": 5.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 21.0 }, - "inventory_level": 21.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 133.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 133.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 133.0 + }, + "demand_met_from_stock": { + "-5": 5.0 + }, + "demand_met_from_stock_cumul": { + "-5": 133.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 22, "inbound_shipment_pipeline": { - "null": [ - 0, - 1.0, - 7.0, - 5.0, - 1.0 - ] + "null": { + "-6": [ + 0, + 1.0, + 7.0, + 5.0, + 1.0 + ] + } }, "inbound_shipment": { - "null": 4.0 + "null": { + "-6": 4.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 1.0 + "2": { + "-5": 1.0 + } }, "outbound_shipment": { - "2": 1.0 + "2": { + "-5": 1.0 + } }, "on_order_by_predecessor": { - "null": 14.0 + "null": { + "-6": 14.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 1.0 + "null": { + "-6": 1.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 24.0 }, - "inventory_level": 24.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 134.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 134.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 134.0 + }, + "demand_met_from_stock": { + "-5": 1.0 + }, + "demand_met_from_stock_cumul": { + "-5": 134.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 23, "inbound_shipment_pipeline": { - "null": [ - 0, - 7.0, - 5.0, - 1.0, - 4.0 - ] + "null": { + "-6": [ + 0, + 7.0, + 5.0, + 1.0, + 4.0 + ] + } }, "inbound_shipment": { - "null": 1.0 + "null": { + "-6": 1.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 4.0 + "2": { + "-5": 4.0 + } }, "outbound_shipment": { - "2": 4.0 + "2": { + "-5": 4.0 + } }, "on_order_by_predecessor": { - "null": 17.0 + "null": { + "-6": 17.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 4.0 + "null": { + "-6": 4.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 21.0 }, - "inventory_level": 21.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 138.0, - "demand_met_from_stock": 4.0, - "demand_met_from_stock_cumul": 138.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 138.0 + }, + "demand_met_from_stock": { + "-5": 4.0 + }, + "demand_met_from_stock_cumul": { + "-5": 138.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 24, "inbound_shipment_pipeline": { - "null": [ - 0, - 5.0, - 1.0, - 4.0, - 0.0 - ] + "null": { + "-6": [ + 0, + 5.0, + 1.0, + 4.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 7.0 + "null": { + "-6": 7.0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_shipment": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "on_order_by_predecessor": { - "null": 10.0 + "null": { + "-6": 10.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-6": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 28.0 }, - "inventory_level": 28.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 138.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 138.0, - "fill_rate": 1.0 + "demand_cumul": { + "-5": 138.0 + }, + "demand_met_from_stock": { + "-5": 0.0 + }, + "demand_met_from_stock_cumul": { + "-5": 138.0 + }, + "fill_rate": { + "-5": 1.0 + } }, { "node": 5, "period": 25, "inbound_shipment_pipeline": { - "null": [ - 5.0, - 1.0, - 4.0, - 0.0, - 0 - ] + "null": { + "-6": [ + 5.0, + 1.0, + 4.0, + 0.0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_shipment": { - "2": 0 + "2": { + "-5": 0 + } }, "on_order_by_predecessor": { - "null": 10.0 + "null": { + "-6": 10.0 + } }, "backorders_by_successor": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "outbound_disrupted_items": { - "2": 0.0 + "2": { + "-5": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-6": 0 + } }, "raw_material_inventory": { - "null": 0.0 + "-6": 0.0 + }, + "inventory_level": { + "-5": 28.0 }, - "inventory_level": 28.0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 138.0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 138.0, - "fill_rate": 0 + "demand_cumul": { + "-5": 138.0 + }, + "demand_met_from_stock": { + "-5": 0 + }, + "demand_met_from_stock_cumul": { + "-5": 138.0 + }, + "fill_rate": { + "-5": 0 + } }, { "node": 5, "period": 26, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0, - 0, - 0 - ] + "null": { + "-6": [ + 0, + 0, + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_shipment": { - "2": 0 + "2": { + "-5": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-6": 0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-6": 0 + } }, "raw_material_inventory": { - "null": 0 + "-6": 0 + }, + "inventory_level": { + "-5": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-5": 0 + }, + "demand_met_from_stock": { + "-5": 0 + }, + "demand_met_from_stock_cumul": { + "-5": 0 + }, + "fill_rate": { + "-5": 0 + } }, { "node": 5, "period": 27, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0, - 0, - 0 - ] + "null": { + "-6": [ + 0, + 0, + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_shipment": { - "2": 0 + "2": { + "-5": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-6": 0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-6": 0 + } }, "raw_material_inventory": { - "null": 0 + "-6": 0 + }, + "inventory_level": { + "-5": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-5": 0 + }, + "demand_met_from_stock": { + "-5": 0 + }, + "demand_met_from_stock_cumul": { + "-5": 0 + }, + "fill_rate": { + "-5": 0 + } }, { "node": 5, "period": 28, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0, - 0, - 0 - ] + "null": { + "-6": [ + 0, + 0, + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_shipment": { - "2": 0 + "2": { + "-5": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-6": 0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-6": 0 + } }, "raw_material_inventory": { - "null": 0 + "-6": 0 + }, + "inventory_level": { + "-5": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-5": 0 + }, + "demand_met_from_stock": { + "-5": 0 + }, + "demand_met_from_stock_cumul": { + "-5": 0 + }, + "fill_rate": { + "-5": 0 + } }, { "node": 5, "period": 29, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0, - 0, - 0 - ] + "null": { + "-6": [ + 0, + 0, + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_shipment": { - "2": 0 + "2": { + "-5": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-6": 0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-6": 0 + } }, "raw_material_inventory": { - "null": 0 + "-6": 0 + }, + "inventory_level": { + "-5": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-5": 0 + }, + "demand_met_from_stock": { + "-5": 0 + }, + "demand_met_from_stock_cumul": { + "-5": 0 + }, + "fill_rate": { + "-5": 0 + } }, { "node": 5, "period": 30, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0, - 0, - 0 - ] + "null": { + "-6": [ + 0, + 0, + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-6": 0 + } }, "inbound_order_pipeline": { - "2": [ - 0 - ] + "2": { + "-5": [ + 0 + ] + } }, "inbound_order": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_shipment": { - "2": 0 + "2": { + "-5": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-6": 0 + } }, "backorders_by_successor": { - "2": 0 + "2": { + "-5": 0 + } }, "outbound_disrupted_items": { - "2": 0 + "2": { + "-5": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-6": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-6": 0 + } }, "raw_material_inventory": { - "null": 0 + "-6": 0 + }, + "inventory_level": { + "-5": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-5": 0 + }, + "demand_met_from_stock": { + "-5": 0 + }, + "demand_met_from_stock_cumul": { + "-5": 0 + }, + "fill_rate": { + "-5": 0 + } } ] }, { - "index": 6, + "_index": 6, "name": null, "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, "_predecessors": [ null ], @@ -9345,6 +14660,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": 8, @@ -9353,13 +14670,13 @@ "_inventory_policy": { "type": "BEBS", "node": 6, + "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": "U", - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -9368,6 +14685,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -9384,1651 +14702,2586 @@ "node": 6, "period": 0, "inbound_shipment_pipeline": { - "null": [ - 0, - 44.0 - ] + "null": { + "-7": [ + 0, + 44.0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-7": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 36.0 + "4": { + "-6": 36.0 + } }, "outbound_shipment": { - "4": 8.0 + "4": { + "-6": 8.0 + } }, "on_order_by_predecessor": { - "null": 44.0 + "null": { + "-7": 44.0 + } }, "backorders_by_successor": { - "4": 28.0 + "4": { + "-6": 28.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-6": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 44.0 + "null": { + "-7": 44.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": -28.0 }, - "inventory_level": -28.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 36.0, - "demand_met_from_stock": 8.0, - "demand_met_from_stock_cumul": 8.0, - "fill_rate": 0.2222222222222222 + "demand_cumul": { + "-6": 36.0 + }, + "demand_met_from_stock": { + "-6": 8.0 + }, + "demand_met_from_stock_cumul": { + "-6": 8.0 + }, + "fill_rate": { + "-6": 0.2222222222222222 + } }, { "node": 6, "period": 1, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 44.0 + "null": { + "-7": 44.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_shipment": { - "4": 28.0 + "4": { + "-6": 28.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-6": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 16.0 }, - "inventory_level": 16.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 36.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 8.0, - "fill_rate": 0.2222222222222222 + "demand_cumul": { + "-6": 36.0 + }, + "demand_met_from_stock": { + "-6": 0.0 + }, + "demand_met_from_stock_cumul": { + "-6": 8.0 + }, + "fill_rate": { + "-6": 0.2222222222222222 + } }, { "node": 6, "period": 2, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 6.0 + "4": { + "-6": 6.0 + } }, "outbound_shipment": { - "4": 6.0 + "4": { + "-6": 6.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-6": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 10.0 }, - "inventory_level": 10.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 42.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 14.0, - "fill_rate": 0.3333333333333333 + "demand_cumul": { + "-6": 42.0 + }, + "demand_met_from_stock": { + "-6": 6.0 + }, + "demand_met_from_stock_cumul": { + "-6": 14.0 + }, + "fill_rate": { + "-6": 0.3333333333333333 + } }, { "node": 6, "period": 3, "inbound_shipment_pipeline": { - "null": [ - 0, - 3.0 - ] + "null": { + "-7": [ + 0, + 3.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "on_order_by_predecessor": { - "null": 3.0 + "null": { + "-7": 3.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 3.0 + "null": { + "-7": 3.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 10.0 }, - "inventory_level": 10.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 42.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 14.0, - "fill_rate": 0.3333333333333333 + "demand_cumul": { + "-6": 42.0 + }, + "demand_met_from_stock": { + "-6": 0.0 + }, + "demand_met_from_stock_cumul": { + "-6": 14.0 + }, + "fill_rate": { + "-6": 0.3333333333333333 + } }, { "node": 6, "period": 4, "inbound_shipment_pipeline": { - "null": [ - 0, - 27.0 - ] + "null": { + "-7": [ + 0, + 27.0 + ] + } }, "inbound_shipment": { - "null": 3.0 + "null": { + "-7": 3.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "on_order_by_predecessor": { - "null": 27.0 + "null": { + "-7": 27.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 27.0 + "null": { + "-7": 27.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 13.0 }, - "inventory_level": 13.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 42.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 14.0, - "fill_rate": 0.3333333333333333 + "demand_cumul": { + "-6": 42.0 + }, + "demand_met_from_stock": { + "-6": 0.0 + }, + "demand_met_from_stock_cumul": { + "-6": 14.0 + }, + "fill_rate": { + "-6": 0.3333333333333333 + } }, { "node": 6, "period": 5, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 27.0 + "null": { + "-7": 27.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 15.0 + "4": { + "-6": 15.0 + } }, "outbound_shipment": { - "4": 15.0 + "4": { + "-6": 15.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 25.0 }, - "inventory_level": 25.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 57.0, - "demand_met_from_stock": 15.0, - "demand_met_from_stock_cumul": 29.0, - "fill_rate": 0.5087719298245614 + "demand_cumul": { + "-6": 57.0 + }, + "demand_met_from_stock": { + "-6": 15.0 + }, + "demand_met_from_stock_cumul": { + "-6": 29.0 + }, + "fill_rate": { + "-6": 0.5087719298245614 + } }, { "node": 6, "period": 6, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 1.0 + "4": { + "-6": 1.0 + } }, "outbound_shipment": { - "4": 1.0 + "4": { + "-6": 1.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 24.0 }, - "inventory_level": 24.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 58.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 30.0, - "fill_rate": 0.5172413793103449 + "demand_cumul": { + "-6": 58.0 + }, + "demand_met_from_stock": { + "-6": 1.0 + }, + "demand_met_from_stock_cumul": { + "-6": 30.0 + }, + "fill_rate": { + "-6": 0.5172413793103449 + } }, { "node": 6, "period": 7, "inbound_shipment_pipeline": { - "null": [ - 0, - 3.0 - ] + "null": { + "-7": [ + 0, + 3.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 5.0 + "4": { + "-6": 5.0 + } }, "outbound_shipment": { - "4": 5.0 + "4": { + "-6": 5.0 + } }, "on_order_by_predecessor": { - "null": 3.0 + "null": { + "-7": 3.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 3.0 + "null": { + "-7": 3.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 19.0 }, - "inventory_level": 19.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 63.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 35.0, - "fill_rate": 0.5555555555555556 + "demand_cumul": { + "-6": 63.0 + }, + "demand_met_from_stock": { + "-6": 5.0 + }, + "demand_met_from_stock_cumul": { + "-6": 35.0 + }, + "fill_rate": { + "-6": 0.5555555555555556 + } }, { "node": 6, "period": 8, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 3.0 + "null": { + "-7": 3.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 22.0 }, - "inventory_level": 22.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 63.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 35.0, - "fill_rate": 0.5555555555555556 + "demand_cumul": { + "-6": 63.0 + }, + "demand_met_from_stock": { + "-6": 0.0 + }, + "demand_met_from_stock_cumul": { + "-6": 35.0 + }, + "fill_rate": { + "-6": 0.5555555555555556 + } }, { "node": 6, "period": 9, "inbound_shipment_pipeline": { - "null": [ - 0, - 22.0 - ] + "null": { + "-7": [ + 0, + 22.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 18.0 + "4": { + "-6": 18.0 + } }, "outbound_shipment": { - "4": 18.0 + "4": { + "-6": 18.0 + } }, "on_order_by_predecessor": { - "null": 22.0 + "null": { + "-7": 22.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 22.0 + "null": { + "-7": 22.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 4.0 }, - "inventory_level": 4.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 81.0, - "demand_met_from_stock": 18.0, - "demand_met_from_stock_cumul": 53.0, - "fill_rate": 0.654320987654321 + "demand_cumul": { + "-6": 81.0 + }, + "demand_met_from_stock": { + "-6": 18.0 + }, + "demand_met_from_stock_cumul": { + "-6": 53.0 + }, + "fill_rate": { + "-6": 0.654320987654321 + } }, { "node": 6, "period": 10, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 22.0 + "null": { + "-7": 22.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 5.0 + "4": { + "-6": 5.0 + } }, "outbound_shipment": { - "4": 5.0 + "4": { + "-6": 5.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 21.0 }, - "inventory_level": 21.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 86.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 58.0, - "fill_rate": 0.6744186046511628 + "demand_cumul": { + "-6": 86.0 + }, + "demand_met_from_stock": { + "-6": 5.0 + }, + "demand_met_from_stock_cumul": { + "-6": 58.0 + }, + "fill_rate": { + "-6": 0.6744186046511628 + } }, { "node": 6, "period": 11, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 12.0 + "4": { + "-6": 12.0 + } }, "outbound_shipment": { - "4": 12.0 + "4": { + "-6": 12.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 9.0 }, - "inventory_level": 9.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 98.0, - "demand_met_from_stock": 12.0, - "demand_met_from_stock_cumul": 70.0, - "fill_rate": 0.7142857142857143 + "demand_cumul": { + "-6": 98.0 + }, + "demand_met_from_stock": { + "-6": 12.0 + }, + "demand_met_from_stock_cumul": { + "-6": 70.0 + }, + "fill_rate": { + "-6": 0.7142857142857143 + } }, { "node": 6, "period": 12, "inbound_shipment_pipeline": { - "null": [ - 0, - 9.0 - ] + "null": { + "-7": [ + 0, + 9.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "on_order_by_predecessor": { - "null": 9.0 + "null": { + "-7": 9.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 9.0 + "null": { + "-7": 9.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 9.0 }, - "inventory_level": 9.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 98.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 70.0, - "fill_rate": 0.7142857142857143 + "demand_cumul": { + "-6": 98.0 + }, + "demand_met_from_stock": { + "-6": 0.0 + }, + "demand_met_from_stock_cumul": { + "-6": 70.0 + }, + "fill_rate": { + "-6": 0.7142857142857143 + } }, { "node": 6, "period": 13, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 9.0 + "null": { + "-7": 9.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 18.0 }, - "inventory_level": 18.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 98.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 70.0, - "fill_rate": 0.7142857142857143 + "demand_cumul": { + "-6": 98.0 + }, + "demand_met_from_stock": { + "-6": 0.0 + }, + "demand_met_from_stock_cumul": { + "-6": 70.0 + }, + "fill_rate": { + "-6": 0.7142857142857143 + } }, { "node": 6, "period": 14, "inbound_shipment_pipeline": { - "null": [ - 0, - 14.0 - ] + "null": { + "-7": [ + 0, + 14.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 7.0 + "4": { + "-6": 7.0 + } }, "outbound_shipment": { - "4": 7.0 + "4": { + "-6": 7.0 + } }, "on_order_by_predecessor": { - "null": 14.0 + "null": { + "-7": 14.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 14.0 + "null": { + "-7": 14.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 11.0 }, - "inventory_level": 11.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 105.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 77.0, - "fill_rate": 0.7333333333333333 + "demand_cumul": { + "-6": 105.0 + }, + "demand_met_from_stock": { + "-6": 7.0 + }, + "demand_met_from_stock_cumul": { + "-6": 77.0 + }, + "fill_rate": { + "-6": 0.7333333333333333 + } }, { "node": 6, "period": 15, "inbound_shipment_pipeline": { - "null": [ - 0, - 10.0 - ] + "null": { + "-7": [ + 0, + 10.0 + ] + } }, "inbound_shipment": { - "null": 14.0 + "null": { + "-7": 14.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 10.0 + "4": { + "-6": 10.0 + } }, "outbound_shipment": { - "4": 10.0 + "4": { + "-6": 10.0 + } }, "on_order_by_predecessor": { - "null": 10.0 + "null": { + "-7": 10.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 10.0 + "null": { + "-7": 10.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 15.0 }, - "inventory_level": 15.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 115.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 87.0, - "fill_rate": 0.7565217391304347 + "demand_cumul": { + "-6": 115.0 + }, + "demand_met_from_stock": { + "-6": 10.0 + }, + "demand_met_from_stock_cumul": { + "-6": 87.0 + }, + "fill_rate": { + "-6": 0.7565217391304347 + } }, { "node": 6, "period": 16, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 10.0 + "null": { + "-7": 10.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 1.0 + "4": { + "-6": 1.0 + } }, "outbound_shipment": { - "4": 1.0 + "4": { + "-6": 1.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 24.0 }, - "inventory_level": 24.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 116.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 88.0, - "fill_rate": 0.7586206896551724 + "demand_cumul": { + "-6": 116.0 + }, + "demand_met_from_stock": { + "-6": 1.0 + }, + "demand_met_from_stock_cumul": { + "-6": 88.0 + }, + "fill_rate": { + "-6": 0.7586206896551724 + } }, { "node": 6, "period": 17, "inbound_shipment_pipeline": { - "null": [ - 0, - 4.0 - ] + "null": { + "-7": [ + 0, + 4.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 6.0 + "4": { + "-6": 6.0 + } }, "outbound_shipment": { - "4": 6.0 + "4": { + "-6": 6.0 + } }, "on_order_by_predecessor": { - "null": 4.0 + "null": { + "-7": 4.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 4.0 + "null": { + "-7": 4.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 18.0 }, - "inventory_level": 18.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 122.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 94.0, - "fill_rate": 0.7704918032786885 + "demand_cumul": { + "-6": 122.0 + }, + "demand_met_from_stock": { + "-6": 6.0 + }, + "demand_met_from_stock_cumul": { + "-6": 94.0 + }, + "fill_rate": { + "-6": 0.7704918032786885 + } }, { "node": 6, "period": 18, "inbound_shipment_pipeline": { - "null": [ - 0, - 2.0 - ] + "null": { + "-7": [ + 0, + 2.0 + ] + } }, "inbound_shipment": { - "null": 4.0 + "null": { + "-7": 4.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 2.0 + "4": { + "-6": 2.0 + } }, "outbound_shipment": { - "4": 2.0 + "4": { + "-6": 2.0 + } }, "on_order_by_predecessor": { - "null": 2.0 + "null": { + "-7": 2.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 2.0 + "null": { + "-7": 2.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 20.0 }, - "inventory_level": 20.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 124.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 96.0, - "fill_rate": 0.7741935483870968 + "demand_cumul": { + "-6": 124.0 + }, + "demand_met_from_stock": { + "-6": 2.0 + }, + "demand_met_from_stock_cumul": { + "-6": 96.0 + }, + "fill_rate": { + "-6": 0.7741935483870968 + } }, { "node": 6, "period": 19, "inbound_shipment_pipeline": { - "null": [ - 0, - 2.0 - ] + "null": { + "-7": [ + 0, + 2.0 + ] + } }, "inbound_shipment": { - "null": 2.0 + "null": { + "-7": 2.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "on_order_by_predecessor": { - "null": 2.0 + "null": { + "-7": 2.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 2.0 + "null": { + "-7": 2.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 22.0 }, - "inventory_level": 22.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 124.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 96.0, - "fill_rate": 0.7741935483870968 + "demand_cumul": { + "-6": 124.0 + }, + "demand_met_from_stock": { + "-6": 0.0 + }, + "demand_met_from_stock_cumul": { + "-6": 96.0 + }, + "fill_rate": { + "-6": 0.7741935483870968 + } }, { "node": 6, "period": 20, "inbound_shipment_pipeline": { - "null": [ - 0, - 16.0 - ] + "null": { + "-7": [ + 0, + 16.0 + ] + } }, "inbound_shipment": { - "null": 2.0 + "null": { + "-7": 2.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 15.0 + "4": { + "-6": 15.0 + } }, "outbound_shipment": { - "4": 15.0 + "4": { + "-6": 15.0 + } }, "on_order_by_predecessor": { - "null": 16.0 + "null": { + "-7": 16.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 16.0 + "null": { + "-7": 16.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 9.0 }, - "inventory_level": 9.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 139.0, - "demand_met_from_stock": 15.0, - "demand_met_from_stock_cumul": 111.0, - "fill_rate": 0.7985611510791367 + "demand_cumul": { + "-6": 139.0 + }, + "demand_met_from_stock": { + "-6": 15.0 + }, + "demand_met_from_stock_cumul": { + "-6": 111.0 + }, + "fill_rate": { + "-6": 0.7985611510791367 + } }, { "node": 6, "period": 21, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 16.0 + "null": { + "-7": 16.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 25.0 }, - "inventory_level": 25.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 139.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 111.0, - "fill_rate": 0.7985611510791367 + "demand_cumul": { + "-6": 139.0 + }, + "demand_met_from_stock": { + "-6": 0.0 + }, + "demand_met_from_stock_cumul": { + "-6": 111.0 + }, + "fill_rate": { + "-6": 0.7985611510791367 + } }, { "node": 6, "period": 22, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 25.0 }, - "inventory_level": 25.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 139.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 111.0, - "fill_rate": 0.7985611510791367 + "demand_cumul": { + "-6": 139.0 + }, + "demand_met_from_stock": { + "-6": 0.0 + }, + "demand_met_from_stock_cumul": { + "-6": 111.0 + }, + "fill_rate": { + "-6": 0.7985611510791367 + } }, { "node": 6, "period": 23, "inbound_shipment_pipeline": { - "null": [ - 0, - 6.0 - ] + "null": { + "-7": [ + 0, + 6.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 8.0 + "4": { + "-6": 8.0 + } }, "outbound_shipment": { - "4": 8.0 + "4": { + "-6": 8.0 + } }, "on_order_by_predecessor": { - "null": 6.0 + "null": { + "-7": 6.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 6.0 + "null": { + "-7": 6.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 17.0 }, - "inventory_level": 17.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 147.0, - "demand_met_from_stock": 8.0, - "demand_met_from_stock_cumul": 119.0, - "fill_rate": 0.8095238095238095 + "demand_cumul": { + "-6": 147.0 + }, + "demand_met_from_stock": { + "-6": 8.0 + }, + "demand_met_from_stock_cumul": { + "-6": 119.0 + }, + "fill_rate": { + "-6": 0.8095238095238095 + } }, { "node": 6, "period": 24, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0 - ] + "null": { + "-7": [ + 0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 6.0 + "null": { + "-7": 6.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 23.0 }, - "inventory_level": 23.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 147.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 119.0, - "fill_rate": 0.8095238095238095 + "demand_cumul": { + "-6": 147.0 + }, + "demand_met_from_stock": { + "-6": 0.0 + }, + "demand_met_from_stock_cumul": { + "-6": 119.0 + }, + "fill_rate": { + "-6": 0.8095238095238095 + } }, { "node": 6, "period": 25, "inbound_shipment_pipeline": { - "null": [ - 0.0, - 0 - ] + "null": { + "-7": [ + 0.0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-7": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-6": 0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-7": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-6": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-7": 0 + } }, "raw_material_inventory": { - "null": 0.0 + "-7": 0.0 + }, + "inventory_level": { + "-6": 23.0 }, - "inventory_level": 23.0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 147.0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 119.0, - "fill_rate": 0 + "demand_cumul": { + "-6": 147.0 + }, + "demand_met_from_stock": { + "-6": 0 + }, + "demand_met_from_stock_cumul": { + "-6": 119.0 + }, + "fill_rate": { + "-6": 0 + } }, { "node": 6, "period": 26, "inbound_shipment_pipeline": { - "null": [ - 0, - 0 - ] + "null": { + "-7": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-7": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-6": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-7": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-6": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-7": 0 + } }, "raw_material_inventory": { - "null": 0 + "-7": 0 + }, + "inventory_level": { + "-6": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-6": 0 + }, + "demand_met_from_stock": { + "-6": 0 + }, + "demand_met_from_stock_cumul": { + "-6": 0 + }, + "fill_rate": { + "-6": 0 + } }, { "node": 6, "period": 27, "inbound_shipment_pipeline": { - "null": [ - 0, - 0 - ] + "null": { + "-7": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-7": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-6": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-7": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-6": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-7": 0 + } }, "raw_material_inventory": { - "null": 0 + "-7": 0 + }, + "inventory_level": { + "-6": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-6": 0 + }, + "demand_met_from_stock": { + "-6": 0 + }, + "demand_met_from_stock_cumul": { + "-6": 0 + }, + "fill_rate": { + "-6": 0 + } }, { "node": 6, "period": 28, "inbound_shipment_pipeline": { - "null": [ - 0, - 0 - ] + "null": { + "-7": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-7": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-6": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-7": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-6": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-7": 0 + } }, "raw_material_inventory": { - "null": 0 + "-7": 0 + }, + "inventory_level": { + "-6": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-6": 0 + }, + "demand_met_from_stock": { + "-6": 0 + }, + "demand_met_from_stock_cumul": { + "-6": 0 + }, + "fill_rate": { + "-6": 0 + } }, { "node": 6, "period": 29, "inbound_shipment_pipeline": { - "null": [ - 0, - 0 - ] + "null": { + "-7": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-7": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-6": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-7": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-6": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-7": 0 + } }, "raw_material_inventory": { - "null": 0 + "-7": 0 + }, + "inventory_level": { + "-6": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-6": 0 + }, + "demand_met_from_stock": { + "-6": 0 + }, + "demand_met_from_stock_cumul": { + "-6": 0 + }, + "fill_rate": { + "-6": 0 + } }, { "node": 6, "period": 30, "inbound_shipment_pipeline": { - "null": [ - 0, - 0 - ] + "null": { + "-7": [ + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-7": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-6": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-6": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-7": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-6": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-6": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-7": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-7": 0 + } }, "raw_material_inventory": { - "null": 0 + "-7": 0 + }, + "inventory_level": { + "-6": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-6": 0 + }, + "demand_met_from_stock": { + "-6": 0 + }, + "demand_met_from_stock_cumul": { + "-6": 0 + }, + "fill_rate": { + "-6": 0 + } } ] }, { - "index": 7, + "_index": 7, "name": null, "network": null, + "_products_by_index": { + "-7": -7 + }, + "_dummy_product": -7, + "_external_supplier_dummy_product": -8, "_predecessors": [ null ], @@ -11052,6 +17305,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": 16, @@ -11060,13 +17315,13 @@ "_inventory_policy": { "type": "BEBS", "node": 7, + "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": "U", - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -11075,6 +17330,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -11091,1679 +17347,2955 @@ "node": 7, "period": 0, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 64.0 - ] + "null": { + "-8": [ + 0, + 0, + 64.0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-8": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 36.0 + "4": { + "-7": 36.0 + } }, "outbound_shipment": { - "4": 16.0 + "4": { + "-7": 16.0 + } }, "on_order_by_predecessor": { - "null": 64.0 + "null": { + "-8": 64.0 + } }, "backorders_by_successor": { - "4": 20.0 + "4": { + "-7": 20.0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-7": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 64.0 + "null": { + "-8": 64.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": -20.0 }, - "inventory_level": -20.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 36.0, - "demand_met_from_stock": 16.0, - "demand_met_from_stock_cumul": 16.0, - "fill_rate": 0.4444444444444444 + "demand_cumul": { + "-7": 36.0 + }, + "demand_met_from_stock": { + "-7": 16.0 + }, + "demand_met_from_stock_cumul": { + "-7": 16.0 + }, + "fill_rate": { + "-7": 0.4444444444444444 + } }, { "node": 7, "period": 1, "inbound_shipment_pipeline": { - "null": [ - 0, - 64.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 64.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-8": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "on_order_by_predecessor": { - "null": 64.0 + "null": { + "-8": 64.0 + } }, "backorders_by_successor": { - "4": 20.0 + "4": { + "-7": 20.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": -20.0 }, - "inventory_level": -20.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 36.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 16.0, - "fill_rate": 0.4444444444444444 + "demand_cumul": { + "-7": 36.0 + }, + "demand_met_from_stock": { + "-7": 0.0 + }, + "demand_met_from_stock_cumul": { + "-7": 16.0 + }, + "fill_rate": { + "-7": 0.4444444444444444 + } }, { "node": 7, "period": 2, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 64.0 + "null": { + "-8": 64.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 6.0 + "4": { + "-7": 6.0 + } }, "outbound_shipment": { - "4": 26.0 + "4": { + "-7": 26.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 38.0 }, - "inventory_level": 38.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 42.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 22.0, - "fill_rate": 0.5238095238095238 + "demand_cumul": { + "-7": 42.0 + }, + "demand_met_from_stock": { + "-7": 6.0 + }, + "demand_met_from_stock_cumul": { + "-7": 22.0 + }, + "fill_rate": { + "-7": 0.5238095238095238 + } }, { "node": 7, "period": 3, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 38.0 }, - "inventory_level": 38.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 42.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 22.0, - "fill_rate": 0.5238095238095238 + "demand_cumul": { + "-7": 42.0 + }, + "demand_met_from_stock": { + "-7": 0.0 + }, + "demand_met_from_stock_cumul": { + "-7": 22.0 + }, + "fill_rate": { + "-7": 0.5238095238095238 + } }, { "node": 7, "period": 4, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 38.0 }, - "inventory_level": 38.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 42.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 22.0, - "fill_rate": 0.5238095238095238 + "demand_cumul": { + "-7": 42.0 + }, + "demand_met_from_stock": { + "-7": 0.0 + }, + "demand_met_from_stock_cumul": { + "-7": 22.0 + }, + "fill_rate": { + "-7": 0.5238095238095238 + } }, { "node": 7, "period": 5, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 9.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 9.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 15.0 + "4": { + "-7": 15.0 + } }, "outbound_shipment": { - "4": 15.0 + "4": { + "-7": 15.0 + } }, "on_order_by_predecessor": { - "null": 9.0 + "null": { + "-8": 9.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 9.0 + "null": { + "-8": 9.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 23.0 }, - "inventory_level": 23.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 57.0, - "demand_met_from_stock": 15.0, - "demand_met_from_stock_cumul": 37.0, - "fill_rate": 0.6491228070175439 + "demand_cumul": { + "-7": 57.0 + }, + "demand_met_from_stock": { + "-7": 15.0 + }, + "demand_met_from_stock_cumul": { + "-7": 37.0 + }, + "fill_rate": { + "-7": 0.6491228070175439 + } }, { "node": 7, "period": 6, "inbound_shipment_pipeline": { - "null": [ - 0, - 9.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 9.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 1.0 + "4": { + "-7": 1.0 + } }, "outbound_shipment": { - "4": 1.0 + "4": { + "-7": 1.0 + } }, "on_order_by_predecessor": { - "null": 9.0 + "null": { + "-8": 9.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 22.0 }, - "inventory_level": 22.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 58.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 38.0, - "fill_rate": 0.6551724137931034 + "demand_cumul": { + "-7": 58.0 + }, + "demand_met_from_stock": { + "-7": 1.0 + }, + "demand_met_from_stock_cumul": { + "-7": 38.0 + }, + "fill_rate": { + "-7": 0.6551724137931034 + } }, { "node": 7, "period": 7, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 5.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 5.0 + ] + } }, "inbound_shipment": { - "null": 9.0 + "null": { + "-8": 9.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 5.0 + "4": { + "-7": 5.0 + } }, "outbound_shipment": { - "4": 5.0 + "4": { + "-7": 5.0 + } }, "on_order_by_predecessor": { - "null": 5.0 + "null": { + "-8": 5.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 5.0 + "null": { + "-8": 5.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 26.0 }, - "inventory_level": 26.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 63.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 43.0, - "fill_rate": 0.6825396825396826 + "demand_cumul": { + "-7": 63.0 + }, + "demand_met_from_stock": { + "-7": 5.0 + }, + "demand_met_from_stock_cumul": { + "-7": 43.0 + }, + "fill_rate": { + "-7": 0.6825396825396826 + } }, { "node": 7, "period": 8, "inbound_shipment_pipeline": { - "null": [ - 0, - 5.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 5.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "on_order_by_predecessor": { - "null": 5.0 + "null": { + "-8": 5.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 26.0 }, - "inventory_level": 26.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 63.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 43.0, - "fill_rate": 0.6825396825396826 + "demand_cumul": { + "-7": 63.0 + }, + "demand_met_from_stock": { + "-7": 0.0 + }, + "demand_met_from_stock_cumul": { + "-7": 43.0 + }, + "fill_rate": { + "-7": 0.6825396825396826 + } }, { "node": 7, "period": 9, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 21.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 21.0 + ] + } }, "inbound_shipment": { - "null": 5.0 + "null": { + "-8": 5.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 18.0 + "4": { + "-7": 18.0 + } }, "outbound_shipment": { - "4": 18.0 + "4": { + "-7": 18.0 + } }, "on_order_by_predecessor": { - "null": 21.0 + "null": { + "-8": 21.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 21.0 + "null": { + "-8": 21.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 13.0 }, - "inventory_level": 13.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 81.0, - "demand_met_from_stock": 18.0, - "demand_met_from_stock_cumul": 61.0, - "fill_rate": 0.7530864197530864 + "demand_cumul": { + "-7": 81.0 + }, + "demand_met_from_stock": { + "-7": 18.0 + }, + "demand_met_from_stock_cumul": { + "-7": 61.0 + }, + "fill_rate": { + "-7": 0.7530864197530864 + } }, { "node": 7, "period": 10, "inbound_shipment_pipeline": { - "null": [ - 0, - 21.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 21.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 5.0 + "4": { + "-7": 5.0 + } }, "outbound_shipment": { - "4": 5.0 + "4": { + "-7": 5.0 + } }, "on_order_by_predecessor": { - "null": 21.0 + "null": { + "-8": 21.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 8.0 }, - "inventory_level": 8.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 86.0, - "demand_met_from_stock": 5.0, - "demand_met_from_stock_cumul": 66.0, - "fill_rate": 0.7674418604651163 + "demand_cumul": { + "-7": 86.0 + }, + "demand_met_from_stock": { + "-7": 5.0 + }, + "demand_met_from_stock_cumul": { + "-7": 66.0 + }, + "fill_rate": { + "-7": 0.7674418604651163 + } }, { "node": 7, "period": 11, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 14.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 14.0 + ] + } }, "inbound_shipment": { - "null": 21.0 + "null": { + "-8": 21.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 12.0 + "4": { + "-7": 12.0 + } }, "outbound_shipment": { - "4": 12.0 + "4": { + "-7": 12.0 + } }, "on_order_by_predecessor": { - "null": 14.0 + "null": { + "-8": 14.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 14.0 + "null": { + "-8": 14.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 17.0 }, - "inventory_level": 17.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 98.0, - "demand_met_from_stock": 12.0, - "demand_met_from_stock_cumul": 78.0, - "fill_rate": 0.7959183673469388 + "demand_cumul": { + "-7": 98.0 + }, + "demand_met_from_stock": { + "-7": 12.0 + }, + "demand_met_from_stock_cumul": { + "-7": 78.0 + }, + "fill_rate": { + "-7": 0.7959183673469388 + } }, { "node": 7, "period": 12, "inbound_shipment_pipeline": { - "null": [ - 0, - 14.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 14.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "on_order_by_predecessor": { - "null": 14.0 + "null": { + "-8": 14.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 17.0 }, - "inventory_level": 17.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 98.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 78.0, - "fill_rate": 0.7959183673469388 + "demand_cumul": { + "-7": 98.0 + }, + "demand_met_from_stock": { + "-7": 0.0 + }, + "demand_met_from_stock_cumul": { + "-7": 78.0 + }, + "fill_rate": { + "-7": 0.7959183673469388 + } }, { "node": 7, "period": 13, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 14.0 + "null": { + "-8": 14.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 31.0 }, - "inventory_level": 31.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 98.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 78.0, - "fill_rate": 0.7959183673469388 + "demand_cumul": { + "-7": 98.0 + }, + "demand_met_from_stock": { + "-7": 0.0 + }, + "demand_met_from_stock_cumul": { + "-7": 78.0 + }, + "fill_rate": { + "-7": 0.7959183673469388 + } }, { "node": 7, "period": 14, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 9.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 9.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 7.0 + "4": { + "-7": 7.0 + } }, "outbound_shipment": { - "4": 7.0 + "4": { + "-7": 7.0 + } }, "on_order_by_predecessor": { - "null": 9.0 + "null": { + "-8": 9.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 9.0 + "null": { + "-8": 9.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 24.0 }, - "inventory_level": 24.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 105.0, - "demand_met_from_stock": 7.0, - "demand_met_from_stock_cumul": 85.0, - "fill_rate": 0.8095238095238095 + "demand_cumul": { + "-7": 105.0 + }, + "demand_met_from_stock": { + "-7": 7.0 + }, + "demand_met_from_stock_cumul": { + "-7": 85.0 + }, + "fill_rate": { + "-7": 0.8095238095238095 + } }, { "node": 7, "period": 15, "inbound_shipment_pipeline": { - "null": [ - 0, - 9.0, - 10.0 - ] + "null": { + "-8": [ + 0, + 9.0, + 10.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 10.0 + "4": { + "-7": 10.0 + } }, "outbound_shipment": { - "4": 10.0 + "4": { + "-7": 10.0 + } }, "on_order_by_predecessor": { - "null": 19.0 + "null": { + "-8": 19.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 10.0 + "null": { + "-8": 10.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 14.0 }, - "inventory_level": 14.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 115.0, - "demand_met_from_stock": 10.0, - "demand_met_from_stock_cumul": 95.0, - "fill_rate": 0.8260869565217391 + "demand_cumul": { + "-7": 115.0 + }, + "demand_met_from_stock": { + "-7": 10.0 + }, + "demand_met_from_stock_cumul": { + "-7": 95.0 + }, + "fill_rate": { + "-7": 0.8260869565217391 + } }, { "node": 7, "period": 16, "inbound_shipment_pipeline": { - "null": [ - 0, - 10.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 10.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 9.0 + "null": { + "-8": 9.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 1.0 + "4": { + "-7": 1.0 + } }, "outbound_shipment": { - "4": 1.0 + "4": { + "-7": 1.0 + } }, "on_order_by_predecessor": { - "null": 10.0 + "null": { + "-8": 10.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 22.0 }, - "inventory_level": 22.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 116.0, - "demand_met_from_stock": 1.0, - "demand_met_from_stock_cumul": 96.0, - "fill_rate": 0.8275862068965517 + "demand_cumul": { + "-7": 116.0 + }, + "demand_met_from_stock": { + "-7": 1.0 + }, + "demand_met_from_stock_cumul": { + "-7": 96.0 + }, + "fill_rate": { + "-7": 0.8275862068965517 + } }, { "node": 7, "period": 17, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 5.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 5.0 + ] + } }, "inbound_shipment": { - "null": 10.0 + "null": { + "-8": 10.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 6.0 + "4": { + "-7": 6.0 + } }, "outbound_shipment": { - "4": 6.0 + "4": { + "-7": 6.0 + } }, "on_order_by_predecessor": { - "null": 5.0 + "null": { + "-8": 5.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 5.0 + "null": { + "-8": 5.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 26.0 }, - "inventory_level": 26.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 122.0, - "demand_met_from_stock": 6.0, - "demand_met_from_stock_cumul": 102.0, - "fill_rate": 0.8360655737704918 + "demand_cumul": { + "-7": 122.0 + }, + "demand_met_from_stock": { + "-7": 6.0 + }, + "demand_met_from_stock_cumul": { + "-7": 102.0 + }, + "fill_rate": { + "-7": 0.8360655737704918 + } }, { "node": 7, "period": 18, "inbound_shipment_pipeline": { - "null": [ - 0, - 5.0, - 1.0 - ] + "null": { + "-8": [ + 0, + 5.0, + 1.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 2.0 + "4": { + "-7": 2.0 + } }, "outbound_shipment": { - "4": 2.0 + "4": { + "-7": 2.0 + } }, "on_order_by_predecessor": { - "null": 6.0 + "null": { + "-8": 6.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 1.0 + "null": { + "-8": 1.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 24.0 }, - "inventory_level": 24.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 124.0, - "demand_met_from_stock": 2.0, - "demand_met_from_stock_cumul": 104.0, - "fill_rate": 0.8387096774193549 + "demand_cumul": { + "-7": 124.0 + }, + "demand_met_from_stock": { + "-7": 2.0 + }, + "demand_met_from_stock_cumul": { + "-7": 104.0 + }, + "fill_rate": { + "-7": 0.8387096774193549 + } }, { "node": 7, "period": 19, "inbound_shipment_pipeline": { - "null": [ - 0, - 1.0, - 2.0 - ] + "null": { + "-8": [ + 0, + 1.0, + 2.0 + ] + } }, "inbound_shipment": { - "null": 5.0 + "null": { + "-8": 5.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "on_order_by_predecessor": { - "null": 3.0 + "null": { + "-8": 3.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 2.0 + "null": { + "-8": 2.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 29.0 }, - "inventory_level": 29.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 124.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 104.0, - "fill_rate": 0.8387096774193549 + "demand_cumul": { + "-7": 124.0 + }, + "demand_met_from_stock": { + "-7": 0.0 + }, + "demand_met_from_stock_cumul": { + "-7": 104.0 + }, + "fill_rate": { + "-7": 0.8387096774193549 + } }, { "node": 7, "period": 20, "inbound_shipment_pipeline": { - "null": [ - 0, - 2.0, - 16.0 - ] + "null": { + "-8": [ + 0, + 2.0, + 16.0 + ] + } }, "inbound_shipment": { - "null": 1.0 + "null": { + "-8": 1.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 15.0 + "4": { + "-7": 15.0 + } }, "outbound_shipment": { - "4": 15.0 + "4": { + "-7": 15.0 + } }, "on_order_by_predecessor": { - "null": 18.0 + "null": { + "-8": 18.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 16.0 + "null": { + "-8": 16.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 15.0 }, - "inventory_level": 15.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 139.0, - "demand_met_from_stock": 15.0, - "demand_met_from_stock_cumul": 119.0, - "fill_rate": 0.8561151079136691 + "demand_cumul": { + "-7": 139.0 + }, + "demand_met_from_stock": { + "-7": 15.0 + }, + "demand_met_from_stock_cumul": { + "-7": 119.0 + }, + "fill_rate": { + "-7": 0.8561151079136691 + } }, { "node": 7, "period": 21, "inbound_shipment_pipeline": { - "null": [ - 0, - 16.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 16.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 2.0 + "null": { + "-8": 2.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "on_order_by_predecessor": { - "null": 16.0 + "null": { + "-8": 16.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 17.0 }, - "inventory_level": 17.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 139.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 119.0, - "fill_rate": 0.8561151079136691 + "demand_cumul": { + "-7": 139.0 + }, + "demand_met_from_stock": { + "-7": 0.0 + }, + "demand_met_from_stock_cumul": { + "-7": 119.0 + }, + "fill_rate": { + "-7": 0.8561151079136691 + } }, { "node": 7, "period": 22, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 16.0 + "null": { + "-8": 16.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "on_order_by_predecessor": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 33.0 }, - "inventory_level": 33.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 139.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 119.0, - "fill_rate": 0.8561151079136691 + "demand_cumul": { + "-7": 139.0 + }, + "demand_met_from_stock": { + "-7": 0.0 + }, + "demand_met_from_stock_cumul": { + "-7": 119.0 + }, + "fill_rate": { + "-7": 0.8561151079136691 + } }, { "node": 7, "period": 23, "inbound_shipment_pipeline": { - "null": [ - 0, - 0.0, - 6.0 - ] + "null": { + "-8": [ + 0, + 0.0, + 6.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 8.0 + "4": { + "-7": 8.0 + } }, "outbound_shipment": { - "4": 8.0 + "4": { + "-7": 8.0 + } }, "on_order_by_predecessor": { - "null": 6.0 + "null": { + "-8": 6.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 6.0 + "null": { + "-8": 6.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 25.0 }, - "inventory_level": 25.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 147.0, - "demand_met_from_stock": 8.0, - "demand_met_from_stock_cumul": 127.0, - "fill_rate": 0.8639455782312925 + "demand_cumul": { + "-7": 147.0 + }, + "demand_met_from_stock": { + "-7": 8.0 + }, + "demand_met_from_stock_cumul": { + "-7": 127.0 + }, + "fill_rate": { + "-7": 0.8639455782312925 + } }, { "node": 7, "period": 24, "inbound_shipment_pipeline": { - "null": [ - 0, - 6.0, - 0.0 - ] + "null": { + "-8": [ + 0, + 6.0, + 0.0 + ] + } }, "inbound_shipment": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_shipment": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "on_order_by_predecessor": { - "null": 6.0 + "null": { + "-8": 6.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0.0 + "null": { + "-8": 0.0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 25.0 }, - "inventory_level": 25.0, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, - "demand_cumul": 147.0, - "demand_met_from_stock": 0.0, - "demand_met_from_stock_cumul": 127.0, - "fill_rate": 0.8639455782312925 + "demand_cumul": { + "-7": 147.0 + }, + "demand_met_from_stock": { + "-7": 0.0 + }, + "demand_met_from_stock_cumul": { + "-7": 127.0 + }, + "fill_rate": { + "-7": 0.8639455782312925 + } }, { "node": 7, "period": 25, "inbound_shipment_pipeline": { - "null": [ - 6.0, - 0.0, - 0 - ] + "null": { + "-8": [ + 6.0, + 0.0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-8": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-7": 0 + } }, "on_order_by_predecessor": { - "null": 6.0 + "null": { + "-8": 6.0 + } }, "backorders_by_successor": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "outbound_disrupted_items": { - "4": 0.0 + "4": { + "-7": 0.0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-8": 0 + } }, "raw_material_inventory": { - "null": 0.0 + "-8": 0.0 + }, + "inventory_level": { + "-7": 25.0 }, - "inventory_level": 25.0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 147.0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 127.0, - "fill_rate": 0 + "demand_cumul": { + "-7": 147.0 + }, + "demand_met_from_stock": { + "-7": 0 + }, + "demand_met_from_stock_cumul": { + "-7": 127.0 + }, + "fill_rate": { + "-7": 0 + } }, { "node": 7, "period": 26, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0 - ] + "null": { + "-8": [ + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-8": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-7": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-8": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-7": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-8": 0 + } }, "raw_material_inventory": { - "null": 0 + "-8": 0 + }, + "inventory_level": { + "-7": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-7": 0 + }, + "demand_met_from_stock": { + "-7": 0 + }, + "demand_met_from_stock_cumul": { + "-7": 0 + }, + "fill_rate": { + "-7": 0 + } }, { "node": 7, "period": 27, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0 - ] + "null": { + "-8": [ + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-8": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-7": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-8": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-7": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-8": 0 + } }, "raw_material_inventory": { - "null": 0 + "-8": 0 + }, + "inventory_level": { + "-7": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-7": 0 + }, + "demand_met_from_stock": { + "-7": 0 + }, + "demand_met_from_stock_cumul": { + "-7": 0 + }, + "fill_rate": { + "-7": 0 + } }, { "node": 7, "period": 28, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0 - ] + "null": { + "-8": [ + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-8": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-7": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-8": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-7": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-8": 0 + } }, "raw_material_inventory": { - "null": 0 + "-8": 0 + }, + "inventory_level": { + "-7": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-7": 0 + }, + "demand_met_from_stock": { + "-7": 0 + }, + "demand_met_from_stock_cumul": { + "-7": 0 + }, + "fill_rate": { + "-7": 0 + } }, { "node": 7, "period": 29, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0 - ] + "null": { + "-8": [ + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-8": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-7": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-8": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-7": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-8": 0 + } }, "raw_material_inventory": { - "null": 0 + "-8": 0 + }, + "inventory_level": { + "-7": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-7": 0 + }, + "demand_met_from_stock": { + "-7": 0 + }, + "demand_met_from_stock_cumul": { + "-7": 0 + }, + "fill_rate": { + "-7": 0 + } }, { "node": 7, "period": 30, "inbound_shipment_pipeline": { - "null": [ - 0, - 0, - 0 - ] + "null": { + "-8": [ + 0, + 0, + 0 + ] + } }, "inbound_shipment": { - "null": 0 + "null": { + "-8": 0 + } }, "inbound_order_pipeline": { - "4": [ - 0 - ] + "4": { + "-7": [ + 0 + ] + } }, "inbound_order": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_shipment": { - "4": 0 + "4": { + "-7": 0 + } }, "on_order_by_predecessor": { - "null": 0 + "null": { + "-8": 0 + } }, "backorders_by_successor": { - "4": 0 + "4": { + "-7": 0 + } }, "outbound_disrupted_items": { - "4": 0 + "4": { + "-7": 0 + } }, "inbound_disrupted_items": { - "null": 0 + "null": { + "-8": 0 + } }, "order_quantity": { - "null": 0 + "null": { + "-8": 0 + } }, "raw_material_inventory": { - "null": 0 + "-8": 0 + }, + "inventory_level": { + "-7": 0 }, - "inventory_level": 0, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, - "demand_cumul": 0, - "demand_met_from_stock": 0, - "demand_met_from_stock_cumul": 0, - "fill_rate": 0 + "demand_cumul": { + "-7": 0 + }, + "demand_met_from_stock": { + "-7": 0 + }, + "demand_met_from_stock_cumul": { + "-7": 0 + }, + "fill_rate": { + "-7": 0 + } } ] } ], + "_products": [ + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], "period": 24, "max_max_replenishment_time": null }, diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json index 58a6bb7..d0bed28 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json @@ -7,9 +7,14 @@ "data": { "nodes": [ { - "index": 5, + "_index": 5, "name": null, "network": null, + "_products_by_index": { + "-5": -5 + }, + "_dummy_product": -5, + "_external_supplier_dummy_product": -6, "_predecessors": [ null ], @@ -33,6 +38,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -41,13 +48,13 @@ "_inventory_policy": { "type": "BS", "node": 5, + "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": "U", - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -56,6 +63,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -70,9 +78,14 @@ "state_vars": null }, { - "index": 4, + "_index": 4, "name": null, "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, "_predecessors": [ 5 ], @@ -96,6 +109,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -104,13 +119,13 @@ "_inventory_policy": { "type": "BS", "node": 4, + "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -119,6 +134,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -133,9 +149,14 @@ "state_vars": null }, { - "index": 3, + "_index": 3, "name": null, "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, "_predecessors": [ 4 ], @@ -159,6 +180,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -167,13 +190,13 @@ "_inventory_policy": { "type": "BS", "node": 3, + "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -182,6 +205,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -196,9 +220,14 @@ "state_vars": null }, { - "index": 2, + "_index": 2, "name": null, "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, "_predecessors": [ 3 ], @@ -222,6 +251,8 @@ "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -230,13 +261,13 @@ "_inventory_policy": { "type": "BS", "node": 2, + "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -245,6 +276,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -259,9 +291,14 @@ "state_vars": null }, { - "index": 1, + "_index": 1, "name": null, "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, "_predecessors": [ 2 ], @@ -280,11 +317,13 @@ "demand_source": { "type": "P", "mean": 32.0, - "standard_deviation": null, + "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, + "n": null, + "p": null, "round_to_int": null }, "initial_inventory_level": null, @@ -293,13 +332,13 @@ "_inventory_policy": { "type": "BS", "node": 1, + "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null }, "supply_type": null, - "order_capacity": null, "disruption_process": { "random_process_type": null, "disruption_type": "OP", @@ -308,6 +347,7 @@ "disruption_state_list": null, "disrupted": false }, + "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, @@ -322,6 +362,266 @@ "state_vars": null } ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], "period": 24, "max_max_replenishment_time": null }, diff --git a/tests/additional_files/test_multiproduct_5_7.json b/tests/additional_files/test_multiproduct_5_7.json index 7243190..437b1d3 100644 --- a/tests/additional_files/test_multiproduct_5_7.json +++ b/tests/additional_files/test_multiproduct_5_7.json @@ -1 +1,906 @@ -{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product_index": -5, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -3, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product_index": -4, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product_index": -1001, "_predecessors": [2], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product_index": -2, "_predecessors": [2, 3], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 0, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-09 12:49:39.272815"} \ No newline at end of file +{ + "_id": "", + "instances": [ + { + "name": "bom_structure", + "description": "", + "data": { + "nodes": [ + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "5": 5, + "6": 6 + }, + "_dummy_product": null, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + null + ], + "_successors": [ + 2, + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "2": 2, + "3": 3, + "4": 4 + }, + "_dummy_product": null, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 4 + ], + "_successors": [ + 0, + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "2": 2, + "4": 4 + }, + "_dummy_product": null, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + 4 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 0, + "name": null, + "network": null, + "_products_by_index": { + "0": 0 + }, + "_dummy_product": null, + "_external_supplier_dummy_product": -1001, + "_predecessors": [ + 2 + ], + "_successors": [], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 0, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "0": 0, + "1": 1 + }, + "_dummy_product": null, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2, + 3 + ], + "_successors": [], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": 1, + "name": null, + "network": null, + "is_dummy": false, + "_bill_of_materials": { + "3": 10, + "4": 3.8 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": 2, + "name": null, + "network": null, + "is_dummy": false, + "_bill_of_materials": { + "5": 0.2 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": 3, + "name": null, + "network": null, + "is_dummy": false, + "_bill_of_materials": { + "5": 2 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": 4, + "name": null, + "network": null, + "is_dummy": false, + "_bill_of_materials": { + "6": 50 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": 5, + "name": null, + "network": null, + "is_dummy": false, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": 6, + "name": null, + "network": null, + "is_dummy": false, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": 0, + "name": null, + "network": null, + "is_dummy": false, + "_bill_of_materials": { + "2": 2.5, + "3": 7 + }, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + } + ], + "last_updated": "2024-04-15 21:15:04.243666" +} \ No newline at end of file diff --git a/tests/additional_files/test_policy_TestFromDict_data.json b/tests/additional_files/test_policy_TestFromDict_data.json index 8eba16d..03f4bed 100644 --- a/tests/additional_files/test_policy_TestFromDict_data.json +++ b/tests/additional_files/test_policy_TestFromDict_data.json @@ -1 +1,800 @@ -{"_id": "", "instances": [{"name": "missing_base_stock_level", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_type", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2022-07-16 10:56:28.403019"} \ No newline at end of file +{ + "_id": "", + "instances": [ + { + "name": "missing_base_stock_level", + "description": "", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "missing_type", + "description": "", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + } + ], + "last_updated": "2022-07-16 10:56:28.403019" +} \ No newline at end of file diff --git a/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json b/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json index c645cc7..0039636 100644 --- a/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json +++ b/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json @@ -1 +1,1766 @@ -{"_id": "", "instances": [{"name": "missing_period", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_nodes", "description": "", "data": {"period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2022-07-16 10:56:28.418452"} \ No newline at end of file +{ + "_id": "", + "instances": [ + { + "name": "missing_period", + "description": "", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "missing_nodes", + "description": "", + "data": { + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "missing_local_holding_cost_node_3", + "description": "", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "missing_demand_source_node_1", + "description": "", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "missing_recovery_probability_node_1", + "description": "", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-3": -3 + }, + "_dummy_product": -3, + "_external_supplier_dummy_product": -4, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-1": -1 + }, + "_dummy_product": -1, + "_external_supplier_dummy_product": -2, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_products": [ + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + } + ], + "last_updated": "2022-07-16 10:56:28.418452" +} \ No newline at end of file diff --git a/tests/test_instances.py b/tests/test_instances.py index 9c5297a..4e344e3 100644 --- a/tests/test_instances.py +++ b/tests/test_instances.py @@ -246,6 +246,7 @@ def test_example_6_1(self): del correct_json['last_updated'] # Compare. + self.maxDiff = None self.assertDictEqual(saved_json, correct_json) finally: if os.path.exists(temp_filename): @@ -264,27 +265,30 @@ def test_example_6_1_with_order_capacity(self): # Save. temp_filename = 'tests/additional_files/temp_TestSaveInstance_example_6_1_with_order_capacity.json' - instances.save_instance( - instance_name='test_example_6_1_with_order_capacity', - instance_data=instance, - instance_description='this is test_example_6_1_with_order_capacity', - filepath=temp_filename - ) + try: + instances.save_instance( + instance_name='test_example_6_1_with_order_capacity', + instance_data=instance, + instance_description='this is test_example_6_1_with_order_capacity', + filepath=temp_filename + ) - # Load saved JSON and correct JSON. - correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json' - with open(temp_filename) as f: - saved_json = json.load(f) - os.remove(temp_filename) - with open(correct_contents_filename) as f: - correct_json = json.load(f) + # Load saved JSON and correct JSON. + correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json' + with open(temp_filename) as f: + saved_json = json.load(f) + with open(correct_contents_filename) as f: + correct_json = json.load(f) - # Remove the timestamp entry. - del saved_json['last_updated'] - del correct_json['last_updated'] + # Remove the timestamp entry. + del saved_json['last_updated'] + del correct_json['last_updated'] - # Compare. - self.assertDictEqual(saved_json, correct_json) + # Compare. + self.assertDictEqual(saved_json, correct_json) + finally: + if os.path.exists(temp_filename): + os.remove(temp_filename) def test_figure_6_14(self): """Test that save_instance() correctly saves Figure 6.14. @@ -296,37 +300,41 @@ def test_figure_6_14(self): # Save. temp_filename = 'tests/additional_files/temp_TestSaveInstance_figure_6_14.json' - instances.save_instance( - instance_name='test_figure_6_14', - instance_data=instance, - instance_description='this is test_figure_6_14', - filepath=temp_filename - ) + try: + instances.save_instance( + instance_name='test_figure_6_14', + instance_data=instance, + instance_description='this is test_figure_6_14', + filepath=temp_filename + ) - # Load saved JSON and correct JSON. - correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json' - with open(temp_filename) as f: - saved_json = json.load(f) - os.remove(temp_filename) - with open(correct_contents_filename) as f: - correct_json = json.load(f) + # Load saved JSON and correct JSON. + correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json' + with open(temp_filename) as f: + saved_json = json.load(f) + with open(correct_contents_filename) as f: + correct_json = json.load(f) - # Remove the timestamp entry. - del saved_json['last_updated'] - del correct_json['last_updated'] + # Remove the timestamp entry. + del saved_json['last_updated'] + del correct_json['last_updated'] - # Compare the networks separately from the rest of the dict. - # (pred/succ lists may be in different orders which will make the dicts fail assertDictEqual.) - saved_instance = SupplyChainNetwork.from_dict(saved_json['instances'][0]['data']) - correct_instance = SupplyChainNetwork.from_dict(correct_json['instances'][0]['data']) - self.assertTrue(saved_instance.deep_equal_to(correct_instance)) + # Compare the networks separately from the rest of the dict. + # (pred/succ lists may be in different orders which will make the dicts fail assertDictEqual.) + saved_instance = SupplyChainNetwork.from_dict(saved_json['instances'][0]['data']) + correct_instance = SupplyChainNetwork.from_dict(correct_json['instances'][0]['data']) + self.assertTrue(saved_instance.deep_equal_to(correct_instance)) - # Remove the instances from the dicts. - del saved_json['instances'][0]['data'] - del correct_json['instances'][0]['data'] + # Remove the instances from the dicts. + del saved_json['instances'][0]['data'] + del correct_json['instances'][0]['data'] - # Compare. - self.assertDictEqual(saved_json, correct_json) + # Compare. + self.assertDictEqual(saved_json, correct_json) + + finally: + if os.path.exists(temp_filename): + os.remove(temp_filename) def test_omit_state_vars_true(self): """Test that save_instance() correctly saves problem_6_2b_adj with @@ -342,28 +350,32 @@ def test_omit_state_vars_true(self): # Save with omit_state_vars=True. temp_filename = 'tests/additional_files/temp_TestSaveInstance_omit_state_vars_true.json' - instances.save_instance( - instance_name='test_omit_state_vars_true', - instance_data=instance, - instance_description='this is test_omit_state_vars_true', - filepath=temp_filename, - omit_state_vars=True - ) + try: + instances.save_instance( + instance_name='test_omit_state_vars_true', + instance_data=instance, + instance_description='this is test_omit_state_vars_true', + filepath=temp_filename, + omit_state_vars=True + ) - # Load saved JSON and correct JSON. - correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json' - with open(temp_filename) as f: - saved_json = json.load(f) - os.remove(temp_filename) - with open(correct_contents_filename) as f: - correct_json = json.load(f) + # Load saved JSON and correct JSON. + correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json' + with open(temp_filename) as f: + saved_json = json.load(f) + with open(correct_contents_filename) as f: + correct_json = json.load(f) - # Remove the timestamp entry. - del saved_json['last_updated'] - del correct_json['last_updated'] + # Remove the timestamp entry. + del saved_json['last_updated'] + del correct_json['last_updated'] - # Compare. - self.assertDictEqual(saved_json, correct_json) + # Compare. + self.assertDictEqual(saved_json, correct_json) + + finally: + if os.path.exists(temp_filename): + os.remove(temp_filename) def test_omit_state_vars_false(self): """Test that save_instance() correctly saves problem_6_2b_adj with @@ -379,28 +391,32 @@ def test_omit_state_vars_false(self): # Save with omit_state_vars=False. temp_filename = 'tests/additional_files/temp_TestSaveInstance_omit_state_vars_false.json' - instances.save_instance( - instance_name='test_omit_state_vars_false', - instance_data=instance, - instance_description='this is test_omit_state_vars_false', - filepath=temp_filename, - omit_state_vars=False - ) + try: + instances.save_instance( + instance_name='test_omit_state_vars_false', + instance_data=instance, + instance_description='this is test_omit_state_vars_false', + filepath=temp_filename, + omit_state_vars=False + ) - # Load saved JSON and correct JSON. - correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json' - with open(temp_filename) as f: - saved_json = json.load(f) - os.remove(temp_filename) - with open(correct_contents_filename) as f: - correct_json = json.load(f) + # Load saved JSON and correct JSON. + correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json' + with open(temp_filename) as f: + saved_json = json.load(f) + with open(correct_contents_filename) as f: + correct_json = json.load(f) - # Remove the timestamp entry. - del saved_json['last_updated'] - del correct_json['last_updated'] + # Remove the timestamp entry. + del saved_json['last_updated'] + del correct_json['last_updated'] - # Compare. - self.assertDictEqual(saved_json, correct_json) + # Compare. + self.assertDictEqual(saved_json, correct_json) + + finally: + if os.path.exists(temp_filename): + os.remove(temp_filename) def test_omit_state_vars_false_rosling(self): """Test that save_instance() correctly saves rosling_figure_1 with @@ -416,26 +432,31 @@ def test_omit_state_vars_false_rosling(self): # Save with omit_state_vars=False. temp_filename = 'tests/additional_files/temp_TestSaveInstance_omit_state_vars_false_rosling.json' - instances.save_instance( - instance_name='test_omit_state_vars_rosling_false', - instance_data=instance, - instance_description='this is test_omit_state_vars_rosling_false', - filepath=temp_filename, - omit_state_vars=False - ) + try: + instances.save_instance( + instance_name='test_omit_state_vars_rosling_false', + instance_data=instance, + instance_description='this is test_omit_state_vars_rosling_false', + filepath=temp_filename, + omit_state_vars=False + ) - # Load saved JSON and correct JSON. - correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json' - with open(temp_filename) as f: - saved_json = json.load(f) - os.remove(temp_filename) - with open(correct_contents_filename) as f: - correct_json = json.load(f) + # Load saved JSON and correct JSON. + correct_contents_filename = 'tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json' + with open(temp_filename) as f: + saved_json = json.load(f) + with open(correct_contents_filename) as f: + correct_json = json.load(f) - # Remove the timestamp entry. - del saved_json['last_updated'] - del correct_json['last_updated'] + # Remove the timestamp entry. + del saved_json['last_updated'] + del correct_json['last_updated'] + + # Compare. + self.assertDictEqual(saved_json, correct_json) + + finally: + if os.path.exists(temp_filename): + os.remove(temp_filename) - # Compare. - self.assertDictEqual(saved_json, correct_json) diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index 525dd19..a239f94 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -691,7 +691,7 @@ def test_multiproduct_5_7(self): network.remove_product(network.products_by_index[10]) - self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 11])) + self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 11, -1001, -5, -4, -3, -2])) class TestProductLists(unittest.TestCase): @@ -730,10 +730,10 @@ def test_multiproduct_5_7(self): network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") network.add_product(SupplyChainProduct(10)) network.add_product(SupplyChainProduct(11)) - products = {i: network.products_by_index[i] for i in [0, 1, 2, 3, 4, 5, 6, 10, 11]} + products = {i: network.products_by_index[i] for i in [0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -5, -4, -3, -2]} + self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -5, -4, -3, -2])) self.assertSetEqual(set(network.products), set(products.values())) - self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 10, 11])) self.assertDictEqual(network.products_by_index, {i: products[i] for i in products.keys()}) diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 5917571..5a9ad2a 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -963,11 +963,11 @@ def test_mwor_no_product(self): nodes[2].add_products([prods[2], prods[3]]) nodes[3].add_products([prods[4], prods[5]]) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=None), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=None), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=None), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=None), [1, 2, 3]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers(product_index=77) - _ = nodes[0].raw_material_supplier_indices(product_index=77) + _ = nodes[0].raw_material_suppliers_by_product(product_index=77) + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77) def test_mwor_one_product(self): """Test that raw_material_suppliers and raw_material_supplier_indices work correctly on MWOR network with one product added at retailer. @@ -989,16 +989,16 @@ def test_mwor_one_product(self): nodes[0].products[0].set_bill_of_materials(4, 15) nodes[0].products[0].set_bill_of_materials(5, 6) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=10), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=10), [1, 2, 3]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers(product_index=None) - _ = nodes[0].raw_material_suppliers(product_index=77) - _ = nodes[0].raw_material_supplier_indices(product_index=None) - _ = nodes[0].raw_material_supplier_indices(product_index=77) + _ = nodes[0].raw_material_suppliers_by_product(product_index=None) + _ = nodes[0].raw_material_suppliers_by_product(product_index=77) + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=None) + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77) def test_mwor_multiple_products(self): - """Test that raw_material_suppliers and raw_material_supplier_indices work correctly on MWOR network with multiple products added at retailer. + """Test that raw_material_suppliers_by_product and raw_material_supplier_indices_by_product work correctly on MWOR network with multiple products added at retailer. """ print_status('TestRawMaterialSuppliers', 'test_mwor_multiple_products()') @@ -1018,51 +1018,51 @@ def test_mwor_multiple_products(self): nodes[0].products_by_index[11].set_bill_of_materials(4, 15) nodes[0].products_by_index[12].set_bill_of_materials(5, 6) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=10), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=11), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=12), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=10), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=11), [2, 3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=12), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=10), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=11), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=12), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=10), [1, 2]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=11), [2, 3]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=12), [3]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers(product_index=None) - _ = nodes[0].raw_material_suppliers(product_index=77) - _ = nodes[0].raw_material_supplier_indices(product_index=None) - _ = nodes[0].raw_material_supplier_indices(product_index=77) + _ = nodes[0].raw_material_suppliers_by_product(product_index=None) + _ = nodes[0].raw_material_suppliers_by_product(product_index=77) + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=None) + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77) def test_multiproduct_5_7(self): - """Test that raw_material_suppliers and raw_material_supplier_indices work correctly on 5-node, 7-product network. + """Test that raw_material_suppliers_by_product and raw_material_supplier_indices_by_product work correctly on 5-node, 7-product network. """ print_status('TestRawMaterialSuppliers', 'test_multiproduct_5_7()') network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - self.assertListEqual(nodes[0].raw_material_suppliers(product_index=0), [nodes[2]]) - self.assertListEqual(nodes[1].raw_material_suppliers(product_index=0), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[1].raw_material_suppliers(product_index=1), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[2].raw_material_suppliers(product_index=2), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers(product_index=3), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers(product_index=4), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers(product_index=2), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers(product_index=4), [nodes[4]]) - self.assertListEqual(nodes[4].raw_material_suppliers(product_index=5), [None]) - self.assertListEqual(nodes[4].raw_material_suppliers(product_index=6), [None]) - self.assertListEqual(nodes[0].raw_material_supplier_indices(product_index=0), [2]) - self.assertListEqual(nodes[1].raw_material_supplier_indices(product_index=0), [2, 3]) - self.assertListEqual(nodes[1].raw_material_supplier_indices(product_index=1), [2, 3]) - self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=2), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=3), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices(product_index=4), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices(product_index=2), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices(product_index=4), [4]) - self.assertListEqual(nodes[4].raw_material_supplier_indices(product_index=5), [None]) - self.assertListEqual(nodes[4].raw_material_supplier_indices(product_index=6), [None]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=0), [nodes[2]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=0), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=1), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=2), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=3), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=4), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=2), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=4), [nodes[4]]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=5), [None]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=6), [None]) + self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=0), [2]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=0), [2, 3]) + self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=1), [2, 3]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=2), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=3), [4]) + self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=4), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=2), [4]) + self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=4), [4]) + self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=5), [None]) + self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=6), [None]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers(product_index=None) - _ = nodes[0].raw_material_suppliers(product_index=77) - _ = nodes[0].raw_material_supplier_indices(product_index=None) - _ = nodes[0].raw_material_supplier_indices(product_index=77) + _ = nodes[0].raw_material_suppliers_by_product(product_index=None) + _ = nodes[0].raw_material_suppliers_by_product(product_index=77) + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=None) + _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77) class TestGetNetworkBillOfMaterials(unittest.TestCase): @@ -2129,7 +2129,7 @@ def test_example_6_1(self): # Convert dicts back to nodes. dict_nodes = [SupplyChainNode.from_dict(d) for d in node_dicts] - # Convert successors and predecessors back to node objects. Replace network objects. + # Convert successors and predecessors back to node objects. Replace network and product objects. for n in dict_nodes: preds = [] succs = [] @@ -2141,6 +2141,11 @@ def test_example_6_1(self): n._predecessors = preds n._successors = succs n.network = network + if n._dummy_product is not None: + n._dummy_product = network.products_by_index[n._dummy_product] + if n._external_supplier_dummy_product is not None: + n._external_supplier_dummy_product = network.products_by_index[n._external_supplier_dummy_product] + n._products_by_index = {k: network.products_by_index[k] for k in n._products_by_index.keys()} # Compare. for i in range(len(network.nodes)): @@ -2160,7 +2165,7 @@ def test_assembly_3_stage(self): # Convert dicts back to nodes. dict_nodes = [SupplyChainNode.from_dict(d) for d in node_dicts] - # Convert successors and predecessors back to node objects. Replace network objects. + # Convert successors and predecessors back to node objects. Replace network and product objects. for n in dict_nodes: preds = [] succs = [] @@ -2172,6 +2177,11 @@ def test_assembly_3_stage(self): n._predecessors = preds n._successors = succs n.network = network + if n._dummy_product is not None: + n._dummy_product = network.products_by_index[n._dummy_product] + if n._external_supplier_dummy_product is not None: + n._external_supplier_dummy_product = network.products_by_index[n._external_supplier_dummy_product] + n._products_by_index = {k: network.products_by_index[k] for k in n._products_by_index.keys()} # Compare. for i in range(len(network.nodes)): @@ -2199,7 +2209,7 @@ def test_example_6_1_per_22(self): # Convert dicts back to nodes. dict_nodes = [SupplyChainNode.from_dict(d) for d in node_dicts] - # Convert successors and predecessors back to node objects. Replace network objects. + # Convert successors and predecessors back to node objects. Replace network and product objects. for n in dict_nodes: preds = [] succs = [] @@ -2211,6 +2221,11 @@ def test_example_6_1_per_22(self): n._predecessors = preds n._successors = succs n.network = network + if n._dummy_product is not None: + n._dummy_product = network.products_by_index[n._dummy_product] + if n._external_supplier_dummy_product is not None: + n._external_supplier_dummy_product = network.products_by_index[n._external_supplier_dummy_product] + n._products_by_index = {k: network.products_by_index[k] for k in n._products_by_index.keys()} # Compare. for i in range(len(network.nodes)): @@ -2238,7 +2253,7 @@ def test_assembly_3_stage_per_22(self): # Convert dicts back to nodes. dict_nodes = [SupplyChainNode.from_dict(d) for d in node_dicts] - # Convert successors and predecessors back to node objects. Replace network objects. + # Convert successors and predecessors back to node objects. Replace network and product objects. for n in dict_nodes: preds = [] succs = [] @@ -2250,6 +2265,11 @@ def test_assembly_3_stage_per_22(self): n._predecessors = preds n._successors = succs n.network = network + if n._dummy_product is not None: + n._dummy_product = network.products_by_index[n._dummy_product] + if n._external_supplier_dummy_product is not None: + n._external_supplier_dummy_product = network.products_by_index[n._external_supplier_dummy_product] + n._products_by_index = {k: network.products_by_index[k] for k in n._products_by_index.keys()} # Compare. for i in range(len(network.nodes)): From d65c85347dd1d088404a427d2a18b94abdb3c529 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 15 Apr 2024 23:29:35 -0400 Subject: [PATCH 33/94] Fix test_sim_io tests --- src/stockpyl/demand_source.py | 26 +- ...iteInstanceAndStates_test_example_6_1.json | 1 - ...tes_test_example_6_1_with_disruptions.json | 1 - ...tates_test_rong_atan_snyder_figure_1a.json | 1 - ...tan_snyder_figure_1a_with_disruptions.json | 1 - ...riteResults_test_columns_to_print_list.csv | 12 - ...riteResults_test_columns_to_print_list.txt | 13 - ..._test_columns_to_print_list_of_strings.csv | 12 - ..._test_columns_to_print_list_of_strings.txt | 13 - ...iteResults_test_columns_to_print_mixed.csv | 12 - ...iteResults_test_columns_to_print_mixed.txt | 13 - ...riteResults_test_columns_to_print_none.csv | 12 - ...riteResults_test_columns_to_print_none.txt | 13 - ...teResults_test_columns_to_print_string.csv | 12 - ...teResults_test_columns_to_print_string.txt | 13 - ...temp_TestWriteResults_test_example_6_1.csv | 12 - ...temp_TestWriteResults_test_example_6_1.txt | 13 - ...TestWriteResults_test_periods_to_print.csv | 4 - ...TestWriteResults_test_periods_to_print.txt | 5 - ...riteResults_test_columns_to_print_list.csv | 12 + ...riteResults_test_columns_to_print_list.txt | 13 + ..._test_columns_to_print_list_of_strings.csv | 12 + ..._test_columns_to_print_list_of_strings.txt | 13 + ...iteResults_test_columns_to_print_mixed.csv | 12 + ...iteResults_test_columns_to_print_mixed.txt | 13 + ...riteResults_test_columns_to_print_none.csv | 12 + ...riteResults_test_columns_to_print_none.txt | 13 + ...teResults_test_columns_to_print_string.csv | 12 + ...teResults_test_columns_to_print_string.txt | 13 + ...m_io_TestWriteResults_test_example_6_1.csv | 12 + ...m_io_TestWriteResults_test_example_6_1.txt | 13 + ...TestWriteResults_test_periods_to_print.csv | 4 + ...TestWriteResults_test_periods_to_print.txt | 5 + tests/test_sim_io.py | 701 ++++++++---------- 34 files changed, 504 insertions(+), 545 deletions(-) delete mode 100644 tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1.json delete mode 100644 tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1_with_disruptions.json delete mode 100644 tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a.json delete mode 100644 tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a_with_disruptions.json delete mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.csv delete mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.txt delete mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.csv delete mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.txt delete mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.csv delete mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.txt delete mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.csv delete mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.txt delete mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.csv delete mode 100644 tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.txt delete mode 100644 tests/additional_files/temp_TestWriteResults_test_example_6_1.csv delete mode 100644 tests/additional_files/temp_TestWriteResults_test_example_6_1.txt delete mode 100644 tests/additional_files/temp_TestWriteResults_test_periods_to_print.csv delete mode 100644 tests/additional_files/temp_TestWriteResults_test_periods_to_print.txt create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.csv create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.txt create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.csv create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.txt create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.csv create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.txt create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.csv create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.txt create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv create mode 100644 tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt diff --git a/src/stockpyl/demand_source.py b/src/stockpyl/demand_source.py index 197c364..2f68dd8 100644 --- a/src/stockpyl/demand_source.py +++ b/src/stockpyl/demand_source.py @@ -212,7 +212,7 @@ def mean(self): """ if self._mean is not None: return self._mean - elif self.type in ('UC', 'UD', 'D', 'NB', 'CD'): + elif self.type in ('UC', 'UD', 'NB', 'CD'): return self.demand_distribution.mean() else: return None @@ -229,7 +229,7 @@ def standard_deviation(self): """ if self._standard_deviation is not None: return self._standard_deviation - elif self.type in ('P', 'UC', 'UD', 'D', 'NB', 'CD'): + elif self.type in ('P', 'UC', 'UD', 'NB', 'CD'): return self.demand_distribution.std() else: return None @@ -298,7 +298,8 @@ def round_to_int(self, value): @property def demand_distribution(self): """Demand distribution, as a ``scipy.stats.rv_continuous`` or - ``scipy.stats.rv_discrete`` object. Read only. + ``scipy.stats.rv_discrete`` object. Returns ``None`` if demand source ``type`` is ``'D'``. + Read only. """ # Check that the appropriate parameters have been set. If not, raise an exception. self.validate_parameters() @@ -490,11 +491,24 @@ def from_dict(cls, the_dict): for attr in cls._DEFAULT_VALUES.keys(): # Remove leading '_' to get property names. prop = attr[1:] if attr[0] == '_' else attr - if prop in the_dict: - value = the_dict[prop] + + # Some attributes require special handling. + if prop == 'demand_list': + # Replace integer-as-strings in keys with integers. + if the_dict[prop] is not None: + value = [{int(k): v for k, v in d.items()} for d in the_dict[prop]] + else: + value = None else: - value = cls._DEFAULT_VALUES[attr] + if prop in the_dict: + value = the_dict[prop] + else: + value = cls._DEFAULT_VALUES[attr] + + # Set the property/attribute. setattr(ds, prop, value) + + return ds diff --git a/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1.json b/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1.json deleted file mode 100644 index c764ee7..0000000 --- a/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1.json +++ /dev/null @@ -1 +0,0 @@ -{"_id": "", "instances": [{"name": "temp", "description": "", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1_with_disruptions.json b/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1_with_disruptions.json deleted file mode 100644 index c764ee7..0000000 --- a/tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1_with_disruptions.json +++ /dev/null @@ -1 +0,0 @@ -{"_id": "", "instances": [{"name": "temp", "description": "", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a.json b/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a.json deleted file mode 100644 index d2df1c4..0000000 --- a/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a.json +++ /dev/null @@ -1 +0,0 @@ -{"_id": "", "instances": [{"name": "temp", "description": "", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a_with_disruptions.json b/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a_with_disruptions.json deleted file mode 100644 index d2df1c4..0000000 --- a/tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a_with_disruptions.json +++ /dev/null @@ -1 +0,0 @@ -{"_id": "", "instances": [{"name": "temp", "description": "", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.csv b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.csv deleted file mode 100644 index c7096ee..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.csv +++ /dev/null @@ -1,12 +0,0 @@ -t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IL:-1000,TC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IL:-1,TC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IL:-2,TC -0,,5.276265890021318,11.76626589002132,-5.276265890021318,195.85498983759132,,11.76626589002132,17.29626589002132,-11.76626589002132,0.0,,17.29626589002132,27.986265890021322,-17.29626589002132,0.0 -1,,3.1453719211934947,3.145371921193494,-8.421637811214813,312.61119555229385,,3.145371921193494,3.145371921193493,-14.911637811214813,0.0,,3.145371921193493,3.145371921193491,-20.441637811214814,0.0 -2,,5.623901111326356,5.623901111326356,-14.04553892254117,521.3704048047282,,5.623901111326356,5.623901111326355,-20.53553892254117,0.0,,5.623901111326355,5.623901111326357,1.9207269674801521,55.972531780042644 -3,,6.14531128957209,6.1453112895720885,-20.19085021211326,749.4843598736442,,6.1453112895720885,6.145311289572091,-0.6153112895720909,104.26215569016468,,6.145311289572091,6.145311289572089,-1.0792124008984478,10.132197777347287 -4,,6.037190468227883,6.037190468227885,-0.16250175779997544,6.032065249535088,,6.037190468227885,6.037190468227887,-1.5864028691263323,20.264395554694573,,6.037190468227887,6.037190468227889,-1.4925017577999782,11.247802222652714 -... -95,,6.130726446440085,6.130726446440086,-1.0873708669114333,40.3632065797524,,6.130726446440086,6.130726446440086,-0.6007264464400803,27.90657768188541,,6.130726446440086,6.130726446440088,-1.4443296265940617,9.372793639692048 -96,,5.560039692192106,5.560039692192106,0.32923386136781296,2.3046370295746907,,5.560039692192106,5.560039692192106,-1.4743693187861622,18.745587279384097,,5.560039692192106,5.560039692192106,-1.0007661386321853,12.007206360307965 -97,,4.381602699335917,4.381602699335917,0.63402798187792,4.43819587314544,,4.381602699335917,4.381602699335917,0.14763116203190307,24.01441272061593,,4.381602699335917,4.381602699335919,0.7483576084719852,12.261452892880175 -98,,4.775201280806586,4.775201280806585,1.7147987191934133,12.003591034353892,,4.775201280806585,4.775201280806586,0.7547987191934205,22.120000000000022,,4.775201280806586,4.775201280806584,1.5331960198575052,12.616794601328182 -99,,7.215901450653069,7.21590145065307,-0.7259014506530708,26.945461848241987,,7.21590145065307,7.21590145065307,-1.6859014506530636,22.120000000000026,,7.21590145065307,7.215901450653072,-1.301102731459646,11.829597438386848 diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.txt b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.txt deleted file mode 100644 index 10fbefd..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list.txt +++ /dev/null @@ -1,13 +0,0 @@ -t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IL:-1000 TC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IL:-1 TC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IL:-2 TC ---- ---------------- -------------- --------- ---------- --------- ------------- --------- --------- ---------- -------- ------------- --------- ----------- ---------- -------- -0 | 5.27627 11.7663 -5.27627 195.855 | 11.7663 17.2963 -11.7663 0 | 17.2963 27.9863 -17.2963 0 -1 | 3.14537 3.14537 -8.42164 312.611 | 3.14537 3.14537 -14.9116 0 | 3.14537 3.14537 -20.4416 0 -2 | 5.6239 5.6239 -14.0455 521.37 | 5.6239 5.6239 -20.5355 0 | 5.6239 5.6239 1.92073 55.9725 -3 | 6.14531 6.14531 -20.1909 749.484 | 6.14531 6.14531 -0.615311 104.262 | 6.14531 6.14531 -1.07921 10.1322 -4 | 6.03719 6.03719 -0.162502 6.03207 | 6.03719 6.03719 -1.5864 20.2644 | 6.03719 6.03719 -1.4925 11.2478 -... -95 | 6.13073 6.13073 -1.08737 40.3632 | 6.13073 6.13073 -0.600726 27.9066 | 6.13073 6.13073 -1.44433 9.37279 -96 | 5.56004 5.56004 0.329234 2.30464 | 5.56004 5.56004 -1.47437 18.7456 | 5.56004 5.56004 -1.00077 12.0072 -97 | 4.3816 4.3816 0.634028 4.4382 | 4.3816 4.3816 0.147631 24.0144 | 4.3816 4.3816 0.748358 12.2615 -98 | 4.7752 4.7752 1.7148 12.0036 | 4.7752 4.7752 0.754799 22.12 | 4.7752 4.7752 1.5332 12.6168 -99 | 7.2159 7.2159 -0.725901 26.9455 | 7.2159 7.2159 -1.6859 22.12 | 7.2159 7.2159 -1.3011 11.8296 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.csv b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.csv deleted file mode 100644 index f7ea079..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.csv +++ /dev/null @@ -1,12 +0,0 @@ -t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,OS:EXT|-1000,IL:-1000,HC,SC,TC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,OS:0|-1,IL:-1,HC,SC,TC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,OS:1|-2,IL:-2,HC,SC,TC -0,,5.276265890021318,11.76626589002132,0,0.0,-5.276265890021318,0.0,195.85498983759132,195.85498983759132,,11.76626589002132,17.29626589002132,0,0.0,-11.76626589002132,0.0,0.0,0.0,,17.29626589002132,27.986265890021322,0,0.0,-17.29626589002132,0.0,0.0,0.0 -1,,3.1453719211934947,3.145371921193494,0.0,0.0,-8.421637811214813,0.0,312.61119555229385,312.61119555229385,,3.145371921193494,3.145371921193493,0.0,0.0,-14.911637811214813,0.0,0.0,0.0,,3.145371921193493,3.145371921193491,0,0.0,-20.441637811214814,0.0,0.0,0.0 -2,,5.623901111326356,5.623901111326356,0.0,0.0,-14.04553892254117,0.0,521.3704048047282,521.3704048047282,,5.623901111326356,5.623901111326355,0.0,0.0,-20.53553892254117,0.0,0.0,0.0,,5.623901111326355,5.623901111326357,27.986265890021322,26.06553892254117,1.9207269674801521,3.8414539349603043,0,55.972531780042644 -3,,6.14531128957209,6.1453112895720885,0.0,0.0,-20.19085021211326,0.0,749.4843598736442,749.4843598736442,,6.1453112895720885,6.145311289572091,26.06553892254117,26.06553892254117,-0.6153112895720909,0.0,0.0,104.26215569016468,,6.145311289572091,6.145311289572089,3.145371921193491,5.066098888673643,-1.0792124008984478,0.0,0.0,10.132197777347287 -4,,6.037190468227883,6.037190468227885,26.06553892254117,26.06553892254117,-0.16250175779997544,0.0,6.032065249535088,6.032065249535088,,6.037190468227885,6.037190468227887,5.066098888673643,5.066098888673643,-1.5864028691263323,0.0,0.0,20.264395554694573,,6.037190468227887,6.037190468227889,5.623901111326357,5.623901111326357,-1.4925017577999782,0.0,0.0,11.247802222652714 -... -95,,6.130726446440085,6.130726446440086,5.4680702998326325,5.4680702998326325,-1.0873708669114333,0.0,40.3632065797524,40.3632065797524,,6.130726446440086,6.130726446440086,6.976644420471352,6.976644420471352,-0.6007264464400803,0.0,0.0,27.90657768188541,,6.130726446440086,6.130726446440088,3.7919143161941378,4.686396819846024,-1.4443296265940617,0.0,0.0,9.372793639692048 -96,,5.560039692192106,5.560039692192106,6.976644420471352,6.647410559103539,0.32923386136781296,2.3046370295746907,0.0,2.3046370295746907,,5.560039692192106,5.560039692192106,4.686396819846024,4.686396819846024,-1.4743693187861622,0.0,0.0,18.745587279384097,,5.560039692192106,5.560039692192106,6.003603180153982,6.003603180153982,-1.0007661386321853,0.0,0.0,12.007206360307965 -97,,4.381602699335917,4.381602699335917,4.686396819846024,4.381602699335917,0.63402798187792,4.43819587314544,0.0,4.43819587314544,,4.381602699335917,4.381602699335917,6.003603180153982,5.855972018122079,0.14763116203190307,0.5905246481276123,0,24.01441272061593,,4.381602699335917,4.381602699335919,6.130726446440088,5.3823688379681025,0.7483576084719852,1.4967152169439704,0,12.261452892880175 -98,,4.775201280806586,4.775201280806585,5.855972018122079,4.775201280806586,1.7147987191934133,12.003591034353892,0.0,12.003591034353892,,4.775201280806585,4.775201280806586,5.3823688379681025,4.775201280806585,0.7547987191934205,3.019194876773682,0,22.120000000000022,,4.775201280806586,4.775201280806584,5.560039692192106,4.775201280806586,1.5331960198575052,3.0663920397150104,0,12.616794601328182 -99,,7.215901450653069,7.21590145065307,4.775201280806585,6.489999999999998,-0.7259014506530708,0.0,26.945461848241987,26.945461848241987,,7.21590145065307,7.21590145065307,4.775201280806586,5.5300000000000065,-1.6859014506530636,0.0,0.0,22.120000000000026,,7.21590145065307,7.215901450653072,4.381602699335919,5.914798719193424,-1.301102731459646,0.0,0.0,11.829597438386848 diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.txt b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.txt deleted file mode 100644 index c900e59..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings.txt +++ /dev/null @@ -1,13 +0,0 @@ -t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 OS:EXT|-1000 IL:-1000 HC SC TC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 OS:0|-1 IL:-1 HC SC TC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 OS:1|-2 IL:-2 HC SC TC ---- ---------------- -------------- --------- --------- -------------- ---------- -------- --------- --------- ------------- --------- --------- --------- --------- ---------- -------- ---- -------- ------------- --------- ----------- ----------- --------- ---------- ------- ---- -------- -0 | 5.27627 11.7663 0 0 -5.27627 0 195.855 195.855 | 11.7663 17.2963 0 0 -11.7663 0 0 0 | 17.2963 27.9863 0 0 -17.2963 0 0 0 -1 | 3.14537 3.14537 0 0 -8.42164 0 312.611 312.611 | 3.14537 3.14537 0 0 -14.9116 0 0 0 | 3.14537 3.14537 0 0 -20.4416 0 0 0 -2 | 5.6239 5.6239 0 0 -14.0455 0 521.37 521.37 | 5.6239 5.6239 0 0 -20.5355 0 0 0 | 5.6239 5.6239 27.9863 26.0655 1.92073 3.84145 0 55.9725 -3 | 6.14531 6.14531 0 0 -20.1909 0 749.484 749.484 | 6.14531 6.14531 26.0655 26.0655 -0.615311 0 0 104.262 | 6.14531 6.14531 3.14537 5.0661 -1.07921 0 0 10.1322 -4 | 6.03719 6.03719 26.0655 26.0655 -0.162502 0 6.03207 6.03207 | 6.03719 6.03719 5.0661 5.0661 -1.5864 0 0 20.2644 | 6.03719 6.03719 5.6239 5.6239 -1.4925 0 0 11.2478 -... -95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 0 40.3632 40.3632 | 6.13073 6.13073 6.97664 6.97664 -0.600726 0 0 27.9066 | 6.13073 6.13073 3.79191 4.6864 -1.44433 0 0 9.37279 -96 | 5.56004 5.56004 6.97664 6.64741 0.329234 2.30464 0 2.30464 | 5.56004 5.56004 4.6864 4.6864 -1.47437 0 0 18.7456 | 5.56004 5.56004 6.0036 6.0036 -1.00077 0 0 12.0072 -97 | 4.3816 4.3816 4.6864 4.3816 0.634028 4.4382 0 4.4382 | 4.3816 4.3816 6.0036 5.85597 0.147631 0.590525 0 24.0144 | 4.3816 4.3816 6.13073 5.38237 0.748358 1.49672 0 12.2615 -98 | 4.7752 4.7752 5.85597 4.7752 1.7148 12.0036 0 12.0036 | 4.7752 4.7752 5.38237 4.7752 0.754799 3.01919 0 22.12 | 4.7752 4.7752 5.56004 4.7752 1.5332 3.06639 0 12.6168 -99 | 7.2159 7.2159 4.7752 6.49 -0.725901 0 26.9455 26.9455 | 7.2159 7.2159 4.7752 5.53 -1.6859 0 0 22.12 | 7.2159 7.2159 4.3816 5.9148 -1.3011 0 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.csv b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.csv deleted file mode 100644 index 38cfebe..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.csv +++ /dev/null @@ -1,12 +0,0 @@ -t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,IDI:1|-1,OS:EXT|-1000,IL:-1000,SC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,IDI:2|-2,OS:0|-1,IL:-1,SC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,IDI:EXT|-3,OS:1|-2,IL:-2,SC -0,,5.276265890021318,11.76626589002132,0,0,0.0,-5.276265890021318,195.85498983759132,,11.76626589002132,17.29626589002132,0,0,0.0,-11.76626589002132,0.0,,17.29626589002132,27.986265890021322,0,0,0.0,-17.29626589002132,0.0 -1,,3.1453719211934947,3.145371921193494,0.0,0,0.0,-8.421637811214813,312.61119555229385,,3.145371921193494,3.145371921193493,0.0,0,0.0,-14.911637811214813,0.0,,3.145371921193493,3.145371921193491,0,0,0.0,-20.441637811214814,0.0 -2,,5.623901111326356,5.623901111326356,0.0,0,0.0,-14.04553892254117,521.3704048047282,,5.623901111326356,5.623901111326355,0.0,0,0.0,-20.53553892254117,0.0,,5.623901111326355,5.623901111326357,27.986265890021322,0,26.06553892254117,1.9207269674801521,0 -3,,6.14531128957209,6.1453112895720885,0.0,0,0.0,-20.19085021211326,749.4843598736442,,6.1453112895720885,6.145311289572091,26.06553892254117,0,26.06553892254117,-0.6153112895720909,0.0,,6.145311289572091,6.145311289572089,3.145371921193491,0,5.066098888673643,-1.0792124008984478,0.0 -4,,6.037190468227883,6.037190468227885,26.06553892254117,0,26.06553892254117,-0.16250175779997544,6.032065249535088,,6.037190468227885,6.037190468227887,5.066098888673643,0,5.066098888673643,-1.5864028691263323,0.0,,6.037190468227887,6.037190468227889,5.623901111326357,0,5.623901111326357,-1.4925017577999782,0.0 -... -95,,6.130726446440085,6.130726446440086,5.4680702998326325,0,5.4680702998326325,-1.0873708669114333,40.3632065797524,,6.130726446440086,6.130726446440086,6.976644420471352,0,6.976644420471352,-0.6007264464400803,0.0,,6.130726446440086,6.130726446440088,3.7919143161941378,0,4.686396819846024,-1.4443296265940617,0.0 -96,,5.560039692192106,5.560039692192106,6.976644420471352,0,6.647410559103539,0.32923386136781296,0.0,,5.560039692192106,5.560039692192106,4.686396819846024,0,4.686396819846024,-1.4743693187861622,0.0,,5.560039692192106,5.560039692192106,6.003603180153982,0,6.003603180153982,-1.0007661386321853,0.0 -97,,4.381602699335917,4.381602699335917,4.686396819846024,0,4.381602699335917,0.63402798187792,0.0,,4.381602699335917,4.381602699335917,6.003603180153982,0,5.855972018122079,0.14763116203190307,0,,4.381602699335917,4.381602699335919,6.130726446440088,0,5.3823688379681025,0.7483576084719852,0 -98,,4.775201280806586,4.775201280806585,5.855972018122079,0,4.775201280806586,1.7147987191934133,0.0,,4.775201280806585,4.775201280806586,5.3823688379681025,0,4.775201280806585,0.7547987191934205,0,,4.775201280806586,4.775201280806584,5.560039692192106,0,4.775201280806586,1.5331960198575052,0 -99,,7.215901450653069,7.21590145065307,4.775201280806585,0,6.489999999999998,-0.7259014506530708,26.945461848241987,,7.21590145065307,7.21590145065307,4.775201280806586,0,5.5300000000000065,-1.6859014506530636,0.0,,7.21590145065307,7.215901450653072,4.381602699335919,0,5.914798719193424,-1.301102731459646,0.0 diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.txt b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.txt deleted file mode 100644 index 929489d..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed.txt +++ /dev/null @@ -1,13 +0,0 @@ -t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 IDI:1|-1 OS:EXT|-1000 IL:-1000 SC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 IDI:2|-2 OS:0|-1 IL:-1 SC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 IDI:EXT|-3 OS:1|-2 IL:-2 SC ---- ---------------- -------------- --------- --------- ---------- -------------- ---------- --------- ------------- --------- --------- --------- ---------- --------- ---------- ---- ------------- --------- ----------- ----------- ------------ --------- ---------- ---- -0 | 5.27627 11.7663 0 0 0 -5.27627 195.855 | 11.7663 17.2963 0 0 0 -11.7663 0 | 17.2963 27.9863 0 0 0 -17.2963 0 -1 | 3.14537 3.14537 0 0 0 -8.42164 312.611 | 3.14537 3.14537 0 0 0 -14.9116 0 | 3.14537 3.14537 0 0 0 -20.4416 0 -2 | 5.6239 5.6239 0 0 0 -14.0455 521.37 | 5.6239 5.6239 0 0 0 -20.5355 0 | 5.6239 5.6239 27.9863 0 26.0655 1.92073 0 -3 | 6.14531 6.14531 0 0 0 -20.1909 749.484 | 6.14531 6.14531 26.0655 0 26.0655 -0.615311 0 | 6.14531 6.14531 3.14537 0 5.0661 -1.07921 0 -4 | 6.03719 6.03719 26.0655 0 26.0655 -0.162502 6.03207 | 6.03719 6.03719 5.0661 0 5.0661 -1.5864 0 | 6.03719 6.03719 5.6239 0 5.6239 -1.4925 0 -... -95 | 6.13073 6.13073 5.46807 0 5.46807 -1.08737 40.3632 | 6.13073 6.13073 6.97664 0 6.97664 -0.600726 0 | 6.13073 6.13073 3.79191 0 4.6864 -1.44433 0 -96 | 5.56004 5.56004 6.97664 0 6.64741 0.329234 0 | 5.56004 5.56004 4.6864 0 4.6864 -1.47437 0 | 5.56004 5.56004 6.0036 0 6.0036 -1.00077 0 -97 | 4.3816 4.3816 4.6864 0 4.3816 0.634028 0 | 4.3816 4.3816 6.0036 0 5.85597 0.147631 0 | 4.3816 4.3816 6.13073 0 5.38237 0.748358 0 -98 | 4.7752 4.7752 5.85597 0 4.7752 1.7148 0 | 4.7752 4.7752 5.38237 0 4.7752 0.754799 0 | 4.7752 4.7752 5.56004 0 4.7752 1.5332 0 -99 | 7.2159 7.2159 4.7752 0 6.49 -0.725901 26.9455 | 7.2159 7.2159 4.7752 0 5.53 -1.6859 0 | 7.2159 7.2159 4.3816 0 5.9148 -1.3011 0 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.csv b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.csv deleted file mode 100644 index 82471d6..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.csv +++ /dev/null @@ -1,12 +0,0 @@ -t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,IDI:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,IDI:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC -0,,False,5.276265890021318,[],11.76626589002132,11.76626589002132,0,[0.0],0,0.0,0.0,0.0,0.0,-5.276265890021318,5.276265890021318,0,0.0,195.85498983759132,0.0,0.0,195.85498983759132,,False,11.76626589002132,[],17.29626589002132,17.29626589002132,0,[0.0],0,0.0,0.0,0.0,0.0,-11.76626589002132,11.76626589002132,0.0,0.0,0.0,0.0,0.0,0.0,,False,17.29626589002132,[],27.986265890021322,27.986265890021322,0,"[0, 27.986265890021322]",0,0.0,0.0,0.0,0.0,-17.29626589002132,17.29626589002132,0.0,0.0,0.0,0.0,0.0,0.0 -1,,False,3.1453719211934947,[],3.145371921193494,14.911637811214813,0.0,[0.0],0,0.0,0.0,0.0,0.0,-8.421637811214813,8.421637811214813,0,0.0,312.61119555229385,0.0,0.0,312.61119555229385,,False,3.145371921193494,[],3.145371921193493,20.441637811214814,0.0,[0.0],0,0.0,0.0,0.0,0.0,-14.911637811214813,14.911637811214813,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.145371921193493,[],3.145371921193491,31.131637811214812,0,"[27.986265890021322, 3.145371921193491]",0,0.0,0.0,0.0,0.0,-20.441637811214814,20.441637811214814,0.0,0.0,0.0,0.0,0.0,0.0 -2,,False,5.623901111326356,[],5.623901111326356,20.53553892254117,0.0,[0.0],0,0.0,0.0,0.0,0.0,-14.04553892254117,14.04553892254117,0,0.0,521.3704048047282,0.0,0.0,521.3704048047282,,False,5.623901111326356,[],5.623901111326355,26.06553892254117,0.0,[26.06553892254117],0,0.0,0.0,0.0,0.0,-20.53553892254117,20.53553892254117,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.623901111326355,[],5.623901111326357,8.769273032519848,27.986265890021322,"[3.145371921193491, 5.623901111326357]",0,0.0,26.06553892254117,5.623901111326354,0.21576001662727454,1.9207269674801521,8.881784197001252e-16,0.0,3.8414539349603043,0,52.13107784508234,0.0,55.972531780042644 -3,,False,6.14531128957209,[],6.1453112895720885,26.68085021211326,0.0,[26.06553892254117],0,0.0,0.0,0.0,0.0,-20.19085021211326,20.19085021211326,0,0.0,749.4843598736442,0.0,0.0,749.4843598736442,,False,6.1453112895720885,[],6.145311289572091,6.1453112895720885,26.06553892254117,[5.066098888673643],0,0.0,26.06553892254117,5.529999999999998,0.20726475940745492,-0.6153112895720909,0.6153112895720909,0.0,0.0,0.0,104.26215569016468,0.0,104.26215569016468,,False,6.145311289572091,[],6.145311289572089,11.769212400898446,3.145371921193491,"[5.623901111326357, 6.145311289572089]",0,0.0,5.066098888673643,5.066098888673642,0.3318757477559503,-1.0792124008984478,1.0792124008984487,0.0,0.0,0.0,10.132197777347287,0.0,10.132197777347287 -4,,False,6.037190468227883,[],6.037190468227885,6.652501757799978,26.06553892254117,[5.066098888673643],0,0.0,26.06553892254117,5.8746887104279075,0.22398503883788762,-0.16250175779997544,0.16250175779997544,0,0.0,6.032065249535088,0.0,0.0,6.032065249535088,,False,6.037190468227885,[],6.037190468227887,7.116402869126333,5.066098888673643,[5.623901111326357],0,0.0,5.066098888673643,4.450787599101552,0.3050545629127044,-1.5864028691263323,1.5864028691263323,0.0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227887,[],6.037190468227889,12.18250175779998,5.623901111326357,"[6.145311289572089, 6.037190468227889]",0,0.0,5.623901111326357,4.544688710427908,0.39831291850351647,-1.4925017577999782,1.492501757799979,0.0,0.0,0.0,11.247802222652714,0.0,11.247802222652714 -... -95,,False,6.130726446440085,[],6.130726446440086,7.5773708669114335,5.4680702998326325,[6.976644420471352],0,0.0,5.4680702998326325,5.043355579528652,0.9252643870000954,-1.0873708669114333,1.0873708669114333,0,0.0,40.3632065797524,0.0,0.0,40.3632065797524,,False,6.130726446440086,[],6.130726446440086,6.130726446440081,6.976644420471352,[4.686396819846024],0,0.0,6.976644420471352,5.530000000000006,0.8738544344297134,-0.6007264464400803,0.6007264464400803,0.0,0.0,0.0,27.90657768188541,0.0,27.90657768188541,,False,6.130726446440086,[],6.130726446440088,12.134329626594061,3.7919143161941378,"[6.003603180153982, 6.130726446440088]",0,0.0,4.686396819846024,4.686396819846024,0.8873690461055608,-1.4443296265940617,1.4443296265940617,0.0,0.0,0.0,9.372793639692048,0.0,9.372793639692048 -96,,False,5.560039692192106,[],5.560039692192106,6.160766138632187,6.976644420471352,[4.686396819846024],0,0.0,6.647410559103539,5.560039692192106,0.9261042237442303,0.32923386136781296,0.0,0,2.3046370295746907,0.0,0.0,0.0,2.3046370295746907,,False,5.560039692192106,[],5.560039692192106,7.004369318786162,4.686396819846024,[6.003603180153982],0,0.0,4.686396819846024,4.085670373405944,0.8723123560510794,-1.4743693187861622,1.4743693187861622,0.0,0.0,0.0,18.745587279384097,0.0,18.745587279384097,,False,5.560039692192106,[],5.560039692192106,11.690766138632183,6.003603180153982,"[6.130726446440088, 5.560039692192106]",0,0.0,6.003603180153982,4.559273553559921,0.8866300270843277,-1.0007661386321853,1.0007661386321853,0.0,0.0,0.0,12.007206360307965,0.0,12.007206360307965 -97,,False,4.381602699335917,[],4.381602699335917,5.855972018122081,4.686396819846024,[5.855972018122079],0,0.0,4.381602699335917,4.381602699335917,0.9267528775079436,0.63402798187792,0.0,0,4.43819587314544,0.0,0.0,0.0,4.43819587314544,,False,4.381602699335917,[],4.381602699335917,5.382368837968096,6.003603180153982,[5.3823688379681025],0,0.0,5.855972018122079,4.381602699335917,0.8734188064848402,0.14763116203190307,0.0,0.0,0.5905246481276123,0,23.423888072488317,0.0,24.01441272061593,,False,4.381602699335917,[],4.381602699335919,9.941642391528015,6.130726446440088,"[5.560039692192106, 4.381602699335919]",0,0.0,5.3823688379681025,4.381602699335917,0.8876017832155828,0.7483576084719852,0.0,0.0,1.4967152169439704,0,10.764737675936205,0.0,12.261452892880175 -98,,False,4.775201280806586,[],4.775201280806585,4.775201280806586,5.855972018122079,[4.775201280806585],0,0.0,4.775201280806586,4.775201280806586,0.9274469545198983,1.7147987191934133,0.0,0,12.003591034353892,0.0,0.0,0.0,12.003591034353892,,False,4.775201280806585,[],4.775201280806586,4.77520128080658,5.3823688379681025,[4.775201280806586],0,0.0,4.775201280806585,4.775201280806585,0.8746030168684653,0.7547987191934205,0.0,0.0,3.019194876773682,0,19.10080512322634,0.0,22.120000000000022,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,"[4.381602699335919, 4.775201280806584]",0,0.0,4.775201280806586,4.775201280806586,0.888642036779627,1.5331960198575052,0.0,0.0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182 -99,,False,7.215901450653069,[],7.21590145065307,7.21590145065307,4.775201280806585,[5.5300000000000065],0,0.0,6.489999999999998,6.489999999999998,0.9270510522666118,-0.7259014506530708,0.7259014506530708,0,0.0,26.945461848241987,0.0,0.0,26.945461848241987,,False,7.21590145065307,[],7.21590145065307,7.215901450653064,4.775201280806586,[5.914798719193424],0,0.0,5.5300000000000065,5.5300000000000065,0.8730941541446626,-1.6859014506530636,1.6859014506530636,0.0,0.0,0.0,22.120000000000026,0.0,22.120000000000026,,False,7.21590145065307,[],7.215901450653072,11.991102731459648,4.381602699335919,"[4.775201280806584, 7.215901450653072]",0,0.0,5.914798719193424,5.914798719193424,0.8876910003829541,-1.301102731459646,1.301102731459646,0.0,0.0,0.0,11.829597438386848,0.0,11.829597438386848 diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.txt b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.txt deleted file mode 100644 index b086d4a..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_none.txt +++ /dev/null @@ -1,13 +0,0 @@ -t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 IDI:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 IDI:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 IDI:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC ---- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ---------- ------- -------------- --------- -------- ---------- -------------- --------------- -------- --------- ------ ----- --------- ------------- ------ --------- ----------- --------- --------- --------- -------------------- ---------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- -------- ----- -------- ------------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------------ ------- --------- --------- -------- ---------- ------------ ---------- ------- ---- -------- ----- -------- -0 | False 5.27627 [] 11.7663 11.7663 0 [0.0] 0 0 0 0 0 -5.27627 5.27627 0 0 195.855 0 0 195.855 | False 11.7663 [] 17.2963 17.2963 0 [0.0] 0 0 0 0 0 -11.7663 11.7663 0 0 0 0 0 0 | False 17.2963 [] 27.9863 27.9863 0 [0, 27.986265890021322] 0 0 0 0 0 -17.2963 17.2963 0 0 0 0 0 0 -1 | False 3.14537 [] 3.14537 14.9116 0 [0.0] 0 0 0 0 0 -8.42164 8.42164 0 0 312.611 0 0 312.611 | False 3.14537 [] 3.14537 20.4416 0 [0.0] 0 0 0 0 0 -14.9116 14.9116 0 0 0 0 0 0 | False 3.14537 [] 3.14537 31.1316 0 [27.986265890021322, 3.145371921193491] 0 0 0 0 0 -20.4416 20.4416 0 0 0 0 0 0 -2 | False 5.6239 [] 5.6239 20.5355 0 [0.0] 0 0 0 0 0 -14.0455 14.0455 0 0 521.37 0 0 521.37 | False 5.6239 [] 5.6239 26.0655 0 [26.06553892254117] 0 0 0 0 0 -20.5355 20.5355 0 0 0 0 0 0 | False 5.6239 [] 5.6239 8.76927 27.9863 [3.145371921193491, 5.623901111326357] 0 0 26.0655 5.6239 0.21576 1.92073 8.88178e-16 0 3.84145 0 52.1311 0 55.9725 -3 | False 6.14531 [] 6.14531 26.6809 0 [26.06553892254117] 0 0 0 0 0 -20.1909 20.1909 0 0 749.484 0 0 749.484 | False 6.14531 [] 6.14531 6.14531 26.0655 [5.066098888673643] 0 0 26.0655 5.53 0.207265 -0.615311 0.615311 0 0 0 104.262 0 104.262 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326357, 6.145311289572089] 0 0 5.0661 5.0661 0.331876 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 -4 | False 6.03719 [] 6.03719 6.6525 26.0655 [5.066098888673643] 0 0 26.0655 5.87469 0.223985 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326357] 0 0 5.0661 4.45079 0.305055 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572089, 6.037190468227889] 0 0 5.6239 4.54469 0.398313 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 -... -95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 0 5.46807 5.04336 0.925264 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 0 6.97664 5.53 0.873854 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 0 4.6864 4.6864 0.887369 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 -96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 0 6.64741 5.56004 0.926104 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 0 4.6864 4.08567 0.872312 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 0 6.0036 4.55927 0.88663 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 -97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122079] 0 0 4.3816 4.3816 0.926753 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 0 5.85597 4.3816 0.873419 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 0 5.38237 4.3816 0.887602 0.748358 0 0 1.49672 0 10.7647 0 12.2615 -98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 0 4.7752 4.7752 0.927447 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 0 4.7752 4.7752 0.874603 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 0 4.7752 4.7752 0.888642 1.5332 0 0 3.06639 0 9.5504 0 12.6168 -99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.5300000000000065] 0 0 6.49 6.49 0.927051 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 0 5.53 5.53 0.873094 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 0 5.9148 5.9148 0.887691 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.csv b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.csv deleted file mode 100644 index 32d2c31..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.csv +++ /dev/null @@ -1,12 +0,0 @@ -t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,OS:EXT|-1000,IL:-1000,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,OS:0|-1,IL:-1,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,OS:1|-2,IL:-2 -0,,5.276265890021318,11.76626589002132,0,0.0,-5.276265890021318,,11.76626589002132,17.29626589002132,0,0.0,-11.76626589002132,,17.29626589002132,27.986265890021322,0,0.0,-17.29626589002132 -1,,3.1453719211934947,3.145371921193494,0.0,0.0,-8.421637811214813,,3.145371921193494,3.145371921193493,0.0,0.0,-14.911637811214813,,3.145371921193493,3.145371921193491,0,0.0,-20.441637811214814 -2,,5.623901111326356,5.623901111326356,0.0,0.0,-14.04553892254117,,5.623901111326356,5.623901111326355,0.0,0.0,-20.53553892254117,,5.623901111326355,5.623901111326357,27.986265890021322,26.06553892254117,1.9207269674801521 -3,,6.14531128957209,6.1453112895720885,0.0,0.0,-20.19085021211326,,6.1453112895720885,6.145311289572091,26.06553892254117,26.06553892254117,-0.6153112895720909,,6.145311289572091,6.145311289572089,3.145371921193491,5.066098888673643,-1.0792124008984478 -4,,6.037190468227883,6.037190468227885,26.06553892254117,26.06553892254117,-0.16250175779997544,,6.037190468227885,6.037190468227887,5.066098888673643,5.066098888673643,-1.5864028691263323,,6.037190468227887,6.037190468227889,5.623901111326357,5.623901111326357,-1.4925017577999782 -... -95,,6.130726446440085,6.130726446440086,5.4680702998326325,5.4680702998326325,-1.0873708669114333,,6.130726446440086,6.130726446440086,6.976644420471352,6.976644420471352,-0.6007264464400803,,6.130726446440086,6.130726446440088,3.7919143161941378,4.686396819846024,-1.4443296265940617 -96,,5.560039692192106,5.560039692192106,6.976644420471352,6.647410559103539,0.32923386136781296,,5.560039692192106,5.560039692192106,4.686396819846024,4.686396819846024,-1.4743693187861622,,5.560039692192106,5.560039692192106,6.003603180153982,6.003603180153982,-1.0007661386321853 -97,,4.381602699335917,4.381602699335917,4.686396819846024,4.381602699335917,0.63402798187792,,4.381602699335917,4.381602699335917,6.003603180153982,5.855972018122079,0.14763116203190307,,4.381602699335917,4.381602699335919,6.130726446440088,5.3823688379681025,0.7483576084719852 -98,,4.775201280806586,4.775201280806585,5.855972018122079,4.775201280806586,1.7147987191934133,,4.775201280806585,4.775201280806586,5.3823688379681025,4.775201280806585,0.7547987191934205,,4.775201280806586,4.775201280806584,5.560039692192106,4.775201280806586,1.5331960198575052 -99,,7.215901450653069,7.21590145065307,4.775201280806585,6.489999999999998,-0.7259014506530708,,7.21590145065307,7.21590145065307,4.775201280806586,5.5300000000000065,-1.6859014506530636,,7.21590145065307,7.215901450653072,4.381602699335919,5.914798719193424,-1.301102731459646 diff --git a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.txt b/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.txt deleted file mode 100644 index c113b29..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_columns_to_print_string.txt +++ /dev/null @@ -1,13 +0,0 @@ -t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 OS:EXT|-1000 IL:-1000 | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 OS:0|-1 IL:-1 | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 OS:1|-2 IL:-2 ---- ---------------- -------------- --------- --------- -------------- ---------- ------------- --------- --------- --------- --------- ---------- ------------- --------- ----------- ----------- --------- ---------- -0 | 5.27627 11.7663 0 0 -5.27627 | 11.7663 17.2963 0 0 -11.7663 | 17.2963 27.9863 0 0 -17.2963 -1 | 3.14537 3.14537 0 0 -8.42164 | 3.14537 3.14537 0 0 -14.9116 | 3.14537 3.14537 0 0 -20.4416 -2 | 5.6239 5.6239 0 0 -14.0455 | 5.6239 5.6239 0 0 -20.5355 | 5.6239 5.6239 27.9863 26.0655 1.92073 -3 | 6.14531 6.14531 0 0 -20.1909 | 6.14531 6.14531 26.0655 26.0655 -0.615311 | 6.14531 6.14531 3.14537 5.0661 -1.07921 -4 | 6.03719 6.03719 26.0655 26.0655 -0.162502 | 6.03719 6.03719 5.0661 5.0661 -1.5864 | 6.03719 6.03719 5.6239 5.6239 -1.4925 -... -95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 | 6.13073 6.13073 6.97664 6.97664 -0.600726 | 6.13073 6.13073 3.79191 4.6864 -1.44433 -96 | 5.56004 5.56004 6.97664 6.64741 0.329234 | 5.56004 5.56004 4.6864 4.6864 -1.47437 | 5.56004 5.56004 6.0036 6.0036 -1.00077 -97 | 4.3816 4.3816 4.6864 4.3816 0.634028 | 4.3816 4.3816 6.0036 5.85597 0.147631 | 4.3816 4.3816 6.13073 5.38237 0.748358 -98 | 4.7752 4.7752 5.85597 4.7752 1.7148 | 4.7752 4.7752 5.38237 4.7752 0.754799 | 4.7752 4.7752 5.56004 4.7752 1.5332 -99 | 7.2159 7.2159 4.7752 6.49 -0.725901 | 7.2159 7.2159 4.7752 5.53 -1.6859 | 7.2159 7.2159 4.3816 5.9148 -1.3011 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_example_6_1.csv b/tests/additional_files/temp_TestWriteResults_test_example_6_1.csv deleted file mode 100644 index 0321724..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_example_6_1.csv +++ /dev/null @@ -1,12 +0,0 @@ -t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC -0,,False,5.276265890021318,[],11.76626589002132,11.76626589002132,0,[0.0],0.0,0.0,0.0,0.0,-5.276265890021318,5.276265890021318,0,0.0,195.85498983759132,0.0,0.0,195.85498983759132,,False,11.76626589002132,[],17.29626589002132,17.29626589002132,0,[0.0],0.0,0.0,0.0,0.0,-11.76626589002132,11.76626589002132,0.0,0.0,0.0,0.0,0.0,0.0,,False,17.29626589002132,[],27.986265890021322,27.986265890021322,0,"[0, 27.986265890021322]",0.0,0.0,0.0,0.0,-17.29626589002132,17.29626589002132,0.0,0.0,0.0,0.0,0.0,0.0 -1,,False,3.1453719211934947,[],3.145371921193494,14.911637811214813,0.0,[0.0],0.0,0.0,0.0,0.0,-8.421637811214813,8.421637811214813,0,0.0,312.61119555229385,0.0,0.0,312.61119555229385,,False,3.145371921193494,[],3.145371921193493,20.441637811214814,0.0,[0.0],0.0,0.0,0.0,0.0,-14.911637811214813,14.911637811214813,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.145371921193493,[],3.145371921193491,31.131637811214812,0,"[27.986265890021322, 3.145371921193491]",0.0,0.0,0.0,0.0,-20.441637811214814,20.441637811214814,0.0,0.0,0.0,0.0,0.0,0.0 -2,,False,5.623901111326356,[],5.623901111326356,20.53553892254117,0.0,[0.0],0.0,0.0,0.0,0.0,-14.04553892254117,14.04553892254117,0,0.0,521.3704048047282,0.0,0.0,521.3704048047282,,False,5.623901111326356,[],5.623901111326355,26.06553892254117,0.0,[26.06553892254117],0.0,0.0,0.0,0.0,-20.53553892254117,20.53553892254117,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.623901111326355,[],5.623901111326357,8.769273032519848,27.986265890021322,"[3.145371921193491, 5.623901111326357]",0.0,26.06553892254117,5.623901111326354,0.21576001662727454,1.9207269674801521,8.881784197001252e-16,0.0,3.8414539349603043,0,52.13107784508234,0.0,55.972531780042644 -3,,False,6.14531128957209,[],6.1453112895720885,26.68085021211326,0.0,[26.06553892254117],0.0,0.0,0.0,0.0,-20.19085021211326,20.19085021211326,0,0.0,749.4843598736442,0.0,0.0,749.4843598736442,,False,6.1453112895720885,[],6.145311289572091,6.1453112895720885,26.06553892254117,[5.066098888673643],0.0,26.06553892254117,5.529999999999998,0.20726475940745492,-0.6153112895720909,0.6153112895720909,0.0,0.0,0.0,104.26215569016468,0.0,104.26215569016468,,False,6.145311289572091,[],6.145311289572089,11.769212400898446,3.145371921193491,"[5.623901111326357, 6.145311289572089]",0.0,5.066098888673643,5.066098888673642,0.3318757477559503,-1.0792124008984478,1.0792124008984487,0.0,0.0,0.0,10.132197777347287,0.0,10.132197777347287 -4,,False,6.037190468227883,[],6.037190468227885,6.652501757799978,26.06553892254117,[5.066098888673643],0.0,26.06553892254117,5.8746887104279075,0.22398503883788762,-0.16250175779997544,0.16250175779997544,0,0.0,6.032065249535088,0.0,0.0,6.032065249535088,,False,6.037190468227885,[],6.037190468227887,7.116402869126333,5.066098888673643,[5.623901111326357],0.0,5.066098888673643,4.450787599101552,0.3050545629127044,-1.5864028691263323,1.5864028691263323,0.0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227887,[],6.037190468227889,12.18250175779998,5.623901111326357,"[6.145311289572089, 6.037190468227889]",0.0,5.623901111326357,4.544688710427908,0.39831291850351647,-1.4925017577999782,1.492501757799979,0.0,0.0,0.0,11.247802222652714,0.0,11.247802222652714 -... -95,,False,6.130726446440085,[],6.130726446440086,7.5773708669114335,5.4680702998326325,[6.976644420471352],0.0,5.4680702998326325,5.043355579528652,0.9252643870000954,-1.0873708669114333,1.0873708669114333,0,0.0,40.3632065797524,0.0,0.0,40.3632065797524,,False,6.130726446440086,[],6.130726446440086,6.130726446440081,6.976644420471352,[4.686396819846024],0.0,6.976644420471352,5.530000000000006,0.8738544344297134,-0.6007264464400803,0.6007264464400803,0.0,0.0,0.0,27.90657768188541,0.0,27.90657768188541,,False,6.130726446440086,[],6.130726446440088,12.134329626594061,3.7919143161941378,"[6.003603180153982, 6.130726446440088]",0.0,4.686396819846024,4.686396819846024,0.8873690461055608,-1.4443296265940617,1.4443296265940617,0.0,0.0,0.0,9.372793639692048,0.0,9.372793639692048 -96,,False,5.560039692192106,[],5.560039692192106,6.160766138632187,6.976644420471352,[4.686396819846024],0.0,6.647410559103539,5.560039692192106,0.9261042237442303,0.32923386136781296,0.0,0,2.3046370295746907,0.0,0.0,0.0,2.3046370295746907,,False,5.560039692192106,[],5.560039692192106,7.004369318786162,4.686396819846024,[6.003603180153982],0.0,4.686396819846024,4.085670373405944,0.8723123560510794,-1.4743693187861622,1.4743693187861622,0.0,0.0,0.0,18.745587279384097,0.0,18.745587279384097,,False,5.560039692192106,[],5.560039692192106,11.690766138632183,6.003603180153982,"[6.130726446440088, 5.560039692192106]",0.0,6.003603180153982,4.559273553559921,0.8866300270843277,-1.0007661386321853,1.0007661386321853,0.0,0.0,0.0,12.007206360307965,0.0,12.007206360307965 -97,,False,4.381602699335917,[],4.381602699335917,5.855972018122081,4.686396819846024,[5.855972018122079],0.0,4.381602699335917,4.381602699335917,0.9267528775079436,0.63402798187792,0.0,0,4.43819587314544,0.0,0.0,0.0,4.43819587314544,,False,4.381602699335917,[],4.381602699335917,5.382368837968096,6.003603180153982,[5.3823688379681025],0.0,5.855972018122079,4.381602699335917,0.8734188064848402,0.14763116203190307,0.0,0.0,0.5905246481276123,0,23.423888072488317,0.0,24.01441272061593,,False,4.381602699335917,[],4.381602699335919,9.941642391528015,6.130726446440088,"[5.560039692192106, 4.381602699335919]",0.0,5.3823688379681025,4.381602699335917,0.8876017832155828,0.7483576084719852,0.0,0.0,1.4967152169439704,0,10.764737675936205,0.0,12.261452892880175 -98,,False,4.775201280806586,[],4.775201280806585,4.775201280806586,5.855972018122079,[4.775201280806585],0.0,4.775201280806586,4.775201280806586,0.9274469545198983,1.7147987191934133,0.0,0,12.003591034353892,0.0,0.0,0.0,12.003591034353892,,False,4.775201280806585,[],4.775201280806586,4.77520128080658,5.3823688379681025,[4.775201280806586],0.0,4.775201280806585,4.775201280806585,0.8746030168684653,0.7547987191934205,0.0,0.0,3.019194876773682,0,19.10080512322634,0.0,22.120000000000022,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,"[4.381602699335919, 4.775201280806584]",0.0,4.775201280806586,4.775201280806586,0.888642036779627,1.5331960198575052,0.0,0.0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182 -99,,False,7.215901450653069,[],7.21590145065307,7.21590145065307,4.775201280806585,[5.5300000000000065],0.0,6.489999999999998,6.489999999999998,0.9270510522666118,-0.7259014506530708,0.7259014506530708,0,0.0,26.945461848241987,0.0,0.0,26.945461848241987,,False,7.21590145065307,[],7.21590145065307,7.215901450653064,4.775201280806586,[5.914798719193424],0.0,5.5300000000000065,5.5300000000000065,0.8730941541446626,-1.6859014506530636,1.6859014506530636,0.0,0.0,0.0,22.120000000000026,0.0,22.120000000000026,,False,7.21590145065307,[],7.215901450653072,11.991102731459648,4.381602699335919,"[4.775201280806584, 7.215901450653072]",0.0,5.914798719193424,5.914798719193424,0.8876910003829541,-1.301102731459646,1.301102731459646,0.0,0.0,0.0,11.829597438386848,0.0,11.829597438386848 diff --git a/tests/additional_files/temp_TestWriteResults_test_example_6_1.txt b/tests/additional_files/temp_TestWriteResults_test_example_6_1.txt deleted file mode 100644 index 3000341..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_example_6_1.txt +++ /dev/null @@ -1,13 +0,0 @@ -t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC ---- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ------- -------------- --------- -------- ---------- -------------- --------------- -------- --------- ------ ----- --------- ------------- ------ --------- ----------- --------- --------- --------- -------------------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- -------- ----- -------- ------------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------- --------- --------- -------- ---------- ------------ ---------- ------- ---- -------- ----- -------- -0 | False 5.27627 [] 11.7663 11.7663 0 [0.0] 0 0 0 0 -5.27627 5.27627 0 0 195.855 0 0 195.855 | False 11.7663 [] 17.2963 17.2963 0 [0.0] 0 0 0 0 -11.7663 11.7663 0 0 0 0 0 0 | False 17.2963 [] 27.9863 27.9863 0 [0, 27.986265890021322] 0 0 0 0 -17.2963 17.2963 0 0 0 0 0 0 -1 | False 3.14537 [] 3.14537 14.9116 0 [0.0] 0 0 0 0 -8.42164 8.42164 0 0 312.611 0 0 312.611 | False 3.14537 [] 3.14537 20.4416 0 [0.0] 0 0 0 0 -14.9116 14.9116 0 0 0 0 0 0 | False 3.14537 [] 3.14537 31.1316 0 [27.986265890021322, 3.145371921193491] 0 0 0 0 -20.4416 20.4416 0 0 0 0 0 0 -2 | False 5.6239 [] 5.6239 20.5355 0 [0.0] 0 0 0 0 -14.0455 14.0455 0 0 521.37 0 0 521.37 | False 5.6239 [] 5.6239 26.0655 0 [26.06553892254117] 0 0 0 0 -20.5355 20.5355 0 0 0 0 0 0 | False 5.6239 [] 5.6239 8.76927 27.9863 [3.145371921193491, 5.623901111326357] 0 26.0655 5.6239 0.21576 1.92073 8.88178e-16 0 3.84145 0 52.1311 0 55.9725 -3 | False 6.14531 [] 6.14531 26.6809 0 [26.06553892254117] 0 0 0 0 -20.1909 20.1909 0 0 749.484 0 0 749.484 | False 6.14531 [] 6.14531 6.14531 26.0655 [5.066098888673643] 0 26.0655 5.53 0.207265 -0.615311 0.615311 0 0 0 104.262 0 104.262 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326357, 6.145311289572089] 0 5.0661 5.0661 0.331876 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 -4 | False 6.03719 [] 6.03719 6.6525 26.0655 [5.066098888673643] 0 26.0655 5.87469 0.223985 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326357] 0 5.0661 4.45079 0.305055 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572089, 6.037190468227889] 0 5.6239 4.54469 0.398313 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 -... -95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 5.46807 5.04336 0.925264 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 6.97664 5.53 0.873854 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 4.6864 4.6864 0.887369 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 -96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 6.64741 5.56004 0.926104 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 4.6864 4.08567 0.872312 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 6.0036 4.55927 0.88663 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 -97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122079] 0 4.3816 4.3816 0.926753 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 5.85597 4.3816 0.873419 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 5.38237 4.3816 0.887602 0.748358 0 0 1.49672 0 10.7647 0 12.2615 -98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 4.7752 4.7752 0.927447 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 4.7752 4.7752 0.874603 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 4.7752 4.7752 0.888642 1.5332 0 0 3.06639 0 9.5504 0 12.6168 -99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.5300000000000065] 0 6.49 6.49 0.927051 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 5.53 5.53 0.873094 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 5.9148 5.9148 0.887691 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/temp_TestWriteResults_test_periods_to_print.csv b/tests/additional_files/temp_TestWriteResults_test_periods_to_print.csv deleted file mode 100644 index ebf0569..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_periods_to_print.csv +++ /dev/null @@ -1,4 +0,0 @@ -t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC -2,,False,5.623901111326356,[],5.623901111326356,20.53553892254117,0.0,[0.0],0.0,0.0,0.0,0.0,-14.04553892254117,14.04553892254117,0,0.0,521.3704048047282,0.0,0.0,521.3704048047282,,False,5.623901111326356,[],5.623901111326355,26.06553892254117,0.0,[26.06553892254117],0.0,0.0,0.0,0.0,-20.53553892254117,20.53553892254117,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.623901111326355,[],5.623901111326357,8.769273032519848,27.986265890021322,"[3.145371921193491, 5.623901111326357]",0.0,26.06553892254117,5.623901111326354,0.21576001662727454,1.9207269674801521,8.881784197001252e-16,0.0,3.8414539349603043,0,52.13107784508234,0.0,55.972531780042644 -7,,False,4.637898661600952,[],4.637898661600951,6.230029769481679,6.145311289572089,[6.037190468227889],0.0,5.8853410590537685,4.637898661600952,0.44691957163047596,0.2599702305183209,0.0,0,1.8197916136282464,0.0,0.0,0.0,1.8197916136282464,,False,4.637898661600951,[],4.637898661600952,5.722839301253787,6.037190468227889,[5.722839301253794],0.0,6.037190468227889,4.445059360347163,0.4428887862743481,-0.19283930125378745,0.19283930125378745,0.0,0.0,0.0,24.148761872911557,0.0,24.148761872911557,,False,4.637898661600952,[],4.63789866160095,9.526200371472186,6.886638929781603,"[4.888301709871235, 4.63789866160095]",0.0,5.722839301253794,4.637898661600952,0.5182638476284692,1.1637996285278103,0.0,0.0,2.3275992570556205,0,11.445678602507588,0.0,13.773277859563208 -43,,False,4.305821103558777,[],4.3058211035587775,5.402292414882573,6.845413294824685,[3.8445867051753195],0.0,5.757705709707258,4.305821103558777,0.8694855956154881,1.0877075851174274,0.0,0,7.613953095821992,0.0,0.0,0.0,7.613953095821992,,False,4.3058211035587775,[],4.3058211035587775,7.087705709707255,3.8445867051753195,[7.087705709707265],0.0,3.8445867051753195,2.7481153938515215,0.8191846453959901,-1.557705709707256,1.557705709707256,0.0,0.0,0.0,15.378346820701278,0.0,15.378346820701278,,False,4.3058211035587775,[],4.305821103558779,9.43254831480432,8.345157394902943,"[5.126727211245548, 4.305821103558779]",0.0,7.087705709707265,4.3058211035587775,0.834206268959877,1.2574516851956776,0.0,0.0,2.5149033703913553,0,14.17541141941453,0.0,16.690314789805885 diff --git a/tests/additional_files/temp_TestWriteResults_test_periods_to_print.txt b/tests/additional_files/temp_TestWriteResults_test_periods_to_print.txt deleted file mode 100644 index 0f9aa2f..0000000 --- a/tests/additional_files/temp_TestWriteResults_test_periods_to_print.txt +++ /dev/null @@ -1,5 +0,0 @@ - t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC ---- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ------- -------------- --------- -------- ---------- -------------- --------------- ------- ------ ------ ----- --------- ------------- ------ --------- ----------- --------- --------- --------- ------------------- ------- --------- --------- -------- ---------- --------- ---------- ---- ---- ------- ----- ------- ------------- ------ --------- ----------- ----------- ----------- ----------- -------------------------------------- ------- --------- --------- -------- ------- ----------- ---------- ------- ---- ------- ----- ------- - 2 | False 5.6239 [] 5.6239 20.5355 0 [0.0] 0 0 0 0 -14.0455 14.0455 0 0 521.37 0 0 521.37 | False 5.6239 [] 5.6239 26.0655 0 [26.06553892254117] 0 0 0 0 -20.5355 20.5355 0 0 0 0 0 0 | False 5.6239 [] 5.6239 8.76927 27.9863 [3.145371921193491, 5.623901111326357] 0 26.0655 5.6239 0.21576 1.92073 8.88178e-16 0 3.84145 0 52.1311 0 55.9725 - 7 | False 4.6379 [] 4.6379 6.23003 6.14531 [6.037190468227889] 0 5.88534 4.6379 0.44692 0.25997 0 0 1.81979 0 0 0 1.81979 | False 4.6379 [] 4.6379 5.72284 6.03719 [5.722839301253794] 0 6.03719 4.44506 0.442889 -0.192839 0.192839 0 0 0 24.1488 0 24.1488 | False 4.6379 [] 4.6379 9.5262 6.88664 [4.888301709871235, 4.63789866160095] 0 5.72284 4.6379 0.518264 1.1638 0 0 2.3276 0 11.4457 0 13.7733 - 43 | False 4.30582 [] 4.30582 5.40229 6.84541 [3.8445867051753195] 0 5.75771 4.30582 0.869486 1.08771 0 0 7.61395 0 0 0 7.61395 | False 4.30582 [] 4.30582 7.08771 3.84459 [7.087705709707265] 0 3.84459 2.74812 0.819185 -1.55771 1.55771 0 0 0 15.3783 0 15.3783 | False 4.30582 [] 4.30582 9.43255 8.34516 [5.126727211245548, 4.305821103558779] 0 7.08771 4.30582 0.834206 1.25745 0 0 2.5149 0 14.1754 0 16.6903 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.csv new file mode 100644 index 0000000..1020ceb --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IL:-1000,TC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IL:-1,TC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IL:-2,TC +0,,5.276265890021318,5.276265890021318,1.2137341099786818,8.496138769850774,,5.276265890021318,5.276265890021318,0.25373410997868184,22.12,,5.276265890021318,5.276265890021318,5.413734109978681,21.38 +1,,3.1453719211934947,3.1453719211934947,3.3446280788065055,23.41239655164554,,3.1453719211934947,3.1453719211934947,2.3846280788065055,22.12,,3.1453719211934947,3.1453719211934947,2.2683621887851864,10.827468219957362 +2,,5.623901111326356,5.623901111326356,0.866098888673644,6.062692220715508,,5.623901111326356,5.623901111326356,-0.09390111132635592,22.12,,5.623901111326356,5.623901111326356,1.9207269674801486,15.08925615761301 +3,,6.14531128957209,6.145311289572089,0.250787599101554,1.755513193710878,,6.145311289572089,6.1453112895720885,-0.6153112895720891,22.495604445305425,,6.1453112895720885,6.145311289572087,-1.0792124008984452,10.132197777347287 +4,,6.037190468227883,6.037190468227883,-0.16250175779997278,6.032065249534989,,6.037190468227883,6.037190468227882,-1.5864028691263288,20.264395554694573,,6.037190468227882,6.037190468227884,-1.492501757799971,11.247802222652712 +... +95,,6.130726446440085,6.130726446440086,-1.0873708669114297,40.363206579752266,,6.130726446440086,6.130726446440086,-0.6007264464400839,27.90657768188541,,6.130726446440086,6.130726446440088,-1.4443296265940617,9.372793639692048 +96,,5.560039692192106,5.560039692192106,0.3292338613678165,2.3046370295747156,,5.560039692192106,5.560039692192106,-1.4743693187861657,18.745587279384097,,5.560039692192106,5.560039692192106,-1.0007661386321853,12.007206360307965 +97,,4.381602699335917,4.381602699335917,0.6340279818779235,4.438195873145465,,4.381602699335917,4.381602699335917,0.14763116203189952,24.01441272061593,,4.381602699335917,4.381602699335919,0.7483576084719852,12.261452892880175 +98,,4.775201280806586,4.775201280806585,1.7147987191934204,12.003591034353942,,4.775201280806585,4.775201280806586,0.7547987191934169,22.120000000000008,,4.775201280806586,4.775201280806584,1.5331960198575052,12.616794601328182 +99,,7.215901450653069,7.21590145065307,-0.7259014506530637,26.94546184824172,,7.21590145065307,7.21590145065307,-1.6859014506530672,22.12000000000001,,7.21590145065307,7.215901450653072,-1.301102731459646,11.829597438386848 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.txt new file mode 100644 index 0000000..c1605b0 --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IL:-1000 TC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IL:-1 TC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IL:-2 TC +--- ---------------- -------------- --------- ---------- -------- ------------- --------- --------- ---------- ------- ------------- --------- ----------- --------- -------- +0 | 5.27627 5.27627 1.21373 8.49614 | 5.27627 5.27627 0.253734 22.12 | 5.27627 5.27627 5.41373 21.38 +1 | 3.14537 3.14537 3.34463 23.4124 | 3.14537 3.14537 2.38463 22.12 | 3.14537 3.14537 2.26836 10.8275 +2 | 5.6239 5.6239 0.866099 6.06269 | 5.6239 5.6239 -0.0939011 22.12 | 5.6239 5.6239 1.92073 15.0893 +3 | 6.14531 6.14531 0.250788 1.75551 | 6.14531 6.14531 -0.615311 22.4956 | 6.14531 6.14531 -1.07921 10.1322 +4 | 6.03719 6.03719 -0.162502 6.03207 | 6.03719 6.03719 -1.5864 20.2644 | 6.03719 6.03719 -1.4925 11.2478 +... +95 | 6.13073 6.13073 -1.08737 40.3632 | 6.13073 6.13073 -0.600726 27.9066 | 6.13073 6.13073 -1.44433 9.37279 +96 | 5.56004 5.56004 0.329234 2.30464 | 5.56004 5.56004 -1.47437 18.7456 | 5.56004 5.56004 -1.00077 12.0072 +97 | 4.3816 4.3816 0.634028 4.4382 | 4.3816 4.3816 0.147631 24.0144 | 4.3816 4.3816 0.748358 12.2615 +98 | 4.7752 4.7752 1.7148 12.0036 | 4.7752 4.7752 0.754799 22.12 | 4.7752 4.7752 1.5332 12.6168 +99 | 7.2159 7.2159 -0.725901 26.9455 | 7.2159 7.2159 -1.6859 22.12 | 7.2159 7.2159 -1.3011 11.8296 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.csv new file mode 100644 index 0000000..6941633 --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,OS:EXT|-1000,IL:-1000,HC,SC,TC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,OS:0|-1,IL:-1,HC,SC,TC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,OS:1|-2,IL:-2,HC,SC,TC +0,,5.276265890021318,5.276265890021318,0,5.276265890021318,1.2137341099786818,8.496138769850774,0.0,8.496138769850774,,5.276265890021318,5.276265890021318,0,5.276265890021318,0.25373410997868184,1.0149364399147274,0,22.12,,5.276265890021318,5.276265890021318,0,5.276265890021318,5.413734109978681,10.827468219957362,0,21.38 +1,,3.1453719211934947,3.1453719211934947,5.276265890021318,3.1453719211934947,3.3446280788065055,23.41239655164554,0.0,23.41239655164554,,3.1453719211934947,3.1453719211934947,5.276265890021318,3.1453719211934947,2.3846280788065055,9.538512315226022,0,22.12,,3.1453719211934947,3.1453719211934947,0,3.1453719211934947,2.2683621887851864,4.536724377570373,0,10.827468219957362 +2,,5.623901111326356,5.623901111326356,3.1453719211934947,5.623901111326356,0.866098888673644,6.062692220715508,0.0,6.062692220715508,,5.623901111326356,5.623901111326356,3.1453719211934947,5.53,-0.09390111132635592,0.0,0.0,22.12,,5.623901111326356,5.623901111326356,5.276265890021318,5.623901111326356,1.9207269674801486,3.841453934960297,0,15.08925615761301 +3,,6.14531128957209,6.145311289572089,5.53,6.14531128957209,0.250787599101554,1.755513193710878,0.0,1.755513193710878,,6.145311289572089,6.1453112895720885,5.623901111326356,5.623901111326356,-0.6153112895720891,0.0,0.0,22.495604445305425,,6.1453112895720885,6.145311289572087,3.1453719211934947,5.066098888673643,-1.0792124008984452,0.0,0.0,10.132197777347287 +4,,6.037190468227883,6.037190468227883,5.623901111326356,5.87468871042791,-0.16250175779997278,0.0,6.032065249534989,6.032065249534989,,6.037190468227883,6.037190468227882,5.066098888673643,5.066098888673643,-1.5864028691263288,0.0,0.0,20.264395554694573,,6.037190468227882,6.037190468227884,5.623901111326356,5.623901111326356,-1.492501757799971,0.0,0.0,11.247802222652712 +... +95,,6.130726446440085,6.130726446440086,5.4680702998326325,5.4680702998326325,-1.0873708669114297,0.0,40.363206579752266,40.363206579752266,,6.130726446440086,6.130726446440086,6.976644420471352,6.976644420471352,-0.6007264464400839,0.0,0.0,27.90657768188541,,6.130726446440086,6.130726446440088,3.7919143161941378,4.686396819846024,-1.4443296265940617,0.0,0.0,9.372793639692048 +96,,5.560039692192106,5.560039692192106,6.976644420471352,6.647410559103536,0.3292338613678165,2.3046370295747156,0.0,2.3046370295747156,,5.560039692192106,5.560039692192106,4.686396819846024,4.686396819846024,-1.4743693187861657,0.0,0.0,18.745587279384097,,5.560039692192106,5.560039692192106,6.003603180153982,6.003603180153982,-1.0007661386321853,0.0,0.0,12.007206360307965 +97,,4.381602699335917,4.381602699335917,4.686396819846024,4.381602699335917,0.6340279818779235,4.438195873145465,0.0,4.438195873145465,,4.381602699335917,4.381602699335917,6.003603180153982,5.855972018122083,0.14763116203189952,0.5905246481275981,0,24.01441272061593,,4.381602699335917,4.381602699335919,6.130726446440088,5.3823688379681025,0.7483576084719852,1.4967152169439704,0,12.261452892880175 +98,,4.775201280806586,4.775201280806585,5.855972018122083,4.775201280806586,1.7147987191934204,12.003591034353942,0.0,12.003591034353942,,4.775201280806585,4.775201280806586,5.3823688379681025,4.775201280806585,0.7547987191934169,3.0191948767736676,0,22.120000000000008,,4.775201280806586,4.775201280806584,5.560039692192106,4.775201280806586,1.5331960198575052,3.0663920397150104,0,12.616794601328182 +99,,7.215901450653069,7.21590145065307,4.775201280806585,6.4900000000000055,-0.7259014506530637,0.0,26.94546184824172,26.94546184824172,,7.21590145065307,7.21590145065307,4.775201280806586,5.530000000000003,-1.6859014506530672,0.0,0.0,22.12000000000001,,7.21590145065307,7.215901450653072,4.381602699335919,5.914798719193424,-1.301102731459646,0.0,0.0,11.829597438386848 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.txt new file mode 100644 index 0000000..710b704 --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 OS:EXT|-1000 IL:-1000 HC SC TC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 OS:0|-1 IL:-1 HC SC TC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 OS:1|-2 IL:-2 HC SC TC +--- ---------------- -------------- --------- --------- -------------- ---------- -------- -------- -------- ------------- --------- --------- --------- --------- ---------- -------- ---- ------- ------------- --------- ----------- ----------- --------- --------- -------- ---- -------- +0 | 5.27627 5.27627 0 5.27627 1.21373 8.49614 0 8.49614 | 5.27627 5.27627 0 5.27627 0.253734 1.01494 0 22.12 | 5.27627 5.27627 0 5.27627 5.41373 10.8275 0 21.38 +1 | 3.14537 3.14537 5.27627 3.14537 3.34463 23.4124 0 23.4124 | 3.14537 3.14537 5.27627 3.14537 2.38463 9.53851 0 22.12 | 3.14537 3.14537 0 3.14537 2.26836 4.53672 0 10.8275 +2 | 5.6239 5.6239 3.14537 5.6239 0.866099 6.06269 0 6.06269 | 5.6239 5.6239 3.14537 5.53 -0.0939011 0 0 22.12 | 5.6239 5.6239 5.27627 5.6239 1.92073 3.84145 0 15.0893 +3 | 6.14531 6.14531 5.53 6.14531 0.250788 1.75551 0 1.75551 | 6.14531 6.14531 5.6239 5.6239 -0.615311 0 0 22.4956 | 6.14531 6.14531 3.14537 5.0661 -1.07921 0 0 10.1322 +4 | 6.03719 6.03719 5.6239 5.87469 -0.162502 0 6.03207 6.03207 | 6.03719 6.03719 5.0661 5.0661 -1.5864 0 0 20.2644 | 6.03719 6.03719 5.6239 5.6239 -1.4925 0 0 11.2478 +... +95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 0 40.3632 40.3632 | 6.13073 6.13073 6.97664 6.97664 -0.600726 0 0 27.9066 | 6.13073 6.13073 3.79191 4.6864 -1.44433 0 0 9.37279 +96 | 5.56004 5.56004 6.97664 6.64741 0.329234 2.30464 0 2.30464 | 5.56004 5.56004 4.6864 4.6864 -1.47437 0 0 18.7456 | 5.56004 5.56004 6.0036 6.0036 -1.00077 0 0 12.0072 +97 | 4.3816 4.3816 4.6864 4.3816 0.634028 4.4382 0 4.4382 | 4.3816 4.3816 6.0036 5.85597 0.147631 0.590525 0 24.0144 | 4.3816 4.3816 6.13073 5.38237 0.748358 1.49672 0 12.2615 +98 | 4.7752 4.7752 5.85597 4.7752 1.7148 12.0036 0 12.0036 | 4.7752 4.7752 5.38237 4.7752 0.754799 3.01919 0 22.12 | 4.7752 4.7752 5.56004 4.7752 1.5332 3.06639 0 12.6168 +99 | 7.2159 7.2159 4.7752 6.49 -0.725901 0 26.9455 26.9455 | 7.2159 7.2159 4.7752 5.53 -1.6859 0 0 22.12 | 7.2159 7.2159 4.3816 5.9148 -1.3011 0 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.csv new file mode 100644 index 0000000..5534ada --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,IDI:1|-1,OS:EXT|-1000,IL:-1000,SC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,IDI:2|-2,OS:0|-1,IL:-1,SC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,IDI:EXT|-3,OS:1|-2,IL:-2,SC +0,,5.276265890021318,5.276265890021318,0,0,5.276265890021318,1.2137341099786818,0.0,,5.276265890021318,5.276265890021318,0,0,5.276265890021318,0.25373410997868184,0,,5.276265890021318,5.276265890021318,0,0,5.276265890021318,5.413734109978681,0 +1,,3.1453719211934947,3.1453719211934947,5.276265890021318,0,3.1453719211934947,3.3446280788065055,0.0,,3.1453719211934947,3.1453719211934947,5.276265890021318,0,3.1453719211934947,2.3846280788065055,0,,3.1453719211934947,3.1453719211934947,0,0,3.1453719211934947,2.2683621887851864,0 +2,,5.623901111326356,5.623901111326356,3.1453719211934947,0,5.623901111326356,0.866098888673644,0.0,,5.623901111326356,5.623901111326356,3.1453719211934947,0,5.53,-0.09390111132635592,0.0,,5.623901111326356,5.623901111326356,5.276265890021318,0,5.623901111326356,1.9207269674801486,0 +3,,6.14531128957209,6.145311289572089,5.53,0,6.14531128957209,0.250787599101554,0.0,,6.145311289572089,6.1453112895720885,5.623901111326356,0,5.623901111326356,-0.6153112895720891,0.0,,6.1453112895720885,6.145311289572087,3.1453719211934947,0,5.066098888673643,-1.0792124008984452,0.0 +4,,6.037190468227883,6.037190468227883,5.623901111326356,0,5.87468871042791,-0.16250175779997278,6.032065249534989,,6.037190468227883,6.037190468227882,5.066098888673643,0,5.066098888673643,-1.5864028691263288,0.0,,6.037190468227882,6.037190468227884,5.623901111326356,0,5.623901111326356,-1.492501757799971,0.0 +... +95,,6.130726446440085,6.130726446440086,5.4680702998326325,0,5.4680702998326325,-1.0873708669114297,40.363206579752266,,6.130726446440086,6.130726446440086,6.976644420471352,0,6.976644420471352,-0.6007264464400839,0.0,,6.130726446440086,6.130726446440088,3.7919143161941378,0,4.686396819846024,-1.4443296265940617,0.0 +96,,5.560039692192106,5.560039692192106,6.976644420471352,0,6.647410559103536,0.3292338613678165,0.0,,5.560039692192106,5.560039692192106,4.686396819846024,0,4.686396819846024,-1.4743693187861657,0.0,,5.560039692192106,5.560039692192106,6.003603180153982,0,6.003603180153982,-1.0007661386321853,0.0 +97,,4.381602699335917,4.381602699335917,4.686396819846024,0,4.381602699335917,0.6340279818779235,0.0,,4.381602699335917,4.381602699335917,6.003603180153982,0,5.855972018122083,0.14763116203189952,0,,4.381602699335917,4.381602699335919,6.130726446440088,0,5.3823688379681025,0.7483576084719852,0 +98,,4.775201280806586,4.775201280806585,5.855972018122083,0,4.775201280806586,1.7147987191934204,0.0,,4.775201280806585,4.775201280806586,5.3823688379681025,0,4.775201280806585,0.7547987191934169,0,,4.775201280806586,4.775201280806584,5.560039692192106,0,4.775201280806586,1.5331960198575052,0 +99,,7.215901450653069,7.21590145065307,4.775201280806585,0,6.4900000000000055,-0.7259014506530637,26.94546184824172,,7.21590145065307,7.21590145065307,4.775201280806586,0,5.530000000000003,-1.6859014506530672,0.0,,7.21590145065307,7.215901450653072,4.381602699335919,0,5.914798719193424,-1.301102731459646,0.0 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.txt new file mode 100644 index 0000000..d215f07 --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 IDI:1|-1 OS:EXT|-1000 IL:-1000 SC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 IDI:2|-2 OS:0|-1 IL:-1 SC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 IDI:EXT|-3 OS:1|-2 IL:-2 SC +--- ---------------- -------------- --------- --------- ---------- -------------- ---------- -------- ------------- --------- --------- --------- ---------- --------- ---------- ---- ------------- --------- ----------- ----------- ------------ --------- --------- ---- +0 | 5.27627 5.27627 0 0 5.27627 1.21373 0 | 5.27627 5.27627 0 0 5.27627 0.253734 0 | 5.27627 5.27627 0 0 5.27627 5.41373 0 +1 | 3.14537 3.14537 5.27627 0 3.14537 3.34463 0 | 3.14537 3.14537 5.27627 0 3.14537 2.38463 0 | 3.14537 3.14537 0 0 3.14537 2.26836 0 +2 | 5.6239 5.6239 3.14537 0 5.6239 0.866099 0 | 5.6239 5.6239 3.14537 0 5.53 -0.0939011 0 | 5.6239 5.6239 5.27627 0 5.6239 1.92073 0 +3 | 6.14531 6.14531 5.53 0 6.14531 0.250788 0 | 6.14531 6.14531 5.6239 0 5.6239 -0.615311 0 | 6.14531 6.14531 3.14537 0 5.0661 -1.07921 0 +4 | 6.03719 6.03719 5.6239 0 5.87469 -0.162502 6.03207 | 6.03719 6.03719 5.0661 0 5.0661 -1.5864 0 | 6.03719 6.03719 5.6239 0 5.6239 -1.4925 0 +... +95 | 6.13073 6.13073 5.46807 0 5.46807 -1.08737 40.3632 | 6.13073 6.13073 6.97664 0 6.97664 -0.600726 0 | 6.13073 6.13073 3.79191 0 4.6864 -1.44433 0 +96 | 5.56004 5.56004 6.97664 0 6.64741 0.329234 0 | 5.56004 5.56004 4.6864 0 4.6864 -1.47437 0 | 5.56004 5.56004 6.0036 0 6.0036 -1.00077 0 +97 | 4.3816 4.3816 4.6864 0 4.3816 0.634028 0 | 4.3816 4.3816 6.0036 0 5.85597 0.147631 0 | 4.3816 4.3816 6.13073 0 5.38237 0.748358 0 +98 | 4.7752 4.7752 5.85597 0 4.7752 1.7148 0 | 4.7752 4.7752 5.38237 0 4.7752 0.754799 0 | 4.7752 4.7752 5.56004 0 4.7752 1.5332 0 +99 | 7.2159 7.2159 4.7752 0 6.49 -0.725901 26.9455 | 7.2159 7.2159 4.7752 0 5.53 -1.6859 0 | 7.2159 7.2159 4.3816 0 5.9148 -1.3011 0 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv new file mode 100644 index 0000000..90e932d --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,IDI:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,IDI:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC +0,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,1.0,1.2137341099786818,0,0,8.496138769850774,0.0,0.0,0.0,8.496138769850774,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,1.0,0.25373410997868184,0,0,1.0149364399147274,0,21.105063560085274,0.0,22.12,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,"[0, 5.276265890021318]",0,0.0,5.276265890021318,5.276265890021318,1.0,5.413734109978681,0,0,10.827468219957362,0,10.552531780042637,0.0,21.38 +1,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,1.0,3.3446280788065055,0,0,23.41239655164554,0.0,0.0,0.0,23.41239655164554,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,1.0,2.3846280788065055,0,0,9.538512315226022,0,12.581487684773979,0.0,22.12,,False,3.1453719211934947,[],3.1453719211934947,8.421637811214813,0,"[5.276265890021318, 3.1453719211934947]",0,0.0,3.1453719211934947,3.1453719211934947,1.0,2.2683621887851864,0,0,4.536724377570373,0,6.2907438423869895,0.0,10.827468219957362 +2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0,0.0,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0,0.0,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0,0.0,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 +3,,False,6.14531128957209,[],6.145311289572089,6.239212400898446,5.53,[5.623901111326356],0,0.0,6.14531128957209,6.14531128957209,1.0,0.250787599101554,0,0,1.755513193710878,0.0,0.0,0.0,1.755513193710878,,False,6.145311289572089,[],6.1453112895720885,6.14531128957209,5.623901111326356,[5.066098888673643],0,0.0,5.623901111326356,5.53,0.9648745647930684,-0.6153112895720891,0.6153112895720891,0,0.0,0.0,22.495604445305425,0.0,22.495604445305425,,False,6.1453112895720885,[],6.145311289572087,11.769212400898443,3.1453719211934947,"[5.623901111326356, 6.145311289572087]",0,0.0,5.066098888673643,5.066098888673643,0.9465494325617361,-1.0792124008984452,1.0792124008984452,0,0.0,0.0,10.132197777347287,0.0,10.132197777347287 +4,,False,6.037190468227883,[],6.037190468227883,6.652501757799973,5.623901111326356,[5.066098888673643],0,0.0,5.87468871042791,5.87468871042791,0.993804273838809,-0.16250175779997278,0.16250175779997278,0,0.0,6.032065249534989,0.0,0.0,6.032065249534989,,False,6.037190468227883,[],6.037190468227882,7.116402869126329,5.066098888673643,[5.623901111326356],0,0.0,5.066098888673643,4.450787599101554,0.9124747708758353,-1.5864028691263288,1.5864028691263288,0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227882,[],6.037190468227884,12.18250175779997,5.623901111326356,"[6.145311289572087, 6.037190468227884]",0,0.0,5.623901111326356,4.544688710427911,0.9019479117772604,-1.492501757799971,1.492501757799971,0,0.0,0.0,11.247802222652712,0.0,11.247802222652712 +... +95,,False,6.130726446440085,[],6.130726446440086,7.57737086691143,5.4680702998326325,[6.976644420471352],0,0.0,5.4680702998326325,5.043355579528655,0.9665360502301662,-1.0873708669114297,1.0873708669114297,0,0.0,40.363206579752266,0.0,0.0,40.363206579752266,,False,6.130726446440086,[],6.130726446440086,6.130726446440084,6.976644420471352,[4.686396819846024],0,0.0,6.976644420471352,5.530000000000002,0.9139652719144801,-0.6007264464400839,0.6007264464400839,0,0.0,0.0,27.90657768188541,0.0,27.90657768188541,,False,6.130726446440086,[],6.130726446440088,12.134329626594061,3.7919143161941378,"[6.003603180153982, 6.130726446440088]",0,0.0,4.686396819846024,4.686396819846024,0.9263860172792653,-1.4443296265940617,1.4443296265940617,0,0.0,0.0,9.372793639692048,0.0,9.372793639692048 +96,,False,5.560039692192106,[],5.560039692192106,6.160766138632184,6.976644420471352,[4.686396819846024],0,0.0,6.647410559103536,5.560039692192106,0.9669120992580992,0.3292338613678165,0.0,0,2.3046370295747156,0.0,0.0,0.0,2.3046370295747156,,False,5.560039692192106,[],5.560039692192106,7.004369318786166,4.686396819846024,[6.003603180153982],0,0.0,4.686396819846024,4.08567037340594,0.9119522231043865,-1.4743693187861657,1.4743693187861657,0,0.0,0.0,18.745587279384097,0.0,18.745587279384097,,False,5.560039692192106,[],5.560039692192106,11.690766138632183,6.003603180153982,"[6.130726446440088, 5.560039692192106]",0,0.0,6.003603180153982,4.559273553559921,0.9251905939878785,-1.0007661386321853,1.0007661386321853,0,0.0,0.0,12.007206360307965,0.0,12.007206360307965 +97,,False,4.381602699335917,[],4.381602699335917,5.855972018122078,4.686396819846024,[5.855972018122083],0,0.0,4.381602699335917,4.381602699335917,0.9672025433462068,0.6340279818779235,0.0,0,4.438195873145465,0.0,0.0,0.0,4.438195873145465,,False,4.381602699335917,[],4.381602699335917,5.3823688379681,6.003603180153982,[5.3823688379681025],0,0.0,5.855972018122083,4.381602699335917,0.912725102486183,0.14763116203189952,0.0,0,0.5905246481275981,0,23.42388807248833,0.0,24.01441272061593,,False,4.381602699335917,[],4.381602699335919,9.941642391528015,6.130726446440088,"[5.560039692192106, 4.381602699335919]",0,0.0,5.3823688379681025,4.381602699335917,0.9258472675520476,0.7483576084719852,0.0,0,1.4967152169439704,0,10.764737675936205,0.0,12.261452892880175 +98,,False,4.775201280806586,[],4.775201280806585,4.775201280806579,5.855972018122083,[4.775201280806585],0,0.0,4.775201280806586,4.775201280806586,0.9675133263495452,1.7147987191934204,0.0,0,12.003591034353942,0.0,0.0,0.0,12.003591034353942,,False,4.775201280806585,[],4.775201280806586,4.775201280806583,5.3823688379681025,[4.775201280806586],0,0.0,4.775201280806585,4.775201280806585,0.9135521042580494,0.7547987191934169,0.0,0,3.0191948767736676,0,19.10080512322634,0.0,22.120000000000008,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,"[4.381602699335919, 4.775201280806584]",0,0.0,4.775201280806586,4.775201280806586,0.9265499259666677,1.5331960198575052,0.0,0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182 +99,,False,7.215901450653069,[],7.21590145065307,7.215901450653063,4.775201280806585,[5.530000000000003],0,0.0,6.4900000000000055,6.4900000000000055,0.9665518084518686,-0.7259014506530637,0.7259014506530637,0,0.0,26.94546184824172,0.0,0.0,26.94546184824172,,False,7.21590145065307,[],7.21590145065307,7.215901450653067,4.775201280806586,[5.914798719193424],0,0.0,5.530000000000003,5.530000000000003,0.9114742407752131,-1.6859014506530672,1.6859014506530672,0,0.0,0.0,22.12000000000001,0.0,22.12000000000001,,False,7.21590145065307,[],7.215901450653072,11.991102731459648,4.381602699335919,"[4.775201280806584, 7.215901450653072]",0,0.0,5.914798719193424,5.914798719193424,0.9250413810029866,-1.301102731459646,1.301102731459646,0,0.0,0.0,11.829597438386848,0.0,11.829597438386848 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt new file mode 100644 index 0000000..98abe2f --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 IDI:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 IDI:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 IDI:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC +--- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ---------- ------- -------------- --------- -------- ---------- -------------- --------------- -------- -------- ------ ----- -------- ------------- ------ --------- ----------- --------- --------- --------- -------------------- ---------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------------ ------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- +0 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 0 [0, 5.276265890021318] 0 0 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 +1 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 0 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 +2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 +3 | False 6.14531 [] 6.14531 6.23921 5.53 [5.623901111326356] 0 0 6.14531 6.14531 1 0.250788 0 0 1.75551 0 0 0 1.75551 | False 6.14531 [] 6.14531 6.14531 5.6239 [5.066098888673643] 0 0 5.6239 5.53 0.964875 -0.615311 0.615311 0 0 0 22.4956 0 22.4956 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326356, 6.145311289572087] 0 0 5.0661 5.0661 0.946549 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 +4 | False 6.03719 [] 6.03719 6.6525 5.6239 [5.066098888673643] 0 0 5.87469 5.87469 0.993804 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326356] 0 0 5.0661 4.45079 0.912475 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572087, 6.037190468227884] 0 0 5.6239 4.54469 0.901948 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 +... +95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 0 5.46807 5.04336 0.966536 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 0 6.97664 5.53 0.913965 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 0 4.6864 4.6864 0.926386 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 +96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 0 6.64741 5.56004 0.966912 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 0 4.6864 4.08567 0.911952 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 0 6.0036 4.55927 0.925191 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 +97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122083] 0 0 4.3816 4.3816 0.967203 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 0 5.85597 4.3816 0.912725 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 0 5.38237 4.3816 0.925847 0.748358 0 0 1.49672 0 10.7647 0 12.2615 +98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 0 4.7752 4.7752 0.967513 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 0 4.7752 4.7752 0.913552 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 0 4.7752 4.7752 0.92655 1.5332 0 0 3.06639 0 9.5504 0 12.6168 +99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.530000000000003] 0 0 6.49 6.49 0.966552 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 0 5.53 5.53 0.911474 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 0 5.9148 5.9148 0.925041 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.csv new file mode 100644 index 0000000..e158e2c --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,OS:EXT|-1000,IL:-1000,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,OS:0|-1,IL:-1,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,OS:1|-2,IL:-2 +0,,5.276265890021318,5.276265890021318,0,5.276265890021318,1.2137341099786818,,5.276265890021318,5.276265890021318,0,5.276265890021318,0.25373410997868184,,5.276265890021318,5.276265890021318,0,5.276265890021318,5.413734109978681 +1,,3.1453719211934947,3.1453719211934947,5.276265890021318,3.1453719211934947,3.3446280788065055,,3.1453719211934947,3.1453719211934947,5.276265890021318,3.1453719211934947,2.3846280788065055,,3.1453719211934947,3.1453719211934947,0,3.1453719211934947,2.2683621887851864 +2,,5.623901111326356,5.623901111326356,3.1453719211934947,5.623901111326356,0.866098888673644,,5.623901111326356,5.623901111326356,3.1453719211934947,5.53,-0.09390111132635592,,5.623901111326356,5.623901111326356,5.276265890021318,5.623901111326356,1.9207269674801486 +3,,6.14531128957209,6.145311289572089,5.53,6.14531128957209,0.250787599101554,,6.145311289572089,6.1453112895720885,5.623901111326356,5.623901111326356,-0.6153112895720891,,6.1453112895720885,6.145311289572087,3.1453719211934947,5.066098888673643,-1.0792124008984452 +4,,6.037190468227883,6.037190468227883,5.623901111326356,5.87468871042791,-0.16250175779997278,,6.037190468227883,6.037190468227882,5.066098888673643,5.066098888673643,-1.5864028691263288,,6.037190468227882,6.037190468227884,5.623901111326356,5.623901111326356,-1.492501757799971 +... +95,,6.130726446440085,6.130726446440086,5.4680702998326325,5.4680702998326325,-1.0873708669114297,,6.130726446440086,6.130726446440086,6.976644420471352,6.976644420471352,-0.6007264464400839,,6.130726446440086,6.130726446440088,3.7919143161941378,4.686396819846024,-1.4443296265940617 +96,,5.560039692192106,5.560039692192106,6.976644420471352,6.647410559103536,0.3292338613678165,,5.560039692192106,5.560039692192106,4.686396819846024,4.686396819846024,-1.4743693187861657,,5.560039692192106,5.560039692192106,6.003603180153982,6.003603180153982,-1.0007661386321853 +97,,4.381602699335917,4.381602699335917,4.686396819846024,4.381602699335917,0.6340279818779235,,4.381602699335917,4.381602699335917,6.003603180153982,5.855972018122083,0.14763116203189952,,4.381602699335917,4.381602699335919,6.130726446440088,5.3823688379681025,0.7483576084719852 +98,,4.775201280806586,4.775201280806585,5.855972018122083,4.775201280806586,1.7147987191934204,,4.775201280806585,4.775201280806586,5.3823688379681025,4.775201280806585,0.7547987191934169,,4.775201280806586,4.775201280806584,5.560039692192106,4.775201280806586,1.5331960198575052 +99,,7.215901450653069,7.21590145065307,4.775201280806585,6.4900000000000055,-0.7259014506530637,,7.21590145065307,7.21590145065307,4.775201280806586,5.530000000000003,-1.6859014506530672,,7.21590145065307,7.215901450653072,4.381602699335919,5.914798719193424,-1.301102731459646 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.txt new file mode 100644 index 0000000..79e714a --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 OS:EXT|-1000 IL:-1000 | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 OS:0|-1 IL:-1 | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 OS:1|-2 IL:-2 +--- ---------------- -------------- --------- --------- -------------- ---------- ------------- --------- --------- --------- --------- ---------- ------------- --------- ----------- ----------- --------- --------- +0 | 5.27627 5.27627 0 5.27627 1.21373 | 5.27627 5.27627 0 5.27627 0.253734 | 5.27627 5.27627 0 5.27627 5.41373 +1 | 3.14537 3.14537 5.27627 3.14537 3.34463 | 3.14537 3.14537 5.27627 3.14537 2.38463 | 3.14537 3.14537 0 3.14537 2.26836 +2 | 5.6239 5.6239 3.14537 5.6239 0.866099 | 5.6239 5.6239 3.14537 5.53 -0.0939011 | 5.6239 5.6239 5.27627 5.6239 1.92073 +3 | 6.14531 6.14531 5.53 6.14531 0.250788 | 6.14531 6.14531 5.6239 5.6239 -0.615311 | 6.14531 6.14531 3.14537 5.0661 -1.07921 +4 | 6.03719 6.03719 5.6239 5.87469 -0.162502 | 6.03719 6.03719 5.0661 5.0661 -1.5864 | 6.03719 6.03719 5.6239 5.6239 -1.4925 +... +95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 | 6.13073 6.13073 6.97664 6.97664 -0.600726 | 6.13073 6.13073 3.79191 4.6864 -1.44433 +96 | 5.56004 5.56004 6.97664 6.64741 0.329234 | 5.56004 5.56004 4.6864 4.6864 -1.47437 | 5.56004 5.56004 6.0036 6.0036 -1.00077 +97 | 4.3816 4.3816 4.6864 4.3816 0.634028 | 4.3816 4.3816 6.0036 5.85597 0.147631 | 4.3816 4.3816 6.13073 5.38237 0.748358 +98 | 4.7752 4.7752 5.85597 4.7752 1.7148 | 4.7752 4.7752 5.38237 4.7752 0.754799 | 4.7752 4.7752 5.56004 4.7752 1.5332 +99 | 7.2159 7.2159 4.7752 6.49 -0.725901 | 7.2159 7.2159 4.7752 5.53 -1.6859 | 7.2159 7.2159 4.3816 5.9148 -1.3011 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv new file mode 100644 index 0000000..8e68229 --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv @@ -0,0 +1,12 @@ +t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC +0,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0.0,5.276265890021318,5.276265890021318,1.0,1.2137341099786818,0,0,8.496138769850774,0.0,0.0,0.0,8.496138769850774,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0.0,5.276265890021318,5.276265890021318,1.0,0.25373410997868184,0,0,1.0149364399147274,0,21.105063560085274,0.0,22.12,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,"[0, 5.276265890021318]",0.0,5.276265890021318,5.276265890021318,1.0,5.413734109978681,0,0,10.827468219957362,0,10.552531780042637,0.0,21.38 +1,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0.0,3.1453719211934947,3.1453719211934947,1.0,3.3446280788065055,0,0,23.41239655164554,0.0,0.0,0.0,23.41239655164554,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0.0,3.1453719211934947,3.1453719211934947,1.0,2.3846280788065055,0,0,9.538512315226022,0,12.581487684773979,0.0,22.12,,False,3.1453719211934947,[],3.1453719211934947,8.421637811214813,0,"[5.276265890021318, 3.1453719211934947]",0.0,3.1453719211934947,3.1453719211934947,1.0,2.2683621887851864,0,0,4.536724377570373,0,6.2907438423869895,0.0,10.827468219957362 +2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0.0,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0.0,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0.0,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 +3,,False,6.14531128957209,[],6.145311289572089,6.239212400898446,5.53,[5.623901111326356],0.0,6.14531128957209,6.14531128957209,1.0,0.250787599101554,0,0,1.755513193710878,0.0,0.0,0.0,1.755513193710878,,False,6.145311289572089,[],6.1453112895720885,6.14531128957209,5.623901111326356,[5.066098888673643],0.0,5.623901111326356,5.53,0.9648745647930684,-0.6153112895720891,0.6153112895720891,0,0.0,0.0,22.495604445305425,0.0,22.495604445305425,,False,6.1453112895720885,[],6.145311289572087,11.769212400898443,3.1453719211934947,"[5.623901111326356, 6.145311289572087]",0.0,5.066098888673643,5.066098888673643,0.9465494325617361,-1.0792124008984452,1.0792124008984452,0,0.0,0.0,10.132197777347287,0.0,10.132197777347287 +4,,False,6.037190468227883,[],6.037190468227883,6.652501757799973,5.623901111326356,[5.066098888673643],0.0,5.87468871042791,5.87468871042791,0.993804273838809,-0.16250175779997278,0.16250175779997278,0,0.0,6.032065249534989,0.0,0.0,6.032065249534989,,False,6.037190468227883,[],6.037190468227882,7.116402869126329,5.066098888673643,[5.623901111326356],0.0,5.066098888673643,4.450787599101554,0.9124747708758353,-1.5864028691263288,1.5864028691263288,0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227882,[],6.037190468227884,12.18250175779997,5.623901111326356,"[6.145311289572087, 6.037190468227884]",0.0,5.623901111326356,4.544688710427911,0.9019479117772604,-1.492501757799971,1.492501757799971,0,0.0,0.0,11.247802222652712,0.0,11.247802222652712 +... +95,,False,6.130726446440085,[],6.130726446440086,7.57737086691143,5.4680702998326325,[6.976644420471352],0.0,5.4680702998326325,5.043355579528655,0.9665360502301662,-1.0873708669114297,1.0873708669114297,0,0.0,40.363206579752266,0.0,0.0,40.363206579752266,,False,6.130726446440086,[],6.130726446440086,6.130726446440084,6.976644420471352,[4.686396819846024],0.0,6.976644420471352,5.530000000000002,0.9139652719144801,-0.6007264464400839,0.6007264464400839,0,0.0,0.0,27.90657768188541,0.0,27.90657768188541,,False,6.130726446440086,[],6.130726446440088,12.134329626594061,3.7919143161941378,"[6.003603180153982, 6.130726446440088]",0.0,4.686396819846024,4.686396819846024,0.9263860172792653,-1.4443296265940617,1.4443296265940617,0,0.0,0.0,9.372793639692048,0.0,9.372793639692048 +96,,False,5.560039692192106,[],5.560039692192106,6.160766138632184,6.976644420471352,[4.686396819846024],0.0,6.647410559103536,5.560039692192106,0.9669120992580992,0.3292338613678165,0.0,0,2.3046370295747156,0.0,0.0,0.0,2.3046370295747156,,False,5.560039692192106,[],5.560039692192106,7.004369318786166,4.686396819846024,[6.003603180153982],0.0,4.686396819846024,4.08567037340594,0.9119522231043865,-1.4743693187861657,1.4743693187861657,0,0.0,0.0,18.745587279384097,0.0,18.745587279384097,,False,5.560039692192106,[],5.560039692192106,11.690766138632183,6.003603180153982,"[6.130726446440088, 5.560039692192106]",0.0,6.003603180153982,4.559273553559921,0.9251905939878785,-1.0007661386321853,1.0007661386321853,0,0.0,0.0,12.007206360307965,0.0,12.007206360307965 +97,,False,4.381602699335917,[],4.381602699335917,5.855972018122078,4.686396819846024,[5.855972018122083],0.0,4.381602699335917,4.381602699335917,0.9672025433462068,0.6340279818779235,0.0,0,4.438195873145465,0.0,0.0,0.0,4.438195873145465,,False,4.381602699335917,[],4.381602699335917,5.3823688379681,6.003603180153982,[5.3823688379681025],0.0,5.855972018122083,4.381602699335917,0.912725102486183,0.14763116203189952,0.0,0,0.5905246481275981,0,23.42388807248833,0.0,24.01441272061593,,False,4.381602699335917,[],4.381602699335919,9.941642391528015,6.130726446440088,"[5.560039692192106, 4.381602699335919]",0.0,5.3823688379681025,4.381602699335917,0.9258472675520476,0.7483576084719852,0.0,0,1.4967152169439704,0,10.764737675936205,0.0,12.261452892880175 +98,,False,4.775201280806586,[],4.775201280806585,4.775201280806579,5.855972018122083,[4.775201280806585],0.0,4.775201280806586,4.775201280806586,0.9675133263495452,1.7147987191934204,0.0,0,12.003591034353942,0.0,0.0,0.0,12.003591034353942,,False,4.775201280806585,[],4.775201280806586,4.775201280806583,5.3823688379681025,[4.775201280806586],0.0,4.775201280806585,4.775201280806585,0.9135521042580494,0.7547987191934169,0.0,0,3.0191948767736676,0,19.10080512322634,0.0,22.120000000000008,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,"[4.381602699335919, 4.775201280806584]",0.0,4.775201280806586,4.775201280806586,0.9265499259666677,1.5331960198575052,0.0,0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182 +99,,False,7.215901450653069,[],7.21590145065307,7.215901450653063,4.775201280806585,[5.530000000000003],0.0,6.4900000000000055,6.4900000000000055,0.9665518084518686,-0.7259014506530637,0.7259014506530637,0,0.0,26.94546184824172,0.0,0.0,26.94546184824172,,False,7.21590145065307,[],7.21590145065307,7.215901450653067,4.775201280806586,[5.914798719193424],0.0,5.530000000000003,5.530000000000003,0.9114742407752131,-1.6859014506530672,1.6859014506530672,0,0.0,0.0,22.12000000000001,0.0,22.12000000000001,,False,7.21590145065307,[],7.215901450653072,11.991102731459648,4.381602699335919,"[4.775201280806584, 7.215901450653072]",0.0,5.914798719193424,5.914798719193424,0.9250413810029866,-1.301102731459646,1.301102731459646,0,0.0,0.0,11.829597438386848,0.0,11.829597438386848 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt new file mode 100644 index 0000000..0ce37e8 --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt @@ -0,0 +1,13 @@ +t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC +--- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ------- -------------- --------- -------- ---------- -------------- --------------- -------- -------- ------ ----- -------- ------------- ------ --------- ----------- --------- --------- --------- -------------------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- +0 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 0 [0, 5.276265890021318] 0 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 +1 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 +2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 +3 | False 6.14531 [] 6.14531 6.23921 5.53 [5.623901111326356] 0 6.14531 6.14531 1 0.250788 0 0 1.75551 0 0 0 1.75551 | False 6.14531 [] 6.14531 6.14531 5.6239 [5.066098888673643] 0 5.6239 5.53 0.964875 -0.615311 0.615311 0 0 0 22.4956 0 22.4956 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326356, 6.145311289572087] 0 5.0661 5.0661 0.946549 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 +4 | False 6.03719 [] 6.03719 6.6525 5.6239 [5.066098888673643] 0 5.87469 5.87469 0.993804 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326356] 0 5.0661 4.45079 0.912475 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572087, 6.037190468227884] 0 5.6239 4.54469 0.901948 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 +... +95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 5.46807 5.04336 0.966536 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 6.97664 5.53 0.913965 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 4.6864 4.6864 0.926386 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 +96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 6.64741 5.56004 0.966912 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 4.6864 4.08567 0.911952 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 6.0036 4.55927 0.925191 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 +97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122083] 0 4.3816 4.3816 0.967203 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 5.85597 4.3816 0.912725 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 5.38237 4.3816 0.925847 0.748358 0 0 1.49672 0 10.7647 0 12.2615 +98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 4.7752 4.7752 0.967513 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 4.7752 4.7752 0.913552 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 4.7752 4.7752 0.92655 1.5332 0 0 3.06639 0 9.5504 0 12.6168 +99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.530000000000003] 0 6.49 6.49 0.966552 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 5.53 5.53 0.911474 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 5.9148 5.9148 0.925041 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv new file mode 100644 index 0000000..22aba41 --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv @@ -0,0 +1,4 @@ +t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC +2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0.0,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0.0,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0.0,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 +7,,False,4.637898661600952,[],4.637898661600952,6.23002976948168,6.145311289572087,[6.037190468227884],0.0,5.885341059053767,4.637898661600952,0.9204288008215301,0.25997023051832,0.0,0,1.8197916136282402,0.0,0.0,0.0,1.8197916136282402,,False,4.637898661600952,[],4.637898661600952,5.722839301253796,6.037190468227884,[5.722839301253794],0.0,6.037190468227884,4.445059360347156,0.8374863190034552,-0.19283930125379545,0.19283930125379545,0,0.0,0.0,24.148761872911535,0.0,24.148761872911535,,False,4.637898661600952,[],4.637898661600953,9.526200371472186,6.886638929781608,"[4.888301709871232, 4.637898661600953]",0.0,5.722839301253794,4.637898661600952,0.8618582871905256,1.1637996285278138,0.0,0,2.3275992570556276,0,11.445678602507588,0.0,13.773277859563215 +43,,False,4.305821103558777,[],4.305821103558777,5.402292414882582,6.845413294824678,[3.8445867051753195],0.0,5.75770570970726,4.305821103558777,0.9602399216477591,1.0877075851174185,0.0,0,7.6139530958219295,0.0,0.0,0.0,7.6139530958219295,,False,4.305821103558777,[],4.305821103558777,7.087705709707268,3.8445867051753195,[7.0877057097072695],0.0,3.8445867051753195,2.748115393851509,0.9057915787473153,-1.5577057097072675,1.5577057097072675,0,0.0,0.0,15.378346820701278,0.0,15.378346820701278,,False,4.305821103558777,[],4.30582110355878,9.432548314804329,8.345157394902941,"[5.126727211245546, 4.30582110355878]",0.0,7.0877057097072695,4.305821103558777,0.917130372459522,1.2574516851956714,0.0,0,2.514903370391343,0,14.175411419414539,0.0,16.690314789805882 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt new file mode 100644 index 0000000..de8777c --- /dev/null +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt @@ -0,0 +1,5 @@ + t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC +--- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ------- -------------- --------- -------- ---------- -------------- --------------- ------- ---- ------ ----- ------- ------------- ------ --------- ----------- --------- --------- --------- -------------------- ------- --------- --------- -------- ---------- --------- ---------- ---- ---- ------- ----- ------- ------------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------- --------- --------- -------- ------- --------- ---------- ------- ---- ------- ----- ------- + 2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 + 7 | False 4.6379 [] 4.6379 6.23003 6.14531 [6.037190468227884] 0 5.88534 4.6379 0.920429 0.25997 0 0 1.81979 0 0 0 1.81979 | False 4.6379 [] 4.6379 5.72284 6.03719 [5.722839301253794] 0 6.03719 4.44506 0.837486 -0.192839 0.192839 0 0 0 24.1488 0 24.1488 | False 4.6379 [] 4.6379 9.5262 6.88664 [4.888301709871232, 4.637898661600953] 0 5.72284 4.6379 0.861858 1.1638 0 0 2.3276 0 11.4457 0 13.7733 + 43 | False 4.30582 [] 4.30582 5.40229 6.84541 [3.8445867051753195] 0 5.75771 4.30582 0.96024 1.08771 0 0 7.61395 0 0 0 7.61395 | False 4.30582 [] 4.30582 7.08771 3.84459 [7.0877057097072695] 0 3.84459 2.74812 0.905792 -1.55771 1.55771 0 0 0 15.3783 0 15.3783 | False 4.30582 [] 4.30582 9.43255 8.34516 [5.126727211245546, 4.30582110355878] 0 7.08771 4.30582 0.91713 1.25745 0 0 2.5149 0 14.1754 0 16.6903 \ No newline at end of file diff --git a/tests/test_sim_io.py b/tests/test_sim_io.py index 1961dda..b02f708 100644 --- a/tests/test_sim_io.py +++ b/tests/test_sim_io.py @@ -48,11 +48,6 @@ def test_example_6_1(self): # reindex nodes to 2 -> 1 -> 0 network.reindex_nodes({1: 0, 2: 1, 3: 2}) - # Set initial inventory levels to 0. (Tests below were built with this assumption, but subsequent - # changes in code changed the default initial IL.) - for node in network.nodes: - node.initial_inventory_level = 0 - # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) filename_root = 'tests/additional_files/temp_TestWriteResults_test_example_6_1' @@ -60,40 +55,37 @@ def test_example_6_1(self): csv_filename = filename_root + '.csv' cols_to_print = ['DISR', 'IO', 'IOPL', 'OQ', 'OO', 'IS', 'ISPL', 'RM', 'OS', 'DMFS', 'FR', 'IL', 'BO', 'ODI', 'HC', 'SC', 'ITHC', 'REV', 'TC'] - sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print=cols_to_print, - write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) - - row0_txt = 't | i=0 DISR IO:EXT IOPL:EXT OQ:1 OO:1 IS:1 ISPL:1 RM:1 OS:EXT DMFS FR IL BO:EXT ODI:EXT HC SC ITHC REV TC | i=1 DISR IO:0 IOPL:0 OQ:2 OO:2 IS:2 ISPL:2 RM:2 OS:0 DMFS FR IL BO:0 ODI:0 HC SC ITHC REV TC | i=2 DISR IO:1 IOPL:1 OQ:EXT OO:EXT IS:EXT ISPL:EXT RM:EXT OS:1 DMFS FR IL BO:1 ODI:1 HC SC ITHC REV TC' - row1_txt = '--- ------- ------ -------- ---------- -------- -------- -------- -------------------- ------ -------- ------- -------- ---------- --------- --------- -------- --------- ------ ----- --------- ------- ------ -------- -------- -------- -------- -------- -------------------- ------ -------- ------- -------- ---------- --------- ------- -------- ---- -------- ----- -------- ------- ------ -------- -------- -------- -------- -------- --------------------------------------- -------- -------- ------- -------- ---------- ------------ ------- ------- ---- -------- ----- --------' - row6_txt = '4 | False 6.03719 [] 6.03719 6.6525 26.0655 [5.066098888673643] 0 26.0655 5.87469 0.223985 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326357] 0 5.0661 4.45079 0.305055 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572089, 6.037190468227889] 0 5.6239 4.54469 0.398313 -1.4925 1.4925 0 0 0 11.2478 0 11.2478' - row11_txt = '98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 4.7752 4.7752 0.927447 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 4.7752 4.7752 0.874603 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 4.7752 4.7752 0.888642 1.5332 0 0 3.06639 0 9.5504 0 12.6168' - - row0 = 't,i=0,DISR,IO:EXT,IOPL:EXT,OQ:1,OO:1,IS:1,ISPL:1,RM:1,OS:EXT,DMFS,FR,IL,BO:EXT,ODI:EXT,HC,SC,ITHC,REV,TC,i=1,DISR,IO:0,IOPL:0,OQ:2,OO:2,IS:2,ISPL:2,RM:2,OS:0,DMFS,FR,IL,BO:0,ODI:0,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1,IOPL:1,OQ:EXT,OO:EXT,IS:EXT,ISPL:EXT,RM:EXT,OS:1,DMFS,FR,IL,BO:1,ODI:1,HC,SC,ITHC,REV,TC' - row5 = '4,,False,6.037190468227883,[],6.037190468227885,6.652501757799978,26.06553892254117,[5.066098888673643],0.0,26.06553892254117,5.8746887104279075,0.22398503883788762,-0.16250175779997544,0.16250175779997544,0,0.0,6.032065249535088,0.0,0.0,6.032065249535088,,False,6.037190468227885,[],6.037190468227887,7.116402869126333,5.066098888673643,[5.623901111326357],0.0,5.066098888673643,4.450787599101552,0.3050545629127044,-1.5864028691263323,1.5864028691263323,0.0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227887,[],6.037190468227889,12.18250175779998,5.623901111326357,[6.145311289572089, 6.037190468227889],0.0,5.623901111326357,4.544688710427908,0.39831291850351647,-1.4925017577999782,1.492501757799979,0.0,0.0,0.0,11.247802222652714,0.0,11.247802222652714' - row10 = '98,,False,4.775201280806586,[],4.775201280806585,4.775201280806586,5.855972018122079,[4.775201280806585],0.0,4.775201280806586,4.775201280806586,0.9274469545198983,1.7147987191934133,0.0,0,12.003591034353892,0.0,0.0,0.0,12.003591034353892,,False,4.775201280806585,[],4.775201280806586,4.77520128080658,5.3823688379681025,[4.775201280806586],0.0,4.775201280806585,4.775201280806585,0.8746030168684653,0.7547987191934205,0.0,0.0,3.019194876773682,0,19.10080512322634,0.0,22.120000000000022,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,[4.381602699335919, 4.775201280806584],0.0,4.775201280806586,4.775201280806586,0.888642036779627,1.5331960198575052,0.0,0.0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182' - - # Load TXT results and check them. - with open(txt_filename) as txtfile: - lines = txtfile.read().splitlines() - - self.assertEqual(lines[0], row0_txt) - self.assertEqual(lines[1], row1_txt) - self.assertEqual(lines[6], row6_txt) - self.assertEqual(lines[11], row11_txt) - - os.remove(txt_filename) - - # Load CSV results and check them. - with open(csv_filename) as csvfile: - reader = csv.reader(csvfile) - rows = list(reader) - - self.assertEqual(','.join(rows[0]), row0) - self.assertEqual(','.join(rows[5]), row5) - self.assertEqual(','.join(rows[10]), row10) - # Delete file. - os.remove(csv_filename) + correct_filename_root = 'tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1' + correct_txt_filename = correct_filename_root + '.txt' + correct_csv_filename = correct_filename_root + '.csv' + + try: + sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print=cols_to_print, + write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) + + # Load TXT results and check them. + with open(txt_filename) as txtfile: + lines = txtfile.read().splitlines() + with open(correct_txt_filename) as correct_txtfile: + correct_lines = correct_txtfile.read().splitlines() + self.assertListEqual(lines, correct_lines) + + # Load CSV results and check them. + with open(csv_filename) as csvfile: + reader = csv.reader(csvfile) + rows = list(reader) + with open(correct_csv_filename) as correct_csvfile: + correct_reader = csv.reader(correct_csvfile) + correct_rows = list(correct_reader) + self.assertListEqual(rows, correct_rows) + + finally: + # Delete files. + if os.path.exists(txt_filename): + os.remove(txt_filename) + if os.path.exists(csv_filename): + os.remove(csv_filename) def test_periods_to_print(self): """Test that write_results() function correctly writes results from @@ -106,11 +98,6 @@ def test_periods_to_print(self): # reindex nodes to 2 -> 1 -> 0 network.reindex_nodes({1: 0, 2: 1, 3: 2}) - # Set initial inventory levels to 0. (Tests below were built with this assumption, but subsequent - # changes in code changed the default initial IL.) - for node in network.nodes: - node.initial_inventory_level = 0 - # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) filename_root = 'tests/additional_files/temp_TestWriteResults_test_periods_to_print' @@ -118,44 +105,37 @@ def test_periods_to_print(self): csv_filename = filename_root + '.csv' cols_to_print = ['DISR', 'IO', 'IOPL', 'OQ', 'OO', 'IS', 'ISPL', 'RM', 'OS', 'DMFS', 'FR', 'IL', 'BO', 'ODI', 'HC', 'SC', 'ITHC', 'REV', 'TC'] - sim_io.write_results(network=network, num_periods=100, periods_to_print=[2, 7, 43], columns_to_print=cols_to_print, - write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) - - row0_txt = ' t | i=0 DISR IO:EXT IOPL:EXT OQ:1 OO:1 IS:1 ISPL:1 RM:1 OS:EXT DMFS FR IL BO:EXT ODI:EXT HC SC ITHC REV TC | i=1 DISR IO:0 IOPL:0 OQ:2 OO:2 IS:2 ISPL:2 RM:2 OS:0 DMFS FR IL BO:0 ODI:0 HC SC ITHC REV TC | i=2 DISR IO:1 IOPL:1 OQ:EXT OO:EXT IS:EXT ISPL:EXT RM:EXT OS:1 DMFS FR IL BO:1 ODI:1 HC SC ITHC REV TC' - row1_txt = '--- ------- ------ -------- ---------- ------- -------- ------- -------------------- ------ -------- ------- -------- --------- -------- --------- ------- ------ ------ ----- --------- ------- ------ ------- -------- ------- -------- ------- ------------------- ------ ------- ------- -------- ---------- --------- ------- ---- ---- ------- ----- ------- ------- ------ ------- -------- -------- -------- -------- -------------------------------------- -------- -------- ------- -------- ------- ----------- ------- ------- ---- ------- ----- -------' - row2_txt = ' 2 | False 5.6239 [] 5.6239 20.5355 0 [0.0] 0 0 0 0 -14.0455 14.0455 0 0 521.37 0 0 521.37 | False 5.6239 [] 5.6239 26.0655 0 [26.06553892254117] 0 0 0 0 -20.5355 20.5355 0 0 0 0 0 0 | False 5.6239 [] 5.6239 8.76927 27.9863 [3.145371921193491, 5.623901111326357] 0 26.0655 5.6239 0.21576 1.92073 8.88178e-16 0 3.84145 0 52.1311 0 55.9725' - row3_txt = ' 7 | False 4.6379 [] 4.6379 6.23003 6.14531 [6.037190468227889] 0 5.88534 4.6379 0.44692 0.25997 0 0 1.81979 0 0 0 1.81979 | False 4.6379 [] 4.6379 5.72284 6.03719 [5.722839301253794] 0 6.03719 4.44506 0.442889 -0.192839 0.192839 0 0 0 24.1488 0 24.1488 | False 4.6379 [] 4.6379 9.5262 6.88664 [4.888301709871235, 4.63789866160095] 0 5.72284 4.6379 0.518264 1.1638 0 0 2.3276 0 11.4457 0 13.7733' - row4_txt = ' 43 | False 4.30582 [] 4.30582 5.40229 6.84541 [3.8445867051753195] 0 5.75771 4.30582 0.869486 1.08771 0 0 7.61395 0 0 0 7.61395 | False 4.30582 [] 4.30582 7.08771 3.84459 [7.087705709707265] 0 3.84459 2.74812 0.819185 -1.55771 1.55771 0 0 0 15.3783 0 15.3783 | False 4.30582 [] 4.30582 9.43255 8.34516 [5.126727211245548, 4.305821103558779] 0 7.08771 4.30582 0.834206 1.25745 0 0 2.5149 0 14.1754 0 16.6903' - - row0 = 't,i=0,DISR,IO:EXT,IOPL:EXT,OQ:1,OO:1,IS:1,ISPL:1,RM:1,OS:EXT,DMFS,FR,IL,BO:EXT,ODI:EXT,HC,SC,ITHC,REV,TC,i=1,DISR,IO:0,IOPL:0,OQ:2,OO:2,IS:2,ISPL:2,RM:2,OS:0,DMFS,FR,IL,BO:0,ODI:0,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1,IOPL:1,OQ:EXT,OO:EXT,IS:EXT,ISPL:EXT,RM:EXT,OS:1,DMFS,FR,IL,BO:1,ODI:1,HC,SC,ITHC,REV,TC' - row1 = '2,,False,5.623901111326356,[],5.623901111326356,20.53553892254117,0.0,[0.0],0.0,0.0,0.0,0.0,-14.04553892254117,14.04553892254117,0,0.0,521.3704048047282,0.0,0.0,521.3704048047282,,False,5.623901111326356,[],5.623901111326355,26.06553892254117,0.0,[26.06553892254117],0.0,0.0,0.0,0.0,-20.53553892254117,20.53553892254117,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.623901111326355,[],5.623901111326357,8.769273032519848,27.986265890021322,[3.145371921193491, 5.623901111326357],0.0,26.06553892254117,5.623901111326354,0.21576001662727454,1.9207269674801521,8.881784197001252e-16,0.0,3.8414539349603043,0,52.13107784508234,0.0,55.972531780042644' - row2 = '7,,False,4.637898661600952,[],4.637898661600951,6.230029769481679,6.145311289572089,[6.037190468227889],0.0,5.8853410590537685,4.637898661600952,0.44691957163047596,0.2599702305183209,0.0,0,1.8197916136282464,0.0,0.0,0.0,1.8197916136282464,,False,4.637898661600951,[],4.637898661600952,5.722839301253787,6.037190468227889,[5.722839301253794],0.0,6.037190468227889,4.445059360347163,0.4428887862743481,-0.19283930125378745,0.19283930125378745,0.0,0.0,0.0,24.148761872911557,0.0,24.148761872911557,,False,4.637898661600952,[],4.63789866160095,9.526200371472186,6.886638929781603,[4.888301709871235, 4.63789866160095],0.0,5.722839301253794,4.637898661600952,0.5182638476284692,1.1637996285278103,0.0,0.0,2.3275992570556205,0,11.445678602507588,0.0,13.773277859563208' - row3 = '43,,False,4.305821103558777,[],4.3058211035587775,5.402292414882573,6.845413294824685,[3.8445867051753195],0.0,5.757705709707258,4.305821103558777,0.8694855956154881,1.0877075851174274,0.0,0,7.613953095821992,0.0,0.0,0.0,7.613953095821992,,False,4.3058211035587775,[],4.3058211035587775,7.087705709707255,3.8445867051753195,[7.087705709707265],0.0,3.8445867051753195,2.7481153938515215,0.8191846453959901,-1.557705709707256,1.557705709707256,0.0,0.0,0.0,15.378346820701278,0.0,15.378346820701278,,False,4.3058211035587775,[],4.305821103558779,9.43254831480432,8.345157394902943,[5.126727211245548, 4.305821103558779],0.0,7.087705709707265,4.3058211035587775,0.834206268959877,1.2574516851956776,0.0,0.0,2.5149033703913553,0,14.17541141941453,0.0,16.690314789805885' - - # Load TXT results and check them. - with open(txt_filename) as txtfile: - lines = txtfile.read().splitlines() - - self.assertEqual(lines[0], row0_txt) - self.assertEqual(lines[1], row1_txt) - self.assertEqual(lines[2], row2_txt) - self.assertEqual(lines[3], row3_txt) - self.assertEqual(lines[4], row4_txt) - - os.remove(txt_filename) - - # Load CSV results and check them. - with open(csv_filename) as csvfile: - reader = csv.reader(csvfile) - rows = list(reader) - - self.assertEqual(','.join(rows[0]), row0) - self.assertEqual(','.join(rows[1]), row1) - self.assertEqual(','.join(rows[2]), row2) - self.assertEqual(','.join(rows[3]), row3) - # Delete file. - os.remove(csv_filename) + correct_filename_root = 'tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print' + correct_txt_filename = correct_filename_root + '.txt' + correct_csv_filename = correct_filename_root + '.csv' + + try: + sim_io.write_results(network=network, num_periods=100, periods_to_print=[2, 7, 43], columns_to_print=cols_to_print, + write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) + + # Load TXT results and check them. + with open(txt_filename) as txtfile: + lines = txtfile.read().splitlines() + with open(correct_txt_filename) as correct_txtfile: + correct_lines = correct_txtfile.read().splitlines() + self.assertListEqual(lines, correct_lines) + + # Load CSV results and check them. + with open(csv_filename) as csvfile: + reader = csv.reader(csvfile) + rows = list(reader) + with open(correct_csv_filename) as correct_csvfile: + correct_reader = csv.reader(correct_csvfile) + correct_rows = list(correct_reader) + self.assertListEqual(rows, correct_rows) + + finally: + # Delete files. + if os.path.exists(txt_filename): + os.remove(txt_filename) + if os.path.exists(csv_filename): + os.remove(csv_filename) def test_columns_to_print_none(self): """Test that write_results() function correctly writes results from @@ -168,51 +148,42 @@ def test_columns_to_print_none(self): # reindex nodes to 2 -> 1 -> 0 network.reindex_nodes({1: 0, 2: 1, 3: 2}) - # Set initial inventory levels to 0. (Tests below were built with this assumption, but subsequent - # changes in code changed the default initial IL.) - for node in network.nodes: - node.initial_inventory_level = 0 - # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) filename_root = 'tests/additional_files/temp_TestWriteResults_test_columns_to_print_none' txt_filename = filename_root + '.txt' csv_filename = filename_root + '.csv' - sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print=None, - write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) - - row0_txt = 't | i=0 DISR IO:EXT IOPL:EXT OQ:1 OO:1 IS:1 ISPL:1 IDI:1 RM:1 OS:EXT DMFS FR IL BO:EXT ODI:EXT HC SC ITHC REV TC | i=1 DISR IO:0 IOPL:0 OQ:2 OO:2 IS:2 ISPL:2 IDI:2 RM:2 OS:0 DMFS FR IL BO:0 ODI:0 HC SC ITHC REV TC | i=2 DISR IO:1 IOPL:1 OQ:EXT OO:EXT IS:EXT ISPL:EXT IDI:EXT RM:EXT OS:1 DMFS FR IL BO:1 ODI:1 HC SC ITHC REV TC' - row1_txt = '--- ------- ------ -------- ---------- -------- -------- -------- -------------------- ------- ------ -------- ------- -------- ---------- --------- --------- -------- --------- ------ ----- --------- ------- ------ -------- -------- -------- -------- -------- -------------------- ------- ------ -------- ------- -------- ---------- --------- ------- -------- ---- -------- ----- -------- ------- ------ -------- -------- -------- -------- -------- --------------------------------------- --------- -------- -------- ------- -------- ---------- ------------ ------- ------- ---- -------- ----- --------' - row6_txt = '4 | False 6.03719 [] 6.03719 6.6525 26.0655 [5.066098888673643] 0 0 26.0655 5.87469 0.223985 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326357] 0 0 5.0661 4.45079 0.305055 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572089, 6.037190468227889] 0 0 5.6239 4.54469 0.398313 -1.4925 1.4925 0 0 0 11.2478 0 11.2478' - row11_txt = '98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 0 4.7752 4.7752 0.927447 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 0 4.7752 4.7752 0.874603 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 0 4.7752 4.7752 0.888642 1.5332 0 0 3.06639 0 9.5504 0 12.6168' - - row0 = 't,i=0,DISR,IO:EXT,IOPL:EXT,OQ:1,OO:1,IS:1,ISPL:1,IDI:1,RM:1,OS:EXT,DMFS,FR,IL,BO:EXT,ODI:EXT,HC,SC,ITHC,REV,TC,i=1,DISR,IO:0,IOPL:0,OQ:2,OO:2,IS:2,ISPL:2,IDI:2,RM:2,OS:0,DMFS,FR,IL,BO:0,ODI:0,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1,IOPL:1,OQ:EXT,OO:EXT,IS:EXT,ISPL:EXT,IDI:EXT,RM:EXT,OS:1,DMFS,FR,IL,BO:1,ODI:1,HC,SC,ITHC,REV,TC' - row5 = '4,,False,6.037190468227883,[],6.037190468227885,6.652501757799978,26.06553892254117,[5.066098888673643],0,0.0,26.06553892254117,5.8746887104279075,0.22398503883788762,-0.16250175779997544,0.16250175779997544,0,0.0,6.032065249535088,0.0,0.0,6.032065249535088,,False,6.037190468227885,[],6.037190468227887,7.116402869126333,5.066098888673643,[5.623901111326357],0,0.0,5.066098888673643,4.450787599101552,0.3050545629127044,-1.5864028691263323,1.5864028691263323,0.0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227887,[],6.037190468227889,12.18250175779998,5.623901111326357,[6.145311289572089, 6.037190468227889],0,0.0,5.623901111326357,4.544688710427908,0.39831291850351647,-1.4925017577999782,1.492501757799979,0.0,0.0,0.0,11.247802222652714,0.0,11.247802222652714' - row10 = '98,,False,4.775201280806586,[],4.775201280806585,4.775201280806586,5.855972018122079,[4.775201280806585],0,0.0,4.775201280806586,4.775201280806586,0.9274469545198983,1.7147987191934133,0.0,0,12.003591034353892,0.0,0.0,0.0,12.003591034353892,,False,4.775201280806585,[],4.775201280806586,4.77520128080658,5.3823688379681025,[4.775201280806586],0,0.0,4.775201280806585,4.775201280806585,0.8746030168684653,0.7547987191934205,0.0,0.0,3.019194876773682,0,19.10080512322634,0.0,22.120000000000022,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,[4.381602699335919, 4.775201280806584],0,0.0,4.775201280806586,4.775201280806586,0.888642036779627,1.5331960198575052,0.0,0.0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182' - - # Load TXT results and check them. - with open(txt_filename) as txtfile: - lines = txtfile.read().splitlines() - - self.assertEqual(lines[0], row0_txt) - self.assertEqual(lines[1], row1_txt) - self.assertEqual(lines[6], row6_txt) - self.assertEqual(lines[11], row11_txt) - - os.remove(txt_filename) - - # Load CSV results and check them. - with open(csv_filename) as csvfile: - reader = csv.reader(csvfile) - rows = list(reader) - - self.assertEqual(','.join(rows[0]), row0) - self.assertEqual(','.join(rows[5]), row5) - self.assertEqual(','.join(rows[10]), row10) - - # Delete file. - os.remove(csv_filename) + correct_filename_root = 'tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none' + correct_txt_filename = correct_filename_root + '.txt' + correct_csv_filename = correct_filename_root + '.csv' + + try: + sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print=None, + write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) + + # Load TXT results and check them. + with open(txt_filename) as txtfile: + lines = txtfile.read().splitlines() + with open(correct_txt_filename) as correct_txtfile: + correct_lines = correct_txtfile.read().splitlines() + self.assertListEqual(lines, correct_lines) + + # Load CSV results and check them. + with open(csv_filename) as csvfile: + reader = csv.reader(csvfile) + rows = list(reader) + with open(correct_csv_filename) as correct_csvfile: + correct_reader = csv.reader(correct_csvfile) + correct_rows = list(correct_reader) + self.assertListEqual(rows, correct_rows) + + finally: + # Delete files. + if os.path.exists(txt_filename): + os.remove(txt_filename) + if os.path.exists(csv_filename): + os.remove(csv_filename) def test_columns_to_print_list(self): """Test that write_results() function correctly writes results from @@ -225,51 +196,42 @@ def test_columns_to_print_list(self): # reindex nodes to 2 -> 1 -> 0 network.reindex_nodes({1: 0, 2: 1, 3: 2}) - # Set initial inventory levels to 0. (Tests below were built with this assumption, but subsequent - # changes in code changed the default initial IL.) - for node in network.nodes: - node.initial_inventory_level = 0 - # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) filename_root = 'tests/additional_files/temp_TestWriteResults_test_columns_to_print_list' txt_filename = filename_root + '.txt' csv_filename = filename_root + '.csv' - sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print=['IO', 'OQ', 'IL', 'TC'], - write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) - - row0_txt = 't | i=0 IO:EXT OQ:1 IL TC | i=1 IO:0 OQ:2 IL TC | i=2 IO:1 OQ:EXT IL TC' - row1_txt = '--- ------- -------- -------- ---------- --------- ------- -------- -------- ---------- -------- ------- -------- -------- ---------- --------' - row6_txt = '4 | 6.03719 6.03719 -0.162502 6.03207 | 6.03719 6.03719 -1.5864 20.2644 | 6.03719 6.03719 -1.4925 11.2478' - row11_txt = '98 | 4.7752 4.7752 1.7148 12.0036 | 4.7752 4.7752 0.754799 22.12 | 4.7752 4.7752 1.5332 12.6168' - - row0 = 't,i=0,IO:EXT,OQ:1,IL,TC,i=1,IO:0,OQ:2,IL,TC,i=2,IO:1,OQ:EXT,IL,TC' - row5 = '4,,6.037190468227883,6.037190468227885,-0.16250175779997544,6.032065249535088,,6.037190468227885,6.037190468227887,-1.5864028691263323,20.264395554694573,,6.037190468227887,6.037190468227889,-1.4925017577999782,11.247802222652714' - row10 = '98,,4.775201280806586,4.775201280806585,1.7147987191934133,12.003591034353892,,4.775201280806585,4.775201280806586,0.7547987191934205,22.120000000000022,,4.775201280806586,4.775201280806584,1.5331960198575052,12.616794601328182' - - # Load TXT results and check them. - with open(txt_filename) as txtfile: - lines = txtfile.read().splitlines() - - self.assertEqual(lines[0], row0_txt) - self.assertEqual(lines[1], row1_txt) - self.assertEqual(lines[6], row6_txt) - self.assertEqual(lines[11], row11_txt) - - os.remove(txt_filename) - - # Load CSV results and check them. - with open(csv_filename) as csvfile: - reader = csv.reader(csvfile) - rows = list(reader) - - self.assertEqual(','.join(rows[0]), row0) - self.assertEqual(','.join(rows[5]), row5) - self.assertEqual(','.join(rows[10]), row10) - - # Delete file. - os.remove(csv_filename) + correct_filename_root = 'tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list' + correct_txt_filename = correct_filename_root + '.txt' + correct_csv_filename = correct_filename_root + '.csv' + + try: + sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print=['IO', 'OQ', 'IL', 'TC'], + write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) + + # Load TXT results and check them. + with open(txt_filename) as txtfile: + lines = txtfile.read().splitlines() + with open(correct_txt_filename) as correct_txtfile: + correct_lines = correct_txtfile.read().splitlines() + self.assertListEqual(lines, correct_lines) + + # Load CSV results and check them. + with open(csv_filename) as csvfile: + reader = csv.reader(csvfile) + rows = list(reader) + with open(correct_csv_filename) as correct_csvfile: + correct_reader = csv.reader(correct_csvfile) + correct_rows = list(correct_reader) + self.assertListEqual(rows, correct_rows) + + finally: + # Delete files. + if os.path.exists(txt_filename): + os.remove(txt_filename) + if os.path.exists(csv_filename): + os.remove(csv_filename) def test_columns_to_print_string(self): """Test that write_results() function correctly writes results from @@ -282,51 +244,42 @@ def test_columns_to_print_string(self): # reindex nodes to 2 -> 1 -> 0 network.reindex_nodes({1: 0, 2: 1, 3: 2}) - # Set initial inventory levels to 0. (Tests below were built with this assumption, but subsequent - # changes in code changed the default initial IL.) - for node in network.nodes: - node.initial_inventory_level = 0 - # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) filename_root = 'tests/additional_files/temp_TestWriteResults_test_columns_to_print_string' txt_filename = filename_root + '.txt' csv_filename = filename_root + '.csv' - sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print='basic', - write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) - - row0_txt = 't | i=0 IO:EXT OQ:1 IS:1 OS:EXT IL | i=1 IO:0 OQ:2 IS:2 OS:0 IL | i=2 IO:1 OQ:EXT IS:EXT OS:1 IL' - row1_txt = '--- ------- -------- -------- -------- -------- ---------- ------- -------- -------- -------- -------- ---------- ------- -------- -------- -------- -------- ----------' - row6_txt = '4 | 6.03719 6.03719 26.0655 26.0655 -0.162502 | 6.03719 6.03719 5.0661 5.0661 -1.5864 | 6.03719 6.03719 5.6239 5.6239 -1.4925' - row11_txt = '98 | 4.7752 4.7752 5.85597 4.7752 1.7148 | 4.7752 4.7752 5.38237 4.7752 0.754799 | 4.7752 4.7752 5.56004 4.7752 1.5332' - - row0 = 't,i=0,IO:EXT,OQ:1,IS:1,OS:EXT,IL,i=1,IO:0,OQ:2,IS:2,OS:0,IL,i=2,IO:1,OQ:EXT,IS:EXT,OS:1,IL' - row5 = '4,,6.037190468227883,6.037190468227885,26.06553892254117,26.06553892254117,-0.16250175779997544,,6.037190468227885,6.037190468227887,5.066098888673643,5.066098888673643,-1.5864028691263323,,6.037190468227887,6.037190468227889,5.623901111326357,5.623901111326357,-1.4925017577999782' - row10 = '98,,4.775201280806586,4.775201280806585,5.855972018122079,4.775201280806586,1.7147987191934133,,4.775201280806585,4.775201280806586,5.3823688379681025,4.775201280806585,0.7547987191934205,,4.775201280806586,4.775201280806584,5.560039692192106,4.775201280806586,1.5331960198575052' - - # Load TXT results and check them. - with open(txt_filename) as txtfile: - lines = txtfile.read().splitlines() - - self.assertEqual(lines[0], row0_txt) - self.assertEqual(lines[1], row1_txt) - self.assertEqual(lines[6], row6_txt) - self.assertEqual(lines[11], row11_txt) - -# os.remove(txt_filename) - - # Load CSV results and check them. - with open(csv_filename) as csvfile: - reader = csv.reader(csvfile) - rows = list(reader) - - self.assertEqual(','.join(rows[0]), row0) - self.assertEqual(','.join(rows[5]), row5) - self.assertEqual(','.join(rows[10]), row10) - - # Delete file. - os.remove(csv_filename) + correct_filename_root = 'tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string' + correct_txt_filename = correct_filename_root + '.txt' + correct_csv_filename = correct_filename_root + '.csv' + + try: + sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print='basic', + write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) + + # Load TXT results and check them. + with open(txt_filename) as txtfile: + lines = txtfile.read().splitlines() + with open(correct_txt_filename) as correct_txtfile: + correct_lines = correct_txtfile.read().splitlines() + self.assertListEqual(lines, correct_lines) + + # Load CSV results and check them. + with open(csv_filename) as csvfile: + reader = csv.reader(csvfile) + rows = list(reader) + with open(correct_csv_filename) as correct_csvfile: + correct_reader = csv.reader(correct_csvfile) + correct_rows = list(correct_reader) + self.assertListEqual(rows, correct_rows) + + finally: + # Delete files. + if os.path.exists(txt_filename): + os.remove(txt_filename) + if os.path.exists(csv_filename): + os.remove(csv_filename) def test_columns_to_print_list_of_strings(self): """Test that write_results() function correctly writes results from @@ -339,51 +292,42 @@ def test_columns_to_print_list_of_strings(self): # reindex nodes to 2 -> 1 -> 0 network.reindex_nodes({1: 0, 2: 1, 3: 2}) - # Set initial inventory levels to 0. (Tests below were built with this assumption, but subsequent - # changes in code changed the default initial IL.) - for node in network.nodes: - node.initial_inventory_level = 0 - # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) filename_root = 'tests/additional_files/temp_TestWriteResults_test_columns_to_print_list_of_strings' txt_filename = filename_root + '.txt' csv_filename = filename_root + '.csv' - sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print=['basic', 'costs'], - write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) - - row0_txt = 't | i=0 IO:EXT OQ:1 IS:1 OS:EXT IL HC SC TC | i=1 IO:0 OQ:2 IS:2 OS:0 IL HC SC TC | i=2 IO:1 OQ:EXT IS:EXT OS:1 IL HC SC TC' - row1_txt = '--- ------- -------- -------- -------- -------- ---------- -------- --------- --------- ------- -------- -------- -------- -------- ---------- -------- ---- -------- ------- -------- -------- -------- -------- ---------- ------- ---- --------' - row6_txt = '4 | 6.03719 6.03719 26.0655 26.0655 -0.162502 0 6.03207 6.03207 | 6.03719 6.03719 5.0661 5.0661 -1.5864 0 0 20.2644 | 6.03719 6.03719 5.6239 5.6239 -1.4925 0 0 11.2478' - row11_txt = '98 | 4.7752 4.7752 5.85597 4.7752 1.7148 12.0036 0 12.0036 | 4.7752 4.7752 5.38237 4.7752 0.754799 3.01919 0 22.12 | 4.7752 4.7752 5.56004 4.7752 1.5332 3.06639 0 12.6168' - - row0 = 't,i=0,IO:EXT,OQ:1,IS:1,OS:EXT,IL,HC,SC,TC,i=1,IO:0,OQ:2,IS:2,OS:0,IL,HC,SC,TC,i=2,IO:1,OQ:EXT,IS:EXT,OS:1,IL,HC,SC,TC' - row5 = '4,,6.037190468227883,6.037190468227885,26.06553892254117,26.06553892254117,-0.16250175779997544,0.0,6.032065249535088,6.032065249535088,,6.037190468227885,6.037190468227887,5.066098888673643,5.066098888673643,-1.5864028691263323,0.0,0.0,20.264395554694573,,6.037190468227887,6.037190468227889,5.623901111326357,5.623901111326357,-1.4925017577999782,0.0,0.0,11.247802222652714' - row10 = '98,,4.775201280806586,4.775201280806585,5.855972018122079,4.775201280806586,1.7147987191934133,12.003591034353892,0.0,12.003591034353892,,4.775201280806585,4.775201280806586,5.3823688379681025,4.775201280806585,0.7547987191934205,3.019194876773682,0,22.120000000000022,,4.775201280806586,4.775201280806584,5.560039692192106,4.775201280806586,1.5331960198575052,3.0663920397150104,0,12.616794601328182' - - # Load TXT results and check them. - with open(txt_filename) as txtfile: - lines = txtfile.read().splitlines() - - self.assertEqual(lines[0], row0_txt) - self.assertEqual(lines[1], row1_txt) - self.assertEqual(lines[6], row6_txt) - self.assertEqual(lines[11], row11_txt) - - os.remove(txt_filename) - - # Load CSV results and check them. - with open(csv_filename) as csvfile: - reader = csv.reader(csvfile) - rows = list(reader) - - self.assertEqual(','.join(rows[0]), row0) - self.assertEqual(','.join(rows[5]), row5) - self.assertEqual(','.join(rows[10]), row10) - - # Delete file. - os.remove(csv_filename) + correct_filename_root = 'tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings' + correct_txt_filename = correct_filename_root + '.txt' + correct_csv_filename = correct_filename_root + '.csv' + + try: + sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print=['basic', 'costs'], + write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) + + # Load TXT results and check them. + with open(txt_filename) as txtfile: + lines = txtfile.read().splitlines() + with open(correct_txt_filename) as correct_txtfile: + correct_lines = correct_txtfile.read().splitlines() + self.assertListEqual(lines, correct_lines) + + # Load CSV results and check them. + with open(csv_filename) as csvfile: + reader = csv.reader(csvfile) + rows = list(reader) + with open(correct_csv_filename) as correct_csvfile: + correct_reader = csv.reader(correct_csvfile) + correct_rows = list(correct_reader) + self.assertListEqual(rows, correct_rows) + + finally: + # Delete files. + if os.path.exists(txt_filename): + os.remove(txt_filename) + if os.path.exists(csv_filename): + os.remove(csv_filename) def test_columns_to_print_mixed(self): """Test that write_results() function correctly writes results from @@ -397,51 +341,42 @@ def test_columns_to_print_mixed(self): # reindex nodes to 2 -> 1 -> 0 network.reindex_nodes({1: 0, 2: 1, 3: 2}) - # Set initial inventory levels to 0. (Tests below were built with this assumption, but subsequent - # changes in code changed the default initial IL.) - for node in network.nodes: - node.initial_inventory_level = 0 - # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) filename_root = 'tests/additional_files/temp_TestWriteResults_test_columns_to_print_mixed' txt_filename = filename_root + '.txt' csv_filename = filename_root + '.csv' - sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print=['SC', 'basic', 'IDI'], - write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) - - row0_txt = 't | i=0 IO:EXT OQ:1 IS:1 IDI:1 OS:EXT IL SC | i=1 IO:0 OQ:2 IS:2 IDI:2 OS:0 IL SC | i=2 IO:1 OQ:EXT IS:EXT IDI:EXT OS:1 IL SC' - row1_txt = '--- ------- -------- -------- -------- ------- -------- ---------- --------- ------- -------- -------- -------- ------- -------- ---------- ---- ------- -------- -------- -------- --------- -------- ---------- ----' - row6_txt = '4 | 6.03719 6.03719 26.0655 0 26.0655 -0.162502 6.03207 | 6.03719 6.03719 5.0661 0 5.0661 -1.5864 0 | 6.03719 6.03719 5.6239 0 5.6239 -1.4925 0' - row11_txt = '98 | 4.7752 4.7752 5.85597 0 4.7752 1.7148 0 | 4.7752 4.7752 5.38237 0 4.7752 0.754799 0 | 4.7752 4.7752 5.56004 0 4.7752 1.5332 0' - - row0 = 't,i=0,IO:EXT,OQ:1,IS:1,IDI:1,OS:EXT,IL,SC,i=1,IO:0,OQ:2,IS:2,IDI:2,OS:0,IL,SC,i=2,IO:1,OQ:EXT,IS:EXT,IDI:EXT,OS:1,IL,SC' - row5 = '4,,6.037190468227883,6.037190468227885,26.06553892254117,0,26.06553892254117,-0.16250175779997544,6.032065249535088,,6.037190468227885,6.037190468227887,5.066098888673643,0,5.066098888673643,-1.5864028691263323,0.0,,6.037190468227887,6.037190468227889,5.623901111326357,0,5.623901111326357,-1.4925017577999782,0.0' - row10 = '98,,4.775201280806586,4.775201280806585,5.855972018122079,0,4.775201280806586,1.7147987191934133,0.0,,4.775201280806585,4.775201280806586,5.3823688379681025,0,4.775201280806585,0.7547987191934205,0,,4.775201280806586,4.775201280806584,5.560039692192106,0,4.775201280806586,1.5331960198575052,0' - - # Load TXT results and check them. - with open(txt_filename) as txtfile: - lines = txtfile.read().splitlines() - - self.assertEqual(lines[0], row0_txt) - self.assertEqual(lines[1], row1_txt) - self.assertEqual(lines[6], row6_txt) - self.assertEqual(lines[11], row11_txt) - - os.remove(txt_filename) - - # Load CSV results and check them. - with open(csv_filename) as csvfile: - reader = csv.reader(csvfile) - rows = list(reader) - - self.assertEqual(','.join(rows[0]), row0) - self.assertEqual(','.join(rows[5]), row5) - self.assertEqual(','.join(rows[10]), row10) - - # Delete file. - os.remove(csv_filename) + correct_filename_root = 'tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed' + correct_txt_filename = correct_filename_root + '.txt' + correct_csv_filename = correct_filename_root + '.csv' + + try: + sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print=['SC', 'basic', 'IDI'], + write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) + + # Load TXT results and check them. + with open(txt_filename) as txtfile: + lines = txtfile.read().splitlines() + with open(correct_txt_filename) as correct_txtfile: + correct_lines = correct_txtfile.read().splitlines() + self.assertListEqual(lines, correct_lines) + + # Load CSV results and check them. + with open(csv_filename) as csvfile: + reader = csv.reader(csvfile) + rows = list(reader) + with open(correct_csv_filename) as correct_csvfile: + correct_reader = csv.reader(correct_csvfile) + correct_rows = list(correct_reader) + self.assertListEqual(rows, correct_rows) + + finally: + # Delete files. + if os.path.exists(txt_filename): + os.remove(txt_filename) + if os.path.exists(csv_filename): + os.remove(csv_filename) class TestWriteInstanceAndStates(unittest.TestCase): @@ -471,27 +406,30 @@ def test_example_6_1(self): # Simulate and write results. simulation(network, T, rand_seed=17, progress_bar=False) filename = 'tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1.json' - sim_io.write_instance_and_states(network, filename, 'temp') - - # Correct node 0 demands. - node0 = network.get_node_from_index(0) - demand_list = [node0.state_vars[t].inbound_order[None] for t in range(T)] - - # Load instance and check it. - new_network = load_instance('temp', filename, ignore_state_vars=True) - self.assertListEqual(new_network.get_node_from_index(0).demand_source.demand_list[0:T], demand_list[0:T]) - # Remove state variables and demand sources and make sure networks are equal otherwise. - for node in network.nodes: - node.demand_source = None - node.state_vars = None - for node in new_network.nodes: - node.demand_source = None - node.state_vars = None - self.assertTrue(network.deep_equal_to(new_network)) - - # Delete file. - os.remove(filename) - + try: + sim_io.write_instance_and_states(network, filename, 'temp') + + # Correct node 0 demands. + node0 = network.get_node_from_index(0) + demand_list = [node0.state_vars[t].inbound_order[None] for t in range(T)] + + # Load instance and check it. + new_network = load_instance('temp', filename, ignore_state_vars=True) + self.assertListEqual(new_network.get_node_from_index(0).demand_source.demand_list[0:T], demand_list[0:T]) + # Remove state variables and demand sources and make sure networks are equal otherwise. + for node in network.nodes: + node.demand_source = None + node.state_vars = None + for node in new_network.nodes: + node.demand_source = None + node.state_vars = None + self.assertTrue(network.deep_equal_to(new_network)) + + finally: + # Delete file. + if os.path.exists(filename): + os.remove(filename) + def test_example_6_1_with_disruptions(self): """Test that write_instance_and_states() function correctly writes results from simulation of Example 6.1 with disruptions. @@ -515,31 +453,34 @@ def test_example_6_1_with_disruptions(self): # Simulate and write results. simulation(network, T, rand_seed=17, progress_bar=False) filename = 'tests/additional_files/temp_TestWriteInstanceAndStates_test_example_6_1_with_disruptions.json' - sim_io.write_instance_and_states(network, filename, 'temp') - - # Correct node 0 demands and node 1 disruptions. - node0 = network.get_node_from_index(0) - demand_list = [node0.state_vars[t].inbound_order[None] for t in range(T)] - node1 = network.get_node_from_index(1) - disruption_list = [node1.state_vars[t].disrupted for t in range(T)] - - # Load instance and check it. - new_network = load_instance('temp', filename, ignore_state_vars=True) - self.assertListEqual(new_network.get_node_from_index(0).demand_source.demand_list[0:T], demand_list[0:T]) - self.assertListEqual(new_network.get_node_from_index(1).disruption_process.disruption_state_list[0:T], disruption_list[0:T]) - # Remove state variables, demand sources, and disruption processes and make sure networks are equal otherwise. - for node in network.nodes: - node.demand_source = None - node.state_vars = None - node.disruption_process = None - for node in new_network.nodes: - node.demand_source = None - node.state_vars = None - node.disruption_process = None - self.assertTrue(network.deep_equal_to(new_network)) - - # Delete file. - os.remove(filename) + try: + sim_io.write_instance_and_states(network, filename, 'temp') + + # Correct node 0 demands and node 1 disruptions. + node0 = network.get_node_from_index(0) + demand_list = [node0.state_vars[t].inbound_order[None] for t in range(T)] + node1 = network.get_node_from_index(1) + disruption_list = [node1.state_vars[t].disrupted for t in range(T)] + + # Load instance and check it. + new_network = load_instance('temp', filename, ignore_state_vars=True) + self.assertListEqual(new_network.get_node_from_index(0).demand_source.demand_list[0:T], demand_list[0:T]) + self.assertListEqual(new_network.get_node_from_index(1).disruption_process.disruption_state_list[0:T], disruption_list[0:T]) + # Remove state variables, demand sources, and disruption processes and make sure networks are equal otherwise. + for node in network.nodes: + node.demand_source = None + node.state_vars = None + node.disruption_process = None + for node in new_network.nodes: + node.demand_source = None + node.state_vars = None + node.disruption_process = None + self.assertTrue(network.deep_equal_to(new_network)) + + finally: + # Delete file. + if os.path.exists(filename): + os.remove(filename) def test_rong_atan_snyder_figure_1a(self): """Test that write_instance_and_states() function correctly writes results from @@ -555,30 +496,33 @@ def test_rong_atan_snyder_figure_1a(self): # Simulate and write results. simulation(network, T, rand_seed=17, progress_bar=False) filename = 'tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a.json' - sim_io.write_instance_and_states(network, filename, 'temp') - - # Correct demands. - demand_list = {} - for node in network.nodes: - if node in network.sink_nodes: - demand_list[node.index] = [node.state_vars[t].inbound_order[None] for t in range(T)] - - # Load instance and check it. - new_network = load_instance('temp', filename, ignore_state_vars=True) - for node in new_network.nodes: - if node in new_network.sink_nodes: - self.assertListEqual(node.demand_source.demand_list[0:T], demand_list[node.index][0:T]) - # Remove state variables and demand sources and make sure networks are equal otherwise. - for node in network.nodes: - node.demand_source = None - node.state_vars = None - for node in new_network.nodes: - node.demand_source = None - node.state_vars = None - self.assertTrue(network.deep_equal_to(new_network)) - - # Delete file. - os.remove(filename) + try: + sim_io.write_instance_and_states(network, filename, 'temp') + + # Correct demands. + demand_list = {} + for node in network.nodes: + if node in network.sink_nodes: + demand_list[node.index] = [node.state_vars[t].inbound_order[None] for t in range(T)] + + # Load instance and check it. + new_network = load_instance('temp', filename, ignore_state_vars=True) + for node in new_network.nodes: + if node in new_network.sink_nodes: + self.assertListEqual(node.demand_source.demand_list[0:T], demand_list[node.index][0:T]) + # Remove state variables and demand sources and make sure networks are equal otherwise. + for node in network.nodes: + node.demand_source = None + node.state_vars = None + for node in new_network.nodes: + node.demand_source = None + node.state_vars = None + self.assertTrue(network.deep_equal_to(new_network)) + + finally: + # Delete file. + if os.path.exists(filename): + os.remove(filename) def test_rong_atan_snyder_figure_1a_with_disruptions(self): """Test that write_instance_and_states() function correctly writes results from @@ -607,37 +551,42 @@ def test_rong_atan_snyder_figure_1a_with_disruptions(self): # Simulate and write results. simulation(network, T, rand_seed=17, progress_bar=False) filename = 'tests/additional_files/temp_TestWriteInstanceAndStates_test_rong_atan_snyder_figure_1a_with_disruptions.json' - sim_io.write_instance_and_states(network, filename, 'temp') - - # Correct demands and disruption states. - demand_list = {} - disruption_state_list = {} - for node in network.nodes: - if node in network.sink_nodes: - demand_list[node.index] = [node.state_vars[t].inbound_order[None] for t in range(T)] - if node.disruption_process is not None and node.disruption_process.random_process_type is not None: - disruption_state_list[node.index] = [node.state_vars[t].disrupted for t in range(T)] - - # Load instance and check it. - new_network = load_instance('temp', filename, ignore_state_vars=True) - for node in new_network.nodes: - if node in new_network.sink_nodes: - self.assertListEqual(node.demand_source.demand_list[0:T], demand_list[node.index][0:T]) - if node.disruption_process is not None and node.disruption_process.random_process_type is not None: - self.assertListEqual(node.disruption_process.disruption_state_list[0:T], disruption_state_list[node.index][0:T]) - # Remove state variables, demand sources, and disruption processes and make sure networks are equal otherwise. - for node in network.nodes: - node.demand_source = None - node.state_vars = None - node.disruption_process = None - for node in new_network.nodes: - node.demand_source = None - node.state_vars = None - node.disruption_process = None - self.assertTrue(network.deep_equal_to(new_network)) - - # Delete file. - os.remove(filename) + try: + sim_io.write_instance_and_states(network, filename, 'temp') + + # Correct demands and disruption states. + demand_list = {} + disruption_state_list = {} + for node in network.nodes: + if node in network.sink_nodes: + demand_list[node.index] = [node.state_vars[t].inbound_order[None] for t in range(T)] + if node.disruption_process is not None and node.disruption_process.random_process_type is not None: + disruption_state_list[node.index] = [node.state_vars[t].disrupted for t in range(T)] + + # Load instance and check it. + new_network = load_instance('temp', filename, ignore_state_vars=True) + for node in new_network.nodes: + if node in new_network.sink_nodes: + self.assertListEqual(node.demand_source.demand_list[0:T], demand_list[node.index][0:T]) + if node.disruption_process is not None and node.disruption_process.random_process_type is not None: + self.assertListEqual(node.disruption_process.disruption_state_list[0:T], disruption_state_list[node.index][0:T]) + # Remove state variables, demand sources, and disruption processes and make sure networks are equal otherwise. + for node in network.nodes: + node.demand_source = None + node.state_vars = None + node.disruption_process = None + for node in new_network.nodes: + node.demand_source = None + node.state_vars = None + node.disruption_process = None + self.assertTrue(network.deep_equal_to(new_network)) + + finally: + # Delete file. + if os.path.exists(filename): + os.remove(filename) + + class TestDictToHeaderList(unittest.TestCase): @classmethod def set_up_class(cls): From f8676d50e30d88b8de055f71eb9e4bdf5178d9af Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Tue, 16 Apr 2024 21:54:28 -0400 Subject: [PATCH 34/94] Fix bugs in node-reindexing functions --- src/stockpyl/supply_chain_network.py | 15 ++- src/stockpyl/supply_chain_node.py | 108 +++++++++++++++++---- tests/test_supply_chain_network.py | 137 ++++++++++++++------------- 3 files changed, 174 insertions(+), 86 deletions(-) diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 3998642..4b6b1af 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -436,9 +436,22 @@ def reindex_nodes(self, old_to_new_dict, new_names=None): Dict in which keys are old indices and values are new names. """ + # Build product mapping. (Real products keep their indices. Dummy products change + # because their nodes change.) + old_to_new_prod_dict = {} + for node in self.nodes: + for prod in node.products: + if prod.is_dummy: + old_to_new_prod_dict[prod.index] = \ + SupplyChainNode._dummy_product_index_from_node_index(old_to_new_dict[node.index]) + else: + old_to_new_prod_dict[prod.index] = prod.index + old_to_new_prod_dict[node._external_supplier_dummy_product.index] = \ + SupplyChainNode._external_supplier_dummy_product_index_from_node_index(old_to_new_dict[node.index]) + # Reindex state variables. (This must be done before reindexing nodes.) for node in self.nodes: - node.reindex_all_state_variables(old_to_new_dict) + node.reindex_all_state_variables(old_to_new_dict, old_to_new_prod_dict) # Reindex nodes. for node in self.nodes: diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index cb96e21..8e76083 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -233,11 +233,15 @@ def index(self, value): self._index = value # If node has a dummy product, replace it with a new one to update its index. + # TODO: this is clumsy -- do these values really need to change if index changes? and if so, is this really the way to do it? if self._dummy_product: self._remove_dummy_product() self._add_dummy_product() self._external_supplier_dummy_product = SupplyChainProduct(self._dummy_product.index - 1, is_dummy=True) - # TODO: this is clumsy -- do these values really need to change if index changes? and if so, is this really the way to do it? + # Replace external supplier dummy product. + self._external_supplier_dummy_product = \ + SupplyChainProduct(SupplyChainNode._external_supplier_dummy_product_index_from_node_index(self.index), is_dummy=True) + # Properties related to input parameters. @@ -488,7 +492,7 @@ def _add_dummy_product(self): """Add a dummy product to the node. Typically this happens when the node is initialized and/or when all "real" products are removed from the node. """ - prod_ind = -self.index if self.index > 0 else -_INDEX_BUMP + prod_ind = self._dummy_product_index_from_node_index(self.index) dummy = SupplyChainProduct(index=prod_ind, is_dummy=True) self.add_product(dummy) self._dummy_product = dummy @@ -500,6 +504,36 @@ def _remove_dummy_product(self): self.remove_product(self._dummy_product) self._dummy_product = None + @classmethod + def _dummy_product_index_from_node_index(cls, node_index): + """Return index of dummy product for a given node index. This is called when a dummy product is + added to a node, to determine its index, but also can be called at other times (e.g., when nodes are + being reindexed), to predict what the new dummy product index will be. + + Parameters + ---------- + node_index : int + The index of the node. + """ + if node_index > 0: + return -node_index + else: + return -_INDEX_BUMP + + @classmethod + def _external_supplier_dummy_product_index_from_node_index(cls, node_index): + """Return index of external supplier dummy product for a given node index. This is called when an + external supplier dummy product is + added to a node, to determine its index, but also can be called at other times (e.g., when nodes are + being reindexed), to predict what the new external supplier dummy product index will be. + + Parameters + ---------- + node_index : int + The index of the node. + """ + return SupplyChainNode._dummy_product_index_from_node_index(node_index) - 1 + def get_network_bill_of_materials(self, product=None, predecessor=None, raw_material=None): """Return the "network bill of materials," i.e., the number of units of ``raw_material`` from ``predecessor`` that are required to make one unit of ``product`` at this node, @@ -1087,7 +1121,8 @@ def initialize(self, index=None): # Set external supplier dummy product. (This is set even if the node does not and # never will have an external supplier.) - self._external_supplier_dummy_product = SupplyChainProduct(self._dummy_product.index - 1, is_dummy=True) + self._external_supplier_dummy_product = \ + SupplyChainProduct(SupplyChainNode._external_supplier_dummy_product_index_from_node_index(self.index), is_dummy=True) def deep_equal_to(self, other, rel_tol=1e-8): """Check whether node "deeply equals" ``other``, i.e., if all attributes are @@ -1558,17 +1593,20 @@ def _get_attribute_total(self, attribute, period, product_index=None, include_ex else: return self.state_vars[period].__dict__[attribute][product_index] - def reindex_all_state_variables(self, old_to_new_dict): - """Change indices of all keys in all state variables using ``old_to_new_dict``. + def reindex_all_state_variables(self, old_to_new_dict, old_to_new_prod_dict): + """Change indices of all node-based keys in all state variables using ``old_to_new_dict`` + and all product-based keys using ``old_to_new_prod_dict``. Parameters ---------- old_to_new_dict : dict - Dict in which keys are old indices and values are new indices. + Dict in which keys are old node indices and values are new node indices. + old_to_new_prod_dict : dict + Dict in which keys are old product indices and values are new product indices. """ for i in range(len(self.state_vars)): - self.state_vars[i].reindex_state_variables(old_to_new_dict) + self.state_vars[i].reindex_state_variables(old_to_new_dict, old_to_new_prod_dict) # =============================================================================== @@ -2425,27 +2463,59 @@ def from_dict(cls, the_dict): # --- Utility Functions --- # - def reindex_state_variables(self, old_to_new_dict): - """Change indices of state variable dict keys using ``old_to_new_dict``. + def reindex_state_variables(self, old_to_new_dict, old_to_new_prod_dict): + """Change indices of node-based state variable dict keys using ``old_to_new_dict`` + and indices of product-based state variable dict keys using ``old_to_new_prod_dict``. Parameters ---------- old_to_new_dict : dict - Dict in which keys are old indices and values are new indices. + Dict in which keys are old node indices and values are new node indices. + old_to_new_prod_dict : dict + Dict in which keys are old product indices and values are new product indices. + + """ + # State variables indexed by product only. + for prod in self.node.products: + change_dict_key(self.demand_cumul, prod.index, old_to_new_prod_dict[prod.index]) + change_dict_key(self.inventory_level, prod.index, old_to_new_prod_dict[prod.index]) + change_dict_key(self.demand_met_from_stock, prod.index, old_to_new_prod_dict[prod.index]) + change_dict_key(self.demand_met_from_stock_cumul, prod.index, old_to_new_prod_dict[prod.index]) + change_dict_key(self.fill_rate, prod.index, old_to_new_prod_dict[prod.index]) + old_rm_indices = list(self.raw_material_inventory.keys()) + for rm_index in old_rm_indices: + change_dict_key(self.raw_material_inventory, rm_index, old_to_new_prod_dict[rm_index]) - """ # State variables indexed by predecessor. - for p in self.node.predecessors(include_external=False): - change_dict_key(self.inbound_shipment_pipeline, p.index, old_to_new_dict[p.index]) - change_dict_key(self.inbound_shipment, p.index, old_to_new_dict[p.index]) - change_dict_key(self.on_order_by_predecessor, p.index, old_to_new_dict[p.index]) - # Removed 4/12/24: raw_material_inventory is no longer indexed by predecessor - # change_dict_key(self.raw_material_inventory, p.index, old_to_new_dict[p.index]) - change_dict_key(self.order_quantity, p.index, old_to_new_dict[p.index]) - change_dict_key(self.inbound_disrupted_items, p.index, old_to_new_dict[p.index]) + for p in self.node.predecessors(include_external=True): + p_index = p.index if p is not None else None + rm_indices = p.product_indices if p is not None else [self.node._external_supplier_dummy_product.index] + # Change rm index (inner level of nested dict). + for rm_index in rm_indices: + change_dict_key(self.inbound_shipment_pipeline[p_index], rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.inbound_shipment[p_index], rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.on_order_by_predecessor[p_index], rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.order_quantity[p_index], rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.inbound_disrupted_items[p_index], rm_index, old_to_new_prod_dict[rm_index]) + # Change predecessor index (outer level of nested dict). + if p is not None: + # We don't need to change the node index for external supplier (only the rm index). + change_dict_key(self.inbound_shipment_pipeline, p_index, old_to_new_dict[p_index]) + change_dict_key(self.inbound_shipment, p_index, old_to_new_dict[p_index]) + change_dict_key(self.on_order_by_predecessor, p_index, old_to_new_dict[p_index]) + change_dict_key(self.order_quantity, p_index, old_to_new_dict[p_index]) + change_dict_key(self.inbound_disrupted_items, p_index, old_to_new_dict[p_index]) # State variables indexed by successor. for s in self.node.successors(include_external=False): + # Change prod index (inner level of nested dict). + for prod_index in self.node.product_indices: + change_dict_key(self.inbound_order_pipeline[s.index], prod_index, old_to_new_prod_dict[prod_index]) + change_dict_key(self.inbound_order[s.index], prod_index, old_to_new_prod_dict[prod_index]) + change_dict_key(self.outbound_shipment[s.index], prod_index, old_to_new_prod_dict[prod_index]) + change_dict_key(self.backorders_by_successor[s.index], prod_index, old_to_new_prod_dict[prod_index]) + change_dict_key(self.outbound_disrupted_items[s.index], prod_index, old_to_new_prod_dict[prod_index]) + # Change successor index (outer level of nested dict). change_dict_key(self.inbound_order_pipeline, s.index, old_to_new_dict[s.index]) change_dict_key(self.inbound_order, s.index, old_to_new_dict[s.index]) change_dict_key(self.outbound_shipment, s.index, old_to_new_dict[s.index]) diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index a239f94..7d7fa83 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -784,6 +784,7 @@ def test_rosling_figure_1_with_state_vars_pre(self): print_status('TestReindexNodes', 'test_rosling_figure_1_with_state_vars()') network = load_instance("rosling_figure_1") + # Make the BS levels a little smaller so there are some stockouts. network.get_node_from_index(1).inventory_policy.base_stock_level = 6 network.get_node_from_index(2).inventory_policy.base_stock_level = 20 @@ -794,43 +795,45 @@ def test_rosling_figure_1_with_state_vars_pre(self): network.get_node_from_index(7).inventory_policy.base_stock_level = 75 network.reindex_nodes({1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17}) + nodes = {n.index: n for n in network.nodes} + dps = {n.index: n._dummy_product.index for n in network.nodes} total_cost = simulation(network, 100, rand_seed=17, progress_bar=False) # Compare a few performance measures. - self.assertEqual(network.get_node_from_index(11).state_vars[6].order_quantity[12], 4) - self.assertEqual(network.get_node_from_index(11).state_vars[6].order_quantity[13], 4) - self.assertEqual(network.get_node_from_index(12).state_vars[6].order_quantity[15], 4) - self.assertEqual(network.get_node_from_index(13).state_vars[6].order_quantity[14], 4) - self.assertEqual(network.get_node_from_index(14).state_vars[6].order_quantity[16], 0) - self.assertEqual(network.get_node_from_index(14).state_vars[6].order_quantity[17], 0) - self.assertEqual(network.get_node_from_index(11).state_vars[16].inventory_level, 3) - self.assertEqual(network.get_node_from_index(12).state_vars[16].inventory_level, 7) - self.assertEqual(network.get_node_from_index(13).state_vars[16].inventory_level, 4) - self.assertEqual(network.get_node_from_index(14).state_vars[16].inventory_level, 9) - self.assertEqual(network.get_node_from_index(15).state_vars[16].inventory_level, 7) - self.assertEqual(network.get_node_from_index(16).state_vars[16].inventory_level, 19) - self.assertEqual(network.get_node_from_index(17).state_vars[16].inventory_level, 24) - self.assertEqual(network.get_node_from_index(11).state_vars[44].inventory_level, -4) - self.assertEqual(network.get_node_from_index(12).state_vars[44].inventory_level, -5) - self.assertEqual(network.get_node_from_index(13).state_vars[44].inventory_level, 0) - self.assertEqual(network.get_node_from_index(14).state_vars[44].inventory_level, -2) - self.assertEqual(network.get_node_from_index(15).state_vars[44].inventory_level, -6) - self.assertEqual(network.get_node_from_index(16).state_vars[44].inventory_level, 0) - self.assertEqual(network.get_node_from_index(17).state_vars[44].inventory_level, 10) - self.assertEqual(network.get_node_from_index(11).state_vars[16].inbound_shipment[12], 2) - self.assertEqual(network.get_node_from_index(11).state_vars[16].inbound_shipment[13], 2) - self.assertEqual(network.get_node_from_index(12).state_vars[16].inbound_shipment[15], 1) - self.assertEqual(network.get_node_from_index(13).state_vars[16].inbound_shipment[14], 0) - self.assertEqual(network.get_node_from_index(14).state_vars[16].inbound_shipment[16], 12) - self.assertEqual(network.get_node_from_index(14).state_vars[16].inbound_shipment[17], 12) - self.assertEqual(network.get_node_from_index(15).state_vars[16].inbound_shipment[None], 9) - self.assertEqual(network.get_node_from_index(16).state_vars[16].inbound_shipment[None], 13) - self.assertEqual(network.get_node_from_index(17).state_vars[16].inbound_shipment[None], 12) - self.assertEqual(network.get_node_from_index(11).state_vars[45].raw_material_inventory[12], 0) - self.assertEqual(network.get_node_from_index(11).state_vars[45].raw_material_inventory[13], 5) - self.assertEqual(network.get_node_from_index(12).state_vars[45].raw_material_inventory[15], 0) - self.assertEqual(network.get_node_from_index(14).state_vars[45].raw_material_inventory[16], 0) + self.assertEqual(nodes[11].state_vars[6].order_quantity[12][dps[12]], 4) + self.assertEqual(nodes[11].state_vars[6].order_quantity[13][dps[13]], 4) + self.assertEqual(nodes[12].state_vars[6].order_quantity[15][dps[15]], 4) + self.assertEqual(nodes[13].state_vars[6].order_quantity[14][dps[14]], 4) + self.assertEqual(nodes[14].state_vars[6].order_quantity[16][dps[16]], 0) + self.assertEqual(nodes[14].state_vars[6].order_quantity[17][dps[17]], 0) + self.assertEqual(nodes[11].state_vars[16].inventory_level[dps[11]], 3) + self.assertEqual(nodes[12].state_vars[16].inventory_level[dps[12]], 7) + self.assertEqual(nodes[13].state_vars[16].inventory_level[dps[13]], 4) + self.assertEqual(nodes[14].state_vars[16].inventory_level[dps[14]], 9) + self.assertEqual(nodes[15].state_vars[16].inventory_level[dps[15]], 7) + self.assertEqual(nodes[16].state_vars[16].inventory_level[dps[16]], 19) + self.assertEqual(nodes[17].state_vars[16].inventory_level[dps[17]], 24) + self.assertEqual(nodes[11].state_vars[44].inventory_level[dps[11]], -4) + self.assertEqual(nodes[12].state_vars[44].inventory_level[dps[12]], -5) + self.assertEqual(nodes[13].state_vars[44].inventory_level[dps[13]], 0) + self.assertEqual(nodes[14].state_vars[44].inventory_level[dps[14]], -2) + self.assertEqual(nodes[15].state_vars[44].inventory_level[dps[15]], -6) + self.assertEqual(nodes[16].state_vars[44].inventory_level[dps[16]], 0) + self.assertEqual(nodes[17].state_vars[44].inventory_level[dps[17]], 10) + self.assertEqual(nodes[11].state_vars[16].inbound_shipment[12][dps[12]], 2) + self.assertEqual(nodes[11].state_vars[16].inbound_shipment[13][dps[13]], 2) + self.assertEqual(nodes[12].state_vars[16].inbound_shipment[15][dps[15]], 1) + self.assertEqual(nodes[13].state_vars[16].inbound_shipment[14][dps[14]], 0) + self.assertEqual(nodes[14].state_vars[16].inbound_shipment[16][dps[16]], 12) + self.assertEqual(nodes[14].state_vars[16].inbound_shipment[17][dps[17]], 12) + self.assertEqual(nodes[15].state_vars[16].inbound_shipment[None][nodes[15]._external_supplier_dummy_product.index], 9) + self.assertEqual(nodes[16].state_vars[16].inbound_shipment[None][nodes[16]._external_supplier_dummy_product.index], 13) + self.assertEqual(nodes[17].state_vars[16].inbound_shipment[None][nodes[17]._external_supplier_dummy_product.index], 12) + self.assertEqual(nodes[11].state_vars[45].raw_material_inventory[dps[12]], 0) + self.assertEqual(nodes[11].state_vars[45].raw_material_inventory[dps[13]], 5) + self.assertEqual(nodes[12].state_vars[45].raw_material_inventory[dps[15]], 0) + self.assertEqual(nodes[14].state_vars[45].raw_material_inventory[dps[16]], 0) def test_rosling_figure_1_with_state_vars_post(self): """Test reindex_nodes() on system from Rosling (1989) Figure 1 using @@ -851,41 +854,43 @@ def test_rosling_figure_1_with_state_vars_post(self): total_cost = simulation(network, 100, rand_seed=17, progress_bar=False) network.reindex_nodes({1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17}) + nodes = {n.index: n for n in network.nodes} + dps = {n.index: n._dummy_product.index for n in network.nodes} # Compare a few performance measures. - self.assertEqual(network.get_node_from_index(11).state_vars[6].order_quantity[12], 4) - self.assertEqual(network.get_node_from_index(11).state_vars[6].order_quantity[13], 4) - self.assertEqual(network.get_node_from_index(12).state_vars[6].order_quantity[15], 4) - self.assertEqual(network.get_node_from_index(13).state_vars[6].order_quantity[14], 4) - self.assertEqual(network.get_node_from_index(14).state_vars[6].order_quantity[16], 0) - self.assertEqual(network.get_node_from_index(14).state_vars[6].order_quantity[17], 0) - self.assertEqual(network.get_node_from_index(11).state_vars[16].inventory_level, 3) - self.assertEqual(network.get_node_from_index(12).state_vars[16].inventory_level, 7) - self.assertEqual(network.get_node_from_index(13).state_vars[16].inventory_level, 4) - self.assertEqual(network.get_node_from_index(14).state_vars[16].inventory_level, 9) - self.assertEqual(network.get_node_from_index(15).state_vars[16].inventory_level, 7) - self.assertEqual(network.get_node_from_index(16).state_vars[16].inventory_level, 19) - self.assertEqual(network.get_node_from_index(17).state_vars[16].inventory_level, 24) - self.assertEqual(network.get_node_from_index(11).state_vars[44].inventory_level, -4) - self.assertEqual(network.get_node_from_index(12).state_vars[44].inventory_level, -5) - self.assertEqual(network.get_node_from_index(13).state_vars[44].inventory_level, 0) - self.assertEqual(network.get_node_from_index(14).state_vars[44].inventory_level, -2) - self.assertEqual(network.get_node_from_index(15).state_vars[44].inventory_level, -6) - self.assertEqual(network.get_node_from_index(16).state_vars[44].inventory_level, 0) - self.assertEqual(network.get_node_from_index(17).state_vars[44].inventory_level, 10) - self.assertEqual(network.get_node_from_index(11).state_vars[16].inbound_shipment[12], 2) - self.assertEqual(network.get_node_from_index(11).state_vars[16].inbound_shipment[13], 2) - self.assertEqual(network.get_node_from_index(12).state_vars[16].inbound_shipment[15], 1) - self.assertEqual(network.get_node_from_index(13).state_vars[16].inbound_shipment[14], 0) - self.assertEqual(network.get_node_from_index(14).state_vars[16].inbound_shipment[16], 12) - self.assertEqual(network.get_node_from_index(14).state_vars[16].inbound_shipment[17], 12) - self.assertEqual(network.get_node_from_index(15).state_vars[16].inbound_shipment[None], 9) - self.assertEqual(network.get_node_from_index(16).state_vars[16].inbound_shipment[None], 13) - self.assertEqual(network.get_node_from_index(17).state_vars[16].inbound_shipment[None], 12) - self.assertEqual(network.get_node_from_index(11).state_vars[45].raw_material_inventory[12], 0) - self.assertEqual(network.get_node_from_index(11).state_vars[45].raw_material_inventory[13], 5) - self.assertEqual(network.get_node_from_index(12).state_vars[45].raw_material_inventory[15], 0) - self.assertEqual(network.get_node_from_index(14).state_vars[45].raw_material_inventory[16], 0) + self.assertEqual(nodes[11].state_vars[6].order_quantity[12][dps[12]], 4) + self.assertEqual(nodes[11].state_vars[6].order_quantity[13][dps[13]], 4) + self.assertEqual(nodes[12].state_vars[6].order_quantity[15][dps[15]], 4) + self.assertEqual(nodes[13].state_vars[6].order_quantity[14][dps[14]], 4) + self.assertEqual(nodes[14].state_vars[6].order_quantity[16][dps[16]], 0) + self.assertEqual(nodes[14].state_vars[6].order_quantity[17][dps[17]], 0) + self.assertEqual(nodes[11].state_vars[16].inventory_level[dps[11]], 3) + self.assertEqual(nodes[12].state_vars[16].inventory_level[dps[12]], 7) + self.assertEqual(nodes[13].state_vars[16].inventory_level[dps[13]], 4) + self.assertEqual(nodes[14].state_vars[16].inventory_level[dps[14]], 9) + self.assertEqual(nodes[15].state_vars[16].inventory_level[dps[15]], 7) + self.assertEqual(nodes[16].state_vars[16].inventory_level[dps[16]], 19) + self.assertEqual(nodes[17].state_vars[16].inventory_level[dps[17]], 24) + self.assertEqual(nodes[11].state_vars[44].inventory_level[dps[11]], -4) + self.assertEqual(nodes[12].state_vars[44].inventory_level[dps[12]], -5) + self.assertEqual(nodes[13].state_vars[44].inventory_level[dps[13]], 0) + self.assertEqual(nodes[14].state_vars[44].inventory_level[dps[14]], -2) + self.assertEqual(nodes[15].state_vars[44].inventory_level[dps[15]], -6) + self.assertEqual(nodes[16].state_vars[44].inventory_level[dps[16]], 0) + self.assertEqual(nodes[17].state_vars[44].inventory_level[dps[17]], 10) + self.assertEqual(nodes[11].state_vars[16].inbound_shipment[12][dps[12]], 2) + self.assertEqual(nodes[11].state_vars[16].inbound_shipment[13][dps[13]], 2) + self.assertEqual(nodes[12].state_vars[16].inbound_shipment[15][dps[15]], 1) + self.assertEqual(nodes[13].state_vars[16].inbound_shipment[14][dps[14]], 0) + self.assertEqual(nodes[14].state_vars[16].inbound_shipment[16][dps[16]], 12) + self.assertEqual(nodes[14].state_vars[16].inbound_shipment[17][dps[17]], 12) + self.assertEqual(nodes[15].state_vars[16].inbound_shipment[None][nodes[15]._external_supplier_dummy_product.index], 9) + self.assertEqual(nodes[16].state_vars[16].inbound_shipment[None][nodes[16]._external_supplier_dummy_product.index], 13) + self.assertEqual(nodes[17].state_vars[16].inbound_shipment[None][nodes[17]._external_supplier_dummy_product.index], 12) + self.assertEqual(nodes[11].state_vars[45].raw_material_inventory[dps[12]], 0) + self.assertEqual(nodes[11].state_vars[45].raw_material_inventory[dps[13]], 5) + self.assertEqual(nodes[12].state_vars[45].raw_material_inventory[dps[15]], 0) + self.assertEqual(nodes[14].state_vars[45].raw_material_inventory[dps[16]], 0) class TestSingleStageNetwork(unittest.TestCase): From e686624213839d00a6cddc1e2c84df289efdced7 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Tue, 16 Apr 2024 22:54:54 -0400 Subject: [PATCH 35/94] All tests pass! --- src/stockpyl/demand_source.py | 9 +- src/stockpyl/supply_chain_node.py | 33 +++---- tests/test_supply_chain_node.py | 139 ++++++++++++++++-------------- 3 files changed, 97 insertions(+), 84 deletions(-) diff --git a/src/stockpyl/demand_source.py b/src/stockpyl/demand_source.py index 2f68dd8..31e48cf 100644 --- a/src/stockpyl/demand_source.py +++ b/src/stockpyl/demand_source.py @@ -494,11 +494,12 @@ def from_dict(cls, the_dict): # Some attributes require special handling. if prop == 'demand_list': - # Replace integer-as-strings in keys with integers. - if the_dict[prop] is not None: - value = [{int(k): v for k, v in d.items()} for d in the_dict[prop]] - else: + if prop not in the_dict or the_dict[prop] is None: value = None + elif the_dict[prop] is not None: + # If elements of demand_list are dicts (keys = products, values = demands), + # replace string keys with integers. + value = [{int(k): v for k, v in d.items()} if is_dict(d) else d for d in the_dict[prop]] else: if prop in the_dict: value = the_dict[prop] diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 8e76083..6f1ddf5 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1738,6 +1738,7 @@ def __init__(self, node=None, period=None): # Initialize dicts with appropriate keys. (inbound_shipment_pipeline gets # order_lead_time+shipment_lead_time slots for orders to external supplier) + self.inventory_level = {prod_index: 0 for prod_index in self.node.product_indices} self.inbound_shipment_pipeline = {p_index[p]: {prod_index: [0] * ((self.node.order_lead_time or 0) + ( @@ -1752,13 +1753,12 @@ def __init__(self, node=None, period=None): [0] * ((s.order_lead_time or 0) + 1) for prod_index in node.product_indices} for s in node.successors()} + # Add external customer to inbound_order_pipeline. (Must be done # separately since external customer does not have its own node, # or its own order lead time.) if node.demand_source is not None and node.demand_source.type is not None: self.inbound_order_pipeline[None] = {prod_index: [0] for prod_index in node.product_indices} - # for prod_index in node.product_indices: - # self.inbound_order_pipeline[None][prod_index] = [0] self.inbound_order = {s_index[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} self.outbound_shipment = {s_index[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} self.on_order_by_predecessor = {p_index[p]: {prod_index: 0 for prod_index in rm_indices[p]} @@ -1773,6 +1773,12 @@ def __init__(self, node=None, period=None): for p in self.node.predecessors(include_external=True)} self.raw_material_inventory = {prod_index: 0 for prod_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True)} + # Fill rate quantities. + self.demand_cumul = {prod_index: 0 for prod_index in self.node.product_indices} + self.demand_met_from_stock = {prod_index: 0 for prod_index in self.node.product_indices} + self.demand_met_from_stock_cumul = {prod_index: 0 for prod_index in self.node.product_indices} + self.fill_rate = {prod_index: 0 for prod_index in self.node.product_indices} + else: # Initialize dicts to empty dicts. @@ -1789,7 +1795,6 @@ def __init__(self, node=None, period=None): self.raw_material_inventory = {} # Remaining state variables. - self.inventory_level = {prod_index: 0 for prod_index in self.node.product_indices} self.disrupted = False # Costs: each refers to a component of the cost (or the total cost) @@ -1800,12 +1805,6 @@ def __init__(self, node=None, period=None): self.revenue_earned = 0 self.total_cost_incurred = 0 - # Fill rate quantities. - self.demand_cumul = {prod_index: 0 for prod_index in self.node.product_indices} - self.demand_met_from_stock = {prod_index: 0 for prod_index in self.node.product_indices} - self.demand_met_from_stock_cumul = {prod_index: 0 for prod_index in self.node.product_indices} - self.fill_rate = {prod_index: 0 for prod_index in self.node.product_indices} - # --- Special Methods --- # def __eq__(self, other): @@ -1966,9 +1965,9 @@ def in_transit(self, prod_index=None): total_in_transit = np.sum([ self.in_transit_from(p, rm_index) - * self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) + * self.node.NBOM(product=prod_index, predecessor=p.index if p is not None else None, raw_material=rm_index) for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) - for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) + for p in self.node.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=True) ]) if total_in_transit == 0: @@ -2026,7 +2025,7 @@ def on_order(self, prod_index=None): return total_on_order / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) def raw_material_aggregate(self, prod_index=None): - """Current raw materials for product ``prod_index`` that in raw-material inventory at the node. Read only. + """Current raw materials for product ``prod_index`` that are in raw-material inventory at the node. Read only. Raw materials are counted using the "units" of the node (or node-product pair) itself. That is, each raw material quantity is divided by the number of units of the raw material @@ -2171,14 +2170,18 @@ def inventory_position(self, prod_index=None, predecessor_index=None, rm_index=N ValueError If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. """ - # Validate parameters. + # Validate parameters. # TODO: do this or not?? # if predecessor_index is None and rm_index is not None: # raise ValueError('If predecessor_index is None, then rm_index must also be None.') # if predecessor_index is not None and rm_index is None: # raise ValueError('If rm_index is None, then predecessor_index must also be None.') - # Determine product index. # TODO: validate parameters + # Determine product and RM index. # TODO: validate parameters prod_index = prod_index or self.node.product_indices[0] + if rm_index is None: + if predecessor_index is not None: + pred = self.node.network.get_node_from_index(predecessor_index) + rm_index = pred.product_indices[0] if predecessor_index is not None: return self.inventory_level[prod_index] \ @@ -2316,7 +2319,7 @@ def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm # (because raw materials are processed right away). OO = self.on_order(prod_index=prod_index) RMI = self.raw_material_aggregate(prod_index=prod_index) - IDI = inbound_disrupted_items_aggregate(prod_index=prod_index) + IDI = self.inbound_disrupted_items_aggregate(prod_index=prod_index) return EIL + OO + RMI + IDI diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 5a9ad2a..0fbb4cf 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -2331,8 +2331,13 @@ def test_multiproduct_5_7(self): n._predecessors = preds n._successors = succs n.network = network + if n._dummy_product is not None: + n._dummy_product = network.products_by_index[n._dummy_product] + if n._external_supplier_dummy_product is not None: + n._external_supplier_dummy_product = network.products_by_index[n._external_supplier_dummy_product] + n._products_by_index = {k: network.products_by_index[k] for k in n._products_by_index.keys()} - prods = n.products + prods = n.product_indices n.remove_products('all') for prod in prods: n.add_product(network.products_by_index[prod]) @@ -2370,10 +2375,11 @@ def test_example_6_1_per_22(self): simulation(network, 23, rand_seed=17, progress_bar=False) nodes = {i: network.get_node_from_index(i) for i in range(1, 4)} + dps = {n.index: n._dummy_product.index for n in network.nodes} - self.assertAlmostEqual(nodes[1].state_vars[22].inventory_level, 0.497397132, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].inventory_level, 0.038666224, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].inventory_level, -0.832602868, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].inventory_level[dps[1]], 0.497397132, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].inventory_level[dps[2]], 0.038666224, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].inventory_level[dps[3]], -0.832602868, places=6) self.assertAlmostEqual(nodes[1].state_vars[22].on_hand, 0.497397132, places=6) self.assertAlmostEqual(nodes[2].state_vars[22].on_hand, 0.038666224, places=6) self.assertAlmostEqual(nodes[3].state_vars[22].on_hand, 0, places=6) @@ -2385,15 +2391,15 @@ def test_example_6_1_per_22(self): self.assertAlmostEqual(nodes[1].state_vars[22].in_transit_from(nodes[2]), 5.992602868, places=6) self.assertAlmostEqual(nodes[2].state_vars[22].in_transit_from(nodes[3]), 4.658730908, places=6) self.assertAlmostEqual(nodes[3].state_vars[22].in_transit_from(None), 6.031269092479092+5.491333775514212, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].in_transit, 5.992602868, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].in_transit, 4.658730908, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].in_transit, 6.031269092479092+5.491333775514212, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].on_order, 5.992602868, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].on_order, 5.491333776, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].on_order, 6.031269092479092+5.491333775514212, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].raw_material_aggregate, 0, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].raw_material_aggregate, 0, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].raw_material_aggregate, 0, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].in_transit(), 5.992602868, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].in_transit(), 4.658730908, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].in_transit(), 6.031269092479092+5.491333775514212, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].on_order(), 5.992602868, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].on_order(), 5.491333776, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].on_order(), 6.031269092479092+5.491333775514212, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].raw_material_aggregate(), 0, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].raw_material_aggregate(), 0, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].raw_material_aggregate(), 0, places=6) self.assertAlmostEqual(nodes[1].state_vars[22].inventory_position(), 6.49, places=6) self.assertAlmostEqual(nodes[2].state_vars[22].inventory_position(), 5.53, places=6) self.assertAlmostEqual(nodes[3].state_vars[22].inventory_position(), 10.69, places=6) @@ -2431,10 +2437,11 @@ def test_example_6_1_per_37(self): [OO1, OO2, OO3] = [6.65089457, 6.212689274, 11.03306543] nodes = {i: network.get_node_from_index(i) for i in range(1, 4)} + dps = {n.index: n._dummy_product.index for n in network.nodes} - self.assertAlmostEqual(nodes[1].state_vars[37].inventory_level, IL1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].inventory_level, IL2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].inventory_level, IL3, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].inventory_level[dps[1]], IL1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].inventory_level[dps[2]], IL2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].inventory_level[dps[3]], IL3, places=6) self.assertAlmostEqual(nodes[1].state_vars[37].on_hand, OH1, places=6) self.assertAlmostEqual(nodes[2].state_vars[37].on_hand, OH2, places=6) self.assertAlmostEqual(nodes[3].state_vars[37].on_hand, OH3, places=6) @@ -2446,15 +2453,15 @@ def test_example_6_1_per_37(self): self.assertAlmostEqual(nodes[1].state_vars[37].in_transit_from(nodes[2]), IT1, places=6) self.assertAlmostEqual(nodes[2].state_vars[37].in_transit_from(nodes[3]), IT2, places=6) self.assertAlmostEqual(nodes[3].state_vars[37].in_transit_from(None), IT3, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].in_transit, IT1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].in_transit, IT2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].in_transit, IT3, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].on_order, OO1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].on_order, OO2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].on_order, OO3, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].raw_material_aggregate, 0, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].raw_material_aggregate, 0, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].raw_material_aggregate, 0, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].in_transit(), IT1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].in_transit(), IT2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].in_transit(), IT3, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].on_order(), OO1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].on_order(), OO2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].on_order(), OO3, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].raw_material_aggregate(), 0, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].raw_material_aggregate(), 0, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].raw_material_aggregate(), 0, places=6) self.assertAlmostEqual(nodes[1].state_vars[37].inventory_position(), IL1+OO1, places=6) self.assertAlmostEqual(nodes[2].state_vars[37].inventory_position(), IL2+OO2, places=6) self.assertAlmostEqual(nodes[3].state_vars[37].inventory_position(), IL3+OO3, places=6) @@ -2492,10 +2499,11 @@ def test_assembly_3_stage_per_22(self): [RM01, RM02, RM0, RM1, RM2] = [0, 0, 0, 0, 0] nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + dps = {n.index: n._dummy_product.index for n in network.nodes} - self.assertEqual(nodes[0].state_vars[22].inventory_level, IL0) - self.assertEqual(nodes[1].state_vars[22].inventory_level, IL1) - self.assertEqual(nodes[2].state_vars[22].inventory_level, IL2) + self.assertEqual(nodes[0].state_vars[22].inventory_level[dps[0]], IL0) + self.assertEqual(nodes[1].state_vars[22].inventory_level[dps[1]], IL1) + self.assertEqual(nodes[2].state_vars[22].inventory_level[dps[2]], IL2) self.assertEqual(nodes[0].state_vars[22].on_hand, OH0) self.assertEqual(nodes[1].state_vars[22].on_hand, OH1) self.assertEqual(nodes[2].state_vars[22].on_hand, OH2) @@ -2508,21 +2516,21 @@ def test_assembly_3_stage_per_22(self): self.assertEqual(nodes[0].state_vars[22].in_transit_from(nodes[2]), IT20) self.assertEqual(nodes[1].state_vars[22].in_transit_from(None), IT1) self.assertEqual(nodes[2].state_vars[22].in_transit_from(None), IT2) - self.assertEqual(nodes[0].state_vars[22].in_transit, IT0) - self.assertEqual(nodes[1].state_vars[22].in_transit, IT1) - self.assertEqual(nodes[2].state_vars[22].in_transit, IT2) - self.assertEqual(nodes[0].state_vars[22].on_order_by_predecessor[1], OO01) - self.assertEqual(nodes[0].state_vars[22].on_order_by_predecessor[2], OO02) - self.assertEqual(nodes[0].state_vars[22].on_order, OO0) - self.assertEqual(nodes[1].state_vars[22].on_order, OO1) - self.assertEqual(nodes[2].state_vars[22].on_order, OO2) - self.assertEqual(nodes[0].state_vars[22].raw_material_inventory[1], RM01) - self.assertEqual(nodes[0].state_vars[22].raw_material_inventory[2], RM02) - self.assertEqual(nodes[0].state_vars[22].raw_material_aggregate, RM0) - self.assertEqual(nodes[1].state_vars[22].raw_material_aggregate, RM1) - self.assertEqual(nodes[2].state_vars[22].raw_material_aggregate, RM2) - self.assertEqual(nodes[0].state_vars[22].inventory_position(1), IL0+OO01+RM01) - self.assertEqual(nodes[0].state_vars[22].inventory_position(2), IL0+OO02+RM02) + self.assertEqual(nodes[0].state_vars[22].in_transit(), IT0) + self.assertEqual(nodes[1].state_vars[22].in_transit(), IT1) + self.assertEqual(nodes[2].state_vars[22].in_transit(), IT2) + self.assertEqual(nodes[0].state_vars[22].on_order_by_predecessor[1][dps[1]], OO01) + self.assertEqual(nodes[0].state_vars[22].on_order_by_predecessor[2][dps[2]], OO02) + self.assertEqual(nodes[0].state_vars[22].on_order(), OO0) + self.assertEqual(nodes[1].state_vars[22].on_order(), OO1) + self.assertEqual(nodes[2].state_vars[22].on_order(), OO2) + self.assertEqual(nodes[0].state_vars[22].raw_material_inventory[dps[1]], RM01) + self.assertEqual(nodes[0].state_vars[22].raw_material_inventory[dps[2]], RM02) + self.assertEqual(nodes[0].state_vars[22].raw_material_aggregate(), RM0) + self.assertEqual(nodes[1].state_vars[22].raw_material_aggregate(), RM1) + self.assertEqual(nodes[2].state_vars[22].raw_material_aggregate(), RM2) + self.assertEqual(nodes[0].state_vars[22].inventory_position(predecessor_index=1), IL0+OO01+RM01) + self.assertEqual(nodes[0].state_vars[22].inventory_position(predecessor_index=2), IL0+OO02+RM02) self.assertEqual(nodes[0].state_vars[22].inventory_position(), IL0+OO0+RM0) self.assertEqual(nodes[1].state_vars[22].inventory_position(), IL1+OO1+RM1) self.assertEqual(nodes[2].state_vars[22].inventory_position(), IL2+OO2+RM2) @@ -2532,8 +2540,8 @@ def test_assembly_3_stage_per_22(self): self.assertEqual(nodes[0].state_vars[22].echelon_inventory_level, IL0) self.assertEqual(nodes[1].state_vars[22].echelon_inventory_level, OH0+IT10+OH1-BO0) self.assertEqual(nodes[2].state_vars[22].echelon_inventory_level, OH0+IT20+OH2-BO0) - self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(1), IL0+OO01+RM01) - self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(2), IL0+OO02+RM02) + self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(predecessor_index=1), IL0+OO01+RM01) + self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(predecessor_index=2), IL0+OO02+RM02) self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(), IL0+OO0+RM0) self.assertEqual(nodes[1].state_vars[22].echelon_inventory_position(), OH0+IT10+OH1-BO0+OO1+RM1) self.assertEqual(nodes[2].state_vars[22].echelon_inventory_position(), OH0+IT20+OH2-BO0+OO2+RM2) @@ -2563,10 +2571,11 @@ def test_assembly_3_stage_per_43(self): [RM01, RM02, RM0, RM1, RM2] = [2, 0, 1, 0, 0] nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + dps = {n.index: n._dummy_product.index for n in network.nodes} - self.assertEqual(nodes[0].state_vars[per].inventory_level, IL0) - self.assertEqual(nodes[1].state_vars[per].inventory_level, IL1) - self.assertEqual(nodes[2].state_vars[per].inventory_level, IL2) + self.assertEqual(nodes[0].state_vars[per].inventory_level[dps[0]], IL0) + self.assertEqual(nodes[1].state_vars[per].inventory_level[dps[1]], IL1) + self.assertEqual(nodes[2].state_vars[per].inventory_level[dps[2]], IL2) self.assertEqual(nodes[0].state_vars[per].on_hand, OH0) self.assertEqual(nodes[1].state_vars[per].on_hand, OH1) self.assertEqual(nodes[2].state_vars[per].on_hand, OH2) @@ -2579,21 +2588,21 @@ def test_assembly_3_stage_per_43(self): self.assertEqual(nodes[0].state_vars[per].in_transit_from(nodes[2]), IT02) self.assertEqual(nodes[1].state_vars[per].in_transit_from(None), IT1) self.assertEqual(nodes[2].state_vars[per].in_transit_from(None), IT2) - self.assertEqual(nodes[0].state_vars[per].in_transit, IT0) - self.assertEqual(nodes[1].state_vars[per].in_transit, IT1) - self.assertEqual(nodes[2].state_vars[per].in_transit, IT2) - self.assertEqual(nodes[0].state_vars[per].on_order_by_predecessor[1], OO01) - self.assertEqual(nodes[0].state_vars[per].on_order_by_predecessor[2], OO02) - self.assertEqual(nodes[0].state_vars[per].on_order, OO0) - self.assertEqual(nodes[1].state_vars[per].on_order, OO1) - self.assertEqual(nodes[2].state_vars[per].on_order, OO2) - self.assertEqual(nodes[0].state_vars[per].raw_material_inventory[1], RM01) - self.assertEqual(nodes[0].state_vars[per].raw_material_inventory[2], RM02) - self.assertEqual(nodes[0].state_vars[per].raw_material_aggregate, RM0) - self.assertEqual(nodes[1].state_vars[per].raw_material_aggregate, RM1) - self.assertEqual(nodes[2].state_vars[per].raw_material_aggregate, RM2) - self.assertEqual(nodes[0].state_vars[per].inventory_position(1), IL0+OO01+RM01) - self.assertEqual(nodes[0].state_vars[per].inventory_position(2), IL0+OO02+RM02) + self.assertEqual(nodes[0].state_vars[per].in_transit(), IT0) + self.assertEqual(nodes[1].state_vars[per].in_transit(), IT1) + self.assertEqual(nodes[2].state_vars[per].in_transit(), IT2) + self.assertEqual(nodes[0].state_vars[per].on_order_by_predecessor[1][dps[1]], OO01) + self.assertEqual(nodes[0].state_vars[per].on_order_by_predecessor[2][dps[2]], OO02) + self.assertEqual(nodes[0].state_vars[per].on_order(), OO0) + self.assertEqual(nodes[1].state_vars[per].on_order(), OO1) + self.assertEqual(nodes[2].state_vars[per].on_order(), OO2) + self.assertEqual(nodes[0].state_vars[per].raw_material_inventory[dps[1]], RM01) + self.assertEqual(nodes[0].state_vars[per].raw_material_inventory[dps[2]], RM02) + self.assertEqual(nodes[0].state_vars[per].raw_material_aggregate(), RM0) + self.assertEqual(nodes[1].state_vars[per].raw_material_aggregate(), RM1) + self.assertEqual(nodes[2].state_vars[per].raw_material_aggregate(), RM2) + self.assertEqual(nodes[0].state_vars[per].inventory_position(predecessor_index=1), IL0+OO01+RM01) + self.assertEqual(nodes[0].state_vars[per].inventory_position(predecessor_index=2), IL0+OO02+RM02) self.assertEqual(nodes[0].state_vars[per].inventory_position(), IL0+OO0+RM0) self.assertEqual(nodes[1].state_vars[per].inventory_position(), IL1+OO1+RM1) self.assertEqual(nodes[2].state_vars[per].inventory_position(), IL2+OO2+RM2) @@ -2603,8 +2612,8 @@ def test_assembly_3_stage_per_43(self): self.assertEqual(nodes[0].state_vars[per].echelon_inventory_level, IL0) self.assertEqual(nodes[1].state_vars[per].echelon_inventory_level, OH0+IT01+OH1-BO0) self.assertEqual(nodes[2].state_vars[per].echelon_inventory_level, OH0+IT02+OH2-BO0) - self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(1), IL0+OO01+RM01) - self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(2), IL0+OO02+RM02) + self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(predecessor_index=1), IL0+OO01+RM01) + self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(predecessor_index=2), IL0+OO02+RM02) self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(), IL0+OO0+RM0) self.assertEqual(nodes[1].state_vars[per].echelon_inventory_position(), OH0+IT01+OH1-BO0+OO1+RM1) self.assertEqual(nodes[2].state_vars[per].echelon_inventory_position(), OH0+IT02+OH2-BO0+OO2+RM2) From bb9b3bf51aa9c6b6f73154d32775d63636df6587 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 19 Apr 2024 22:55:23 -0400 Subject: [PATCH 36/94] Fixed assembly-as-multiproduct test --- src/stockpyl/sim.py | 2 +- src/stockpyl/supply_chain_node.py | 13 ++- temp.txt | 102 ++++++++++++++++++++ temp_3stage.txt | 102 ++++++++++++++++++++ tests/test_sim.py | 153 ++++++++++++++++++++++++++++++ 5 files changed, 368 insertions(+), 4 deletions(-) create mode 100644 temp.txt create mode 100644 temp_3stage.txt diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 385d8d4..169bd62 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -716,7 +716,7 @@ def _calculate_period_costs(network, period): h = n.get_attribute('local_holding_cost', prod_index) or 0 else: h = n.get_attribute('in_transit_holding_cost', prod_index) or 0 - n.state_vars[period].in_transit_holding_cost_incurred = \ + n.state_vars[period].in_transit_holding_cost_incurred += \ h * float(np.sum([n.state_vars[period].in_transit_to(s, prod_index) for s in n.successors()])) # Revenue. n.state_vars[period].revenue_earned = (n.get_attribute('revenue', prod_index) or 0) * \ diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 6f1ddf5..79ccb62 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1491,6 +1491,15 @@ def get_attribute(self, attr, product=None): return self_attr[product_ind] else: return getattr(product_obj, attr) + elif attr == 'inventory_policy': + # inventory_policy needs to be handled separately because both None and Policy(None) + # trigger using the product's attribute. + if product_obj is not None and \ + (self_attr is None or self_attr == self._DEFAULT_VALUES['_inventory_policy'] or \ + (isinstance(self_attr, policy.Policy) and self_attr.type is None)): + return getattr(product_obj, attr) + else: + return self_attr else: # Determine whether attr is set to its default value; if so, try to use product attribute. # Properties that are aliases for attributes require special handling since there's no @@ -1499,9 +1508,7 @@ def get_attribute(self, attr, product=None): default_val = self._DEFAULT_VALUES['local_holding_cost'] elif attr == 'lead_time': default_val = self._DEFAULT_VALUES['shipment_lead_time'] - elif attr == 'inventory_policy': - default_val = self._DEFAULT_VALUES['_inventory_policy'] - # TODO: other '_' properties? + # TODO: '_' properties? else: default_val = self._DEFAULT_VALUES[attr] if product_obj is not None and ((default_val is None and self_attr is None) or (self_attr == default_val)): diff --git a/temp.txt b/temp.txt new file mode 100644 index 0000000..9bd7fae --- /dev/null +++ b/temp.txt @@ -0,0 +1,102 @@ + t | i=0 pr=0 IO:EXT|0 OQ:1|1 OQ:1|2 IS:1|1 IS:1|2 OS:EXT|0 IL:0 HC SC TC | i=1 pr=1 IO:0|1 IO:0|2 OQ:11|11 OQ:12|12 IS:11|11 IS:12|12 OS:0|1 OS:0|2 IL:1 IL:2 HC SC TC | i=1 pr=2 IO:0|1 IO:0|2 OQ:11|11 OQ:12|12 IS:11|11 IS:12|12 OS:0|1 OS:0|2 IL:1 IL:2 HC SC TC | i=11 pr=11 IO:1|11 OQ:EXT|-12 IS:EXT|-12 OS:1|11 IL:11 HC SC TC | i=12 pr=12 IO:1|12 OQ:EXT|-13 IS:EXT|-13 OS:1|12 IL:12 HC SC TC +--- ------------ ---------- -------- -------- -------- -------- ---------- ------ ---- ---- ---- ------------ -------- -------- ---------- ---------- ---------- ---------- -------- -------- ------ ------ ---- ---- ---- ------------ -------- -------- ---------- ---------- ---------- ---------- -------- -------- ------ ------ ---- ---- ---- -------------- --------- ------------ ------------ --------- ------- ---- ---- ---- -------------- --------- ------------ ------------ --------- ------- ---- ---- ---- + 0 | 5 5 5 0 0 5 2 4 0 4 | 5 5 5 5 0 0 5 5 8 6 14 0 24 | 5 5 5 5 0 0 5 5 8 6 14 0 24 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 1 | 3 3 3 5 5 3 4 8 0 8 | 3 3 3 3 0 0 3 3 5 3 8 0 14 | 3 3 3 3 0 0 3 3 5 3 8 0 14 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 + 2 | 6 6 6 3 3 6 1 2 0 2 | 6 6 6 6 5 5 6 6 4 2 6 0 18 | 6 6 6 6 5 5 6 6 4 2 6 0 18 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 3 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 3 3 6 5 1 -1 1 0 12 | 6 6 6 6 3 3 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 4 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 5 | 7 7 7 6 6 6 -1 1 20 21 | 7 7 7 7 6 6 7 6 0 -2 0 0 13 | 7 7 7 7 6 6 7 6 0 -2 0 0 13 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 + 6 | 5 5 5 7 6 6 0 2 0 2 | 5 5 5 5 6 6 5 6 1 -1 1 0 12 | 5 5 5 5 6 6 5 6 1 -1 1 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 7 | 5 5 5 5 6 5 1 3 0 3 | 5 5 5 5 7 7 5 6 3 1 4 0 15 | 5 5 5 5 7 7 5 6 3 1 4 0 15 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 8 | 5 5 5 5 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 9 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 10 | 7 7 7 5 5 7 0 0 0 0 | 7 7 7 7 5 5 7 6 1 -1 1 0 14 | 7 7 7 7 5 5 7 6 1 -1 1 0 14 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 + 11 | 6 6 6 7 6 6 0 1 0 1 | 6 6 6 6 5 5 6 5 0 -2 0 0 11 | 6 6 6 6 5 5 6 5 0 -2 0 0 11 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 12 | 3 3 3 6 5 3 2 6 0 6 | 3 3 3 3 7 7 3 5 4 2 6 0 14 | 3 3 3 3 7 7 3 5 4 2 6 0 14 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 + 13 | 5 5 5 3 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 5 3 8 0 18 | 5 5 5 5 6 6 5 5 5 3 8 0 18 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 14 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 3 3 6 6 2 0 2 0 14 | 6 6 6 6 3 3 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 15 | 3 3 3 6 6 3 4 8 0 8 | 3 3 3 3 5 5 3 3 4 2 6 0 12 | 3 3 3 3 5 5 3 3 4 2 6 0 12 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 + 16 | 6 6 6 3 3 6 1 2 0 2 | 6 6 6 6 6 6 6 6 4 2 6 0 18 | 6 6 6 6 6 6 6 6 4 2 6 0 18 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 17 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 3 3 5 5 2 0 2 0 12 | 5 5 5 5 3 3 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 18 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 19 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 20 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 21 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 22 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 23 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 24 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 5 5 4 4 4 2 6 0 14 | 4 4 4 4 5 5 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 25 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 26 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 27 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 28 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 29 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 30 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 31 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 32 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 33 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 34 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 35 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 36 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 37 | 5 5 5 6 6 5 1 3 0 3 | 5 5 5 5 6 6 5 6 2 0 2 0 13 | 5 5 5 5 6 6 5 6 2 0 2 0 13 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 38 | 4 4 4 5 6 4 3 6 0 6 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 39 | 3 3 3 4 4 3 4 8 0 8 | 3 3 3 3 5 5 3 3 6 4 10 0 16 | 3 3 3 3 5 5 3 3 6 4 10 0 16 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 + 40 | 4 4 4 3 3 4 3 6 0 6 | 4 4 4 4 4 4 4 4 6 4 10 0 18 | 4 4 4 4 4 4 4 4 6 4 10 0 18 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 41 | 8 8 8 4 4 7 -1 0 20 20 | 8 8 8 8 3 3 8 7 1 -1 1 0 16 | 8 8 8 8 3 3 8 7 1 -1 1 0 16 | 8 8 8 8 100 0 0 0 | 8 8 8 8 100 0 0 0 + 42 | 5 5 5 8 7 6 1 3 0 3 | 5 5 5 5 4 4 5 4 0 -2 0 0 9 | 5 5 5 5 4 4 5 4 0 -2 0 0 9 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 43 | 4 4 4 5 4 4 1 4 0 4 | 4 4 4 4 8 8 4 6 4 2 6 0 16 | 4 4 4 4 8 8 4 6 4 2 6 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 44 | 6 6 6 4 6 6 1 2 0 2 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 45 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 46 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 6 6 6 6 2 0 2 0 14 | 6 6 6 6 6 6 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 47 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 48 | 4 4 4 6 5 4 2 5 0 5 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 49 | 4 4 4 4 5 4 3 6 0 6 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 50 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 4 4 6 6 3 1 4 0 16 | 6 6 6 6 4 4 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 51 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 4 4 4 4 3 1 4 0 12 | 4 4 4 4 4 4 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 52 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 53 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 54 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 55 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 56 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 5 5 4 4 3 1 4 0 12 | 4 4 4 4 5 5 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 57 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 6 6 6 6 3 1 4 0 16 | 6 6 6 6 6 6 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 58 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 4 4 4 4 3 1 4 0 12 | 4 4 4 4 4 4 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 59 | 4 4 4 4 4 4 3 6 0 6 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 60 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 5 5 4 2 6 0 16 | 5 5 5 5 4 4 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 61 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 4 4 5 5 3 1 4 0 14 | 5 5 5 5 4 4 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 62 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 5 5 4 4 4 2 6 0 14 | 4 4 4 4 5 5 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 63 | 2 2 2 4 4 2 5 10 0 10 | 2 2 2 2 5 5 2 2 7 5 12 0 16 | 2 2 2 2 5 5 2 2 7 5 12 0 16 | 2 2 2 2 100 0 0 0 | 2 2 2 2 100 0 0 0 + 64 | 4 4 4 2 2 4 3 6 0 6 | 4 4 4 4 4 4 4 4 7 5 12 0 20 | 4 4 4 4 4 4 4 4 7 5 12 0 20 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 65 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 2 2 5 5 4 2 6 0 16 | 5 5 5 5 2 2 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 66 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 67 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 68 | 8 8 8 5 5 7 -1 0 20 20 | 8 8 8 8 6 6 8 6 0 -2 0 0 14 | 8 8 8 8 6 6 8 6 0 -2 0 0 14 | 8 8 8 8 100 0 0 0 | 8 8 8 8 100 0 0 0 + 69 | 6 6 6 8 6 6 -1 2 20 22 | 6 6 6 6 5 5 5 5 -1 -3 0 0 10 | 6 6 6 6 5 5 5 5 -1 -3 0 0 10 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 70 | 4 4 4 5 5 5 0 2 0 2 | 4 4 4 4 8 8 5 7 3 1 4 0 16 | 4 4 4 4 8 8 5 7 3 1 4 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 71 | 5 5 5 5 7 5 2 4 0 4 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 72 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 4 4 5 5 3 1 4 0 14 | 5 5 5 5 4 4 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 73 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 74 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 75 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 76 | 4 4 4 6 6 4 2 5 0 5 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 77 | 7 7 7 4 5 7 0 0 0 0 | 7 7 7 7 6 6 7 7 2 0 2 0 16 | 7 7 7 7 6 6 7 7 2 0 2 0 16 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 + 78 | 6 6 6 7 7 6 1 2 0 2 | 6 6 6 6 4 4 6 4 0 -2 0 0 10 | 6 6 6 6 4 4 6 4 0 -2 0 0 10 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 79 | 5 5 5 6 4 5 0 2 0 2 | 5 5 5 5 7 7 5 7 2 0 2 0 14 | 5 5 5 5 7 7 5 7 2 0 2 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 80 | 5 5 5 5 7 5 2 4 0 4 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 81 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 82 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 83 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 84 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 85 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 86 | 7 7 7 5 5 7 0 0 0 0 | 7 7 7 7 6 6 7 6 1 -1 1 0 14 | 7 7 7 7 6 6 7 6 1 -1 1 0 14 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 + 87 | 2 2 2 7 6 2 4 9 0 9 | 2 2 2 2 5 5 2 3 4 2 6 0 11 | 2 2 2 2 5 5 2 3 4 2 6 0 11 | 2 2 2 2 100 0 0 0 | 2 2 2 2 100 0 0 0 + 88 | 6 6 6 2 3 6 1 2 0 2 | 6 6 6 6 7 7 6 6 5 3 8 0 20 | 6 6 6 6 7 7 6 6 5 3 8 0 20 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 89 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 2 2 4 4 3 1 4 0 12 | 4 4 4 4 2 2 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 90 | 4 4 4 4 4 4 3 6 0 6 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 91 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 5 5 4 2 6 0 16 | 5 5 5 5 4 4 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 92 | 8 8 8 5 5 7 -1 0 20 20 | 8 8 8 8 4 4 8 6 0 -2 0 0 14 | 8 8 8 8 4 4 8 6 0 -2 0 0 14 | 8 8 8 8 100 0 0 0 | 8 8 8 8 100 0 0 0 + 93 | 4 4 4 8 6 5 1 4 0 4 | 4 4 4 4 5 5 4 5 1 -1 1 0 10 | 4 4 4 4 5 5 4 5 1 -1 1 0 10 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 94 | 6 6 6 4 5 6 0 1 0 1 | 6 6 6 6 8 8 6 7 3 1 4 0 17 | 6 6 6 6 8 8 6 7 3 1 4 0 17 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 95 | 6 6 6 6 7 6 1 2 0 2 | 6 6 6 6 4 4 6 5 1 -1 1 0 12 | 6 6 6 6 4 4 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 96 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 97 | 4 4 4 6 6 4 2 5 0 5 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 98 | 5 5 5 4 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 99 | 7 7 7 5 5 7 0 0 0 0 | 7 7 7 7 4 4 7 6 1 -1 1 0 14 | 7 7 7 7 4 4 7 6 1 -1 1 0 14 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 \ No newline at end of file diff --git a/temp_3stage.txt b/temp_3stage.txt new file mode 100644 index 0000000..7a80083 --- /dev/null +++ b/temp_3stage.txt @@ -0,0 +1,102 @@ + t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 OQ:2|-2 IS:1|-1 IS:2|-2 OS:EXT|-1000 IL:-1000 HC SC TC | i=1 pr=-1 IO:0|-1 OQ:EXT|-2 IS:EXT|-2 OS:0|-1 IL:-1 HC SC TC | i=2 pr=-2 IO:0|-2 OQ:EXT|-3 IS:EXT|-3 OS:0|-2 IL:-2 HC SC TC +--- ---------------- -------------- --------- --------- --------- --------- -------------- ---------- ---- ---- ---- ------------- --------- ----------- ----------- --------- ------- ---- ---- ---- ------------- --------- ----------- ----------- --------- ------- ---- ---- ---- + 0 | 5 5 5 0 0 5 2 4 0 4 | 5 5 0 5 8 8 0 13 | 5 5 0 5 6 6 0 11 + 1 | 3 3 3 5 5 3 4 8 0 8 | 3 3 0 3 5 5 0 8 | 3 3 0 3 3 3 0 6 + 2 | 6 6 6 3 3 6 1 2 0 2 | 6 6 5 6 4 4 0 10 | 6 6 5 6 2 2 0 8 + 3 | 6 6 6 6 6 6 1 2 0 2 | 6 6 3 6 1 1 0 7 | 6 6 3 5 -1 0 0 5 + 4 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 1 1 0 7 | 6 6 6 6 -1 0 0 6 + 5 | 7 7 7 6 6 6 -1 1 20 21 | 7 7 6 7 0 0 0 7 | 7 7 6 6 -2 0 0 6 + 6 | 5 5 5 7 6 6 0 2 0 2 | 5 5 6 5 1 1 0 6 | 5 5 6 6 -1 0 0 6 + 7 | 5 5 5 5 6 5 1 3 0 3 | 5 5 7 5 3 3 0 8 | 5 5 7 6 1 1 0 7 + 8 | 5 5 5 5 6 5 2 4 0 4 | 5 5 5 5 3 3 0 8 | 5 5 5 5 1 1 0 6 + 9 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 3 3 0 8 | 5 5 5 5 1 1 0 6 + 10 | 7 7 7 5 5 7 0 0 0 0 | 7 7 5 7 1 1 0 8 | 7 7 5 6 -1 0 0 6 + 11 | 6 6 6 7 6 6 0 1 0 1 | 6 6 5 6 0 0 0 6 | 6 6 5 5 -2 0 0 5 + 12 | 3 3 3 6 5 3 2 6 0 6 | 3 3 7 3 4 4 0 7 | 3 3 7 5 2 2 0 7 + 13 | 5 5 5 3 5 5 2 4 0 4 | 5 5 6 5 5 5 0 10 | 5 5 6 5 3 3 0 8 + 14 | 6 6 6 5 5 6 1 2 0 2 | 6 6 3 6 2 2 0 8 | 6 6 3 6 0 0 0 6 + 15 | 3 3 3 6 6 3 4 8 0 8 | 3 3 5 3 4 4 0 7 | 3 3 5 3 2 2 0 5 + 16 | 6 6 6 3 3 6 1 2 0 2 | 6 6 6 6 4 4 0 10 | 6 6 6 6 2 2 0 8 + 17 | 5 5 5 6 6 5 2 4 0 4 | 5 5 3 5 2 2 0 7 | 5 5 3 5 0 0 0 5 + 18 | 4 4 4 5 5 4 3 6 0 6 | 4 4 6 4 4 4 0 8 | 4 4 6 4 2 2 0 6 + 19 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 0 9 | 5 5 5 5 2 2 0 7 + 20 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 0 8 | 4 4 4 4 2 2 0 6 + 21 | 6 6 6 4 4 6 1 2 0 2 | 6 6 5 6 3 3 0 9 | 6 6 5 6 1 1 0 7 + 22 | 5 5 5 6 6 5 2 4 0 4 | 5 5 4 5 2 2 0 7 | 5 5 4 5 0 0 0 5 + 23 | 5 5 5 5 5 5 2 4 0 4 | 5 5 6 5 3 3 0 8 | 5 5 6 5 1 1 0 6 + 24 | 4 4 4 5 5 4 3 6 0 6 | 4 4 5 4 4 4 0 8 | 4 4 5 4 2 2 0 6 + 25 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 0 9 | 5 5 5 5 2 2 0 7 + 26 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 0 8 | 4 4 4 4 2 2 0 6 + 27 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 0 9 | 5 5 5 5 2 2 0 7 + 28 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 0 8 | 4 4 4 4 2 2 0 6 + 29 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 0 9 | 5 5 5 5 2 2 0 7 + 30 | 6 6 6 5 5 6 1 2 0 2 | 6 6 4 6 2 2 0 8 | 6 6 4 6 0 0 0 6 + 31 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 2 2 0 7 | 5 5 5 5 0 0 0 5 + 32 | 5 5 5 5 5 5 2 4 0 4 | 5 5 6 5 3 3 0 8 | 5 5 6 5 1 1 0 6 + 33 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 3 3 0 8 | 5 5 5 5 1 1 0 6 + 34 | 6 6 6 5 5 6 1 2 0 2 | 6 6 5 6 2 2 0 8 | 6 6 5 6 0 0 0 6 + 35 | 6 6 6 6 6 6 1 2 0 2 | 6 6 5 6 1 1 0 7 | 6 6 5 5 -1 0 0 5 + 36 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 1 1 0 7 | 6 6 6 6 -1 0 0 6 + 37 | 5 5 5 6 6 5 1 3 0 3 | 5 5 6 5 2 2 0 7 | 5 5 6 6 0 0 0 6 + 38 | 4 4 4 5 6 4 3 6 0 6 | 4 4 6 4 4 4 0 8 | 4 4 6 4 2 2 0 6 + 39 | 3 3 3 4 4 3 4 8 0 8 | 3 3 5 3 6 6 0 9 | 3 3 5 3 4 4 0 7 + 40 | 4 4 4 3 3 4 3 6 0 6 | 4 4 4 4 6 6 0 10 | 4 4 4 4 4 4 0 8 + 41 | 8 8 8 4 4 7 -1 0 20 20 | 8 8 3 8 1 1 0 9 | 8 8 3 7 -1 0 0 7 + 42 | 5 5 5 8 7 6 1 3 0 3 | 5 5 4 5 0 0 0 5 | 5 5 4 4 -2 0 0 4 + 43 | 4 4 4 5 4 4 1 4 0 4 | 4 4 8 4 4 4 0 8 | 4 4 8 6 2 2 0 8 + 44 | 6 6 6 4 6 6 1 2 0 2 | 6 6 5 6 3 3 0 9 | 6 6 5 6 1 1 0 7 + 45 | 5 5 5 6 6 5 2 4 0 4 | 5 5 4 5 2 2 0 7 | 5 5 4 5 0 0 0 5 + 46 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 2 2 0 8 | 6 6 6 6 0 0 0 6 + 47 | 6 6 6 6 6 6 1 2 0 2 | 6 6 5 6 1 1 0 7 | 6 6 5 5 -1 0 0 5 + 48 | 4 4 4 6 5 4 2 5 0 5 | 4 4 6 4 3 3 0 7 | 4 4 6 5 1 1 0 6 + 49 | 4 4 4 4 5 4 3 6 0 6 | 4 4 6 4 5 5 0 9 | 4 4 6 4 3 3 0 7 + 50 | 6 6 6 4 4 6 1 2 0 2 | 6 6 4 6 3 3 0 9 | 6 6 4 6 1 1 0 7 + 51 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 3 3 0 7 | 4 4 4 4 1 1 0 5 + 52 | 5 5 5 4 4 5 2 4 0 4 | 5 5 6 5 4 4 0 9 | 5 5 6 5 2 2 0 7 + 53 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 0 8 | 4 4 4 4 2 2 0 6 + 54 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 0 9 | 5 5 5 5 2 2 0 7 + 55 | 6 6 6 5 5 6 1 2 0 2 | 6 6 4 6 2 2 0 8 | 6 6 4 6 0 0 0 6 + 56 | 4 4 4 6 6 4 3 6 0 6 | 4 4 5 4 3 3 0 7 | 4 4 5 4 1 1 0 5 + 57 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 3 3 0 9 | 6 6 6 6 1 1 0 7 + 58 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 3 3 0 7 | 4 4 4 4 1 1 0 5 + 59 | 4 4 4 4 4 4 3 6 0 6 | 4 4 6 4 5 5 0 9 | 4 4 6 4 3 3 0 7 + 60 | 5 5 5 4 4 5 2 4 0 4 | 5 5 4 5 4 4 0 9 | 5 5 4 5 2 2 0 7 + 61 | 5 5 5 5 5 5 2 4 0 4 | 5 5 4 5 3 3 0 8 | 5 5 4 5 1 1 0 6 + 62 | 4 4 4 5 5 4 3 6 0 6 | 4 4 5 4 4 4 0 8 | 4 4 5 4 2 2 0 6 + 63 | 2 2 2 4 4 2 5 10 0 10 | 2 2 5 2 7 7 0 9 | 2 2 5 2 5 5 0 7 + 64 | 4 4 4 2 2 4 3 6 0 6 | 4 4 4 4 7 7 0 11 | 4 4 4 4 5 5 0 9 + 65 | 5 5 5 4 4 5 2 4 0 4 | 5 5 2 5 4 4 0 9 | 5 5 2 5 2 2 0 7 + 66 | 6 6 6 5 5 6 1 2 0 2 | 6 6 4 6 2 2 0 8 | 6 6 4 6 0 0 0 6 + 67 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 2 2 0 7 | 5 5 5 5 0 0 0 5 + 68 | 8 8 8 5 5 7 -1 0 20 20 | 8 8 6 8 0 0 0 8 | 8 8 6 6 -2 0 0 6 + 69 | 6 6 6 8 6 6 -1 2 20 22 | 6 6 5 5 -1 0 0 5 | 6 6 5 5 -3 0 0 5 + 70 | 4 4 4 5 5 5 0 2 0 2 | 4 4 8 5 3 3 0 8 | 4 4 8 7 1 1 0 8 + 71 | 5 5 5 5 7 5 2 4 0 4 | 5 5 6 5 4 4 0 9 | 5 5 6 5 2 2 0 7 + 72 | 5 5 5 5 5 5 2 4 0 4 | 5 5 4 5 3 3 0 8 | 5 5 4 5 1 1 0 6 + 73 | 6 6 6 5 5 6 1 2 0 2 | 6 6 5 6 2 2 0 8 | 6 6 5 6 0 0 0 6 + 74 | 6 6 6 6 6 6 1 2 0 2 | 6 6 5 6 1 1 0 7 | 6 6 5 5 -1 0 0 5 + 75 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 1 1 0 7 | 6 6 6 6 -1 0 0 6 + 76 | 4 4 4 6 6 4 2 5 0 5 | 4 4 6 4 3 3 0 7 | 4 4 6 5 1 1 0 6 + 77 | 7 7 7 4 5 7 0 0 0 0 | 7 7 6 7 2 2 0 9 | 7 7 6 7 0 0 0 7 + 78 | 6 6 6 7 7 6 1 2 0 2 | 6 6 4 6 0 0 0 6 | 6 6 4 4 -2 0 0 4 + 79 | 5 5 5 6 4 5 0 2 0 2 | 5 5 7 5 2 2 0 7 | 5 5 7 7 0 0 0 7 + 80 | 5 5 5 5 7 5 2 4 0 4 | 5 5 6 5 3 3 0 8 | 5 5 6 5 1 1 0 6 + 81 | 6 6 6 5 5 6 1 2 0 2 | 6 6 5 6 2 2 0 8 | 6 6 5 6 0 0 0 6 + 82 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 2 2 0 7 | 5 5 5 5 0 0 0 5 + 83 | 4 4 4 5 5 4 3 6 0 6 | 4 4 6 4 4 4 0 8 | 4 4 6 4 2 2 0 6 + 84 | 6 6 6 4 4 6 1 2 0 2 | 6 6 5 6 3 3 0 9 | 6 6 5 6 1 1 0 7 + 85 | 5 5 5 6 6 5 2 4 0 4 | 5 5 4 5 2 2 0 7 | 5 5 4 5 0 0 0 5 + 86 | 7 7 7 5 5 7 0 0 0 0 | 7 7 6 7 1 1 0 8 | 7 7 6 6 -1 0 0 6 + 87 | 2 2 2 7 6 2 4 9 0 9 | 2 2 5 2 4 4 0 6 | 2 2 5 3 2 2 0 5 + 88 | 6 6 6 2 3 6 1 2 0 2 | 6 6 7 6 5 5 0 11 | 6 6 7 6 3 3 0 9 + 89 | 4 4 4 6 6 4 3 6 0 6 | 4 4 2 4 3 3 0 7 | 4 4 2 4 1 1 0 5 + 90 | 4 4 4 4 4 4 3 6 0 6 | 4 4 6 4 5 5 0 9 | 4 4 6 4 3 3 0 7 + 91 | 5 5 5 4 4 5 2 4 0 4 | 5 5 4 5 4 4 0 9 | 5 5 4 5 2 2 0 7 + 92 | 8 8 8 5 5 7 -1 0 20 20 | 8 8 4 8 0 0 0 8 | 8 8 4 6 -2 0 0 6 + 93 | 4 4 4 8 6 5 1 4 0 4 | 4 4 5 4 1 1 0 5 | 4 4 5 5 -1 0 0 5 + 94 | 6 6 6 4 5 6 0 1 0 1 | 6 6 8 6 3 3 0 9 | 6 6 8 7 1 1 0 8 + 95 | 6 6 6 6 7 6 1 2 0 2 | 6 6 4 6 1 1 0 7 | 6 6 4 5 -1 0 0 5 + 96 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 1 1 0 7 | 6 6 6 6 -1 0 0 6 + 97 | 4 4 4 6 6 4 2 5 0 5 | 4 4 6 4 3 3 0 7 | 4 4 6 5 1 1 0 6 + 98 | 5 5 5 4 5 5 2 4 0 4 | 5 5 6 5 4 4 0 9 | 5 5 6 5 2 2 0 7 + 99 | 7 7 7 5 5 7 0 0 0 0 | 7 7 4 7 1 1 0 8 | 7 7 4 6 -1 0 0 6 \ No newline at end of file diff --git a/tests/test_sim.py b/tests/test_sim.py index 97eb5d9..364db82 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -321,6 +321,7 @@ def test_assembly_3_stage(self): ext_dummy_prods = {n.index: n._external_supplier_dummy_product.index for n in network.source_nodes} total_cost = simulation(network, 100, rand_seed=17, progress_bar=False, consistency_checks='E') +# write_results(network=network, num_periods=100, columns_to_print=['basic', 'costs'], write_txt=True, txt_filename='temp_3stage.txt') # Compare total cost. self.assertEqual(total_cost, 1884) @@ -440,6 +441,158 @@ def test_node_not_set(self): total_cost = simulation(network, 100, rand_seed=17, progress_bar=False, consistency_checks='E') +class TestMultiproductSimulation(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestMultiproductSimulation', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestMultiproductSimulation', 'tear_down_class()') + + def test_assembly_3_stage_as_multiproduct(self): + """Test that simulation() function correctly simulates 3-stage assembly model in which + predecessor products are interpreted as separate RMs at a single node. + """ + print_status('TestMultiproductSimulation', 'test_assembly_3_stage_as_multiproduct()') + + orig_network = load_instance("assembly_3_stage") + rms = {n.index: SupplyChainProduct.from_node(n) for n in orig_network.source_nodes} + + network = serial_system( + num_nodes=2, + node_order_in_system=[1, 0], + node_order_in_lists=[0, 1], + local_holding_cost=[2, 1], + stockout_cost=[20, 0], + demand_type='N', + mean=5, + standard_deviation=1, + shipment_lead_time=[1, 2], + # policy_type='BS', + # base_stock_level=[7, 13, 11], + # initial_inventory_level=[7, 13, 11] + ) + # Add supplier nodes for products 1 and 2. (Can't be external supplier because prod 1 and 2 + # need separate RMs to match oroginal system.) + network.add_predecessor(network.get_node_from_index(1), SupplyChainNode(index=11, supply_type='U')) + network.add_predecessor(network.get_node_from_index(1), SupplyChainNode(index=12, supply_type='U')) + network.get_node_from_index(1).supply_type = None + + nodes = {n.index: n for n in network.nodes} + + products = {prod_index: SupplyChainProduct(index=prod_index) for prod_index in [0, 1, 2, 11, 12]} + products[0].set_bill_of_materials(rm_index=1, num_needed=1) + products[0].set_bill_of_materials(rm_index=2, num_needed=1) + products[1].set_bill_of_materials(rm_index=11, num_needed=1) + products[2].set_bill_of_materials(rm_index=12, num_needed=1) + + nodes[0].add_product(products[0]) + nodes[1].add_products([products[1], products[2]]) + nodes[11].add_product(products[11]) + nodes[12].add_product(products[12]) + + nodes[0].demand_source.round_to_int = True + nodes[0].initial_inventory_level = 7 + nodes[0].inventory_policy = Policy(type='BS', base_stock_level=7, node=nodes[0]) + + products[1].inventory_policy = Policy(type='BS', base_stock_level=13, node=nodes[1], product=products[1]) + products[2].inventory_policy = Policy(type='BS', base_stock_level=11, node=nodes[1], product=products[2]) + products[1].initial_inventory_level = 13 + products[2].initial_inventory_level = 11 + + nodes[11].inventory_policy = Policy(type='BS', base_stock_level=100, node=nodes[11]) + nodes[12].inventory_policy = Policy(type='BS', base_stock_level=100, node=nodes[12]) + + total_cost = simulation(network, 100, rand_seed=17, progress_bar=False, consistency_checks='E') + write_results(network=network, num_periods=100, columns_to_print=['basic', 'costs'], write_txt=True, txt_filename='temp.txt') + + # Compare total cost. + self.assertEqual(total_cost, 1884) + + nodes = {n.index: n for n in network.nodes} + + # Compare a few performance measures. + self.assertEqual(nodes[0].state_vars[6].order_quantity[1][1], 5) + self.assertEqual(nodes[0].state_vars[6].order_quantity[1][2], 5) + self.assertEqual(nodes[0].state_vars[26].inventory_level[0], 3) + self.assertEqual(nodes[1].state_vars[26].inventory_level[1], 4) + self.assertEqual(nodes[1].state_vars[26].inventory_level[2], 2) + self.assertEqual(nodes[0].state_vars[41].inventory_level[0], -1) + self.assertEqual(nodes[1].state_vars[41].inventory_level[1], 1) + self.assertEqual(nodes[1].state_vars[41].inventory_level[2], -1) + self.assertEqual(nodes[1].state_vars[43].inbound_order[0][1], 4) + self.assertEqual(nodes[1].state_vars[43].inbound_order[0][2], 4) + self.assertEqual(nodes[0].state_vars[95].inbound_shipment[1][1], 6) + self.assertEqual(nodes[0].state_vars[95].inbound_shipment[1][2], 7) + self.assertEqual(nodes[1].state_vars[95].inbound_shipment[11][11], 4) + self.assertEqual(nodes[1].state_vars[95].inbound_shipment[12][12], 4) + self.assertEqual(nodes[1].state_vars[78].backorders_by_successor[0][2], 2) + + def test_rosling_figure_1(self): + """Test that simulation() function correctly simulates model in Rosling (1989), + Figure 1. + """ + print_status('TestSimulation', 'test_rosling_figure_1()') + + network = load_instance("rosling_figure_1") + + nodes = {n.index: n for n in network.nodes} + dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} + ext_dummy_prods = {n.index: n._external_supplier_dummy_product.index for n in network.source_nodes} + + # Make the BS levels a little smaller so there are some stockouts. + nodes[1].inventory_policy.base_stock_level = 6 + nodes[2].inventory_policy.base_stock_level = 20 + nodes[3].inventory_policy.base_stock_level = 35 + nodes[4].inventory_policy.base_stock_level = 58 + nodes[5].inventory_policy.base_stock_level = 45 + nodes[6].inventory_policy.base_stock_level = 65 + nodes[7].inventory_policy.base_stock_level = 75 + + total_cost = simulation(network, 100, rand_seed=17, progress_bar=False, consistency_checks='E') + + # Compare total cost. + self.assertEqual(total_cost, 0) + + # Compare a few performance measures. + self.assertEqual(nodes[1].state_vars[6].order_quantity[2][dummy_prods[2]], 4) + self.assertEqual(nodes[1].state_vars[6].order_quantity[3][dummy_prods[3]], 4) + self.assertEqual(nodes[2].state_vars[6].order_quantity[5][dummy_prods[5]], 4) + self.assertEqual(nodes[3].state_vars[6].order_quantity[4][dummy_prods[4]], 4) + self.assertEqual(nodes[4].state_vars[6].order_quantity[6][dummy_prods[6]], 0) + self.assertEqual(nodes[4].state_vars[6].order_quantity[7][dummy_prods[7]], 0) + self.assertEqual(nodes[1].state_vars[16].inventory_level[dummy_prods[1]], 3) + self.assertEqual(nodes[2].state_vars[16].inventory_level[dummy_prods[2]], 7) + self.assertEqual(nodes[3].state_vars[16].inventory_level[dummy_prods[3]], 4) + self.assertEqual(nodes[4].state_vars[16].inventory_level[dummy_prods[4]], 9) + self.assertEqual(nodes[5].state_vars[16].inventory_level[dummy_prods[5]], 7) + self.assertEqual(nodes[6].state_vars[16].inventory_level[dummy_prods[6]], 19) + self.assertEqual(nodes[7].state_vars[16].inventory_level[dummy_prods[7]], 24) + self.assertEqual(nodes[1].state_vars[44].inventory_level[dummy_prods[1]], -4) + self.assertEqual(nodes[2].state_vars[44].inventory_level[dummy_prods[2]], -5) + self.assertEqual(nodes[3].state_vars[44].inventory_level[dummy_prods[3]], 0) + self.assertEqual(nodes[4].state_vars[44].inventory_level[dummy_prods[4]], -2) + self.assertEqual(nodes[5].state_vars[44].inventory_level[dummy_prods[5]], -6) + self.assertEqual(nodes[6].state_vars[44].inventory_level[dummy_prods[6]], 0) + self.assertEqual(nodes[7].state_vars[44].inventory_level[dummy_prods[7]], 10) + self.assertEqual(nodes[1].state_vars[16].inbound_shipment[2][dummy_prods[2]], 2) + self.assertEqual(nodes[1].state_vars[16].inbound_shipment[3][dummy_prods[3]], 2) + self.assertEqual(nodes[2].state_vars[16].inbound_shipment[5][dummy_prods[5]], 1) + self.assertEqual(nodes[3].state_vars[16].inbound_shipment[4][dummy_prods[4]], 0) + self.assertEqual(nodes[4].state_vars[16].inbound_shipment[6][dummy_prods[6]], 12) + self.assertEqual(nodes[4].state_vars[16].inbound_shipment[7][dummy_prods[7]], 12) + self.assertEqual(nodes[5].state_vars[16].inbound_shipment[None][ext_dummy_prods[5]], 9) + self.assertEqual(nodes[6].state_vars[16].inbound_shipment[None][ext_dummy_prods[6]], 13) + self.assertEqual(nodes[7].state_vars[16].inbound_shipment[None][ext_dummy_prods[7]], 12) + self.assertEqual(nodes[1].state_vars[45].raw_material_inventory[dummy_prods[2]], 0) + self.assertEqual(nodes[1].state_vars[45].raw_material_inventory[dummy_prods[3]], 5) + self.assertEqual(nodes[2].state_vars[45].raw_material_inventory[dummy_prods[5]], 0) + self.assertEqual(nodes[4].state_vars[45].raw_material_inventory[dummy_prods[6]], 0) + + class TestStepByStepSimulation(unittest.TestCase): @classmethod def set_up_class(cls): From e19aea01394ec3e55aab25522df0e9806b394555 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 22 Apr 2024 17:41:26 -0400 Subject: [PATCH 37/94] All tests pass, including multi-product versions of assembly and Rosling systems --- src/stockpyl/datasets/stockpyl_instances.json | 15967 +----------- src/stockpyl/instances.py | 19 +- src/stockpyl/sim.py | 19 +- src/stockpyl/sim_io.py | 103 +- src/stockpyl/supply_chain_node.py | 70 +- temp.txt | 102 - temp_3stage.txt | 102 - .../test_demand_source_TestFromDict_data.json | 801 +- ..._disruption_process_TestFromDict_data.json | 801 +- ..._TestSaveInstance_example_4_2_correct.json | 19 +- ..._TestSaveInstance_example_6_1_correct.json | 405 +- ...ample_6_1_with_order_capacity_correct.json | 405 +- ..._TestSaveInstance_example_9_5_correct.json | 19 +- ..._TestSaveInstance_figure_6_14_correct.json | 1197 +- ...nstance_omit_state_vars_false_correct.json | 12258 +--------- ...omit_state_vars_false_rosling_correct.json | 20307 +--------------- ...Instance_omit_state_vars_true_correct.json | 633 +- .../test_policy_TestFromDict_data.json | 801 +- .../test_sim_disruption_example_6_1_OP.csv | 202 +- .../test_sim_disruption_example_6_1_RP.csv | 202 +- .../test_sim_disruption_example_6_1_SP.csv | 202 +- .../test_sim_disruption_example_6_1_TP.csv | 202 +- ...riteResults_test_columns_to_print_list.csv | 2 +- ...riteResults_test_columns_to_print_list.txt | 24 +- ..._test_columns_to_print_list_of_strings.csv | 2 +- ..._test_columns_to_print_list_of_strings.txt | 24 +- ...iteResults_test_columns_to_print_mixed.csv | 2 +- ...iteResults_test_columns_to_print_mixed.txt | 24 +- ...riteResults_test_columns_to_print_none.csv | 2 +- ...riteResults_test_columns_to_print_none.txt | 24 +- ...teResults_test_columns_to_print_string.csv | 2 +- ...teResults_test_columns_to_print_string.txt | 24 +- ...m_io_TestWriteResults_test_example_6_1.csv | 2 +- ...m_io_TestWriteResults_test_example_6_1.txt | 24 +- ...TestWriteResults_test_periods_to_print.csv | 2 +- ...TestWriteResults_test_periods_to_print.txt | 10 +- ...ply_chain_network_TestToFromDict_data.json | 1767 +- ...ly_chain_node_TestNodeToFromDict_data.json | 2 +- tests/settings.py | 2 +- tests/temp_ech.csv | 103 - tests/temp_local.csv | 103 - tests/test_instances.py | 4 +- tests/test_sim.py | 189 +- tests/test_sim_io.py | 15 - tests/test_supply_chain_network.py | 10 +- tests/test_supply_chain_node.py | 20 +- tests/test_supply_chain_product.py | 4 +- 47 files changed, 781 insertions(+), 56442 deletions(-) delete mode 100644 temp.txt delete mode 100644 temp_3stage.txt delete mode 100644 tests/temp_ech.csv delete mode 100644 tests/temp_local.csv diff --git a/src/stockpyl/datasets/stockpyl_instances.json b/src/stockpyl/datasets/stockpyl_instances.json index 44d6181..4d4eef9 100644 --- a/src/stockpyl/datasets/stockpyl_instances.json +++ b/src/stockpyl/datasets/stockpyl_instances.json @@ -1,15966 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "example_3_1", - "description": "Example 3.1 (EOQ)", - "data": { - "fixed_cost": 8, - "holding_cost": 0.225, - "demand_rate": 1300 - }, - "type": "dict" - }, - { - "name": "problem_3_1", - "description": "Problem 3.1 (EOQ)", - "data": { - "fixed_cost": 2250, - "holding_cost": 275, - "demand_rate": 182500 - }, - "type": "dict" - }, - { - "name": "example_3_8", - "description": "Example 3.8 (EOQB)", - "data": { - "fixed_cost": 8, - "holding_cost": 0.225, - "stockout_cost": 5, - "demand_rate": 1300 - }, - "type": "dict" - }, - { - "name": "problem_3_2b", - "description": "Problem 3.2(b) (EOQB)", - "data": { - "fixed_cost": 40, - "holding_cost": 40.05, - "stockout_cost": 60, - "demand_rate": 2080 - }, - "type": "dict" - }, - { - "name": "problem_3_22", - "description": "Problem 3.22 (EPQ)", - "data": { - "fixed_cost": 4, - "holding_cost": 0.08, - "demand_rate": 80, - "production_rate": 110 - }, - "type": "dict" - }, - { - "name": "example_3_9", - "description": "Example 3.9 (Wagner-Whitin)", - "data": { - "num_periods": 4, - "holding_cost": 2, - "fixed_cost": 500, - "demand": [ - 90, - 120, - 80, - 70 - ] - }, - "type": "dict" - }, - { - "name": "problem_3_27", - "description": "Problem 3.27 (Wagner-Whitin)", - "data": { - "num_periods": 4, - "holding_cost": 0.8, - "fixed_cost": 120, - "demand": [ - 150, - 100, - 80, - 200 - ] - }, - "type": "dict" - }, - { - "name": "problem_3_29", - "description": "Problem 3.29 (Wagner-Whitin)", - "data": { - "num_periods": 5, - "holding_cost": 0.1, - "fixed_cost": 100, - "demand": [ - 730, - 580, - 445, - 650, - 880 - ] - }, - "type": "dict" - }, - { - "name": "scmo_ww_hw_c", - "description": "SCMO (Wagner-Whitin with nonstationary purchase cost)", - "data": { - "num_periods": 5, - "holding_cost": 0.1, - "fixed_cost": 100, - "demand": [ - 400, - 500, - 500, - 1100, - 900 - ], - "purchase_cost": [ - 3, - 1, - 4, - 6, - 6 - ] - }, - "type": "dict" - }, - { - "name": "scmo_jrp_ex", - "description": "SCMO (JRP example)", - "data": { - "shared_fixed_cost": 600, - "individual_fixed_costs": [ - 120, - 840, - 300 - ], - "holding_costs": [ - 160, - 20, - 50 - ], - "demand_rates": [ - 1, - 1, - 1 - ] - }, - "type": "dict" - }, - { - "name": "spp_jrp", - "description": "Numerical JRP example on p. 428 of Silver, Pyke, and Peterson (1998)", - "data": { - "shared_fixed_cost": 40, - "individual_fixed_costs": [ - 15, - 15, - 15, - 15 - ], - "holding_costs": [ - 0.24, - 0.24, - 0.24, - 0.24 - ], - "demand_rates": [ - 86000, - 12500, - 1400, - 3000 - ] - }, - "type": "dict" - }, - { - "name": "silver_jrp", - "description": "Numerical JRP example in Silver (1976)", - "data": { - "shared_fixed_cost": 10, - "individual_fixed_costs": [ - 1.87, - 5.27, - 7.94, - 8.19, - 8.87 - ], - "holding_costs": [ - 0.2, - 0.2, - 0.2, - 0.2, - 0.2 - ], - "demand_rates": [ - 1736, - 656, - 558, - 170, - 142 - ] - }, - "type": "dict" - }, - { - "name": "scmo_jrp_hw_1", - "description": "SCMO (JRP problem 1)", - "data": { - "shared_fixed_cost": 20000, - "individual_fixed_costs": [ - 36000, - 46000, - 34000, - 38000 - ], - "holding_costs": [ - 1000, - 900, - 1200, - 1000 - ], - "demand_rates": [ - 1780, - 445, - 920, - 175 - ] - }, - "type": "dict" - }, - { - "name": "scmo_jrp_hw_2", - "description": "SCMO (JRP problem 2)", - "data": { - "shared_fixed_cost": 1500, - "individual_fixed_costs": [ - 4000, - 1000, - 2000 - ], - "holding_costs": [ - 300, - 200, - 200 - ], - "demand_rates": [ - 9100, - 83200, - 20800 - ] - }, - "type": "dict" - }, - { - "name": "scmo_jrp_hw_3", - "description": "SCMO (JRP problem 3)", - "data": { - "shared_fixed_cost": 180, - "individual_fixed_costs": [ - 60, - 100, - 180, - 115, - 135 - ], - "holding_costs": [ - 5.32, - 3.9200000000000004, - 4.760000000000001, - 3.9200000000000004, - 3.3600000000000003 - ], - "demand_rates": [ - 6200, - 1300, - 400, - 4400, - 1800 - ] - }, - "type": "dict" - }, - { - "name": "example_4_1", - "description": "Example 4.1 (newsvendor)", - "data": { - "holding_cost": 0.18, - "stockout_cost": 0.7, - "demand_mean": 50, - "demand_sd": 8 - }, - "type": "dict" - }, - { - "name": "example_4_1_network", - "description": "Example 4.1 (newsvendor) (as SupplyChainNetwork object)", - "data": { - "nodes": [ - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "-1000": -1000 - }, - "_dummy_product": -1000, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - null - ], - "_successors": [ - null - ], - "local_holding_cost": 0.18, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0.7, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 50, - "standard_deviation": 8, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 0, - "product": null, - "base_stock_level": 56.6, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1000, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "example_4_2", - "description": "Example 4.2 (newsvendor explicit)", - "data": { - "revenue": 1, - "purchase_cost": 0.3, - "salvage_value": 0.12, - "demand_mean": 50, - "demand_sd": 8 - }, - "type": "dict" - }, - { - "name": "example_4_3", - "description": "Example 4.3 (newsvendor) (= Example 4.1)", - "data": { - "holding_cost": 0.18, - "stockout_cost": 0.7, - "demand_mean": 50, - "demand_sd": 8 - }, - "type": "dict" - }, - { - "name": "problem_4_1", - "description": "Problem 4.1 (newsvendor)", - "data": { - "holding_cost": 43, - "stockout_cost": 79, - "demand_mean": 900, - "demand_sd": 60 - }, - "type": "dict" - }, - { - "name": "problem_4_3b", - "description": "Problem 4.3(b) (newsvendor explicit)", - "data": { - "revenue": 7, - "purchase_cost": 2.5, - "salvage_value": 1.5, - "demand_mean": 50, - "demand_sd": 10 - }, - "type": "dict" - }, - { - "name": "example_4_4", - "description": "Example 4.4 (base-stock optimization)", - "data": { - "holding_cost": 0.18, - "stockout_cost": 0.7, - "demand_mean": 50, - "demand_sd": 8, - "lead_time": 4 - }, - "type": "dict" - }, - { - "name": "example_4_7", - "description": "Example 4.7 ((s,S) with Poisson demand)", - "data": { - "holding_cost": 1, - "stockout_cost": 4, - "fixed_cost": 5, - "demand_mean": 6 - }, - "type": "dict" - }, - { - "name": "problem_4_7b", - "description": "Problem 4.7(b) (newsvendor with discrete demand)", - "data": { - "holding_cost": 500000, - "stockout_cost": 1000000, - "demand_pmf": { - "1": 0.25, - "2": 0.05, - "3": 0.1, - "4": 0.2, - "5": 0.15, - "6": 0.1, - "7": 0.1, - "8": 0.05 - } - }, - "type": "dict" - }, - { - "name": "problem_4_8a", - "description": "Problem 4.8(a) (newsvendor with Poisson demand)", - "data": { - "holding_cost": 200, - "stockout_cost": 270, - "demand_mean": 18 - }, - "type": "dict" - }, - { - "name": "problem_4_8b", - "description": "Problem 4.8(b) (newsvendor with lognormal demand)", - "data": { - "holding_cost": 1, - "stockout_cost": 0.1765, - "mu": 6, - "sigma": 0.3 - }, - "type": "dict" - }, - { - "name": "problem_4_31", - "description": "Problem 4.31 ((s,S) with Poisson demand)", - "data": { - "holding_cost": 40, - "stockout_cost": 125, - "fixed_cost": 150, - "demand_mean": 4 - }, - "type": "dict" - }, - { - "name": "example_4_8", - "description": "Example 4.8 ((s,S))", - "data": { - "holding_cost": 0.18, - "stockout_cost": 0.7, - "fixed_cost": 2.5, - "demand_mean": 50, - "demand_sd": 8 - }, - "type": "dict" - }, - { - "name": "problem_4_32", - "description": "Problem 4.32 ((s,S))", - "data": { - "holding_cost": 2, - "stockout_cost": 36, - "fixed_cost": 60, - "demand_mean": 190, - "demand_sd": 48 - }, - "type": "dict" - }, - { - "name": "problem_4_29", - "description": "Problem 4.29 (finite-horizon)", - "data": { - "num_periods": 10, - "holding_cost": 1, - "stockout_cost": 25, - "terminal_holding_cost": 1, - "terminal_stockout_cost": 25, - "purchase_cost": 1, - "fixed_cost": 0, - "demand_mean": 18, - "demand_sd": 3, - "discount_factor": 0.98, - "initial_inventory_level": 0 - }, - "type": "dict" - }, - { - "name": "problem_4_30", - "description": "Problem 4.30 (finite-horizon)", - "data": { - "num_periods": 10, - "holding_cost": 1, - "stockout_cost": 25, - "terminal_holding_cost": 1, - "terminal_stockout_cost": 25, - "purchase_cost": 1, - "fixed_cost": 40, - "demand_mean": 18, - "demand_sd": 3, - "discount_factor": 0.98, - "initial_inventory_level": 0 - }, - "type": "dict" - }, - { - "name": "example_5_1", - "description": "Example 5.1 ((r,Q))", - "data": { - "holding_cost": 0.225, - "stockout_cost": 7.5, - "fixed_cost": 8, - "demand_mean": 1300, - "demand_sd": 150, - "lead_time": 0.08333333333333333 - }, - "type": "dict" - }, - { - "name": "problem_5_1", - "description": "Problem 5.1 ((r,Q))", - "data": { - "holding_cost": 3.1, - "stockout_cost": 45, - "fixed_cost": 50, - "demand_mean": 800, - "demand_sd": 40, - "lead_time": 0.010958904109589041 - }, - "type": "dict" - }, - { - "name": "problem_5_2", - "description": "Problem 5.2 ((r,Q) with Poisson demand)", - "data": { - "holding_cost": 4, - "stockout_cost": 28, - "fixed_cost": 4, - "demand_mean": 12, - "lead_time": 0.5 - }, - "type": "dict" - }, - { - "name": "problem_5_3", - "description": "Problem 5.3 ((r,Q))", - "data": { - "holding_cost": 0.21428571428571427, - "stockout_cost": 40, - "fixed_cost": 85, - "demand_mean": 192, - "demand_sd": 17.4, - "lead_time": 3 - }, - "type": "dict" - }, - { - "name": "example_5_8", - "description": "Example 5.8 ((r,Q) with Poisson demand))", - "data": { - "holding_cost": 20, - "stockout_cost": 150, - "fixed_cost": 100, - "demand_mean": 1.5, - "lead_time": 2 - }, - "type": "dict" - }, - { - "name": "example_6_1", - "description": "Example 6.1 (serial SSM)", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_1", - "description": "Problem 6.1 (serial SSM)", - "data": { - "nodes": [ - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - null - ], - "_successors": [ - 1 - ], - "local_holding_cost": 1, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 94, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 2, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 15, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 100, - "standard_deviation": 15, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 100, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_2a", - "description": "Problem 6.2(a) (serial SSM)", - "data": { - "nodes": [ - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 7, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 5, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 33.3, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 3, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 35.14, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 24, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 64, - "standard_deviation": 8, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 40.59, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_2b", - "description": "Problem 6.2(a) (serial SSM with Poisson demand)", - "data": { - "nodes": [ - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 7, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 5, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 33.3, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 3, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 35.14, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 24, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 64, - "standard_deviation": 8.0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 40.59, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_2a_adj", - "description": "Problem 6.2(a) (serial SSM), adjusted for periodic review", - "data": { - "nodes": [ - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 3.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 2.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 33.3, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 1.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 35.14, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 1.0, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 12.0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 32.0, - "standard_deviation": 5.65685424949238, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 40.59, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_2b_adj", - "description": "Problem 6.2(b) (serial SSM with Poisson demand), adjusted for periodic review", - "data": { - "nodes": [ - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 3.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 2.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 33.3, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 1.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 35.14, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 1.0, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 12.0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 32.0, - "standard_deviation": 5.656854249492381, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 40.59, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_16", - "description": "Problem 6.16 (serial SSM)", - "data": { - "nodes": [ - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - null - ], - "_successors": [ - 1 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 3, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 20, - "initial_orders": 20, - "initial_shipments": 20, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 57.7257, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 5, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 24, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 8, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 20, - "standard_deviation": 4, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 20, - "initial_orders": 20, - "initial_shipments": 20, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 171.1912, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_1", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 1", - "data": { - "nodes": [ - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 9, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 16, - "standard_deviation": 4.0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_9", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 9", - "data": { - "nodes": [ - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": 2.5, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": 2.5, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 9, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 16, - "standard_deviation": 4.0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_17", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 17", - "data": { - "nodes": [ - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 99, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 16, - "standard_deviation": 4.0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_25", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 25", - "data": { - "nodes": [ - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": 2.5, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": 2.5, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 99, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 16, - "standard_deviation": 4.0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "assembly_3_stage", - "description": "3-stage assembly system (2 warehouses, 1 retailer)", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - null - ], - "_successors": [ - 0 - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 13, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 13, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "-1000": -1000 - }, - "_dummy_product": -1000, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - 1, - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": true - }, - "initial_inventory_level": 7, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 0, - "product": null, - "base_stock_level": 7, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - null - ], - "_successors": [ - 0 - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 11, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 11, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1000, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rosling_figure_1", - "description": "Assembly system from Figure 1 in Rosling (1989)", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2, - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "UD", - "mean": 5.0, - "standard_deviation": 3.1622776601683795, - "demand_list": null, - "probabilities": null, - "lo": 0, - "hi": 10, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 8, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 1, - "product": null, - "base_stock_level": 8, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 5 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 8, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 2, - "product": null, - "base_stock_level": 24, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 3, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 24, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 3, - "product": null, - "base_stock_level": 40, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 6, - 7 - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 16, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 4, - "product": null, - "base_stock_level": 76, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 4, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 32, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 5, - "product": null, - "base_stock_level": 62, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 8, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 6, - "product": null, - "base_stock_level": 84, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": null, - "network": null, - "_products_by_index": { - "-7": -7 - }, - "_dummy_product": -7, - "_external_supplier_dummy_product": -8, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 16, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 7, - "product": null, - "base_stock_level": 92, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rong_atan_snyder_figure_1a", - "description": "Distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)", - "data": { - "nodes": [ - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "-1000": -1000 - }, - "_dummy_product": -1000, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - null - ], - "_successors": [ - 1, - 2 - ], - "local_holding_cost": 0.3333333333333333, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 0, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 0 - ], - "_successors": [ - 3, - 4 - ], - "local_holding_cost": 0.6666666666666666, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 0 - ], - "_successors": [ - 5, - 6 - ], - "local_holding_cost": 0.6666666666666666, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 6, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1000, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rong_atan_snyder_figure_1b", - "description": "Distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)", - "data": { - "nodes": [ - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "-1000": -1000 - }, - "_dummy_product": -1000, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - null - ], - "_successors": [ - 1, - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 0, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 0 - ], - "_successors": [ - 3, - 4, - 5, - 6, - 7 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 0 - ], - "_successors": [ - 8, - 9, - 10 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 6, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": null, - "network": null, - "_products_by_index": { - "-7": -7 - }, - "_dummy_product": -7, - "_external_supplier_dummy_product": -8, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 7, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 8, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 8, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 9, - "name": null, - "network": null, - "_products_by_index": { - "-9": -9 - }, - "_dummy_product": -9, - "_external_supplier_dummy_product": -10, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 9, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 10, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 10, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1000, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rong_atan_snyder_figure_1c", - "description": "Distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)", - "data": { - "nodes": [ - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "-1000": -1000 - }, - "_dummy_product": -1000, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - null - ], - "_successors": [ - 1, - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 0, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 0 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 0 - ], - "_successors": [ - 3, - 4, - 5 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1000, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "example_6_3", - "description": "Example 6.3 (serial GSM)", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": 0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": 1, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": 0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 0, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": 1, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_7", - "description": "Problem 6.7 (serial GSM)", - "data": { - "nodes": [ - { - "_index": 3, - "name": "Forming", - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": 1, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": "Firing", - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 3, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": "Glazing", - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 4, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 45, - "standard_deviation": 10, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": 0, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_8", - "description": "Problem 6.8 (serial GSM)", - "data": { - "nodes": [ - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4.56, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 10, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 5.73, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 15.8, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 5, - "external_inbound_cst": null, - "external_outbound_cst": 3, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 3.04, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 2.93, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 15, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - 6 - ], - "_successors": [ - 4 - ], - "local_holding_cost": 2.47, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 8, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 7 - ], - "_successors": [ - 5 - ], - "local_holding_cost": 2.37, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 5, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": null, - "network": null, - "_products_by_index": { - "-7": -7 - }, - "_dummy_product": -7, - "_external_supplier_dummy_product": -8, - "_predecessors": [ - 8 - ], - "_successors": [ - 6 - ], - "local_holding_cost": 1.15, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 7, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 9, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 8, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 9 - ], - "_successors": [ - 7 - ], - "local_holding_cost": 1.1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 8, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 5, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 9, - "name": null, - "network": null, - "_products_by_index": { - "-9": -9 - }, - "_dummy_product": -9, - "_external_supplier_dummy_product": -10, - "_predecessors": [ - 10 - ], - "_successors": [ - 8 - ], - "local_holding_cost": 0.98, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 9, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 10, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - null - ], - "_successors": [ - 9 - ], - "local_holding_cost": 0.87, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 10, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 5, - "external_inbound_cst": 7, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_9", - "description": "Problem 6.9 (tree GSM)", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.12054794520547946, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 22.0, - "standard_deviation": 4.1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 7, - "external_inbound_cst": null, - "external_outbound_cst": 3, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.07671232876712329, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 15.3, - "standard_deviation": 6.2, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 7, - "external_inbound_cst": null, - "external_outbound_cst": 3, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4, - 5 - ], - "_successors": [ - 1, - 2 - ], - "local_holding_cost": 0.049315068493150684, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 21, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [], - "_successors": [ - 3 - ], - "local_holding_cost": 0.0027397260273972603, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - 6 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 0.010958904109589041, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 8, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [], - "_successors": [ - 5 - ], - "local_holding_cost": 0.00410958904109589, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "example_6_5", - "description": "Example 6.5 (tree GSM)", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": 1, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 1 - ], - "_successors": [ - 2, - 4 - ], - "local_holding_cost": 2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": 3, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": 0, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": 3, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": 1, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "figure_6_12", - "description": "Figure 6.12 (tree GSM)", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - null - ], - "_successors": [ - 2, - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 1 - ], - "_successors": [], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 1 - ], - "_successors": [ - 5 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - 3, - 4 - ], - "_successors": [ - 6, - 7 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - null - ], - "_successors": [ - 5 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 5 - ], - "_successors": [], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": null, - "network": null, - "_products_by_index": { - "-7": -7 - }, - "_dummy_product": -7, - "_external_supplier_dummy_product": -8, - "_predecessors": [ - 5 - ], - "_successors": [], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 7, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "figure_6_14", - "description": "Figure 6.14 (tree GSM)", - "data": { - "nodes": [ - { - "_index": 1, - "name": "Raw_Material", - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [], - "_successors": [ - 2 - ], - "local_holding_cost": 0.01, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": "Process_Wafers", - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 1 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 0.03, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": "Package_Test_Wafers", - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 2 - ], - "_successors": [ - 5 - ], - "local_holding_cost": 0.04, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": "Imager_Base", - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [], - "_successors": [ - 5 - ], - "local_holding_cost": 0.06, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 4, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": "Imager_Assembly", - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - 3, - 4 - ], - "_successors": [ - 6 - ], - "local_holding_cost": 0.12, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": "Ship_to_Final_Assembly", - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 5 - ], - "_successors": [ - 10 - ], - "local_holding_cost": 0.13, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": "Camera", - "network": null, - "_products_by_index": { - "-7": -7 - }, - "_dummy_product": -7, - "_external_supplier_dummy_product": -8, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 7, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 6, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 8, - "name": "Circuit_Board", - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.08, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 8, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 4, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 9, - "name": "Other_Parts", - "network": null, - "_products_by_index": { - "-9": -9 - }, - "_dummy_product": -9, - "_external_supplier_dummy_product": -10, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.04, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 9, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 10, - "name": "Build_Test_Pack", - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - 7, - 6, - 8, - 9 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 10, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 10, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": 2, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "example_9_1", - "description": "Example 9.1 (EOQD)", - "data": { - "holding_cost": 0.225, - "stockout_cost": 5, - "fixed_cost": 8, - "demand_rate": 1300, - "disruption_rate": 1.5, - "recovery_rate": 14 - }, - "type": "dict" - }, - { - "name": "problem_9_8", - "description": "Problem 9.8 (EOQD)", - "data": { - "holding_cost": 4, - "stockout_cost": 22, - "fixed_cost": 35, - "demand_rate": 30, - "disruption_rate": 1, - "recovery_rate": 12 - }, - "type": "dict" - }, - { - "name": "example_9_3", - "description": "Example 9.3 (base-stock with disruptions)", - "data": { - "holding_cost": 0.25, - "stockout_cost": 3, - "demand": 2000, - "disruption_prob": 0.04, - "recovery_prob": 0.25 - }, - "type": "dict" - }, - { - "name": "example_9_4", - "description": "Example 9.4 (EOQ with additive yield uncertainty)", - "data": { - "holding_cost": 0.06, - "fixed_cost": 18500, - "demand_rate": 75000, - "yield_mean": -15000, - "yield_sd": 9000 - }, - "type": "dict" - }, - { - "name": "example_9_5", - "description": "Example 9.5 (EOQ with multiplicative yield uncertainty)", - "data": { - "holding_cost": 0.06, - "fixed_cost": 18500, - "demand_rate": 75000, - "yield_mean": 0.8333333333333334, - "yield_sd": 0.14085904245475275 - }, - "type": "dict" - }, - { - "name": "problem_9_4a", - "description": "Problem 9.4(a) (EOQ with additive yield uncertainty)", - "data": { - "holding_cost": 275, - "fixed_cost": 2250, - "demand_rate": 182500, - "yield_mean": -50.0, - "yield_sd": 0.02 - }, - "type": "dict" - }, - { - "name": "problem_9_4b", - "description": "Problem 9.4(b) (EOQ with multiplicative yield uncertainty)", - "data": { - "holding_cost": 275, - "fixed_cost": 2250, - "demand_rate": 182500, - "yield_mean": 0.9, - "yield_sd": 0.05773502691896258 - }, - "type": "dict" - }, - { - "name": "example_9_6", - "description": "Example 9.6 (newsvendor with additive yield uncertainty)", - "data": { - "holding_cost": 15000000, - "stockout_cost": 75000000, - "demand": 1.5, - "yield_lo": -0.5, - "yield_hi": 0.5 - }, - "type": "dict" - }, - { - "name": "problem_9_5", - "description": "Problem 9.5 (newsvendor with additive yield uncertainty)", - "data": { - "holding_cost": 150, - "stockout_cost": 1200, - "demand": 25, - "yield_lo": -5, - "yield_hi": 0 - }, - "type": "dict" - } - ], - "last_updated": "2024-04-15 20:00:19.838270" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "example_3_1", "description": "Example 3.1 (EOQ)", "data": {"fixed_cost": 8, "holding_cost": 0.225, "demand_rate": 1300}, "type": "dict"}, {"name": "problem_3_1", "description": "Problem 3.1 (EOQ)", "data": {"fixed_cost": 2250, "holding_cost": 275, "demand_rate": 182500}, "type": "dict"}, {"name": "example_3_8", "description": "Example 3.8 (EOQB)", "data": {"fixed_cost": 8, "holding_cost": 0.225, "stockout_cost": 5, "demand_rate": 1300}, "type": "dict"}, {"name": "problem_3_2b", "description": "Problem 3.2(b) (EOQB)", "data": {"fixed_cost": 40, "holding_cost": 40.05, "stockout_cost": 60, "demand_rate": 2080}, "type": "dict"}, {"name": "problem_3_22", "description": "Problem 3.22 (EPQ)", "data": {"fixed_cost": 4, "holding_cost": 0.08, "demand_rate": 80, "production_rate": 110}, "type": "dict"}, {"name": "example_3_9", "description": "Example 3.9 (Wagner-Whitin)", "data": {"num_periods": 4, "holding_cost": 2, "fixed_cost": 500, "demand": [90, 120, 80, 70]}, "type": "dict"}, {"name": "problem_3_27", "description": "Problem 3.27 (Wagner-Whitin)", "data": {"num_periods": 4, "holding_cost": 0.8, "fixed_cost": 120, "demand": [150, 100, 80, 200]}, "type": "dict"}, {"name": "problem_3_29", "description": "Problem 3.29 (Wagner-Whitin)", "data": {"num_periods": 5, "holding_cost": 0.1, "fixed_cost": 100, "demand": [730, 580, 445, 650, 880]}, "type": "dict"}, {"name": "scmo_ww_hw_c", "description": "SCMO (Wagner-Whitin with nonstationary purchase cost)", "data": {"num_periods": 5, "holding_cost": 0.1, "fixed_cost": 100, "demand": [400, 500, 500, 1100, 900], "purchase_cost": [3, 1, 4, 6, 6]}, "type": "dict"}, {"name": "scmo_jrp_ex", "description": "SCMO (JRP example)", "data": {"shared_fixed_cost": 600, "individual_fixed_costs": [120, 840, 300], "holding_costs": [160, 20, 50], "demand_rates": [1, 1, 1]}, "type": "dict"}, {"name": "spp_jrp", "description": "Numerical JRP example on p. 428 of Silver, Pyke, and Peterson (1998)", "data": {"shared_fixed_cost": 40, "individual_fixed_costs": [15, 15, 15, 15], "holding_costs": [0.24, 0.24, 0.24, 0.24], "demand_rates": [86000, 12500, 1400, 3000]}, "type": "dict"}, {"name": "silver_jrp", "description": "Numerical JRP example in Silver (1976)", "data": {"shared_fixed_cost": 10, "individual_fixed_costs": [1.87, 5.27, 7.94, 8.19, 8.87], "holding_costs": [0.2, 0.2, 0.2, 0.2, 0.2], "demand_rates": [1736, 656, 558, 170, 142]}, "type": "dict"}, {"name": "scmo_jrp_hw_1", "description": "SCMO (JRP problem 1)", "data": {"shared_fixed_cost": 20000, "individual_fixed_costs": [36000, 46000, 34000, 38000], "holding_costs": [1000, 900, 1200, 1000], "demand_rates": [1780, 445, 920, 175]}, "type": "dict"}, {"name": "scmo_jrp_hw_2", "description": "SCMO (JRP problem 2)", "data": {"shared_fixed_cost": 1500, "individual_fixed_costs": [4000, 1000, 2000], "holding_costs": [300, 200, 200], "demand_rates": [9100, 83200, 20800]}, "type": "dict"}, {"name": "scmo_jrp_hw_3", "description": "SCMO (JRP problem 3)", "data": {"shared_fixed_cost": 180, "individual_fixed_costs": [60, 100, 180, 115, 135], "holding_costs": [5.32, 3.9200000000000004, 4.760000000000001, 3.9200000000000004, 3.3600000000000003], "demand_rates": [6200, 1300, 400, 4400, 1800]}, "type": "dict"}, {"name": "example_4_1", "description": "Example 4.1 (newsvendor)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "example_4_1_network", "description": "Example 4.1 (newsvendor) (as SupplyChainNetwork object)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [null], "local_holding_cost": 0.18, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0.7, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 50, "standard_deviation": 8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 56.6, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_4_2", "description": "Example 4.2 (newsvendor explicit)", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "example_4_3", "description": "Example 4.3 (newsvendor) (= Example 4.1)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "problem_4_1", "description": "Problem 4.1 (newsvendor)", "data": {"holding_cost": 43, "stockout_cost": 79, "demand_mean": 900, "demand_sd": 60}, "type": "dict"}, {"name": "problem_4_3b", "description": "Problem 4.3(b) (newsvendor explicit)", "data": {"revenue": 7, "purchase_cost": 2.5, "salvage_value": 1.5, "demand_mean": 50, "demand_sd": 10}, "type": "dict"}, {"name": "example_4_4", "description": "Example 4.4 (base-stock optimization)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8, "lead_time": 4}, "type": "dict"}, {"name": "example_4_7", "description": "Example 4.7 ((s,S) with Poisson demand)", "data": {"holding_cost": 1, "stockout_cost": 4, "fixed_cost": 5, "demand_mean": 6}, "type": "dict"}, {"name": "problem_4_7b", "description": "Problem 4.7(b) (newsvendor with discrete demand)", "data": {"holding_cost": 500000, "stockout_cost": 1000000, "demand_pmf": {"1": 0.25, "2": 0.05, "3": 0.1, "4": 0.2, "5": 0.15, "6": 0.1, "7": 0.1, "8": 0.05}}, "type": "dict"}, {"name": "problem_4_8a", "description": "Problem 4.8(a) (newsvendor with Poisson demand)", "data": {"holding_cost": 200, "stockout_cost": 270, "demand_mean": 18}, "type": "dict"}, {"name": "problem_4_8b", "description": "Problem 4.8(b) (newsvendor with lognormal demand)", "data": {"holding_cost": 1, "stockout_cost": 0.1765, "mu": 6, "sigma": 0.3}, "type": "dict"}, {"name": "problem_4_31", "description": "Problem 4.31 ((s,S) with Poisson demand)", "data": {"holding_cost": 40, "stockout_cost": 125, "fixed_cost": 150, "demand_mean": 4}, "type": "dict"}, {"name": "example_4_8", "description": "Example 4.8 ((s,S))", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "fixed_cost": 2.5, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "problem_4_32", "description": "Problem 4.32 ((s,S))", "data": {"holding_cost": 2, "stockout_cost": 36, "fixed_cost": 60, "demand_mean": 190, "demand_sd": 48}, "type": "dict"}, {"name": "problem_4_29", "description": "Problem 4.29 (finite-horizon)", "data": {"num_periods": 10, "holding_cost": 1, "stockout_cost": 25, "terminal_holding_cost": 1, "terminal_stockout_cost": 25, "purchase_cost": 1, "fixed_cost": 0, "demand_mean": 18, "demand_sd": 3, "discount_factor": 0.98, "initial_inventory_level": 0}, "type": "dict"}, {"name": "problem_4_30", "description": "Problem 4.30 (finite-horizon)", "data": {"num_periods": 10, "holding_cost": 1, "stockout_cost": 25, "terminal_holding_cost": 1, "terminal_stockout_cost": 25, "purchase_cost": 1, "fixed_cost": 40, "demand_mean": 18, "demand_sd": 3, "discount_factor": 0.98, "initial_inventory_level": 0}, "type": "dict"}, {"name": "example_5_1", "description": "Example 5.1 ((r,Q))", "data": {"holding_cost": 0.225, "stockout_cost": 7.5, "fixed_cost": 8, "demand_mean": 1300, "demand_sd": 150, "lead_time": 0.08333333333333333}, "type": "dict"}, {"name": "problem_5_1", "description": "Problem 5.1 ((r,Q))", "data": {"holding_cost": 3.1, "stockout_cost": 45, "fixed_cost": 50, "demand_mean": 800, "demand_sd": 40, "lead_time": 0.010958904109589041}, "type": "dict"}, {"name": "problem_5_2", "description": "Problem 5.2 ((r,Q) with Poisson demand)", "data": {"holding_cost": 4, "stockout_cost": 28, "fixed_cost": 4, "demand_mean": 12, "lead_time": 0.5}, "type": "dict"}, {"name": "problem_5_3", "description": "Problem 5.3 ((r,Q))", "data": {"holding_cost": 0.21428571428571427, "stockout_cost": 40, "fixed_cost": 85, "demand_mean": 192, "demand_sd": 17.4, "lead_time": 3}, "type": "dict"}, {"name": "example_5_8", "description": "Example 5.8 ((r,Q) with Poisson demand))", "data": {"holding_cost": 20, "stockout_cost": 150, "fixed_cost": 100, "demand_mean": 1.5, "lead_time": 2}, "type": "dict"}, {"name": "example_6_1", "description": "Example 6.1 (serial SSM)", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_1", "description": "Problem 6.1 (serial SSM)", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [null], "_successors": [1], "local_holding_cost": 1, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 94, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 2, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 15, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 100, "standard_deviation": 15, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 100, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2a", "description": "Problem 6.2(a) (serial SSM)", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 7, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 5, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": "N", "mean": 64, "standard_deviation": 8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2b", "description": "Problem 6.2(a) (serial SSM with Poisson demand)", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 7, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 5, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": "P", "mean": 64, "standard_deviation": 8.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2a_adj", "description": "Problem 6.2(a) (serial SSM), adjusted for periodic review", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 32.0, "standard_deviation": 5.65685424949238, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2b_adj", "description": "Problem 6.2(b) (serial SSM with Poisson demand), adjusted for periodic review", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_16", "description": "Problem 6.16 (serial SSM)", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [null], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 20, "initial_orders": 20, "initial_shipments": 20, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 57.7257, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 8, "order_lead_time": null, "demand_source": {"type": "N", "mean": 20, "standard_deviation": 4, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 20, "initial_orders": 20, "initial_shipments": 20, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 171.1912, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_1", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 1", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 9, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_9", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 9", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 9, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_17", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 17", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 99, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_25", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 25", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 99, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "assembly_3_stage", "description": "3-stage assembly system (2 warehouses, 1 retailer)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [null], "_successors": [0], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 13, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 13, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [1, 2], "_successors": [null], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": true}, "initial_inventory_level": 7, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 7, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [null], "_successors": [0], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 11, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 11, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rosling_figure_1", "description": "Assembly system from Figure 1 in Rosling (1989)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1a", "description": "Distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": 0.3333333333333333, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [0], "_successors": [3, 4], "local_holding_cost": 0.6666666666666666, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [0], "_successors": [5, 6], "local_holding_cost": 0.6666666666666666, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [1], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 6, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1b", "description": "Distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [0], "_successors": [3, 4, 5, 6, 7], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [0], "_successors": [8, 9, 10], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 6, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 7, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": null, "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 8, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": null, "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 9, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": null, "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 10, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1c", "description": "Distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [0], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [0], "_successors": [3, 4, 5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_6_3", "description": "Example 6.3 (serial GSM)", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": 0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": 0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 0, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 1, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_7", "description": "Problem 6.7 (serial GSM)", "data": {"nodes": [{"_index": 3, "name": "Forming", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Firing", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": "Glazing", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 4, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 45, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 0, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_8", "description": "Problem 6.8 (serial GSM)", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4.56, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 10, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 5.73, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 15.8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.93, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 15, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [6], "_successors": [4], "local_holding_cost": 2.47, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 8, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [7], "_successors": [5], "local_holding_cost": 2.37, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [8], "_successors": [6], "local_holding_cost": 1.15, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 9, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": null, "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [9], "_successors": [7], "local_holding_cost": 1.1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": null, "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [10], "_successors": [8], "local_holding_cost": 0.98, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": null, "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [null], "_successors": [9], "local_holding_cost": 0.87, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": 7, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_9", "description": "Problem 6.9 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [3], "_successors": [null], "local_holding_cost": 0.12054794520547946, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 22.0, "standard_deviation": 4.1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 7, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [null], "local_holding_cost": 0.07671232876712329, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 15.3, "standard_deviation": 6.2, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 7, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4, 5], "_successors": [1, 2], "local_holding_cost": 0.049315068493150684, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 21, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [3], "local_holding_cost": 0.0027397260273972603, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [6], "_successors": [3], "local_holding_cost": 0.010958904109589041, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 8, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.00410958904109589, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_6_5", "description": "Example 6.5 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [null], "_successors": [3], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [2, 4], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [null], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 0, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [3], "_successors": [null], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 1, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "figure_6_12", "description": "Figure 6.12 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6, 7], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [5], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "figure_6_14", "description": "Figure 6.14 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [7, 6, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_9_1", "description": "Example 9.1 (EOQD)", "data": {"holding_cost": 0.225, "stockout_cost": 5, "fixed_cost": 8, "demand_rate": 1300, "disruption_rate": 1.5, "recovery_rate": 14}, "type": "dict"}, {"name": "problem_9_8", "description": "Problem 9.8 (EOQD)", "data": {"holding_cost": 4, "stockout_cost": 22, "fixed_cost": 35, "demand_rate": 30, "disruption_rate": 1, "recovery_rate": 12}, "type": "dict"}, {"name": "example_9_3", "description": "Example 9.3 (base-stock with disruptions)", "data": {"holding_cost": 0.25, "stockout_cost": 3, "demand": 2000, "disruption_prob": 0.04, "recovery_prob": 0.25}, "type": "dict"}, {"name": "example_9_4", "description": "Example 9.4 (EOQ with additive yield uncertainty)", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": -15000, "yield_sd": 9000}, "type": "dict"}, {"name": "example_9_5", "description": "Example 9.5 (EOQ with multiplicative yield uncertainty)", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}, {"name": "problem_9_4a", "description": "Problem 9.4(a) (EOQ with additive yield uncertainty)", "data": {"holding_cost": 275, "fixed_cost": 2250, "demand_rate": 182500, "yield_mean": -50.0, "yield_sd": 0.02}, "type": "dict"}, {"name": "problem_9_4b", "description": "Problem 9.4(b) (EOQ with multiplicative yield uncertainty)", "data": {"holding_cost": 275, "fixed_cost": 2250, "demand_rate": 182500, "yield_mean": 0.9, "yield_sd": 0.05773502691896258}, "type": "dict"}, {"name": "example_9_6", "description": "Example 9.6 (newsvendor with additive yield uncertainty)", "data": {"holding_cost": 15000000, "stockout_cost": 75000000, "demand": 1.5, "yield_lo": -0.5, "yield_hi": 0.5}, "type": "dict"}, {"name": "problem_9_5", "description": "Problem 9.5 (newsvendor with additive yield uncertainty)", "data": {"holding_cost": 150, "stockout_cost": 1200, "demand": 25, "yield_lo": -5, "yield_hi": 0}, "type": "dict"}], "last_updated": "2024-04-21 21:47:48.007481"} \ No newline at end of file diff --git a/src/stockpyl/instances.py b/src/stockpyl/instances.py index 9ba10d9..da5d7b9 100644 --- a/src/stockpyl/instances.py +++ b/src/stockpyl/instances.py @@ -146,7 +146,7 @@ def load_instance(instance_name, filepath=None, ignore_state_vars=True): return instance def save_instance(instance_name, instance_data, instance_description='', filepath=None, - replace=True, create_if_none=True, omit_state_vars=True): + replace=True, create_if_none=True, delete_if_exists=False, omit_state_vars=True): """Save an instance to a JSON file. Parameters @@ -168,6 +168,9 @@ def save_instance(instance_name, instance_data, instance_description='', filepat create_if_none : bool, optional If the file does not already exist, the function will create a new file if ``True``; otherwise, it will not do anything and issue a warning. + delete_if_exists : bool, optional + If the file already exists, the function will delete it first if ``True``; + otherwise, it will modify the existing file. omit_state_vars : bool, optional If ``True``, the function will not save state variables as part of the nodes, even if they are present in the instance. @@ -179,9 +182,17 @@ def save_instance(instance_name, instance_data, instance_description='', filepat # Does JSON file exist? if os.path.exists(filepath): - # Load data from JSON. - with open(filepath) as f: - json_contents = json.load(f) + if delete_if_exists: + os.remove(filepath) + json_contents = { + "_id": "", + "instances": [], + "last_updated": "" + } + else: + # Load data from JSON. + with open(filepath) as f: + json_contents = json.load(f) else: # Should we create it? if create_if_none: diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 169bd62..daf48de 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -423,14 +423,16 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan order_quantity = min(order_capac, policy.get_order_quantity(product_index=prod.index, predecessor_index=p_index, rm_index=rm_index)) # Place order in predecessor's order pipeline (converting first to raw material units via BOM). + # (Add to any existing inbound order, because multiple products at the node can order the same RM.) if p is not None: - p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] = order_quantity + p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] += order_quantity else: # Place order to external supplier. (For now, this just means adding to inbound shipment pipeline.) node.state_vars_current.inbound_shipment_pipeline[None][rm_index][order_lead_time + shipment_lead_time] += order_quantity - # Record order quantity. - node.state_vars_current.order_quantity[p_index][rm_index] = order_quantity + # Record order quantity. (Add to existing order quantity, since multiple products might order the same RM from + # the same predecessor.) + node.state_vars_current.order_quantity[p_index][rm_index] += order_quantity # Add order to on_order_by_predecessor. node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += order_quantity @@ -1013,7 +1015,16 @@ def _propagate_shipment_downstream(node): # unless there is a type-TP disruption, in which case outbound shipments # successor wait in slot s.shipment_lead_time until the disruption ends.) for s in node.successors(): - s.state_vars_current.inbound_shipment_pipeline[node.index][prod_index][s.shipment_lead_time or 0] \ + # Find a product at successor node that uses prod_index from node as a raw material, + # and use its lead time. If there is more than one such product, use the last one found. + # This is a little klugey. # TODO: improve? should LTs be an attribute of the RM, not the product? + for FG_index in s.product_indices: + if prod_index in s.raw_material_indices_by_product(product_index=FG_index, network_BOM=True) and \ + node.index in s.raw_material_supplier_indices_by_raw_material(rm_index=prod_index, network_BOM=True): + # Get lead time for this product. + shipment_lead_time = (s.get_attribute('shipment_lead_time', product=FG_index) or 0) + + s.state_vars_current.inbound_shipment_pipeline[node.index][prod_index][shipment_lead_time] \ += node.state_vars_current.outbound_shipment[s.index][prod_index] diff --git a/src/stockpyl/sim_io.py b/src/stockpyl/sim_io.py index 53204e6..67decdd 100644 --- a/src/stockpyl/sim_io.py +++ b/src/stockpyl/sim_io.py @@ -156,35 +156,35 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= for ind in sorted_nodes: node = network.get_node_from_index(ind) # Loop through products. - for prod in node.products: - - # Remove 0th element of pipelines because these will always be 0 at the end of the period. - IOPL_temp = sort_nested_dict_by_keys(node.state_vars[t].inbound_order_pipeline) - IOPL = [x[1:] for x in IOPL_temp] - ISPL_temp = sort_nested_dict_by_keys(node.state_vars[t].inbound_shipment_pipeline) - ISPL = [x[1:] for x in ISPL_temp] - # Build row. - temp += ['|'] - if 'DISR' in cols_to_print: temp += [node.state_vars[t].disrupted] - if 'IO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_order) - if 'IOPL' in cols_to_print: temp += IOPL - if 'OQ' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].order_quantity) - if 'OO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].on_order_by_predecessor) - if 'IS' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_shipment) - if 'ISPL' in cols_to_print: temp += ISPL - if 'IDI' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_disrupted_items) - if 'RM' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].raw_material_inventory) - if 'OS' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].outbound_shipment) - if 'DMFS' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].demand_met_from_stock) - if 'FR' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].fill_rate) - if 'IL' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inventory_level) - if 'BO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].backorders_by_successor) - if 'ODI' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].outbound_disrupted_items) - if 'HC' in cols_to_print: temp += [node.state_vars[t].holding_cost_incurred] - if 'SC' in cols_to_print: temp += [node.state_vars[t].stockout_cost_incurred] - if 'ITHC' in cols_to_print: temp += [node.state_vars[t].in_transit_holding_cost_incurred] - if 'REV' in cols_to_print: temp += [node.state_vars[t].revenue_earned] - if 'TC' in cols_to_print: temp += [node.state_vars[t].total_cost_incurred] +# for prod in node.products: + + # Remove 0th element of pipelines because these will always be 0 at the end of the period. + IOPL_temp = sort_nested_dict_by_keys(node.state_vars[t].inbound_order_pipeline) + IOPL = [x[1:] for x in IOPL_temp] + ISPL_temp = sort_nested_dict_by_keys(node.state_vars[t].inbound_shipment_pipeline) + ISPL = [x[1:] for x in ISPL_temp] + # Build row. + temp += ['|'] + if 'DISR' in cols_to_print: temp += [node.state_vars[t].disrupted] + if 'IO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_order) + if 'IOPL' in cols_to_print: temp += IOPL + if 'OQ' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].order_quantity) + if 'OO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].on_order_by_predecessor) + if 'IS' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_shipment) + if 'ISPL' in cols_to_print: temp += ISPL + if 'IDI' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_disrupted_items) + if 'RM' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].raw_material_inventory) + if 'OS' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].outbound_shipment) + if 'DMFS' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].demand_met_from_stock) + if 'FR' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].fill_rate) + if 'IL' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].inventory_level) + if 'BO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].backorders_by_successor) + if 'ODI' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].outbound_disrupted_items) + if 'HC' in cols_to_print: temp += [node.state_vars[t].holding_cost_incurred] + if 'SC' in cols_to_print: temp += [node.state_vars[t].stockout_cost_incurred] + if 'ITHC' in cols_to_print: temp += [node.state_vars[t].in_transit_holding_cost_incurred] + if 'REV' in cols_to_print: temp += [node.state_vars[t].revenue_earned] + if 'TC' in cols_to_print: temp += [node.state_vars[t].total_cost_incurred] results.append(temp) if print_dots and t+1 not in pers_to_print and t < num_periods-1: results.append(["..."]) @@ -194,28 +194,29 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= for ind in sorted_nodes: node = network.get_node_from_index(ind) # Loop through products. - for prod_index in node.product_indices: - headers = headers + [f"| i={ind:d} pr={prod_index:d}"] - if 'DISR' in cols_to_print: headers += ['DISR'] - if 'IO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order, "IO") - if 'IOPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order_pipeline, "IOPL") - if 'OQ' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].order_quantity, "OQ") - if 'OO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].on_order_by_predecessor, "OO") - if 'IS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment, "IS") - if 'ISPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment_pipeline, "ISPL") - if 'IDI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_disrupted_items, "IDI") - if 'RM' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "RM") - if 'OS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_shipment, "OS") - if 'DMFS' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "DMFS") - if 'FR' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "FR") - if 'IL' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].inventory_level, "IL") - if 'BO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].backorders_by_successor, "BO") - if 'ODI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_disrupted_items , "ODI") - if 'HC' in cols_to_print: headers += ["HC"] - if 'SC' in cols_to_print: headers += ["SC"] - if 'ITHC' in cols_to_print: headers += ["ITHC"] - if 'REV' in cols_to_print: headers += ["REV"] - if 'TC' in cols_to_print: headers += ["TC"] +# for prod_index in node.product_indices: + headers = headers + [f"| i={ind:d}"] +# headers = headers + [f"| i={ind:d} pr={prod_index:d}"] + if 'DISR' in cols_to_print: headers += ['DISR'] + if 'IO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order, "IO") + if 'IOPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order_pipeline, "IOPL") + if 'OQ' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].order_quantity, "OQ") + if 'OO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].on_order_by_predecessor, "OO") + if 'IS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment, "IS") + if 'ISPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment_pipeline, "ISPL") + if 'IDI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_disrupted_items, "IDI") + if 'RM' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "RM") + if 'OS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_shipment, "OS") + if 'DMFS' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "DMFS") + if 'FR' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "FR") + if 'IL' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].inventory_level, "IL") + if 'BO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].backorders_by_successor, "BO") + if 'ODI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_disrupted_items , "ODI") + if 'HC' in cols_to_print: headers += ["HC"] + if 'SC' in cols_to_print: headers += ["SC"] + if 'ITHC' in cols_to_print: headers += ["ITHC"] + if 'REV' in cols_to_print: headers += ["REV"] + if 'TC' in cols_to_print: headers += ["TC"] # Average row. averages = ["t"] diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 79ccb62..d990c3a 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -516,9 +516,9 @@ def _dummy_product_index_from_node_index(cls, node_index): The index of the node. """ if node_index > 0: - return -node_index + return -2 * node_index else: - return -_INDEX_BUMP + return -_INDEX_BUMP - 2 * node_index @classmethod def _external_supplier_dummy_product_index_from_node_index(cls, node_index): @@ -613,7 +613,7 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate found = False for prod1 in self.products: for prod2 in prod1.raw_materials: - if prod2 in pred.products: + if prod2 in (pred.products if pred is not None else [self._external_supplier_dummy_product.index]): found = True break @@ -1738,45 +1738,67 @@ def __init__(self, node=None, period=None): if node: # Build some shortcuts. - p_index = {p: p.index if p is not None else None for p in self.node.predecessors(include_external=True)} - s_index = {s: s.index if s is not None else None for s in self.node.successors(include_external=True)} + p_indices = {p: p.index if p is not None else None for p in self.node.predecessors(include_external=True)} + s_indices = {s: s.index if s is not None else None for s in self.node.successors(include_external=True)} rm_indices = {p: (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]) \ for p in self.node.predecessors(include_external=True)} + order_lead_time = self.node.get_attribute('order_lead_time') # Initialize dicts with appropriate keys. (inbound_shipment_pipeline gets # order_lead_time+shipment_lead_time slots for orders to external supplier) self.inventory_level = {prod_index: 0 for prod_index in self.node.product_indices} - self.inbound_shipment_pipeline = {p_index[p]: - {prod_index: - [0] * ((self.node.order_lead_time or 0) + ( - self.node.shipment_lead_time or 0) + 1) - for prod_index in rm_indices[p]} - for p in self.node.predecessors(include_external=True)} - self.inbound_shipment = {p_index[p]: + self.inbound_shipment_pipeline = {} + for p_index in self.node.predecessor_indices(include_external=True): + self.inbound_shipment_pipeline[p_index] = {} + for rm_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True): + # Find a product at this node that uses raw material rm_index from predecessor p_index, + # and use its lead times. If there is more than one such product, use the last one found. + # This is a little klugey. # TODO: improve? should LTs be an attribute of the RM, not the product? + for prod_index in self.node.product_indices: + if rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) and \ + p_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): + # Get lead times for this product. + order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) + shipment_lead_time = (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) + self.inbound_shipment_pipeline[p_index][rm_index] = [0] * (order_lead_time + shipment_lead_time + 1) + # self.inbound_shipment_pipeline = {p_indices[p]: + # {prod_index: + # [0] * ((self.node.get_attribute('order_lead_time', product=prod_index) or 0) + + # (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) + 1) + # for prod_index in rm_indices[p]} + # for p in self.node.predecessors(include_external=True)} + self.inbound_shipment = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.inbound_order_pipeline = {s_index[s]: - {prod_index: - [0] * ((s.order_lead_time or 0) + 1) - for prod_index in node.product_indices} - for s in node.successors()} + self.inbound_order_pipeline = {} + for s_index in self.node.successor_indices(include_external=False): + self.inbound_order_pipeline[s_index] = {} + for prod_index in self.node.product_indices: + order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) + self.inbound_order_pipeline[s_index][prod_index] = [0] * (order_lead_time + 1) + # self.inbound_order_pipeline = {s_indices[s]: + # {prod_index: + # # TODO: should we be getting order_lead_time for self.node instead of s? + # [0] * ((s.get_attribute('order_lead_time', product=prod_index) or 0) + 1) + # for prod_index in node.product_indices} + # for s in node.successors()} # Add external customer to inbound_order_pipeline. (Must be done # separately since external customer does not have its own node, # or its own order lead time.) if node.demand_source is not None and node.demand_source.type is not None: self.inbound_order_pipeline[None] = {prod_index: [0] for prod_index in node.product_indices} - self.inbound_order = {s_index[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.outbound_shipment = {s_index[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.on_order_by_predecessor = {p_index[p]: {prod_index: 0 for prod_index in rm_indices[p]} + self.inbound_order = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} + self.outbound_shipment = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} + self.on_order_by_predecessor = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.backorders_by_successor = {s_index[s]: {prod_index: 0 for prod_index in node.product_indices} + self.backorders_by_successor = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.outbound_disrupted_items = {s_index[s]: {prod_index: 0 for prod_index in node.product_indices} + self.outbound_disrupted_items = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.inbound_disrupted_items = {p_index[p]: {prod_index: 0 for prod_index in rm_indices[p]} + self.inbound_disrupted_items = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.order_quantity = {p_index[p]: {prod_index: 0 for prod_index in rm_indices[p]} + self.order_quantity = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} self.raw_material_inventory = {prod_index: 0 for prod_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True)} diff --git a/temp.txt b/temp.txt deleted file mode 100644 index 9bd7fae..0000000 --- a/temp.txt +++ /dev/null @@ -1,102 +0,0 @@ - t | i=0 pr=0 IO:EXT|0 OQ:1|1 OQ:1|2 IS:1|1 IS:1|2 OS:EXT|0 IL:0 HC SC TC | i=1 pr=1 IO:0|1 IO:0|2 OQ:11|11 OQ:12|12 IS:11|11 IS:12|12 OS:0|1 OS:0|2 IL:1 IL:2 HC SC TC | i=1 pr=2 IO:0|1 IO:0|2 OQ:11|11 OQ:12|12 IS:11|11 IS:12|12 OS:0|1 OS:0|2 IL:1 IL:2 HC SC TC | i=11 pr=11 IO:1|11 OQ:EXT|-12 IS:EXT|-12 OS:1|11 IL:11 HC SC TC | i=12 pr=12 IO:1|12 OQ:EXT|-13 IS:EXT|-13 OS:1|12 IL:12 HC SC TC ---- ------------ ---------- -------- -------- -------- -------- ---------- ------ ---- ---- ---- ------------ -------- -------- ---------- ---------- ---------- ---------- -------- -------- ------ ------ ---- ---- ---- ------------ -------- -------- ---------- ---------- ---------- ---------- -------- -------- ------ ------ ---- ---- ---- -------------- --------- ------------ ------------ --------- ------- ---- ---- ---- -------------- --------- ------------ ------------ --------- ------- ---- ---- ---- - 0 | 5 5 5 0 0 5 2 4 0 4 | 5 5 5 5 0 0 5 5 8 6 14 0 24 | 5 5 5 5 0 0 5 5 8 6 14 0 24 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 1 | 3 3 3 5 5 3 4 8 0 8 | 3 3 3 3 0 0 3 3 5 3 8 0 14 | 3 3 3 3 0 0 3 3 5 3 8 0 14 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 - 2 | 6 6 6 3 3 6 1 2 0 2 | 6 6 6 6 5 5 6 6 4 2 6 0 18 | 6 6 6 6 5 5 6 6 4 2 6 0 18 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 3 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 3 3 6 5 1 -1 1 0 12 | 6 6 6 6 3 3 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 4 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 5 | 7 7 7 6 6 6 -1 1 20 21 | 7 7 7 7 6 6 7 6 0 -2 0 0 13 | 7 7 7 7 6 6 7 6 0 -2 0 0 13 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 - 6 | 5 5 5 7 6 6 0 2 0 2 | 5 5 5 5 6 6 5 6 1 -1 1 0 12 | 5 5 5 5 6 6 5 6 1 -1 1 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 7 | 5 5 5 5 6 5 1 3 0 3 | 5 5 5 5 7 7 5 6 3 1 4 0 15 | 5 5 5 5 7 7 5 6 3 1 4 0 15 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 8 | 5 5 5 5 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 9 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 10 | 7 7 7 5 5 7 0 0 0 0 | 7 7 7 7 5 5 7 6 1 -1 1 0 14 | 7 7 7 7 5 5 7 6 1 -1 1 0 14 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 - 11 | 6 6 6 7 6 6 0 1 0 1 | 6 6 6 6 5 5 6 5 0 -2 0 0 11 | 6 6 6 6 5 5 6 5 0 -2 0 0 11 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 12 | 3 3 3 6 5 3 2 6 0 6 | 3 3 3 3 7 7 3 5 4 2 6 0 14 | 3 3 3 3 7 7 3 5 4 2 6 0 14 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 - 13 | 5 5 5 3 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 5 3 8 0 18 | 5 5 5 5 6 6 5 5 5 3 8 0 18 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 14 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 3 3 6 6 2 0 2 0 14 | 6 6 6 6 3 3 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 15 | 3 3 3 6 6 3 4 8 0 8 | 3 3 3 3 5 5 3 3 4 2 6 0 12 | 3 3 3 3 5 5 3 3 4 2 6 0 12 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 - 16 | 6 6 6 3 3 6 1 2 0 2 | 6 6 6 6 6 6 6 6 4 2 6 0 18 | 6 6 6 6 6 6 6 6 4 2 6 0 18 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 17 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 3 3 5 5 2 0 2 0 12 | 5 5 5 5 3 3 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 18 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 19 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 20 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 21 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 22 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 23 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 24 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 5 5 4 4 4 2 6 0 14 | 4 4 4 4 5 5 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 25 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 26 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 27 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 28 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 29 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 30 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 31 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 32 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 33 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 34 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 35 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 36 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 37 | 5 5 5 6 6 5 1 3 0 3 | 5 5 5 5 6 6 5 6 2 0 2 0 13 | 5 5 5 5 6 6 5 6 2 0 2 0 13 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 38 | 4 4 4 5 6 4 3 6 0 6 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 39 | 3 3 3 4 4 3 4 8 0 8 | 3 3 3 3 5 5 3 3 6 4 10 0 16 | 3 3 3 3 5 5 3 3 6 4 10 0 16 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 - 40 | 4 4 4 3 3 4 3 6 0 6 | 4 4 4 4 4 4 4 4 6 4 10 0 18 | 4 4 4 4 4 4 4 4 6 4 10 0 18 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 41 | 8 8 8 4 4 7 -1 0 20 20 | 8 8 8 8 3 3 8 7 1 -1 1 0 16 | 8 8 8 8 3 3 8 7 1 -1 1 0 16 | 8 8 8 8 100 0 0 0 | 8 8 8 8 100 0 0 0 - 42 | 5 5 5 8 7 6 1 3 0 3 | 5 5 5 5 4 4 5 4 0 -2 0 0 9 | 5 5 5 5 4 4 5 4 0 -2 0 0 9 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 43 | 4 4 4 5 4 4 1 4 0 4 | 4 4 4 4 8 8 4 6 4 2 6 0 16 | 4 4 4 4 8 8 4 6 4 2 6 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 44 | 6 6 6 4 6 6 1 2 0 2 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 45 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 46 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 6 6 6 6 2 0 2 0 14 | 6 6 6 6 6 6 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 47 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 48 | 4 4 4 6 5 4 2 5 0 5 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 49 | 4 4 4 4 5 4 3 6 0 6 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 50 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 4 4 6 6 3 1 4 0 16 | 6 6 6 6 4 4 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 51 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 4 4 4 4 3 1 4 0 12 | 4 4 4 4 4 4 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 52 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 53 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 54 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 55 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 56 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 5 5 4 4 3 1 4 0 12 | 4 4 4 4 5 5 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 57 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 6 6 6 6 3 1 4 0 16 | 6 6 6 6 6 6 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 58 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 4 4 4 4 3 1 4 0 12 | 4 4 4 4 4 4 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 59 | 4 4 4 4 4 4 3 6 0 6 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 60 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 5 5 4 2 6 0 16 | 5 5 5 5 4 4 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 61 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 4 4 5 5 3 1 4 0 14 | 5 5 5 5 4 4 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 62 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 5 5 4 4 4 2 6 0 14 | 4 4 4 4 5 5 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 63 | 2 2 2 4 4 2 5 10 0 10 | 2 2 2 2 5 5 2 2 7 5 12 0 16 | 2 2 2 2 5 5 2 2 7 5 12 0 16 | 2 2 2 2 100 0 0 0 | 2 2 2 2 100 0 0 0 - 64 | 4 4 4 2 2 4 3 6 0 6 | 4 4 4 4 4 4 4 4 7 5 12 0 20 | 4 4 4 4 4 4 4 4 7 5 12 0 20 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 65 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 2 2 5 5 4 2 6 0 16 | 5 5 5 5 2 2 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 66 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 67 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 68 | 8 8 8 5 5 7 -1 0 20 20 | 8 8 8 8 6 6 8 6 0 -2 0 0 14 | 8 8 8 8 6 6 8 6 0 -2 0 0 14 | 8 8 8 8 100 0 0 0 | 8 8 8 8 100 0 0 0 - 69 | 6 6 6 8 6 6 -1 2 20 22 | 6 6 6 6 5 5 5 5 -1 -3 0 0 10 | 6 6 6 6 5 5 5 5 -1 -3 0 0 10 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 70 | 4 4 4 5 5 5 0 2 0 2 | 4 4 4 4 8 8 5 7 3 1 4 0 16 | 4 4 4 4 8 8 5 7 3 1 4 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 71 | 5 5 5 5 7 5 2 4 0 4 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 72 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 4 4 5 5 3 1 4 0 14 | 5 5 5 5 4 4 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 73 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 74 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 75 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 76 | 4 4 4 6 6 4 2 5 0 5 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 77 | 7 7 7 4 5 7 0 0 0 0 | 7 7 7 7 6 6 7 7 2 0 2 0 16 | 7 7 7 7 6 6 7 7 2 0 2 0 16 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 - 78 | 6 6 6 7 7 6 1 2 0 2 | 6 6 6 6 4 4 6 4 0 -2 0 0 10 | 6 6 6 6 4 4 6 4 0 -2 0 0 10 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 79 | 5 5 5 6 4 5 0 2 0 2 | 5 5 5 5 7 7 5 7 2 0 2 0 14 | 5 5 5 5 7 7 5 7 2 0 2 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 80 | 5 5 5 5 7 5 2 4 0 4 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 81 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 82 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 83 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 84 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 85 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 86 | 7 7 7 5 5 7 0 0 0 0 | 7 7 7 7 6 6 7 6 1 -1 1 0 14 | 7 7 7 7 6 6 7 6 1 -1 1 0 14 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 - 87 | 2 2 2 7 6 2 4 9 0 9 | 2 2 2 2 5 5 2 3 4 2 6 0 11 | 2 2 2 2 5 5 2 3 4 2 6 0 11 | 2 2 2 2 100 0 0 0 | 2 2 2 2 100 0 0 0 - 88 | 6 6 6 2 3 6 1 2 0 2 | 6 6 6 6 7 7 6 6 5 3 8 0 20 | 6 6 6 6 7 7 6 6 5 3 8 0 20 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 89 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 2 2 4 4 3 1 4 0 12 | 4 4 4 4 2 2 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 90 | 4 4 4 4 4 4 3 6 0 6 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 91 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 5 5 4 2 6 0 16 | 5 5 5 5 4 4 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 92 | 8 8 8 5 5 7 -1 0 20 20 | 8 8 8 8 4 4 8 6 0 -2 0 0 14 | 8 8 8 8 4 4 8 6 0 -2 0 0 14 | 8 8 8 8 100 0 0 0 | 8 8 8 8 100 0 0 0 - 93 | 4 4 4 8 6 5 1 4 0 4 | 4 4 4 4 5 5 4 5 1 -1 1 0 10 | 4 4 4 4 5 5 4 5 1 -1 1 0 10 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 94 | 6 6 6 4 5 6 0 1 0 1 | 6 6 6 6 8 8 6 7 3 1 4 0 17 | 6 6 6 6 8 8 6 7 3 1 4 0 17 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 95 | 6 6 6 6 7 6 1 2 0 2 | 6 6 6 6 4 4 6 5 1 -1 1 0 12 | 6 6 6 6 4 4 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 96 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 - 97 | 4 4 4 6 6 4 2 5 0 5 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 - 98 | 5 5 5 4 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 - 99 | 7 7 7 5 5 7 0 0 0 0 | 7 7 7 7 4 4 7 6 1 -1 1 0 14 | 7 7 7 7 4 4 7 6 1 -1 1 0 14 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 \ No newline at end of file diff --git a/temp_3stage.txt b/temp_3stage.txt deleted file mode 100644 index 7a80083..0000000 --- a/temp_3stage.txt +++ /dev/null @@ -1,102 +0,0 @@ - t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 OQ:2|-2 IS:1|-1 IS:2|-2 OS:EXT|-1000 IL:-1000 HC SC TC | i=1 pr=-1 IO:0|-1 OQ:EXT|-2 IS:EXT|-2 OS:0|-1 IL:-1 HC SC TC | i=2 pr=-2 IO:0|-2 OQ:EXT|-3 IS:EXT|-3 OS:0|-2 IL:-2 HC SC TC ---- ---------------- -------------- --------- --------- --------- --------- -------------- ---------- ---- ---- ---- ------------- --------- ----------- ----------- --------- ------- ---- ---- ---- ------------- --------- ----------- ----------- --------- ------- ---- ---- ---- - 0 | 5 5 5 0 0 5 2 4 0 4 | 5 5 0 5 8 8 0 13 | 5 5 0 5 6 6 0 11 - 1 | 3 3 3 5 5 3 4 8 0 8 | 3 3 0 3 5 5 0 8 | 3 3 0 3 3 3 0 6 - 2 | 6 6 6 3 3 6 1 2 0 2 | 6 6 5 6 4 4 0 10 | 6 6 5 6 2 2 0 8 - 3 | 6 6 6 6 6 6 1 2 0 2 | 6 6 3 6 1 1 0 7 | 6 6 3 5 -1 0 0 5 - 4 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 1 1 0 7 | 6 6 6 6 -1 0 0 6 - 5 | 7 7 7 6 6 6 -1 1 20 21 | 7 7 6 7 0 0 0 7 | 7 7 6 6 -2 0 0 6 - 6 | 5 5 5 7 6 6 0 2 0 2 | 5 5 6 5 1 1 0 6 | 5 5 6 6 -1 0 0 6 - 7 | 5 5 5 5 6 5 1 3 0 3 | 5 5 7 5 3 3 0 8 | 5 5 7 6 1 1 0 7 - 8 | 5 5 5 5 6 5 2 4 0 4 | 5 5 5 5 3 3 0 8 | 5 5 5 5 1 1 0 6 - 9 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 3 3 0 8 | 5 5 5 5 1 1 0 6 - 10 | 7 7 7 5 5 7 0 0 0 0 | 7 7 5 7 1 1 0 8 | 7 7 5 6 -1 0 0 6 - 11 | 6 6 6 7 6 6 0 1 0 1 | 6 6 5 6 0 0 0 6 | 6 6 5 5 -2 0 0 5 - 12 | 3 3 3 6 5 3 2 6 0 6 | 3 3 7 3 4 4 0 7 | 3 3 7 5 2 2 0 7 - 13 | 5 5 5 3 5 5 2 4 0 4 | 5 5 6 5 5 5 0 10 | 5 5 6 5 3 3 0 8 - 14 | 6 6 6 5 5 6 1 2 0 2 | 6 6 3 6 2 2 0 8 | 6 6 3 6 0 0 0 6 - 15 | 3 3 3 6 6 3 4 8 0 8 | 3 3 5 3 4 4 0 7 | 3 3 5 3 2 2 0 5 - 16 | 6 6 6 3 3 6 1 2 0 2 | 6 6 6 6 4 4 0 10 | 6 6 6 6 2 2 0 8 - 17 | 5 5 5 6 6 5 2 4 0 4 | 5 5 3 5 2 2 0 7 | 5 5 3 5 0 0 0 5 - 18 | 4 4 4 5 5 4 3 6 0 6 | 4 4 6 4 4 4 0 8 | 4 4 6 4 2 2 0 6 - 19 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 0 9 | 5 5 5 5 2 2 0 7 - 20 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 0 8 | 4 4 4 4 2 2 0 6 - 21 | 6 6 6 4 4 6 1 2 0 2 | 6 6 5 6 3 3 0 9 | 6 6 5 6 1 1 0 7 - 22 | 5 5 5 6 6 5 2 4 0 4 | 5 5 4 5 2 2 0 7 | 5 5 4 5 0 0 0 5 - 23 | 5 5 5 5 5 5 2 4 0 4 | 5 5 6 5 3 3 0 8 | 5 5 6 5 1 1 0 6 - 24 | 4 4 4 5 5 4 3 6 0 6 | 4 4 5 4 4 4 0 8 | 4 4 5 4 2 2 0 6 - 25 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 0 9 | 5 5 5 5 2 2 0 7 - 26 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 0 8 | 4 4 4 4 2 2 0 6 - 27 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 0 9 | 5 5 5 5 2 2 0 7 - 28 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 0 8 | 4 4 4 4 2 2 0 6 - 29 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 0 9 | 5 5 5 5 2 2 0 7 - 30 | 6 6 6 5 5 6 1 2 0 2 | 6 6 4 6 2 2 0 8 | 6 6 4 6 0 0 0 6 - 31 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 2 2 0 7 | 5 5 5 5 0 0 0 5 - 32 | 5 5 5 5 5 5 2 4 0 4 | 5 5 6 5 3 3 0 8 | 5 5 6 5 1 1 0 6 - 33 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 3 3 0 8 | 5 5 5 5 1 1 0 6 - 34 | 6 6 6 5 5 6 1 2 0 2 | 6 6 5 6 2 2 0 8 | 6 6 5 6 0 0 0 6 - 35 | 6 6 6 6 6 6 1 2 0 2 | 6 6 5 6 1 1 0 7 | 6 6 5 5 -1 0 0 5 - 36 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 1 1 0 7 | 6 6 6 6 -1 0 0 6 - 37 | 5 5 5 6 6 5 1 3 0 3 | 5 5 6 5 2 2 0 7 | 5 5 6 6 0 0 0 6 - 38 | 4 4 4 5 6 4 3 6 0 6 | 4 4 6 4 4 4 0 8 | 4 4 6 4 2 2 0 6 - 39 | 3 3 3 4 4 3 4 8 0 8 | 3 3 5 3 6 6 0 9 | 3 3 5 3 4 4 0 7 - 40 | 4 4 4 3 3 4 3 6 0 6 | 4 4 4 4 6 6 0 10 | 4 4 4 4 4 4 0 8 - 41 | 8 8 8 4 4 7 -1 0 20 20 | 8 8 3 8 1 1 0 9 | 8 8 3 7 -1 0 0 7 - 42 | 5 5 5 8 7 6 1 3 0 3 | 5 5 4 5 0 0 0 5 | 5 5 4 4 -2 0 0 4 - 43 | 4 4 4 5 4 4 1 4 0 4 | 4 4 8 4 4 4 0 8 | 4 4 8 6 2 2 0 8 - 44 | 6 6 6 4 6 6 1 2 0 2 | 6 6 5 6 3 3 0 9 | 6 6 5 6 1 1 0 7 - 45 | 5 5 5 6 6 5 2 4 0 4 | 5 5 4 5 2 2 0 7 | 5 5 4 5 0 0 0 5 - 46 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 2 2 0 8 | 6 6 6 6 0 0 0 6 - 47 | 6 6 6 6 6 6 1 2 0 2 | 6 6 5 6 1 1 0 7 | 6 6 5 5 -1 0 0 5 - 48 | 4 4 4 6 5 4 2 5 0 5 | 4 4 6 4 3 3 0 7 | 4 4 6 5 1 1 0 6 - 49 | 4 4 4 4 5 4 3 6 0 6 | 4 4 6 4 5 5 0 9 | 4 4 6 4 3 3 0 7 - 50 | 6 6 6 4 4 6 1 2 0 2 | 6 6 4 6 3 3 0 9 | 6 6 4 6 1 1 0 7 - 51 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 3 3 0 7 | 4 4 4 4 1 1 0 5 - 52 | 5 5 5 4 4 5 2 4 0 4 | 5 5 6 5 4 4 0 9 | 5 5 6 5 2 2 0 7 - 53 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 0 8 | 4 4 4 4 2 2 0 6 - 54 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 0 9 | 5 5 5 5 2 2 0 7 - 55 | 6 6 6 5 5 6 1 2 0 2 | 6 6 4 6 2 2 0 8 | 6 6 4 6 0 0 0 6 - 56 | 4 4 4 6 6 4 3 6 0 6 | 4 4 5 4 3 3 0 7 | 4 4 5 4 1 1 0 5 - 57 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 3 3 0 9 | 6 6 6 6 1 1 0 7 - 58 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 3 3 0 7 | 4 4 4 4 1 1 0 5 - 59 | 4 4 4 4 4 4 3 6 0 6 | 4 4 6 4 5 5 0 9 | 4 4 6 4 3 3 0 7 - 60 | 5 5 5 4 4 5 2 4 0 4 | 5 5 4 5 4 4 0 9 | 5 5 4 5 2 2 0 7 - 61 | 5 5 5 5 5 5 2 4 0 4 | 5 5 4 5 3 3 0 8 | 5 5 4 5 1 1 0 6 - 62 | 4 4 4 5 5 4 3 6 0 6 | 4 4 5 4 4 4 0 8 | 4 4 5 4 2 2 0 6 - 63 | 2 2 2 4 4 2 5 10 0 10 | 2 2 5 2 7 7 0 9 | 2 2 5 2 5 5 0 7 - 64 | 4 4 4 2 2 4 3 6 0 6 | 4 4 4 4 7 7 0 11 | 4 4 4 4 5 5 0 9 - 65 | 5 5 5 4 4 5 2 4 0 4 | 5 5 2 5 4 4 0 9 | 5 5 2 5 2 2 0 7 - 66 | 6 6 6 5 5 6 1 2 0 2 | 6 6 4 6 2 2 0 8 | 6 6 4 6 0 0 0 6 - 67 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 2 2 0 7 | 5 5 5 5 0 0 0 5 - 68 | 8 8 8 5 5 7 -1 0 20 20 | 8 8 6 8 0 0 0 8 | 8 8 6 6 -2 0 0 6 - 69 | 6 6 6 8 6 6 -1 2 20 22 | 6 6 5 5 -1 0 0 5 | 6 6 5 5 -3 0 0 5 - 70 | 4 4 4 5 5 5 0 2 0 2 | 4 4 8 5 3 3 0 8 | 4 4 8 7 1 1 0 8 - 71 | 5 5 5 5 7 5 2 4 0 4 | 5 5 6 5 4 4 0 9 | 5 5 6 5 2 2 0 7 - 72 | 5 5 5 5 5 5 2 4 0 4 | 5 5 4 5 3 3 0 8 | 5 5 4 5 1 1 0 6 - 73 | 6 6 6 5 5 6 1 2 0 2 | 6 6 5 6 2 2 0 8 | 6 6 5 6 0 0 0 6 - 74 | 6 6 6 6 6 6 1 2 0 2 | 6 6 5 6 1 1 0 7 | 6 6 5 5 -1 0 0 5 - 75 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 1 1 0 7 | 6 6 6 6 -1 0 0 6 - 76 | 4 4 4 6 6 4 2 5 0 5 | 4 4 6 4 3 3 0 7 | 4 4 6 5 1 1 0 6 - 77 | 7 7 7 4 5 7 0 0 0 0 | 7 7 6 7 2 2 0 9 | 7 7 6 7 0 0 0 7 - 78 | 6 6 6 7 7 6 1 2 0 2 | 6 6 4 6 0 0 0 6 | 6 6 4 4 -2 0 0 4 - 79 | 5 5 5 6 4 5 0 2 0 2 | 5 5 7 5 2 2 0 7 | 5 5 7 7 0 0 0 7 - 80 | 5 5 5 5 7 5 2 4 0 4 | 5 5 6 5 3 3 0 8 | 5 5 6 5 1 1 0 6 - 81 | 6 6 6 5 5 6 1 2 0 2 | 6 6 5 6 2 2 0 8 | 6 6 5 6 0 0 0 6 - 82 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 2 2 0 7 | 5 5 5 5 0 0 0 5 - 83 | 4 4 4 5 5 4 3 6 0 6 | 4 4 6 4 4 4 0 8 | 4 4 6 4 2 2 0 6 - 84 | 6 6 6 4 4 6 1 2 0 2 | 6 6 5 6 3 3 0 9 | 6 6 5 6 1 1 0 7 - 85 | 5 5 5 6 6 5 2 4 0 4 | 5 5 4 5 2 2 0 7 | 5 5 4 5 0 0 0 5 - 86 | 7 7 7 5 5 7 0 0 0 0 | 7 7 6 7 1 1 0 8 | 7 7 6 6 -1 0 0 6 - 87 | 2 2 2 7 6 2 4 9 0 9 | 2 2 5 2 4 4 0 6 | 2 2 5 3 2 2 0 5 - 88 | 6 6 6 2 3 6 1 2 0 2 | 6 6 7 6 5 5 0 11 | 6 6 7 6 3 3 0 9 - 89 | 4 4 4 6 6 4 3 6 0 6 | 4 4 2 4 3 3 0 7 | 4 4 2 4 1 1 0 5 - 90 | 4 4 4 4 4 4 3 6 0 6 | 4 4 6 4 5 5 0 9 | 4 4 6 4 3 3 0 7 - 91 | 5 5 5 4 4 5 2 4 0 4 | 5 5 4 5 4 4 0 9 | 5 5 4 5 2 2 0 7 - 92 | 8 8 8 5 5 7 -1 0 20 20 | 8 8 4 8 0 0 0 8 | 8 8 4 6 -2 0 0 6 - 93 | 4 4 4 8 6 5 1 4 0 4 | 4 4 5 4 1 1 0 5 | 4 4 5 5 -1 0 0 5 - 94 | 6 6 6 4 5 6 0 1 0 1 | 6 6 8 6 3 3 0 9 | 6 6 8 7 1 1 0 8 - 95 | 6 6 6 6 7 6 1 2 0 2 | 6 6 4 6 1 1 0 7 | 6 6 4 5 -1 0 0 5 - 96 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 1 1 0 7 | 6 6 6 6 -1 0 0 6 - 97 | 4 4 4 6 6 4 2 5 0 5 | 4 4 6 4 3 3 0 7 | 4 4 6 5 1 1 0 6 - 98 | 5 5 5 4 5 5 2 4 0 4 | 5 5 6 5 4 4 0 9 | 5 5 6 5 2 2 0 7 - 99 | 7 7 7 5 5 7 0 0 0 0 | 7 7 4 7 1 1 0 8 | 7 7 4 6 -1 0 0 6 \ No newline at end of file diff --git a/tests/additional_files/test_demand_source_TestFromDict_data.json b/tests/additional_files/test_demand_source_TestFromDict_data.json index 4e2476d..0328cb3 100644 --- a/tests/additional_files/test_demand_source_TestFromDict_data.json +++ b/tests/additional_files/test_demand_source_TestFromDict_data.json @@ -1,800 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "missing_mean", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "missing_demand_list", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2022-07-16 10:56:28.395669" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_mean", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_list", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.524246"} \ No newline at end of file diff --git a/tests/additional_files/test_disruption_process_TestFromDict_data.json b/tests/additional_files/test_disruption_process_TestFromDict_data.json index b460ba1..f5f38df 100644 --- a/tests/additional_files/test_disruption_process_TestFromDict_data.json +++ b/tests/additional_files/test_disruption_process_TestFromDict_data.json @@ -1,800 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "missing_disruption_probability", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "missing_disruption_state_list", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2022-07-16 10:56:28.399244" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_disruption_probability", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_disruption_state_list", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.532325"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json index a362e26..4787a8c 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json @@ -1,18 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "test_example_4_2", - "description": "this is test_example_4_2", - "data": { - "revenue": 1, - "purchase_cost": 0.3, - "salvage_value": 0.12, - "demand_mean": 50, - "demand_sd": 8 - }, - "type": "dict" - } - ], - "last_updated": "2022-07-16 21:33:28.923480" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-04-21 22:28:41.855000"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json index 68d9081..9f6b0df 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json @@ -1,404 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "test_example_6_1", - "description": "this is test_example_6_1", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2022-07-16 21:33:28.923480" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:41.863841"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json index 6374bd9..f61937a 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json @@ -1,404 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "test_example_6_1_with_order_capacity", - "description": "this is test_example_6_1_with_order_capacity", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": 25, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": 40, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2022-07-16 21:33:28.923480" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:41.869483"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json index 0d0f446..1d1f5dc 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json @@ -1,18 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "test_example_9_5", - "description": "this is test_example_9_5", - "data": { - "holding_cost": 0.06, - "fixed_cost": 18500, - "demand_rate": 75000, - "yield_mean": 0.8333333333333334, - "yield_sd": 0.14085904245475275 - }, - "type": "dict" - } - ], - "last_updated": "2022-07-16 21:33:28.923480" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-04-21 22:28:41.858721"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json index 3b2f0e5..dac621b 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json @@ -1,1196 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "test_figure_6_14", - "description": "this is test_figure_6_14", - "data": { - "nodes": [ - { - "_index": 1, - "name": "Raw_Material", - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [], - "_successors": [ - 2 - ], - "local_holding_cost": 0.01, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": "Process_Wafers", - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 1 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 0.03, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": "Package_Test_Wafers", - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 2 - ], - "_successors": [ - 5 - ], - "local_holding_cost": 0.04, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": "Imager_Base", - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [], - "_successors": [ - 5 - ], - "local_holding_cost": 0.06, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 4, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": "Imager_Assembly", - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - 3, - 4 - ], - "_successors": [ - 6 - ], - "local_holding_cost": 0.12, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": "Ship_to_Final_Assembly", - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 5 - ], - "_successors": [ - 10 - ], - "local_holding_cost": 0.13, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": "Camera", - "network": null, - "_products_by_index": { - "-7": -7 - }, - "_dummy_product": -7, - "_external_supplier_dummy_product": -8, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 7, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 6, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 8, - "name": "Circuit_Board", - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.08, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 8, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 4, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 9, - "name": "Other_Parts", - "network": null, - "_products_by_index": { - "-9": -9 - }, - "_dummy_product": -9, - "_external_supplier_dummy_product": -10, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.04, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 9, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 10, - "name": "Build_Test_Pack", - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - 7, - 6, - 8, - 9 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 10, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 10, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": 2, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2022-07-16 21:33:28.923480" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:41.878365"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json index 47ff8f2..90f111d 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json @@ -1,12257 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "test_omit_state_vars_false", - "description": "this is test_omit_state_vars_false", - "data": { - "nodes": [ - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 3.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 5, - "period": 0, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 30.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 30.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 30.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 30.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 30.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 2.9299999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 10.254999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 105.0, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 30.0 - }, - "demand_met_from_stock": { - "-5": 30.0 - }, - "demand_met_from_stock_cumul": { - "-5": 30.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 1, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 36.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 30.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 36.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 32.93 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 36.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 3.0700000000000003 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 36.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -3.0700000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 115.255, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 66.0 - }, - "demand_met_from_stock": { - "-5": 32.93 - }, - "demand_met_from_stock_cumul": { - "-5": 62.93 - }, - "fill_rate": { - "-5": 0.9534848484848485 - } - }, - { - "node": 5, - "period": 2, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 25.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 36.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 25.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 28.07 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 25.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 25.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 7.93 - }, - "disrupted": false, - "holding_cost_incurred": 27.755, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 98.245, - "revenue_earned": 0.0, - "total_cost_incurred": 126.0, - "demand_cumul": { - "-5": 91.0 - }, - "demand_met_from_stock": { - "-5": 25.0 - }, - "demand_met_from_stock_cumul": { - "-5": 87.93 - }, - "fill_rate": { - "-5": 0.9662637362637363 - } - }, - { - "node": 5, - "period": 3, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 34.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 25.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 34.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 32.93 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 34.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 1.0700000000000003 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 34.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -1.0700000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 115.255, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 125.0 - }, - "demand_met_from_stock": { - "-5": 32.93 - }, - "demand_met_from_stock_cumul": { - "-5": 120.86000000000001 - }, - "fill_rate": { - "-5": 0.9668800000000001 - } - }, - { - "node": 5, - "period": 4, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 38.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 34.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 38.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 34.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 38.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 5.07 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 38.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -5.07 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 119.0, - "revenue_earned": 0.0, - "total_cost_incurred": 119.0, - "demand_cumul": { - "-5": 163.0 - }, - "demand_met_from_stock": { - "-5": 32.93 - }, - "demand_met_from_stock_cumul": { - "-5": 153.79000000000002 - }, - "fill_rate": { - "-5": 0.9434969325153375 - } - }, - { - "node": 5, - "period": 5, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 26.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 38.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 26.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 31.07 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 26.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 26.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 6.93 - }, - "disrupted": false, - "holding_cost_incurred": 24.255, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 108.745, - "revenue_earned": 0.0, - "total_cost_incurred": 133.0, - "demand_cumul": { - "-5": 189.0 - }, - "demand_met_from_stock": { - "-5": 26.0 - }, - "demand_met_from_stock_cumul": { - "-5": 179.79000000000002 - }, - "fill_rate": { - "-5": 0.9512698412698414 - } - }, - { - "node": 5, - "period": 6, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 29.000000000000014 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 26.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 29.000000000000014 - } - }, - "outbound_shipment": { - "4": { - "-5": 29.000000000000014 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 29.000000000000014 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 29.000000000000014 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 3.9299999999999855 - }, - "disrupted": false, - "holding_cost_incurred": 13.75499999999995, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 101.50000000000006, - "revenue_earned": 0.0, - "total_cost_incurred": 115.25500000000001, - "demand_cumul": { - "-5": 218.0 - }, - "demand_met_from_stock": { - "-5": 29.000000000000014 - }, - "demand_met_from_stock_cumul": { - "-5": 208.79000000000002 - }, - "fill_rate": { - "-5": 0.9577522935779818 - } - }, - { - "node": 5, - "period": 7, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 31.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 29.000000000000014 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 31.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 31.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 31.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 31.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 1.9299999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 6.754999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 108.5, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 249.0 - }, - "demand_met_from_stock": { - "-5": 31.0 - }, - "demand_met_from_stock_cumul": { - "-5": 239.79000000000002 - }, - "fill_rate": { - "-5": 0.9630120481927712 - } - }, - { - "node": 5, - "period": 8, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 34.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 31.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 34.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 32.93 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 34.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 1.0700000000000003 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 34.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -1.0700000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 115.255, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 283.0 - }, - "demand_met_from_stock": { - "-5": 32.93 - }, - "demand_met_from_stock_cumul": { - "-5": 272.72 - }, - "fill_rate": { - "-5": 0.9636749116607775 - } - }, - { - "node": 5, - "period": 9, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 27.999999999999986 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 34.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 27.999999999999986 - } - }, - "outbound_shipment": { - "4": { - "-5": 29.069999999999986 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 27.999999999999986 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 27.999999999999986 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 4.930000000000014 - }, - "disrupted": false, - "holding_cost_incurred": 17.25500000000005, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 101.74499999999995, - "revenue_earned": 0.0, - "total_cost_incurred": 119.0, - "demand_cumul": { - "-5": 311.0 - }, - "demand_met_from_stock": { - "-5": 27.999999999999986 - }, - "demand_met_from_stock_cumul": { - "-5": 300.72 - }, - "fill_rate": { - "-5": 0.9669453376205789 - } - }, - { - "node": 5, - "period": 10, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 31.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 27.999999999999986 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 31.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 31.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 31.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 31.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 1.9299999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 6.754999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 108.5, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 342.0 - }, - "demand_met_from_stock": { - "-5": 31.0 - }, - "demand_met_from_stock_cumul": { - "-5": 331.72 - }, - "fill_rate": { - "-5": 0.9699415204678363 - } - }, - { - "node": 5, - "period": 11, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 26.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 31.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 26.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 26.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 26.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 26.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 6.93 - }, - "disrupted": false, - "holding_cost_incurred": 24.255, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 91.0, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 368.0 - }, - "demand_met_from_stock": { - "-5": 26.0 - }, - "demand_met_from_stock_cumul": { - "-5": 357.72 - }, - "fill_rate": { - "-5": 0.9720652173913045 - } - }, - { - "node": 5, - "period": 12, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 33.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 26.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 33.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 32.93 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 33.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.07000000000000028 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 33.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -0.07000000000000028 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 115.255, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 401.0 - }, - "demand_met_from_stock": { - "-5": 32.93 - }, - "demand_met_from_stock_cumul": { - "-5": 390.65000000000003 - }, - "fill_rate": { - "-5": 0.9741895261845387 - } - }, - { - "node": 5, - "period": 13, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 34.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 33.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 34.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 33.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 34.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 1.0700000000000003 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 34.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -1.0700000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 115.5, - "revenue_earned": 0.0, - "total_cost_incurred": 115.5, - "demand_cumul": { - "-5": 435.0 - }, - "demand_met_from_stock": { - "-5": 32.93 - }, - "demand_met_from_stock_cumul": { - "-5": 423.58000000000004 - }, - "fill_rate": { - "-5": 0.9737471264367817 - } - }, - { - "node": 5, - "period": 14, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 29.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 34.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 29.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 30.07 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 29.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 29.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 3.9299999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 13.754999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 105.245, - "revenue_earned": 0.0, - "total_cost_incurred": 119.0, - "demand_cumul": { - "-5": 464.0 - }, - "demand_met_from_stock": { - "-5": 29.0 - }, - "demand_met_from_stock_cumul": { - "-5": 452.58000000000004 - }, - "fill_rate": { - "-5": 0.9753879310344828 - } - }, - { - "node": 5, - "period": 15, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 35.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 29.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 35.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 32.93 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 35.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 2.0700000000000003 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 35.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -2.0700000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 115.255, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 499.0 - }, - "demand_met_from_stock": { - "-5": 32.93 - }, - "demand_met_from_stock_cumul": { - "-5": 485.51000000000005 - }, - "fill_rate": { - "-5": 0.9729659318637276 - } - }, - { - "node": 5, - "period": 16, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 24.000000000000007 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 35.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 24.000000000000007 - } - }, - "outbound_shipment": { - "4": { - "-5": 26.070000000000007 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 24.000000000000007 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 24.000000000000007 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 8.929999999999993 - }, - "disrupted": false, - "holding_cost_incurred": 31.254999999999974, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 91.24500000000003, - "revenue_earned": 0.0, - "total_cost_incurred": 122.5, - "demand_cumul": { - "-5": 523.0 - }, - "demand_met_from_stock": { - "-5": 24.000000000000007 - }, - "demand_met_from_stock_cumul": { - "-5": 509.51000000000005 - }, - "fill_rate": { - "-5": 0.974206500956023 - } - }, - { - "node": 5, - "period": 17, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 28.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 24.000000000000007 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 28.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 28.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 28.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 28.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 4.93 - }, - "disrupted": false, - "holding_cost_incurred": 17.255, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 98.0, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 551.0 - }, - "demand_met_from_stock": { - "-5": 28.0 - }, - "demand_met_from_stock_cumul": { - "-5": 537.51 - }, - "fill_rate": { - "-5": 0.9755172413793103 - } - }, - { - "node": 5, - "period": 18, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 29.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 28.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 29.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 29.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 29.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 29.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 3.9299999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 13.754999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 101.5, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 580.0 - }, - "demand_met_from_stock": { - "-5": 29.0 - }, - "demand_met_from_stock_cumul": { - "-5": 566.51 - }, - "fill_rate": { - "-5": 0.9767413793103448 - } - }, - { - "node": 5, - "period": 19, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 33.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 29.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 33.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 32.93 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 33.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.07000000000000028 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 33.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -0.07000000000000028 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 115.255, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 613.0 - }, - "demand_met_from_stock": { - "-5": 32.93 - }, - "demand_met_from_stock_cumul": { - "-5": 599.4399999999999 - }, - "fill_rate": { - "-5": 0.977879282218597 - } - }, - { - "node": 5, - "period": 20, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 43.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 33.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 43.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 33.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 43.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 10.07 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 43.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -10.07 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 115.5, - "revenue_earned": 0.0, - "total_cost_incurred": 115.5, - "demand_cumul": { - "-5": 656.0 - }, - "demand_met_from_stock": { - "-5": 32.93 - }, - "demand_met_from_stock_cumul": { - "-5": 632.3699999999999 - }, - "fill_rate": { - "-5": 0.9639786585365852 - } - }, - { - "node": 5, - "period": 21, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 22.999999999999993 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 43.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 22.999999999999993 - } - }, - "outbound_shipment": { - "4": { - "-5": 33.06999999999999 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 23.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 22.999999999999993 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 9.930000000000007 - }, - "disrupted": false, - "holding_cost_incurred": 34.755000000000024, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 115.74499999999998, - "revenue_earned": 0.0, - "total_cost_incurred": 150.5, - "demand_cumul": { - "-5": 679.0 - }, - "demand_met_from_stock": { - "-5": 22.999999999999993 - }, - "demand_met_from_stock_cumul": { - "-5": 655.3699999999999 - }, - "fill_rate": { - "-5": 0.9651988217967598 - } - }, - { - "node": 5, - "period": 22, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 18.99999999999998 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 22.999999999999993 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 18.999999999999986 - } - }, - "outbound_shipment": { - "4": { - "-5": 18.999999999999986 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 18.999999999999986 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 18.99999999999998 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 13.930000000000014 - }, - "disrupted": false, - "holding_cost_incurred": 48.75500000000005, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 66.49999999999994, - "revenue_earned": 0.0, - "total_cost_incurred": 115.255, - "demand_cumul": { - "-5": 698.0 - }, - "demand_met_from_stock": { - "-5": 18.999999999999986 - }, - "demand_met_from_stock_cumul": { - "-5": 674.3699999999999 - }, - "fill_rate": { - "-5": 0.9661461318051574 - } - }, - { - "node": 5, - "period": 23, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 30.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 18.99999999999998 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 30.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 30.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 30.000000000000007 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 30.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 2.9299999999999926 - }, - "disrupted": false, - "holding_cost_incurred": 10.254999999999974, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 105.0, - "revenue_earned": 0.0, - "total_cost_incurred": 115.25499999999997, - "demand_cumul": { - "-5": 728.0 - }, - "demand_met_from_stock": { - "-5": 30.0 - }, - "demand_met_from_stock_cumul": { - "-5": 704.3699999999999 - }, - "fill_rate": { - "-5": 0.9675412087912086 - } - }, - { - "node": 5, - "period": 24, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 38.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 30.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 38.0 - } - }, - "outbound_shipment": { - "4": { - "-5": 32.92999999999999 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 38.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 5.070000000000007 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 38.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -5.070000000000007 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 115.25499999999997, - "revenue_earned": 0.0, - "total_cost_incurred": 115.25499999999997, - "demand_cumul": { - "-5": 766.0 - }, - "demand_met_from_stock": { - "-5": 32.92999999999999 - }, - "demand_met_from_stock_cumul": { - "-5": 737.2999999999998 - }, - "fill_rate": { - "-5": 0.9625326370757178 - } - }, - { - "node": 5, - "period": 25, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 38.0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 0 - } - }, - "outbound_shipment": { - "4": { - "-5": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 38.0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 5.070000000000007 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": -5.070000000000007 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-5": 766.0 - }, - "demand_met_from_stock": { - "-5": 0 - }, - "demand_met_from_stock_cumul": { - "-5": 737.2999999999998 - }, - "fill_rate": { - "-5": 0 - } - }, - { - "node": 5, - "period": 26, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 0 - } - }, - "outbound_shipment": { - "4": { - "-5": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0 - } - }, - "raw_material_inventory": { - "-6": 0 - }, - "inventory_level": { - "-5": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-5": 0 - }, - "demand_met_from_stock": { - "-5": 0 - }, - "demand_met_from_stock_cumul": { - "-5": 0 - }, - "fill_rate": { - "-5": 0 - } - }, - { - "node": 5, - "period": 27, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-5": 0 - } - }, - "outbound_shipment": { - "4": { - "-5": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 0 - } - }, - "backorders_by_successor": { - "4": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0 - } - }, - "raw_material_inventory": { - "-6": 0 - }, - "inventory_level": { - "-5": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-5": 0 - }, - "demand_met_from_stock": { - "-5": 0 - }, - "demand_met_from_stock_cumul": { - "-5": 0 - }, - "fill_rate": { - "-5": 0 - } - } - ] - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 2.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 33.3, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 4, - "period": 0, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 30.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 30.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 30.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 30.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 30.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 3.299999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 8.249999999999993, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 75.0, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25, - "demand_cumul": { - "-4": 30.0 - }, - "demand_met_from_stock": { - "-4": 30.0 - }, - "demand_met_from_stock_cumul": { - "-4": 30.0 - }, - "fill_rate": { - "-4": 1.0 - } - }, - { - "node": 4, - "period": 1, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 32.93 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 30.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 36.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 33.3 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 36.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 2.700000000000003 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 36.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": -2.700000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 83.25, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25, - "demand_cumul": { - "-4": 66.0 - }, - "demand_met_from_stock": { - "-4": 33.3 - }, - "demand_met_from_stock_cumul": { - "-4": 63.3 - }, - "fill_rate": { - "-4": 0.959090909090909 - } - }, - { - "node": 4, - "period": 2, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 28.07 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 32.93 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 25.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 27.700000000000003 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 28.07 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 25.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 5.229999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 13.074999999999992, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 69.25, - "revenue_earned": 0.0, - "total_cost_incurred": 82.32499999999999, - "demand_cumul": { - "-4": 91.0 - }, - "demand_met_from_stock": { - "-4": 25.0 - }, - "demand_met_from_stock_cumul": { - "-4": 88.3 - }, - "fill_rate": { - "-4": 0.9703296703296703 - } - }, - { - "node": 4, - "period": 3, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 32.93 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 28.07 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 34.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 33.3 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 34.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.7000000000000028 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 34.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": -0.7000000000000028 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 83.25, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25, - "demand_cumul": { - "-4": 125.0 - }, - "demand_met_from_stock": { - "-4": 33.3 - }, - "demand_met_from_stock_cumul": { - "-4": 121.6 - }, - "fill_rate": { - "-4": 0.9728 - } - }, - { - "node": 4, - "period": 4, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 34.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 32.93 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 38.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 32.93 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 39.07 - } - }, - "backorders_by_successor": { - "3": { - "-4": 5.770000000000003 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 38.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": -5.770000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 82.325, - "revenue_earned": 0.0, - "total_cost_incurred": 82.325, - "demand_cumul": { - "-4": 163.0 - }, - "demand_met_from_stock": { - "-4": 32.23 - }, - "demand_met_from_stock_cumul": { - "-4": 153.82999999999998 - }, - "fill_rate": { - "-4": 0.9437423312883435 - } - }, - { - "node": 4, - "period": 5, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 31.07 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 34.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 26.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 31.770000000000003 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 31.069999999999993 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 26.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 2.229999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 5.574999999999992, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 79.42500000000001, - "revenue_earned": 0.0, - "total_cost_incurred": 85.0, - "demand_cumul": { - "-4": 189.0 - }, - "demand_met_from_stock": { - "-4": 26.0 - }, - "demand_met_from_stock_cumul": { - "-4": 179.82999999999998 - }, - "fill_rate": { - "-4": 0.9514814814814814 - } - }, - { - "node": 4, - "period": 6, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 29.000000000000014 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 31.07 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 29.000000000000007 - } - }, - "outbound_shipment": { - "3": { - "-4": 29.000000000000007 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 29.000000000000007 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 29.000000000000014 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 4.29999999999999 - }, - "disrupted": false, - "holding_cost_incurred": 10.749999999999975, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 72.50000000000001, - "revenue_earned": 0.0, - "total_cost_incurred": 83.24999999999999, - "demand_cumul": { - "-4": 218.0 - }, - "demand_met_from_stock": { - "-4": 29.000000000000007 - }, - "demand_met_from_stock_cumul": { - "-4": 208.82999999999998 - }, - "fill_rate": { - "-4": 0.9579357798165137 - } - }, - { - "node": 4, - "period": 7, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 31.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 29.000000000000014 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 31.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 31.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 30.999999999999993 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 31.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 2.3000000000000043 - }, - "disrupted": false, - "holding_cost_incurred": 5.750000000000011, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 77.5, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25000000000001, - "demand_cumul": { - "-4": 249.0 - }, - "demand_met_from_stock": { - "-4": 31.0 - }, - "demand_met_from_stock_cumul": { - "-4": 239.82999999999998 - }, - "fill_rate": { - "-4": 0.9631726907630521 - } - }, - { - "node": 4, - "period": 8, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 32.93 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 31.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 34.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 33.300000000000004 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 34.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.6999999999999957 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 34.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": -0.6999999999999957 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 83.25000000000001, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25000000000001, - "demand_cumul": { - "-4": 283.0 - }, - "demand_met_from_stock": { - "-4": 33.300000000000004 - }, - "demand_met_from_stock_cumul": { - "-4": 273.13 - }, - "fill_rate": { - "-4": 0.9651236749116607 - } - }, - { - "node": 4, - "period": 9, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 29.069999999999986 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 32.93 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 27.999999999999993 - } - }, - "outbound_shipment": { - "3": { - "-4": 28.69999999999999 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 29.069999999999986 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 27.999999999999986 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 4.230000000000011 - }, - "disrupted": false, - "holding_cost_incurred": 10.575000000000028, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 71.74999999999997, - "revenue_earned": 0.0, - "total_cost_incurred": 82.325, - "demand_cumul": { - "-4": 311.0 - }, - "demand_met_from_stock": { - "-4": 27.999999999999993 - }, - "demand_met_from_stock_cumul": { - "-4": 301.13 - }, - "fill_rate": { - "-4": 0.9682636655948553 - } - }, - { - "node": 4, - "period": 10, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 31.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 29.069999999999986 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 31.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 31.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 31.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 31.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 2.299999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 5.749999999999993, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 77.5, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25, - "demand_cumul": { - "-4": 342.0 - }, - "demand_met_from_stock": { - "-4": 31.0 - }, - "demand_met_from_stock_cumul": { - "-4": 332.13 - }, - "fill_rate": { - "-4": 0.971140350877193 - } - }, - { - "node": 4, - "period": 11, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 26.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 31.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 26.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 26.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 26.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 26.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 7.299999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 18.249999999999993, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 65.0, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25, - "demand_cumul": { - "-4": 368.0 - }, - "demand_met_from_stock": { - "-4": 26.0 - }, - "demand_met_from_stock_cumul": { - "-4": 358.13 - }, - "fill_rate": { - "-4": 0.973179347826087 - } - }, - { - "node": 4, - "period": 12, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 32.93 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 26.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 33.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 33.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 33.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 33.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 0.29999999999999716 - }, - "disrupted": false, - "holding_cost_incurred": 0.7499999999999929, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 82.5, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25, - "demand_cumul": { - "-4": 401.0 - }, - "demand_met_from_stock": { - "-4": 33.0 - }, - "demand_met_from_stock_cumul": { - "-4": 391.13 - }, - "fill_rate": { - "-4": 0.9753865336658354 - } - }, - { - "node": 4, - "period": 13, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 33.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 32.93 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 34.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 33.23 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 34.07 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.7700000000000031 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 34.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": -0.7700000000000031 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 83.07499999999999, - "revenue_earned": 0.0, - "total_cost_incurred": 83.07499999999999, - "demand_cumul": { - "-4": 435.0 - }, - "demand_met_from_stock": { - "-4": 33.23 - }, - "demand_met_from_stock_cumul": { - "-4": 424.36 - }, - "fill_rate": { - "-4": 0.9755402298850575 - } - }, - { - "node": 4, - "period": 14, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 30.07 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 33.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 29.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 29.770000000000003 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 30.07 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 29.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 3.229999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 8.074999999999992, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 74.42500000000001, - "revenue_earned": 0.0, - "total_cost_incurred": 82.5, - "demand_cumul": { - "-4": 464.0 - }, - "demand_met_from_stock": { - "-4": 29.0 - }, - "demand_met_from_stock_cumul": { - "-4": 453.36 - }, - "fill_rate": { - "-4": 0.9770689655172414 - } - }, - { - "node": 4, - "period": 15, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 32.93 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 30.07 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 35.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 33.3 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 34.99999999999999 - } - }, - "backorders_by_successor": { - "3": { - "-4": 1.7000000000000028 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 35.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": -1.7000000000000028 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 83.25, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25, - "demand_cumul": { - "-4": 499.0 - }, - "demand_met_from_stock": { - "-4": 33.3 - }, - "demand_met_from_stock_cumul": { - "-4": 486.66 - }, - "fill_rate": { - "-4": 0.9752705410821644 - } - }, - { - "node": 4, - "period": 16, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 26.070000000000007 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 32.93 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 24.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 25.700000000000003 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 26.07 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 24.000000000000007 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 7.229999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 18.074999999999992, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 64.25, - "revenue_earned": 0.0, - "total_cost_incurred": 82.32499999999999, - "demand_cumul": { - "-4": 523.0 - }, - "demand_met_from_stock": { - "-4": 24.0 - }, - "demand_met_from_stock_cumul": { - "-4": 510.66 - }, - "fill_rate": { - "-4": 0.9764053537284896 - } - }, - { - "node": 4, - "period": 17, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 28.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 26.070000000000007 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 28.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 28.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 27.999999999999993 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 28.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 5.300000000000004 - }, - "disrupted": false, - "holding_cost_incurred": 13.25000000000001, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 70.0, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25000000000001, - "demand_cumul": { - "-4": 551.0 - }, - "demand_met_from_stock": { - "-4": 28.0 - }, - "demand_met_from_stock_cumul": { - "-4": 538.6600000000001 - }, - "fill_rate": { - "-4": 0.9776043557168785 - } - }, - { - "node": 4, - "period": 18, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 29.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 28.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 29.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 29.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 28.999999999999993 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 29.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 4.300000000000004 - }, - "disrupted": false, - "holding_cost_incurred": 10.75000000000001, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 72.5, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25000000000001, - "demand_cumul": { - "-4": 580.0 - }, - "demand_met_from_stock": { - "-4": 29.0 - }, - "demand_met_from_stock_cumul": { - "-4": 567.6600000000001 - }, - "fill_rate": { - "-4": 0.9787241379310346 - } - }, - { - "node": 4, - "period": 19, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 32.93 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 29.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 33.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 33.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 32.99999999999999 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 33.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 0.30000000000000426 - }, - "disrupted": false, - "holding_cost_incurred": 0.7500000000000107, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 82.5, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25000000000001, - "demand_cumul": { - "-4": 613.0 - }, - "demand_met_from_stock": { - "-4": 33.0 - }, - "demand_met_from_stock_cumul": { - "-4": 600.6600000000001 - }, - "fill_rate": { - "-4": 0.9798694942903753 - } - }, - { - "node": 4, - "period": 20, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 33.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 32.93 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 43.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 33.230000000000004 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 43.07 - } - }, - "backorders_by_successor": { - "3": { - "-4": 9.769999999999996 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 43.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": -9.769999999999996 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 83.07500000000002, - "revenue_earned": 0.0, - "total_cost_incurred": 83.07500000000002, - "demand_cumul": { - "-4": 656.0 - }, - "demand_met_from_stock": { - "-4": 33.230000000000004 - }, - "demand_met_from_stock_cumul": { - "-4": 633.8900000000001 - }, - "fill_rate": { - "-4": 0.9662957317073172 - } - }, - { - "node": 4, - "period": 21, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 33.06999999999999 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 33.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 23.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 32.769999999999996 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 33.06999999999999 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 22.999999999999993 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 0.23000000000000398 - }, - "disrupted": false, - "holding_cost_incurred": 0.57500000000001, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 81.92499999999998, - "revenue_earned": 0.0, - "total_cost_incurred": 82.5, - "demand_cumul": { - "-4": 679.0 - }, - "demand_met_from_stock": { - "-4": 23.0 - }, - "demand_met_from_stock_cumul": { - "-4": 656.8900000000001 - }, - "fill_rate": { - "-4": 0.967437407952872 - } - }, - { - "node": 4, - "period": 22, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 18.999999999999986 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 33.06999999999999 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 18.999999999999986 - } - }, - "outbound_shipment": { - "3": { - "-4": 18.999999999999986 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 18.999999999999986 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 18.999999999999986 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 14.300000000000011 - }, - "disrupted": false, - "holding_cost_incurred": 35.75000000000003, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 47.499999999999964, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25, - "demand_cumul": { - "-4": 698.0 - }, - "demand_met_from_stock": { - "-4": 18.999999999999986 - }, - "demand_met_from_stock_cumul": { - "-4": 675.8900000000001 - }, - "fill_rate": { - "-4": 0.9683237822349572 - } - }, - { - "node": 4, - "period": 23, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 30.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 18.999999999999986 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 30.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 30.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 30.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 30.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": 3.299999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 8.249999999999993, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 75.0, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25, - "demand_cumul": { - "-4": 728.0 - }, - "demand_met_from_stock": { - "-4": 30.0 - }, - "demand_met_from_stock_cumul": { - "-4": 705.8900000000001 - }, - "fill_rate": { - "-4": 0.969629120879121 - } - }, - { - "node": 4, - "period": 24, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 32.92999999999999 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 30.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 38.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 33.3 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 38.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 4.700000000000003 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 38.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": -4.700000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 83.25, - "revenue_earned": 0.0, - "total_cost_incurred": 83.25, - "demand_cumul": { - "-4": 766.0 - }, - "demand_met_from_stock": { - "-4": 33.3 - }, - "demand_met_from_stock_cumul": { - "-4": 739.19 - }, - "fill_rate": { - "-4": 0.9650000000000001 - } - }, - { - "node": 4, - "period": 25, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 32.92999999999999, - 0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 0 - } - }, - "outbound_shipment": { - "3": { - "-4": 0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 38.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 4.700000000000003 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-4": -4.700000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-4": 766.0 - }, - "demand_met_from_stock": { - "-4": 0 - }, - "demand_met_from_stock_cumul": { - "-4": 739.19 - }, - "fill_rate": { - "-4": 0 - } - }, - { - "node": 4, - "period": 26, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 0 - } - }, - "outbound_shipment": { - "3": { - "-4": 0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0 - } - }, - "raw_material_inventory": { - "-5": 0 - }, - "inventory_level": { - "-4": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-4": 0 - }, - "demand_met_from_stock": { - "-4": 0 - }, - "demand_met_from_stock_cumul": { - "-4": 0 - }, - "fill_rate": { - "-4": 0 - } - }, - { - "node": 4, - "period": 27, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 0 - } - }, - "outbound_shipment": { - "3": { - "-4": 0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0 - } - }, - "raw_material_inventory": { - "-5": 0 - }, - "inventory_level": { - "-4": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-4": 0 - }, - "demand_met_from_stock": { - "-4": 0 - }, - "demand_met_from_stock_cumul": { - "-4": 0 - }, - "fill_rate": { - "-4": 0 - } - } - ] - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 1.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 35.14, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 3, - "period": 0, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 30.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 30.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 30.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 30.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 30.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 5.140000000000001 - }, - "disrupted": false, - "holding_cost_incurred": 7.710000000000001, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 45.0, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 30.0 - }, - "demand_met_from_stock": { - "-3": 30.0 - }, - "demand_met_from_stock_cumul": { - "-3": 30.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 1, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 33.3 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 30.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 36.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 35.14 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 36.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.8599999999999994 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 36.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": -0.8599999999999994 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 52.71, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 66.0 - }, - "demand_met_from_stock": { - "-3": 35.14 - }, - "demand_met_from_stock_cumul": { - "-3": 65.14 - }, - "fill_rate": { - "-3": 0.9869696969696969 - } - }, - { - "node": 3, - "period": 2, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 27.700000000000003 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 33.3 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 25.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 25.86 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 27.700000000000003 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 25.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 7.439999999999998 - }, - "disrupted": false, - "holding_cost_incurred": 11.159999999999997, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 38.79, - "revenue_earned": 0.0, - "total_cost_incurred": 49.949999999999996, - "demand_cumul": { - "-3": 91.0 - }, - "demand_met_from_stock": { - "-3": 25.0 - }, - "demand_met_from_stock_cumul": { - "-3": 90.14 - }, - "fill_rate": { - "-3": 0.9905494505494505 - } - }, - { - "node": 3, - "period": 3, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 33.3 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 27.700000000000003 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 34.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 34.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 34.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 34.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 1.1400000000000006 - }, - "disrupted": false, - "holding_cost_incurred": 1.7100000000000009, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 51.0, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 125.0 - }, - "demand_met_from_stock": { - "-3": 34.0 - }, - "demand_met_from_stock_cumul": { - "-3": 124.14 - }, - "fill_rate": { - "-3": 0.99312 - } - }, - { - "node": 3, - "period": 4, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 32.93 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 33.3 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 38.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 34.44 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 38.7 - } - }, - "backorders_by_successor": { - "2": { - "-3": 3.5600000000000023 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 38.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": -3.5600000000000023 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 51.66, - "revenue_earned": 0.0, - "total_cost_incurred": 51.66, - "demand_cumul": { - "-3": 163.0 - }, - "demand_met_from_stock": { - "-3": 34.44 - }, - "demand_met_from_stock_cumul": { - "-3": 158.57999999999998 - }, - "fill_rate": { - "-3": 0.972883435582822 - } - }, - { - "node": 3, - "period": 5, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 31.770000000000003 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 32.93 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 26.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 29.560000000000002 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 31.770000000000003 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 26.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 3.3699999999999974 - }, - "disrupted": false, - "holding_cost_incurred": 5.054999999999996, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 44.34, - "revenue_earned": 0.0, - "total_cost_incurred": 49.394999999999996, - "demand_cumul": { - "-3": 189.0 - }, - "demand_met_from_stock": { - "-3": 26.0 - }, - "demand_met_from_stock_cumul": { - "-3": 184.57999999999998 - }, - "fill_rate": { - "-3": 0.9766137566137565 - } - }, - { - "node": 3, - "period": 6, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 29.000000000000007 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 31.770000000000003 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 29.000000000000007 - } - }, - "outbound_shipment": { - "2": { - "-3": 29.000000000000007 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 29.000000000000007 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 29.000000000000007 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 6.1399999999999935 - }, - "disrupted": false, - "holding_cost_incurred": 9.20999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 43.500000000000014, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71000000000001, - "demand_cumul": { - "-3": 218.0 - }, - "demand_met_from_stock": { - "-3": 29.000000000000007 - }, - "demand_met_from_stock_cumul": { - "-3": 213.57999999999998 - }, - "fill_rate": { - "-3": 0.9797247706422018 - } - }, - { - "node": 3, - "period": 7, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 31.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 29.000000000000007 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 31.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 31.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 31.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 31.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 4.140000000000001 - }, - "disrupted": false, - "holding_cost_incurred": 6.210000000000001, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 46.5, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 249.0 - }, - "demand_met_from_stock": { - "-3": 31.0 - }, - "demand_met_from_stock_cumul": { - "-3": 244.57999999999998 - }, - "fill_rate": { - "-3": 0.9822489959839357 - } - }, - { - "node": 3, - "period": 8, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 33.300000000000004 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 31.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 34.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 34.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 34.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 34.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 1.1400000000000006 - }, - "disrupted": false, - "holding_cost_incurred": 1.7100000000000009, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 51.0, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 283.0 - }, - "demand_met_from_stock": { - "-3": 34.0 - }, - "demand_met_from_stock_cumul": { - "-3": 278.58 - }, - "fill_rate": { - "-3": 0.984381625441696 - } - }, - { - "node": 3, - "period": 9, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 28.69999999999999 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 33.300000000000004 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 27.999999999999993 - } - }, - "outbound_shipment": { - "2": { - "-3": 27.999999999999993 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 28.69999999999999 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 27.999999999999993 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 6.440000000000012 - }, - "disrupted": false, - "holding_cost_incurred": 9.660000000000018, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 41.999999999999986, - "revenue_earned": 0.0, - "total_cost_incurred": 51.660000000000004, - "demand_cumul": { - "-3": 311.0 - }, - "demand_met_from_stock": { - "-3": 27.999999999999993 - }, - "demand_met_from_stock_cumul": { - "-3": 306.58 - }, - "fill_rate": { - "-3": 0.9857877813504823 - } - }, - { - "node": 3, - "period": 10, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 31.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 28.69999999999999 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 31.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 31.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 31.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 31.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 4.140000000000001 - }, - "disrupted": false, - "holding_cost_incurred": 6.210000000000001, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 46.5, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 342.0 - }, - "demand_met_from_stock": { - "-3": 31.0 - }, - "demand_met_from_stock_cumul": { - "-3": 337.58 - }, - "fill_rate": { - "-3": 0.9870760233918128 - } - }, - { - "node": 3, - "period": 11, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 26.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 31.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 26.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 26.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 26.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 26.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 9.14 - }, - "disrupted": false, - "holding_cost_incurred": 13.71, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 39.0, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 368.0 - }, - "demand_met_from_stock": { - "-3": 26.0 - }, - "demand_met_from_stock_cumul": { - "-3": 363.58 - }, - "fill_rate": { - "-3": 0.9879891304347825 - } - }, - { - "node": 3, - "period": 12, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 33.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 26.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 33.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 33.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 33.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 33.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 2.1400000000000006 - }, - "disrupted": false, - "holding_cost_incurred": 3.210000000000001, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 49.5, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 401.0 - }, - "demand_met_from_stock": { - "-3": 33.0 - }, - "demand_met_from_stock_cumul": { - "-3": 396.58 - }, - "fill_rate": { - "-3": 0.9889775561097256 - } - }, - { - "node": 3, - "period": 13, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 33.23 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 33.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 34.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 34.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 34.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 34.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 1.1400000000000006 - }, - "disrupted": false, - "holding_cost_incurred": 1.7100000000000009, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 51.0, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 435.0 - }, - "demand_met_from_stock": { - "-3": 34.0 - }, - "demand_met_from_stock_cumul": { - "-3": 430.58 - }, - "fill_rate": { - "-3": 0.9898390804597701 - } - }, - { - "node": 3, - "period": 14, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 29.770000000000003 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 33.23 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 29.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 29.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 29.770000000000003 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 29.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 5.369999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 8.054999999999996, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 43.5, - "revenue_earned": 0.0, - "total_cost_incurred": 51.55499999999999, - "demand_cumul": { - "-3": 464.0 - }, - "demand_met_from_stock": { - "-3": 29.0 - }, - "demand_met_from_stock_cumul": { - "-3": 459.58 - }, - "fill_rate": { - "-3": 0.9904741379310344 - } - }, - { - "node": 3, - "period": 15, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 33.3 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 29.770000000000003 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 35.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 35.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 35.00000000000001 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 35.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 0.14000000000000057 - }, - "disrupted": false, - "holding_cost_incurred": 0.21000000000000085, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 52.5, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 499.0 - }, - "demand_met_from_stock": { - "-3": 35.0 - }, - "demand_met_from_stock_cumul": { - "-3": 494.58 - }, - "fill_rate": { - "-3": 0.9911422845691382 - } - }, - { - "node": 3, - "period": 16, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 25.700000000000003 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 33.3 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 24.000000000000007 - } - }, - "outbound_shipment": { - "2": { - "-3": 24.000000000000007 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 25.70000000000001 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 24.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 9.43999999999999 - }, - "disrupted": false, - "holding_cost_incurred": 14.159999999999986, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 36.000000000000014, - "revenue_earned": 0.0, - "total_cost_incurred": 50.16, - "demand_cumul": { - "-3": 523.0 - }, - "demand_met_from_stock": { - "-3": 24.000000000000007 - }, - "demand_met_from_stock_cumul": { - "-3": 518.58 - }, - "fill_rate": { - "-3": 0.9915487571701722 - } - }, - { - "node": 3, - "period": 17, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 28.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 25.700000000000003 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 28.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 28.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 28.000000000000007 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 28.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 7.1399999999999935 - }, - "disrupted": false, - "holding_cost_incurred": 10.70999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 42.0, - "revenue_earned": 0.0, - "total_cost_incurred": 52.709999999999994, - "demand_cumul": { - "-3": 551.0 - }, - "demand_met_from_stock": { - "-3": 28.0 - }, - "demand_met_from_stock_cumul": { - "-3": 546.58 - }, - "fill_rate": { - "-3": 0.9919782214156081 - } - }, - { - "node": 3, - "period": 18, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 29.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 28.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 29.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 29.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 29.000000000000007 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 29.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 6.1399999999999935 - }, - "disrupted": false, - "holding_cost_incurred": 9.20999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 43.5, - "revenue_earned": 0.0, - "total_cost_incurred": 52.709999999999994, - "demand_cumul": { - "-3": 580.0 - }, - "demand_met_from_stock": { - "-3": 29.0 - }, - "demand_met_from_stock_cumul": { - "-3": 575.58 - }, - "fill_rate": { - "-3": 0.9923793103448276 - } - }, - { - "node": 3, - "period": 19, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 33.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 29.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 33.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 33.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 33.00000000000001 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 33.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 2.1399999999999935 - }, - "disrupted": false, - "holding_cost_incurred": 3.20999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 49.5, - "revenue_earned": 0.0, - "total_cost_incurred": 52.709999999999994, - "demand_cumul": { - "-3": 613.0 - }, - "demand_met_from_stock": { - "-3": 33.0 - }, - "demand_met_from_stock_cumul": { - "-3": 608.58 - }, - "fill_rate": { - "-3": 0.9927895595432301 - } - }, - { - "node": 3, - "period": 20, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 33.230000000000004 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 33.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 43.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 35.13999999999999 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 43.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 7.8600000000000065 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 43.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": -7.8600000000000065 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 52.709999999999994, - "revenue_earned": 0.0, - "total_cost_incurred": 52.709999999999994, - "demand_cumul": { - "-3": 656.0 - }, - "demand_met_from_stock": { - "-3": 35.13999999999999 - }, - "demand_met_from_stock_cumul": { - "-3": 643.72 - }, - "fill_rate": { - "-3": 0.9812804878048781 - } - }, - { - "node": 3, - "period": 21, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 32.769999999999996 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 33.230000000000004 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 22.999999999999993 - } - }, - "outbound_shipment": { - "2": { - "-3": 30.86 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 32.769999999999996 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 23.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 2.3700000000000045 - }, - "disrupted": false, - "holding_cost_incurred": 3.555000000000007, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 46.29, - "revenue_earned": 0.0, - "total_cost_incurred": 49.845000000000006, - "demand_cumul": { - "-3": 679.0 - }, - "demand_met_from_stock": { - "-3": 22.999999999999993 - }, - "demand_met_from_stock_cumul": { - "-3": 666.72 - }, - "fill_rate": { - "-3": 0.9819145802650958 - } - }, - { - "node": 3, - "period": 22, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 18.999999999999986 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 32.769999999999996 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 18.999999999999986 - } - }, - "outbound_shipment": { - "2": { - "-3": 18.999999999999986 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 18.999999999999986 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 18.999999999999986 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 16.140000000000015 - }, - "disrupted": false, - "holding_cost_incurred": 24.210000000000022, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 28.49999999999998, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 698.0 - }, - "demand_met_from_stock": { - "-3": 18.999999999999986 - }, - "demand_met_from_stock_cumul": { - "-3": 685.72 - }, - "fill_rate": { - "-3": 0.9824068767908309 - } - }, - { - "node": 3, - "period": 23, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 30.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 18.999999999999986 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 30.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 30.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 30.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 30.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 5.140000000000001 - }, - "disrupted": false, - "holding_cost_incurred": 7.710000000000001, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 45.0, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 728.0 - }, - "demand_met_from_stock": { - "-3": 30.0 - }, - "demand_met_from_stock_cumul": { - "-3": 715.72 - }, - "fill_rate": { - "-3": 0.9831318681318681 - } - }, - { - "node": 3, - "period": 24, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 33.3 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 30.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 38.0 - } - }, - "outbound_shipment": { - "2": { - "-3": 35.14 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 38.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 2.8599999999999994 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 38.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": -2.8599999999999994 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 52.71, - "revenue_earned": 0.0, - "total_cost_incurred": 52.71, - "demand_cumul": { - "-3": 766.0 - }, - "demand_met_from_stock": { - "-3": 35.14 - }, - "demand_met_from_stock_cumul": { - "-3": 750.86 - }, - "fill_rate": { - "-3": 0.9802349869451698 - } - }, - { - "node": 3, - "period": 25, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 33.3, - 0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 0 - } - }, - "outbound_shipment": { - "2": { - "-3": 0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 38.0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 2.8599999999999994 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": -2.8599999999999994 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-3": 766.0 - }, - "demand_met_from_stock": { - "-3": 0 - }, - "demand_met_from_stock_cumul": { - "-3": 750.86 - }, - "fill_rate": { - "-3": 0 - } - }, - { - "node": 3, - "period": 26, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 0 - } - }, - "outbound_shipment": { - "2": { - "-3": 0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 0 - } - }, - "raw_material_inventory": { - "-4": 0 - }, - "inventory_level": { - "-3": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-3": 0 - }, - "demand_met_from_stock": { - "-3": 0 - }, - "demand_met_from_stock_cumul": { - "-3": 0 - }, - "fill_rate": { - "-3": 0 - } - }, - { - "node": 3, - "period": 27, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-3": 0 - } - }, - "outbound_shipment": { - "2": { - "-3": 0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 0 - } - }, - "backorders_by_successor": { - "2": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 0 - } - }, - "raw_material_inventory": { - "-4": 0 - }, - "inventory_level": { - "-3": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-3": 0 - }, - "demand_met_from_stock": { - "-3": 0 - }, - "demand_met_from_stock_cumul": { - "-3": 0 - }, - "fill_rate": { - "-3": 0 - } - } - ] - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 1.0, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 2, - "period": 0, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 30.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 30.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 30.0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 30.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 30.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 3.8699999999999974 - }, - "disrupted": false, - "holding_cost_incurred": 3.8699999999999974, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 30.0, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 30.0 - }, - "demand_met_from_stock": { - "-2": 30.0 - }, - "demand_met_from_stock_cumul": { - "-2": 30.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 1, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 35.14 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 30.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 36.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 33.87 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 36.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 2.1300000000000026 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 36.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": -2.1300000000000026 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 33.87, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 66.0 - }, - "demand_met_from_stock": { - "-2": 33.87 - }, - "demand_met_from_stock_cumul": { - "-2": 63.87 - }, - "fill_rate": { - "-2": 0.9677272727272727 - } - }, - { - "node": 2, - "period": 2, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 25.86 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 35.14 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 25.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 27.130000000000003 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 25.86 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 25.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 8.009999999999998 - }, - "disrupted": false, - "holding_cost_incurred": 8.009999999999998, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 27.130000000000003, - "revenue_earned": 0.0, - "total_cost_incurred": 35.14, - "demand_cumul": { - "-2": 91.0 - }, - "demand_met_from_stock": { - "-2": 25.0 - }, - "demand_met_from_stock_cumul": { - "-2": 88.87 - }, - "fill_rate": { - "-2": 0.9765934065934067 - } - }, - { - "node": 2, - "period": 3, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 34.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 25.86 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 34.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 33.87 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 34.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.13000000000000256 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 34.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": -0.13000000000000256 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 33.87, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 125.0 - }, - "demand_met_from_stock": { - "-2": 33.87 - }, - "demand_met_from_stock_cumul": { - "-2": 122.74000000000001 - }, - "fill_rate": { - "-2": 0.9819200000000001 - } - }, - { - "node": 2, - "period": 4, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 34.44 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 34.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 38.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 34.0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 38.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 4.130000000000003 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 38.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": -4.130000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 34.0, - "revenue_earned": 0.0, - "total_cost_incurred": 34.0, - "demand_cumul": { - "-2": 163.0 - }, - "demand_met_from_stock": { - "-2": 33.87 - }, - "demand_met_from_stock_cumul": { - "-2": 156.61 - }, - "fill_rate": { - "-2": 0.9607975460122701 - } - }, - { - "node": 2, - "period": 5, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 29.560000000000002 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 34.44 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 26.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 30.130000000000003 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 29.560000000000002 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 26.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 4.309999999999995 - }, - "disrupted": false, - "holding_cost_incurred": 4.309999999999995, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 30.130000000000003, - "revenue_earned": 0.0, - "total_cost_incurred": 34.44, - "demand_cumul": { - "-2": 189.0 - }, - "demand_met_from_stock": { - "-2": 26.0 - }, - "demand_met_from_stock_cumul": { - "-2": 182.61 - }, - "fill_rate": { - "-2": 0.9661904761904763 - } - }, - { - "node": 2, - "period": 6, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 29.000000000000007 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 29.560000000000002 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 29.000000000000007 - } - }, - "outbound_shipment": { - "1": { - "-2": 29.000000000000007 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 29.000000000000007 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 29.000000000000007 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 4.86999999999999 - }, - "disrupted": false, - "holding_cost_incurred": 4.86999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 29.000000000000007, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 218.0 - }, - "demand_met_from_stock": { - "-2": 29.000000000000007 - }, - "demand_met_from_stock_cumul": { - "-2": 211.61 - }, - "fill_rate": { - "-2": 0.9706880733944955 - } - }, - { - "node": 2, - "period": 7, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 31.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 29.000000000000007 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 31.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 31.0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 31.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 31.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 2.8699999999999974 - }, - "disrupted": false, - "holding_cost_incurred": 2.8699999999999974, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 31.0, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 249.0 - }, - "demand_met_from_stock": { - "-2": 31.0 - }, - "demand_met_from_stock_cumul": { - "-2": 242.61 - }, - "fill_rate": { - "-2": 0.9743373493975904 - } - }, - { - "node": 2, - "period": 8, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 34.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 31.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 34.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 33.87 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 34.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.13000000000000256 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 34.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": -0.13000000000000256 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 33.87, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 283.0 - }, - "demand_met_from_stock": { - "-2": 33.87 - }, - "demand_met_from_stock_cumul": { - "-2": 276.48 - }, - "fill_rate": { - "-2": 0.9769611307420495 - } - }, - { - "node": 2, - "period": 9, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 27.999999999999993 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 34.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 27.999999999999993 - } - }, - "outbound_shipment": { - "1": { - "-2": 28.129999999999995 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 27.999999999999993 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 27.999999999999993 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 5.8700000000000045 - }, - "disrupted": false, - "holding_cost_incurred": 5.8700000000000045, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 28.129999999999995, - "revenue_earned": 0.0, - "total_cost_incurred": 34.0, - "demand_cumul": { - "-2": 311.0 - }, - "demand_met_from_stock": { - "-2": 27.999999999999993 - }, - "demand_met_from_stock_cumul": { - "-2": 304.48 - }, - "fill_rate": { - "-2": 0.9790353697749197 - } - }, - { - "node": 2, - "period": 10, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 31.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 27.999999999999993 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 31.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 31.0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 31.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 31.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 2.8699999999999974 - }, - "disrupted": false, - "holding_cost_incurred": 2.8699999999999974, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 31.0, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 342.0 - }, - "demand_met_from_stock": { - "-2": 31.0 - }, - "demand_met_from_stock_cumul": { - "-2": 335.48 - }, - "fill_rate": { - "-2": 0.9809356725146199 - } - }, - { - "node": 2, - "period": 11, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 26.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 31.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 26.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 26.0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 26.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 26.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 7.869999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 7.869999999999997, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 26.0, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 368.0 - }, - "demand_met_from_stock": { - "-2": 26.0 - }, - "demand_met_from_stock_cumul": { - "-2": 361.48 - }, - "fill_rate": { - "-2": 0.9822826086956522 - } - }, - { - "node": 2, - "period": 12, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 33.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 26.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 33.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 33.0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 33.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 33.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 0.8699999999999974 - }, - "disrupted": false, - "holding_cost_incurred": 0.8699999999999974, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 33.0, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 401.0 - }, - "demand_met_from_stock": { - "-2": 33.0 - }, - "demand_met_from_stock_cumul": { - "-2": 394.48 - }, - "fill_rate": { - "-2": 0.9837406483790524 - } - }, - { - "node": 2, - "period": 13, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 34.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 33.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 34.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 33.87 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 34.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.13000000000000256 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 34.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": -0.13000000000000256 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 33.87, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 435.0 - }, - "demand_met_from_stock": { - "-2": 33.87 - }, - "demand_met_from_stock_cumul": { - "-2": 428.35 - }, - "fill_rate": { - "-2": 0.984712643678161 - } - }, - { - "node": 2, - "period": 14, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 29.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 34.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 29.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 29.130000000000003 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 29.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 29.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 4.869999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 4.869999999999997, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 29.130000000000003, - "revenue_earned": 0.0, - "total_cost_incurred": 34.0, - "demand_cumul": { - "-2": 464.0 - }, - "demand_met_from_stock": { - "-2": 29.0 - }, - "demand_met_from_stock_cumul": { - "-2": 457.35 - }, - "fill_rate": { - "-2": 0.9856681034482759 - } - }, - { - "node": 2, - "period": 15, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 35.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 29.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 35.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 33.87 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 35.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 1.1300000000000026 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 35.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": -1.1300000000000026 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 33.87, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 499.0 - }, - "demand_met_from_stock": { - "-2": 33.87 - }, - "demand_met_from_stock_cumul": { - "-2": 491.22 - }, - "fill_rate": { - "-2": 0.9844088176352705 - } - }, - { - "node": 2, - "period": 16, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 24.000000000000007 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 35.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 24.000000000000007 - } - }, - "outbound_shipment": { - "1": { - "-2": 25.13000000000001 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 24.000000000000007 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 24.000000000000007 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 9.86999999999999 - }, - "disrupted": false, - "holding_cost_incurred": 9.86999999999999, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 25.13000000000001, - "revenue_earned": 0.0, - "total_cost_incurred": 35.0, - "demand_cumul": { - "-2": 523.0 - }, - "demand_met_from_stock": { - "-2": 24.000000000000007 - }, - "demand_met_from_stock_cumul": { - "-2": 515.22 - }, - "fill_rate": { - "-2": 0.9851242829827916 - } - }, - { - "node": 2, - "period": 17, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 28.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 24.000000000000007 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 28.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 28.0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 28.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 28.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 5.869999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 5.869999999999997, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 28.0, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 551.0 - }, - "demand_met_from_stock": { - "-2": 28.0 - }, - "demand_met_from_stock_cumul": { - "-2": 543.22 - }, - "fill_rate": { - "-2": 0.985880217785844 - } - }, - { - "node": 2, - "period": 18, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 29.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 28.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 29.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 29.0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 29.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 29.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 4.869999999999997 - }, - "disrupted": false, - "holding_cost_incurred": 4.869999999999997, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 29.0, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 580.0 - }, - "demand_met_from_stock": { - "-2": 29.0 - }, - "demand_met_from_stock_cumul": { - "-2": 572.22 - }, - "fill_rate": { - "-2": 0.9865862068965517 - } - }, - { - "node": 2, - "period": 19, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 33.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 29.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 33.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 33.0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 33.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 33.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 0.8699999999999974 - }, - "disrupted": false, - "holding_cost_incurred": 0.8699999999999974, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 33.0, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 613.0 - }, - "demand_met_from_stock": { - "-2": 33.0 - }, - "demand_met_from_stock_cumul": { - "-2": 605.22 - }, - "fill_rate": { - "-2": 0.9873083197389886 - } - }, - { - "node": 2, - "period": 20, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 35.13999999999999 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 33.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 43.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 33.87 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 43.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 9.130000000000003 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 43.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": -9.130000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 33.87, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 656.0 - }, - "demand_met_from_stock": { - "-2": 33.87 - }, - "demand_met_from_stock_cumul": { - "-2": 639.09 - }, - "fill_rate": { - "-2": 0.9742225609756098 - } - }, - { - "node": 2, - "period": 21, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 30.86 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 35.13999999999999 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 22.999999999999993 - } - }, - "outbound_shipment": { - "1": { - "-2": 32.129999999999995 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 30.860000000000007 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 22.999999999999993 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 3.009999999999998 - }, - "disrupted": false, - "holding_cost_incurred": 3.009999999999998, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 32.129999999999995, - "revenue_earned": 0.0, - "total_cost_incurred": 35.13999999999999, - "demand_cumul": { - "-2": 679.0 - }, - "demand_met_from_stock": { - "-2": 22.999999999999993 - }, - "demand_met_from_stock_cumul": { - "-2": 662.09 - }, - "fill_rate": { - "-2": 0.9750957290132548 - } - }, - { - "node": 2, - "period": 22, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 18.999999999999986 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 30.86 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 18.999999999999993 - } - }, - "outbound_shipment": { - "1": { - "-2": 18.999999999999993 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 18.999999999999993 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 18.999999999999986 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 14.870000000000005 - }, - "disrupted": false, - "holding_cost_incurred": 14.870000000000005, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 18.999999999999993, - "revenue_earned": 0.0, - "total_cost_incurred": 33.87, - "demand_cumul": { - "-2": 698.0 - }, - "demand_met_from_stock": { - "-2": 18.999999999999993 - }, - "demand_met_from_stock_cumul": { - "-2": 681.09 - }, - "fill_rate": { - "-2": 0.9757736389684815 - } - }, - { - "node": 2, - "period": 23, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 30.0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 18.999999999999986 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 30.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 30.0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 30.000000000000007 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 30.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": 3.8699999999999903 - }, - "disrupted": false, - "holding_cost_incurred": 3.8699999999999903, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 30.0, - "revenue_earned": 0.0, - "total_cost_incurred": 33.86999999999999, - "demand_cumul": { - "-2": 728.0 - }, - "demand_met_from_stock": { - "-2": 30.0 - }, - "demand_met_from_stock_cumul": { - "-2": 711.09 - }, - "fill_rate": { - "-2": 0.976771978021978 - } - }, - { - "node": 2, - "period": 24, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 35.14 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 30.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 38.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 33.86999999999999 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 38.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 4.13000000000001 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 38.0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": -4.13000000000001 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 33.86999999999999, - "revenue_earned": 0.0, - "total_cost_incurred": 33.86999999999999, - "demand_cumul": { - "-2": 766.0 - }, - "demand_met_from_stock": { - "-2": 33.86999999999999 - }, - "demand_met_from_stock_cumul": { - "-2": 744.96 - }, - "fill_rate": { - "-2": 0.972532637075718 - } - }, - { - "node": 2, - "period": 25, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 35.14, - 0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 0 - } - }, - "outbound_shipment": { - "1": { - "-2": 0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 38.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 4.13000000000001 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 0 - } - }, - "raw_material_inventory": { - "-3": 0.0 - }, - "inventory_level": { - "-2": -4.13000000000001 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-2": 766.0 - }, - "demand_met_from_stock": { - "-2": 0 - }, - "demand_met_from_stock_cumul": { - "-2": 744.96 - }, - "fill_rate": { - "-2": 0 - } - }, - { - "node": 2, - "period": 26, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 0 - } - }, - "outbound_shipment": { - "1": { - "-2": 0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 0 - } - }, - "raw_material_inventory": { - "-3": 0 - }, - "inventory_level": { - "-2": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-2": 0 - }, - "demand_met_from_stock": { - "-2": 0 - }, - "demand_met_from_stock_cumul": { - "-2": 0 - }, - "fill_rate": { - "-2": 0 - } - }, - { - "node": 2, - "period": 27, - "inbound_shipment_pipeline": { - "3": { - "-3": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 0 - } - }, - "outbound_shipment": { - "1": { - "-2": 0 - } - }, - "on_order_by_predecessor": { - "3": { - "-3": 0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "3": { - "-3": 0 - } - }, - "order_quantity": { - "3": { - "-3": 0 - } - }, - "raw_material_inventory": { - "-3": 0 - }, - "inventory_level": { - "-2": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-2": 0 - }, - "demand_met_from_stock": { - "-2": 0 - }, - "demand_met_from_stock_cumul": { - "-2": 0 - }, - "fill_rate": { - "-2": 0 - } - } - ] - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 12.0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 32.0, - "standard_deviation": 5.656854249492381, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 40.59, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 1, - "period": 0, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 30.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 30 - } - }, - "outbound_shipment": { - "null": { - "-1": 30 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 30.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 30.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 10.590000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 5.295000000000002, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 5.295000000000002, - "demand_cumul": { - "-1": 30 - }, - "demand_met_from_stock": { - "-1": 30.0 - }, - "demand_met_from_stock_cumul": { - "-1": 30 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 1, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 33.87 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 30.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 36 - } - }, - "outbound_shipment": { - "null": { - "-1": 36 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 36.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 36.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 4.590000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 2.2950000000000017, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 2.2950000000000017, - "demand_cumul": { - "-1": 66 - }, - "demand_met_from_stock": { - "-1": 36.0 - }, - "demand_met_from_stock_cumul": { - "-1": 66 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 2, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 27.130000000000003 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 33.87 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 25 - } - }, - "outbound_shipment": { - "null": { - "-1": 25 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 27.130000000000003 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 25.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 13.46 - }, - "disrupted": false, - "holding_cost_incurred": 6.73, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 6.73, - "demand_cumul": { - "-1": 91 - }, - "demand_met_from_stock": { - "-1": 25.0 - }, - "demand_met_from_stock_cumul": { - "-1": 91 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 3, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 33.87 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 27.130000000000003 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 34 - } - }, - "outbound_shipment": { - "null": { - "-1": 34 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 34.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 34.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 6.590000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 3.2950000000000017, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 3.2950000000000017, - "demand_cumul": { - "-1": 125 - }, - "demand_met_from_stock": { - "-1": 34.0 - }, - "demand_met_from_stock_cumul": { - "-1": 125 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 4, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 34.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 33.87 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 38 - } - }, - "outbound_shipment": { - "null": { - "-1": 38 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 38.13 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 38.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 2.460000000000001 - }, - "disrupted": false, - "holding_cost_incurred": 1.2300000000000004, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 1.2300000000000004, - "demand_cumul": { - "-1": 163 - }, - "demand_met_from_stock": { - "-1": 38.0 - }, - "demand_met_from_stock_cumul": { - "-1": 163 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 5, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 30.130000000000003 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 34.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 26 - } - }, - "outbound_shipment": { - "null": { - "-1": 26 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 30.129999999999995 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 26.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 10.46 - }, - "disrupted": false, - "holding_cost_incurred": 5.23, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 5.23, - "demand_cumul": { - "-1": 189 - }, - "demand_met_from_stock": { - "-1": 26.0 - }, - "demand_met_from_stock_cumul": { - "-1": 189 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 6, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 29.000000000000007 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 30.130000000000003 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 29 - } - }, - "outbound_shipment": { - "null": { - "-1": 29 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 29.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 29.000000000000007 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 11.590000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 5.795000000000002, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 5.795000000000002, - "demand_cumul": { - "-1": 218 - }, - "demand_met_from_stock": { - "-1": 29.0 - }, - "demand_met_from_stock_cumul": { - "-1": 218 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 7, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 31.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 29.000000000000007 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 31 - } - }, - "outbound_shipment": { - "null": { - "-1": 31 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 30.999999999999993 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 31.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 9.59000000000001 - }, - "disrupted": false, - "holding_cost_incurred": 4.795000000000005, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 4.795000000000005, - "demand_cumul": { - "-1": 249 - }, - "demand_met_from_stock": { - "-1": 31.0 - }, - "demand_met_from_stock_cumul": { - "-1": 249 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 8, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 33.87 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 31.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 34 - } - }, - "outbound_shipment": { - "null": { - "-1": 34 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 34.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 34.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 6.5900000000000105 - }, - "disrupted": false, - "holding_cost_incurred": 3.2950000000000053, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 3.2950000000000053, - "demand_cumul": { - "-1": 283 - }, - "demand_met_from_stock": { - "-1": 34.0 - }, - "demand_met_from_stock_cumul": { - "-1": 283 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 9, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 28.129999999999995 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 33.87 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 28 - } - }, - "outbound_shipment": { - "null": { - "-1": 28 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 28.129999999999995 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 27.999999999999993 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 12.460000000000008 - }, - "disrupted": false, - "holding_cost_incurred": 6.230000000000004, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 6.230000000000004, - "demand_cumul": { - "-1": 311 - }, - "demand_met_from_stock": { - "-1": 28.0 - }, - "demand_met_from_stock_cumul": { - "-1": 311 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 10, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 31.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 28.129999999999995 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 31 - } - }, - "outbound_shipment": { - "null": { - "-1": 31 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 31.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 31.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 9.590000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 4.795000000000002, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 4.795000000000002, - "demand_cumul": { - "-1": 342 - }, - "demand_met_from_stock": { - "-1": 31.0 - }, - "demand_met_from_stock_cumul": { - "-1": 342 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 11, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 26.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 31.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 26 - } - }, - "outbound_shipment": { - "null": { - "-1": 26 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 26.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 26.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 14.590000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 7.295000000000002, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 7.295000000000002, - "demand_cumul": { - "-1": 368 - }, - "demand_met_from_stock": { - "-1": 26.0 - }, - "demand_met_from_stock_cumul": { - "-1": 368 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 12, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 33.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 26.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 33 - } - }, - "outbound_shipment": { - "null": { - "-1": 33 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 33.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 33.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 7.590000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 3.7950000000000017, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 3.7950000000000017, - "demand_cumul": { - "-1": 401 - }, - "demand_met_from_stock": { - "-1": 33.0 - }, - "demand_met_from_stock_cumul": { - "-1": 401 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 13, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 33.87 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 33.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 34 - } - }, - "outbound_shipment": { - "null": { - "-1": 34 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 34.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 34.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 6.590000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 3.2950000000000017, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 3.2950000000000017, - "demand_cumul": { - "-1": 435 - }, - "demand_met_from_stock": { - "-1": 34.0 - }, - "demand_met_from_stock_cumul": { - "-1": 435 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 14, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 29.130000000000003 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 33.87 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 29 - } - }, - "outbound_shipment": { - "null": { - "-1": 29 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 29.130000000000003 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 29.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 11.46 - }, - "disrupted": false, - "holding_cost_incurred": 5.73, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 5.73, - "demand_cumul": { - "-1": 464 - }, - "demand_met_from_stock": { - "-1": 29.0 - }, - "demand_met_from_stock_cumul": { - "-1": 464 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 15, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 33.87 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 29.130000000000003 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 35 - } - }, - "outbound_shipment": { - "null": { - "-1": 35 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 34.99999999999999 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 35.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 5.590000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 2.7950000000000017, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 2.7950000000000017, - "demand_cumul": { - "-1": 499 - }, - "demand_met_from_stock": { - "-1": 35.0 - }, - "demand_met_from_stock_cumul": { - "-1": 499 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 16, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 25.13000000000001 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 33.87 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 24 - } - }, - "outbound_shipment": { - "null": { - "-1": 24 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 25.130000000000003 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 24.000000000000007 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 15.46 - }, - "disrupted": false, - "holding_cost_incurred": 7.73, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 7.73, - "demand_cumul": { - "-1": 523 - }, - "demand_met_from_stock": { - "-1": 24.0 - }, - "demand_met_from_stock_cumul": { - "-1": 523 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 17, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 28.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 25.13000000000001 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 28 - } - }, - "outbound_shipment": { - "null": { - "-1": 28 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 27.999999999999993 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 28.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 12.59000000000001 - }, - "disrupted": false, - "holding_cost_incurred": 6.295000000000005, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 6.295000000000005, - "demand_cumul": { - "-1": 551 - }, - "demand_met_from_stock": { - "-1": 28.0 - }, - "demand_met_from_stock_cumul": { - "-1": 551 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 18, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 29.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 28.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 29 - } - }, - "outbound_shipment": { - "null": { - "-1": 29 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 28.999999999999993 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 29.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 11.59000000000001 - }, - "disrupted": false, - "holding_cost_incurred": 5.795000000000005, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 5.795000000000005, - "demand_cumul": { - "-1": 580 - }, - "demand_met_from_stock": { - "-1": 29.0 - }, - "demand_met_from_stock_cumul": { - "-1": 580 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 19, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 33.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 29.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 33 - } - }, - "outbound_shipment": { - "null": { - "-1": 33 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 32.99999999999999 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 33.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 7.5900000000000105 - }, - "disrupted": false, - "holding_cost_incurred": 3.7950000000000053, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 3.7950000000000053, - "demand_cumul": { - "-1": 613 - }, - "demand_met_from_stock": { - "-1": 33.0 - }, - "demand_met_from_stock_cumul": { - "-1": 613 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 20, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 33.87 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 33.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 43 - } - }, - "outbound_shipment": { - "null": { - "-1": 40.59000000000001 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 43.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 2.4099999999999895 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 43.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": -2.4099999999999895 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 28.919999999999874, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 28.919999999999874, - "demand_cumul": { - "-1": 656 - }, - "demand_met_from_stock": { - "-1": 40.59000000000001 - }, - "demand_met_from_stock_cumul": { - "-1": 653.59 - }, - "fill_rate": { - "-1": 0.9963262195121951 - } - }, - { - "node": 1, - "period": 21, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 32.129999999999995 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 33.87 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 23 - } - }, - "outbound_shipment": { - "null": { - "-1": 25.40999999999999 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 32.13 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 22.999999999999993 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 8.460000000000008 - }, - "disrupted": false, - "holding_cost_incurred": 4.230000000000004, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 4.230000000000004, - "demand_cumul": { - "-1": 679 - }, - "demand_met_from_stock": { - "-1": 23.0 - }, - "demand_met_from_stock_cumul": { - "-1": 676.59 - }, - "fill_rate": { - "-1": 0.9964506627393226 - } - }, - { - "node": 1, - "period": 22, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 18.999999999999993 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 32.129999999999995 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 19 - } - }, - "outbound_shipment": { - "null": { - "-1": 19.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 19.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 18.999999999999993 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 21.590000000000003 - }, - "disrupted": false, - "holding_cost_incurred": 10.795000000000002, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 10.795000000000002, - "demand_cumul": { - "-1": 698 - }, - "demand_met_from_stock": { - "-1": 19.0 - }, - "demand_met_from_stock_cumul": { - "-1": 695.59 - }, - "fill_rate": { - "-1": 0.9965472779369628 - } - }, - { - "node": 1, - "period": 23, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 30.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 18.999999999999993 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 30 - } - }, - "outbound_shipment": { - "null": { - "-1": 30.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 30.000000000000007 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 30.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 10.589999999999996 - }, - "disrupted": false, - "holding_cost_incurred": 5.294999999999998, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 5.294999999999998, - "demand_cumul": { - "-1": 728 - }, - "demand_met_from_stock": { - "-1": 30.0 - }, - "demand_met_from_stock_cumul": { - "-1": 725.59 - }, - "fill_rate": { - "-1": 0.9966895604395605 - } - }, - { - "node": 1, - "period": 24, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 33.86999999999999 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 30.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 38 - } - }, - "outbound_shipment": { - "null": { - "-1": 38.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 38.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 38.0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 2.5899999999999963 - }, - "disrupted": false, - "holding_cost_incurred": 1.2949999999999982, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 1.2949999999999982, - "demand_cumul": { - "-1": 766 - }, - "demand_met_from_stock": { - "-1": 38.0 - }, - "demand_met_from_stock_cumul": { - "-1": 763.59 - }, - "fill_rate": { - "-1": 0.9968537859007833 - } - }, - { - "node": 1, - "period": 25, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 33.86999999999999, - 0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 0 - } - }, - "outbound_shipment": { - "null": { - "-1": 0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 38.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 0 - } - }, - "raw_material_inventory": { - "-2": 0.0 - }, - "inventory_level": { - "-1": 2.5899999999999963 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-1": 766 - }, - "demand_met_from_stock": { - "-1": 0 - }, - "demand_met_from_stock_cumul": { - "-1": 763.59 - }, - "fill_rate": { - "-1": 0 - } - }, - { - "node": 1, - "period": 26, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 0 - } - }, - "outbound_shipment": { - "null": { - "-1": 0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 0 - } - }, - "raw_material_inventory": { - "-2": 0 - }, - "inventory_level": { - "-1": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-1": 0 - }, - "demand_met_from_stock": { - "-1": 0 - }, - "demand_met_from_stock_cumul": { - "-1": 0 - }, - "fill_rate": { - "-1": 0 - } - }, - { - "node": 1, - "period": 27, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 0 - } - }, - "outbound_shipment": { - "null": { - "-1": 0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - } - }, - "order_quantity": { - "2": { - "-2": 0 - } - }, - "raw_material_inventory": { - "-2": 0 - }, - "inventory_level": { - "-1": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-1": 0 - }, - "demand_met_from_stock": { - "-1": 0 - }, - "demand_met_from_stock_cumul": { - "-1": 0 - }, - "fill_rate": { - "-1": 0 - } - } - ] - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 24, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2022-07-17 09:21:57.837097" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:42.252486"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json index e08ce3d..89ffae0 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json @@ -1,20306 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "test_omit_state_vars_rosling_false", - "description": "this is test_omit_state_vars_rosling_false", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2, - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "UD", - "mean": 5.0, - "standard_deviation": 3.1622776601683795, - "demand_list": null, - "probabilities": null, - "lo": 0, - "hi": 10, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 8, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 1, - "product": null, - "base_stock_level": 8, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 1, - "period": 0, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 6.0 - ] - }, - "3": { - "-3": [ - 0, - 6.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 6 - } - }, - "outbound_shipment": { - "null": { - "-1": 6 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 6.0 - }, - "3": { - "-3": 6.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 6.0 - }, - "3": { - "-3": 6.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 2.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 6 - }, - "demand_met_from_stock": { - "-1": 6.0 - }, - "demand_met_from_stock_cumul": { - "-1": 6 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 1, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 3.0 - ] - }, - "3": { - "-3": [ - 0, - 3.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 6.0 - }, - "3": { - "-3": 6.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 3 - } - }, - "outbound_shipment": { - "null": { - "-1": 3 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 3.0 - }, - "3": { - "-3": 3.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 3.0 - }, - "3": { - "-3": 3.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 5.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 9 - }, - "demand_met_from_stock": { - "-1": 3.0 - }, - "demand_met_from_stock_cumul": { - "-1": 9 - }, - "fill_rate": { - "-1": 1.0 - } - }, - { - "node": 1, - "period": 2, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 10.0 - ] - }, - "3": { - "-3": [ - 0, - 10.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 3.0 - }, - "3": { - "-3": 3.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 10 - } - }, - "outbound_shipment": { - "null": { - "-1": 8.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 10.0 - }, - "3": { - "-3": 10.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 2.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 10.0 - }, - "3": { - "-3": 10.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": -2.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 19 - }, - "demand_met_from_stock": { - "-1": 8.0 - }, - "demand_met_from_stock_cumul": { - "-1": 17.0 - }, - "fill_rate": { - "-1": 0.8947368421052632 - } - }, - { - "node": 1, - "period": 3, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 7.0 - ] - }, - "3": { - "-3": [ - 0, - 7.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 10.0 - }, - "3": { - "-3": 10.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 7 - } - }, - "outbound_shipment": { - "null": { - "-1": 9.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 1.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 26 - }, - "demand_met_from_stock": { - "-1": 7.0 - }, - "demand_met_from_stock_cumul": { - "-1": 24.0 - }, - "fill_rate": { - "-1": 0.9230769230769231 - } - }, - { - "node": 1, - "period": 4, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 4.0 - ] - }, - "3": { - "-3": [ - 0, - 4.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 4 - } - }, - "outbound_shipment": { - "null": { - "-1": 4.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 4.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 30 - }, - "demand_met_from_stock": { - "-1": 4.0 - }, - "demand_met_from_stock_cumul": { - "-1": 28.0 - }, - "fill_rate": { - "-1": 0.9333333333333333 - } - }, - { - "node": 1, - "period": 5, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 6.0 - ] - }, - "3": { - "-3": [ - 0, - 6.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 6 - } - }, - "outbound_shipment": { - "null": { - "-1": 6.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 6.0 - }, - "3": { - "-3": 6.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 6.0 - }, - "3": { - "-3": 6.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 2.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 36 - }, - "demand_met_from_stock": { - "-1": 6.0 - }, - "demand_met_from_stock_cumul": { - "-1": 34.0 - }, - "fill_rate": { - "-1": 0.9444444444444444 - } - }, - { - "node": 1, - "period": 6, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 9.0 - ] - }, - "3": { - "-3": [ - 0, - 9.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 6.0 - }, - "3": { - "-3": 6.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 9 - } - }, - "outbound_shipment": { - "null": { - "-1": 8.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 9.0 - }, - "3": { - "-3": 9.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 1.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 9.0 - }, - "3": { - "-3": 9.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": -1.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 45 - }, - "demand_met_from_stock": { - "-1": 8.0 - }, - "demand_met_from_stock_cumul": { - "-1": 42.0 - }, - "fill_rate": { - "-1": 0.9333333333333333 - } - }, - { - "node": 1, - "period": 7, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 2.0 - ] - }, - "3": { - "-3": [ - 0, - 2.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 9.0 - }, - "3": { - "-3": 9.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 2 - } - }, - "outbound_shipment": { - "null": { - "-1": 3.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 2.0 - }, - "3": { - "-3": 2.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 2.0 - }, - "3": { - "-3": 2.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 6.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 47 - }, - "demand_met_from_stock": { - "-1": 2.0 - }, - "demand_met_from_stock_cumul": { - "-1": 44.0 - }, - "fill_rate": { - "-1": 0.9361702127659575 - } - }, - { - "node": 1, - "period": 8, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 6.0 - ] - }, - "3": { - "-3": [ - 0, - 6.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 2.0 - }, - "3": { - "-3": 2.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 6 - } - }, - "outbound_shipment": { - "null": { - "-1": 6.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 6.0 - }, - "3": { - "-3": 6.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 6.0 - }, - "3": { - "-3": 6.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 2.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 53 - }, - "demand_met_from_stock": { - "-1": 6.0 - }, - "demand_met_from_stock_cumul": { - "-1": 50.0 - }, - "fill_rate": { - "-1": 0.9433962264150944 - } - }, - { - "node": 1, - "period": 9, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 10.0 - ] - }, - "3": { - "-3": [ - 0, - 10.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 6.0 - }, - "3": { - "-3": 6.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 10 - } - }, - "outbound_shipment": { - "null": { - "-1": 8.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 10.0 - }, - "3": { - "-3": 10.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 2.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 10.0 - }, - "3": { - "-3": 10.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": -2.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 63 - }, - "demand_met_from_stock": { - "-1": 8.0 - }, - "demand_met_from_stock_cumul": { - "-1": 58.0 - }, - "fill_rate": { - "-1": 0.9206349206349206 - } - }, - { - "node": 1, - "period": 10, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 10.0 - ] - }, - "3": { - "-3": [ - 0, - 10.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 10.0 - }, - "3": { - "-3": 10.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 10 - } - }, - "outbound_shipment": { - "null": { - "-1": 10.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 10.0 - }, - "3": { - "-3": 10.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 2.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 10.0 - }, - "3": { - "-3": 10.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": -2.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 73 - }, - "demand_met_from_stock": { - "-1": 8.0 - }, - "demand_met_from_stock_cumul": { - "-1": 66.0 - }, - "fill_rate": { - "-1": 0.9041095890410958 - } - }, - { - "node": 1, - "period": 11, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 7.0 - ] - }, - "3": { - "-3": [ - 0, - 7.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 10.0 - }, - "3": { - "-3": 10.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 7 - } - }, - "outbound_shipment": { - "null": { - "-1": 9.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 1.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 80 - }, - "demand_met_from_stock": { - "-1": 7.0 - }, - "demand_met_from_stock_cumul": { - "-1": 73.0 - }, - "fill_rate": { - "-1": 0.9125 - } - }, - { - "node": 1, - "period": 12, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 4.0 - ] - }, - "3": { - "-3": [ - 0, - 4.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 4 - } - }, - "outbound_shipment": { - "null": { - "-1": 4.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 4.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 84 - }, - "demand_met_from_stock": { - "-1": 4.0 - }, - "demand_met_from_stock_cumul": { - "-1": 77.0 - }, - "fill_rate": { - "-1": 0.9166666666666666 - } - }, - { - "node": 1, - "period": 13, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 3.0 - ] - }, - "3": { - "-3": [ - 0, - 3.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 3 - } - }, - "outbound_shipment": { - "null": { - "-1": 3.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 3.0 - }, - "3": { - "-3": 3.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 3.0 - }, - "3": { - "-3": 3.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 5.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 87 - }, - "demand_met_from_stock": { - "-1": 3.0 - }, - "demand_met_from_stock_cumul": { - "-1": 80.0 - }, - "fill_rate": { - "-1": 0.9195402298850575 - } - }, - { - "node": 1, - "period": 14, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 7.0 - ] - }, - "3": { - "-3": [ - 0, - 7.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 3.0 - }, - "3": { - "-3": 3.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 7 - } - }, - "outbound_shipment": { - "null": { - "-1": 7.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 1.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 94 - }, - "demand_met_from_stock": { - "-1": 7.0 - }, - "demand_met_from_stock_cumul": { - "-1": 87.0 - }, - "fill_rate": { - "-1": 0.925531914893617 - } - }, - { - "node": 1, - "period": 15, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 7.0 - ] - }, - "3": { - "-3": [ - 0, - 7.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 7 - } - }, - "outbound_shipment": { - "null": { - "-1": 7.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 1.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 101 - }, - "demand_met_from_stock": { - "-1": 7.0 - }, - "demand_met_from_stock_cumul": { - "-1": 94.0 - }, - "fill_rate": { - "-1": 0.9306930693069307 - } - }, - { - "node": 1, - "period": 16, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 2.0 - ] - }, - "3": { - "-3": [ - 0, - 2.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 2 - } - }, - "outbound_shipment": { - "null": { - "-1": 2.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 2.0 - }, - "3": { - "-3": 2.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 2.0 - }, - "3": { - "-3": 2.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 6.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 103 - }, - "demand_met_from_stock": { - "-1": 2.0 - }, - "demand_met_from_stock_cumul": { - "-1": 96.0 - }, - "fill_rate": { - "-1": 0.9320388349514563 - } - }, - { - "node": 1, - "period": 17, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 5.0 - ] - }, - "3": { - "-3": [ - 0, - 5.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 2.0 - }, - "3": { - "-3": 2.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 5 - } - }, - "outbound_shipment": { - "null": { - "-1": 5.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 5.0 - }, - "3": { - "-3": 5.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 5.0 - }, - "3": { - "-3": 5.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 3.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 108 - }, - "demand_met_from_stock": { - "-1": 5.0 - }, - "demand_met_from_stock_cumul": { - "-1": 101.0 - }, - "fill_rate": { - "-1": 0.9351851851851852 - } - }, - { - "node": 1, - "period": 18, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 4.0 - ] - }, - "3": { - "-3": [ - 0, - 4.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 5.0 - }, - "3": { - "-3": 5.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 4 - } - }, - "outbound_shipment": { - "null": { - "-1": 4.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 4.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 112 - }, - "demand_met_from_stock": { - "-1": 4.0 - }, - "demand_met_from_stock_cumul": { - "-1": 105.0 - }, - "fill_rate": { - "-1": 0.9375 - } - }, - { - "node": 1, - "period": 19, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 1.0 - ] - }, - "3": { - "-3": [ - 0, - 1.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 1 - } - }, - "outbound_shipment": { - "null": { - "-1": 1.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 1.0 - }, - "3": { - "-3": 1.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 1.0 - }, - "3": { - "-3": 1.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 7.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 113 - }, - "demand_met_from_stock": { - "-1": 1.0 - }, - "demand_met_from_stock_cumul": { - "-1": 106.0 - }, - "fill_rate": { - "-1": 0.9380530973451328 - } - }, - { - "node": 1, - "period": 20, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 7.0 - ] - }, - "3": { - "-3": [ - 0, - 7.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 1.0 - }, - "3": { - "-3": 1.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 7 - } - }, - "outbound_shipment": { - "null": { - "-1": 7.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 1.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 120 - }, - "demand_met_from_stock": { - "-1": 7.0 - }, - "demand_met_from_stock_cumul": { - "-1": 113.0 - }, - "fill_rate": { - "-1": 0.9416666666666667 - } - }, - { - "node": 1, - "period": 21, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 5.0 - ] - }, - "3": { - "-3": [ - 0, - 5.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 7.0 - }, - "3": { - "-3": 7.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 5 - } - }, - "outbound_shipment": { - "null": { - "-1": 5.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 5.0 - }, - "3": { - "-3": 5.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 5.0 - }, - "3": { - "-3": 5.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 3.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 125 - }, - "demand_met_from_stock": { - "-1": 5.0 - }, - "demand_met_from_stock_cumul": { - "-1": 118.0 - }, - "fill_rate": { - "-1": 0.944 - } - }, - { - "node": 1, - "period": 22, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 1.0 - ] - }, - "3": { - "-3": [ - 0, - 1.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 5.0 - }, - "3": { - "-3": 5.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 1 - } - }, - "outbound_shipment": { - "null": { - "-1": 1.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 1.0 - }, - "3": { - "-3": 1.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 1.0 - }, - "3": { - "-3": 1.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 7.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 126 - }, - "demand_met_from_stock": { - "-1": 1.0 - }, - "demand_met_from_stock_cumul": { - "-1": 119.0 - }, - "fill_rate": { - "-1": 0.9444444444444444 - } - }, - { - "node": 1, - "period": 23, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 4.0 - ] - }, - "3": { - "-3": [ - 0, - 4.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 1.0 - }, - "3": { - "-3": 1.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 4 - } - }, - "outbound_shipment": { - "null": { - "-1": 4.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 4.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 130 - }, - "demand_met_from_stock": { - "-1": 4.0 - }, - "demand_met_from_stock_cumul": { - "-1": 123.0 - }, - "fill_rate": { - "-1": 0.9461538461538461 - } - }, - { - "node": 1, - "period": 24, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 0.0 - ] - }, - "3": { - "-3": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 4.0 - }, - "3": { - "-3": 4.0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 0 - } - }, - "outbound_shipment": { - "null": { - "-1": 0.0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 0.0 - }, - "3": { - "-3": 0.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 0.0 - }, - "3": { - "-3": 0.0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 8.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-1": 130 - }, - "demand_met_from_stock": { - "-1": 0.0 - }, - "demand_met_from_stock_cumul": { - "-1": 123.0 - }, - "fill_rate": { - "-1": 0.9461538461538461 - } - }, - { - "node": 1, - "period": 25, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0.0, - 0 - ] - }, - "3": { - "-3": [ - 0.0, - 0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 0 - } - }, - "outbound_shipment": { - "null": { - "-1": 0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 0.0 - }, - "3": { - "-3": 0.0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0.0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "raw_material_inventory": { - "-3": 0.0, - "-2": 0.0 - }, - "inventory_level": { - "-1": 8.0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-1": 130 - }, - "demand_met_from_stock": { - "-1": 0 - }, - "demand_met_from_stock_cumul": { - "-1": 123.0 - }, - "fill_rate": { - "-1": 0 - } - }, - { - "node": 1, - "period": 26, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 0 - ] - }, - "3": { - "-3": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 0 - } - }, - "outbound_shipment": { - "null": { - "-1": 0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "raw_material_inventory": { - "-3": 0, - "-2": 0 - }, - "inventory_level": { - "-1": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-1": 0 - }, - "demand_met_from_stock": { - "-1": 0 - }, - "demand_met_from_stock_cumul": { - "-1": 0 - }, - "fill_rate": { - "-1": 0 - } - }, - { - "node": 1, - "period": 27, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 0 - ] - }, - "3": { - "-3": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 0 - } - }, - "outbound_shipment": { - "null": { - "-1": 0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "raw_material_inventory": { - "-3": 0, - "-2": 0 - }, - "inventory_level": { - "-1": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-1": 0 - }, - "demand_met_from_stock": { - "-1": 0 - }, - "demand_met_from_stock_cumul": { - "-1": 0 - }, - "fill_rate": { - "-1": 0 - } - }, - { - "node": 1, - "period": 28, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 0 - ] - }, - "3": { - "-3": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 0 - } - }, - "outbound_shipment": { - "null": { - "-1": 0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "raw_material_inventory": { - "-3": 0, - "-2": 0 - }, - "inventory_level": { - "-1": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-1": 0 - }, - "demand_met_from_stock": { - "-1": 0 - }, - "demand_met_from_stock_cumul": { - "-1": 0 - }, - "fill_rate": { - "-1": 0 - } - }, - { - "node": 1, - "period": 29, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 0 - ] - }, - "3": { - "-3": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 0 - } - }, - "outbound_shipment": { - "null": { - "-1": 0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "raw_material_inventory": { - "-3": 0, - "-2": 0 - }, - "inventory_level": { - "-1": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-1": 0 - }, - "demand_met_from_stock": { - "-1": 0 - }, - "demand_met_from_stock_cumul": { - "-1": 0 - }, - "fill_rate": { - "-1": 0 - } - }, - { - "node": 1, - "period": 30, - "inbound_shipment_pipeline": { - "2": { - "-2": [ - 0, - 0 - ] - }, - "3": { - "-3": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "inbound_order_pipeline": { - "null": { - "-1": [ - 0 - ] - } - }, - "inbound_order": { - "null": { - "-1": 0 - } - }, - "outbound_shipment": { - "null": { - "-1": 0 - } - }, - "on_order_by_predecessor": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "backorders_by_successor": { - "null": { - "-1": 0 - } - }, - "outbound_disrupted_items": { - "null": { - "-1": 0 - } - }, - "inbound_disrupted_items": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "order_quantity": { - "2": { - "-2": 0 - }, - "3": { - "-3": 0 - } - }, - "raw_material_inventory": { - "-3": 0, - "-2": 0 - }, - "inventory_level": { - "-1": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-1": 0 - }, - "demand_met_from_stock": { - "-1": 0 - }, - "demand_met_from_stock_cumul": { - "-1": 0 - }, - "fill_rate": { - "-1": 0 - } - } - ] - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 5 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 8, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 2, - "product": null, - "base_stock_level": 24, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 2, - "period": 0, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 14.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 6.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 6.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 14.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 14.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 2.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 6.0 - }, - "demand_met_from_stock": { - "-2": 6.0 - }, - "demand_met_from_stock_cumul": { - "-2": 6.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 1, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 3.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 14.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 3.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 3.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 3.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 3.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 13.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 9.0 - }, - "demand_met_from_stock": { - "-2": 3.0 - }, - "demand_met_from_stock_cumul": { - "-2": 9.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 2, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 10.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 3.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 10.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 10.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 10.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 10.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 6.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 19.0 - }, - "demand_met_from_stock": { - "-2": 10.0 - }, - "demand_met_from_stock_cumul": { - "-2": 19.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 3, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 10.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 7.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 7.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 0.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 9.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 26.0 - }, - "demand_met_from_stock": { - "-2": 7.0 - }, - "demand_met_from_stock_cumul": { - "-2": 26.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 4, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 11.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 4.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 4.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 11.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 11.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 5.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 30.0 - }, - "demand_met_from_stock": { - "-2": 4.0 - }, - "demand_met_from_stock_cumul": { - "-2": 30.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 5, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 5.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 11.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 6.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 6.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 5.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 5.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 10.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 36.0 - }, - "demand_met_from_stock": { - "-2": 6.0 - }, - "demand_met_from_stock_cumul": { - "-2": 36.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 6, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 10.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 5.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 9.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 9.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 10.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 10.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 6.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 45.0 - }, - "demand_met_from_stock": { - "-2": 9.0 - }, - "demand_met_from_stock_cumul": { - "-2": 45.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 7, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 2.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 10.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 2.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 2.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 2.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 2.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 14.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 47.0 - }, - "demand_met_from_stock": { - "-2": 2.0 - }, - "demand_met_from_stock_cumul": { - "-2": 47.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 8, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 6.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 2.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 6.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 6.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 6.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 6.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 10.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 53.0 - }, - "demand_met_from_stock": { - "-2": 6.0 - }, - "demand_met_from_stock_cumul": { - "-2": 53.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 9, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 10.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 6.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 10.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 10.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 10.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 10.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 6.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 63.0 - }, - "demand_met_from_stock": { - "-2": 10.0 - }, - "demand_met_from_stock_cumul": { - "-2": 63.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 10, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 10.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 10.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 10.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 10.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 10.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 10.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 6.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 73.0 - }, - "demand_met_from_stock": { - "-2": 10.0 - }, - "demand_met_from_stock_cumul": { - "-2": 73.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 11, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 7.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 10.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 7.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 7.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 7.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 7.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 9.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 80.0 - }, - "demand_met_from_stock": { - "-2": 7.0 - }, - "demand_met_from_stock_cumul": { - "-2": 80.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 12, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 3.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 7.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 4.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 4.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 3.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 3.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 12.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 84.0 - }, - "demand_met_from_stock": { - "-2": 4.0 - }, - "demand_met_from_stock_cumul": { - "-2": 84.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 13, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 4.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 3.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 3.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 3.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 4.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 4.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 12.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 87.0 - }, - "demand_met_from_stock": { - "-2": 3.0 - }, - "demand_met_from_stock_cumul": { - "-2": 87.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 14, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 7.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 4.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 7.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 7.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 7.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 7.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 9.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 94.0 - }, - "demand_met_from_stock": { - "-2": 7.0 - }, - "demand_met_from_stock_cumul": { - "-2": 94.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 15, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 7.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 7.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 7.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 7.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 7.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 7.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 9.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 101.0 - }, - "demand_met_from_stock": { - "-2": 7.0 - }, - "demand_met_from_stock_cumul": { - "-2": 101.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 16, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 2.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 7.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 2.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 2.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 2.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 2.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 14.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 103.0 - }, - "demand_met_from_stock": { - "-2": 2.0 - }, - "demand_met_from_stock_cumul": { - "-2": 103.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 17, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 5.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 2.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 5.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 5.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 5.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 5.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 11.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 108.0 - }, - "demand_met_from_stock": { - "-2": 5.0 - }, - "demand_met_from_stock_cumul": { - "-2": 108.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 18, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 4.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 5.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 4.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 4.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 4.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 4.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 12.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 112.0 - }, - "demand_met_from_stock": { - "-2": 4.0 - }, - "demand_met_from_stock_cumul": { - "-2": 112.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 19, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 1.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 4.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 1.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 1.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 1.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 1.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 15.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 113.0 - }, - "demand_met_from_stock": { - "-2": 1.0 - }, - "demand_met_from_stock_cumul": { - "-2": 113.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 20, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 7.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 1.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 7.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 7.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 7.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 7.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 9.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 120.0 - }, - "demand_met_from_stock": { - "-2": 7.0 - }, - "demand_met_from_stock_cumul": { - "-2": 120.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 21, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 5.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 7.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 5.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 5.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 5.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 5.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 11.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 125.0 - }, - "demand_met_from_stock": { - "-2": 5.0 - }, - "demand_met_from_stock_cumul": { - "-2": 125.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 22, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 1.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 5.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 1.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 1.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 1.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 1.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 15.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 126.0 - }, - "demand_met_from_stock": { - "-2": 1.0 - }, - "demand_met_from_stock_cumul": { - "-2": 126.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 23, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 4.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 1.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 4.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 4.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 4.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 4.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 12.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 130.0 - }, - "demand_met_from_stock": { - "-2": 4.0 - }, - "demand_met_from_stock_cumul": { - "-2": 130.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 24, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 4.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 0.0 - } - }, - "outbound_shipment": { - "1": { - "-2": 0.0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 0.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0.0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0.0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 16.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-2": 130.0 - }, - "demand_met_from_stock": { - "-2": 0.0 - }, - "demand_met_from_stock_cumul": { - "-2": 130.0 - }, - "fill_rate": { - "-2": 1.0 - } - }, - { - "node": 2, - "period": 25, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0.0, - 0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 0 - } - }, - "outbound_shipment": { - "1": { - "-2": 0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 0.0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0.0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0 - } - }, - "raw_material_inventory": { - "-5": 0.0 - }, - "inventory_level": { - "-2": 16.0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-2": 130.0 - }, - "demand_met_from_stock": { - "-2": 0 - }, - "demand_met_from_stock_cumul": { - "-2": 130.0 - }, - "fill_rate": { - "-2": 0 - } - }, - { - "node": 2, - "period": 26, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 0 - } - }, - "outbound_shipment": { - "1": { - "-2": 0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0 - } - }, - "raw_material_inventory": { - "-5": 0 - }, - "inventory_level": { - "-2": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-2": 0 - }, - "demand_met_from_stock": { - "-2": 0 - }, - "demand_met_from_stock_cumul": { - "-2": 0 - }, - "fill_rate": { - "-2": 0 - } - }, - { - "node": 2, - "period": 27, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 0 - } - }, - "outbound_shipment": { - "1": { - "-2": 0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0 - } - }, - "raw_material_inventory": { - "-5": 0 - }, - "inventory_level": { - "-2": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-2": 0 - }, - "demand_met_from_stock": { - "-2": 0 - }, - "demand_met_from_stock_cumul": { - "-2": 0 - }, - "fill_rate": { - "-2": 0 - } - }, - { - "node": 2, - "period": 28, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 0 - } - }, - "outbound_shipment": { - "1": { - "-2": 0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0 - } - }, - "raw_material_inventory": { - "-5": 0 - }, - "inventory_level": { - "-2": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-2": 0 - }, - "demand_met_from_stock": { - "-2": 0 - }, - "demand_met_from_stock_cumul": { - "-2": 0 - }, - "fill_rate": { - "-2": 0 - } - }, - { - "node": 2, - "period": 29, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 0 - } - }, - "outbound_shipment": { - "1": { - "-2": 0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0 - } - }, - "raw_material_inventory": { - "-5": 0 - }, - "inventory_level": { - "-2": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-2": 0 - }, - "demand_met_from_stock": { - "-2": 0 - }, - "demand_met_from_stock_cumul": { - "-2": 0 - }, - "fill_rate": { - "-2": 0 - } - }, - { - "node": 2, - "period": 30, - "inbound_shipment_pipeline": { - "5": { - "-5": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "5": { - "-5": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-2": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-2": 0 - } - }, - "outbound_shipment": { - "1": { - "-2": 0 - } - }, - "on_order_by_predecessor": { - "5": { - "-5": 0 - } - }, - "backorders_by_successor": { - "1": { - "-2": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-2": 0 - } - }, - "inbound_disrupted_items": { - "5": { - "-5": 0 - } - }, - "order_quantity": { - "5": { - "-5": 0 - } - }, - "raw_material_inventory": { - "-5": 0 - }, - "inventory_level": { - "-2": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-2": 0 - }, - "demand_met_from_stock": { - "-2": 0 - }, - "demand_met_from_stock_cumul": { - "-2": 0 - }, - "fill_rate": { - "-2": 0 - } - } - ] - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 3, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 24, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 3, - "product": null, - "base_stock_level": 40, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 3, - "period": 0, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 0, - 0, - 14.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 6.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 6.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 14.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 14.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 18.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 6.0 - }, - "demand_met_from_stock": { - "-3": 6.0 - }, - "demand_met_from_stock_cumul": { - "-3": 6.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 1, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 0, - 14.0, - 2.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 3.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 3.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 17.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 3.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 15.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 9.0 - }, - "demand_met_from_stock": { - "-3": 3.0 - }, - "demand_met_from_stock_cumul": { - "-3": 9.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 2, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 14.0, - 2.0, - 8.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 10.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 10.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 26.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 9.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 5.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 19.0 - }, - "demand_met_from_stock": { - "-3": 10.0 - }, - "demand_met_from_stock_cumul": { - "-3": 19.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 3, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 2.0, - 8.0, - 7.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 14.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 7.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 7.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 17.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 5.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 12.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 26.0 - }, - "demand_met_from_stock": { - "-3": 7.0 - }, - "demand_met_from_stock_cumul": { - "-3": 26.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 4, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 8.0, - 7.0, - 5.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 2.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 4.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 4.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 20.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 5.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 10.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 30.0 - }, - "demand_met_from_stock": { - "-3": 4.0 - }, - "demand_met_from_stock_cumul": { - "-3": 30.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 5, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 7.0, - 5.0, - 8.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 8.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 6.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 6.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 20.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 8.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 12.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 36.0 - }, - "demand_met_from_stock": { - "-3": 6.0 - }, - "demand_met_from_stock_cumul": { - "-3": 36.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 6, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 5.0, - 8.0, - 9.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 7.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 9.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 9.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 22.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 9.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 10.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 45.0 - }, - "demand_met_from_stock": { - "-3": 9.0 - }, - "demand_met_from_stock_cumul": { - "-3": 45.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 7, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 8.0, - 9.0, - 2.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 5.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 2.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 2.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 19.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 2.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 13.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 47.0 - }, - "demand_met_from_stock": { - "-3": 2.0 - }, - "demand_met_from_stock_cumul": { - "-3": 47.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 8, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 9.0, - 2.0, - 6.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 8.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 6.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 6.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 17.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 6.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 15.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 53.0 - }, - "demand_met_from_stock": { - "-3": 6.0 - }, - "demand_met_from_stock_cumul": { - "-3": 53.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 9, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 2.0, - 6.0, - 10.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 9.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 10.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 10.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 18.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 10.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 14.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 63.0 - }, - "demand_met_from_stock": { - "-3": 10.0 - }, - "demand_met_from_stock_cumul": { - "-3": 63.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 10, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 6.0, - 10.0, - 8.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 2.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 10.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 10.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 26.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 10.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 6.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 73.0 - }, - "demand_met_from_stock": { - "-3": 10.0 - }, - "demand_met_from_stock_cumul": { - "-3": 73.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 11, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 10.0, - 8.0, - 7.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 6.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 7.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 7.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 25.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 5.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 5.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 80.0 - }, - "demand_met_from_stock": { - "-3": 7.0 - }, - "demand_met_from_stock_cumul": { - "-3": 80.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 12, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 8.0, - 7.0, - 6.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 10.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 4.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 4.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 21.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 6.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 11.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 84.0 - }, - "demand_met_from_stock": { - "-3": 4.0 - }, - "demand_met_from_stock_cumul": { - "-3": 84.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 13, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 7.0, - 6.0, - 3.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 8.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 3.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 3.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 16.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 3.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 16.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 87.0 - }, - "demand_met_from_stock": { - "-3": 3.0 - }, - "demand_met_from_stock_cumul": { - "-3": 87.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 14, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 6.0, - 3.0, - 7.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 7.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 7.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 7.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 16.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 7.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 16.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 94.0 - }, - "demand_met_from_stock": { - "-3": 7.0 - }, - "demand_met_from_stock_cumul": { - "-3": 94.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 15, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 3.0, - 7.0, - 7.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 6.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 7.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 7.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 17.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 7.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 15.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 101.0 - }, - "demand_met_from_stock": { - "-3": 7.0 - }, - "demand_met_from_stock_cumul": { - "-3": 101.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 16, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 7.0, - 7.0, - 2.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 3.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 2.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 2.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 16.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 2.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 16.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 103.0 - }, - "demand_met_from_stock": { - "-3": 2.0 - }, - "demand_met_from_stock_cumul": { - "-3": 103.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 17, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 7.0, - 2.0, - 5.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 7.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 5.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 5.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 14.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 5.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 18.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 108.0 - }, - "demand_met_from_stock": { - "-3": 5.0 - }, - "demand_met_from_stock_cumul": { - "-3": 108.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 18, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 2.0, - 5.0, - 4.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 7.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 4.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 4.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 11.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 4.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 21.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 112.0 - }, - "demand_met_from_stock": { - "-3": 4.0 - }, - "demand_met_from_stock_cumul": { - "-3": 112.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 19, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 5.0, - 4.0, - 1.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 2.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 1.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 1.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 10.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 1.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 22.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 113.0 - }, - "demand_met_from_stock": { - "-3": 1.0 - }, - "demand_met_from_stock_cumul": { - "-3": 113.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 20, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 4.0, - 1.0, - 7.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 5.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 7.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 7.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 12.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 7.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 20.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 120.0 - }, - "demand_met_from_stock": { - "-3": 7.0 - }, - "demand_met_from_stock_cumul": { - "-3": 120.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 21, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 1.0, - 7.0, - 5.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 4.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 5.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 5.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 13.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 5.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 19.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 125.0 - }, - "demand_met_from_stock": { - "-3": 5.0 - }, - "demand_met_from_stock_cumul": { - "-3": 125.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 22, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 7.0, - 5.0, - 1.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 1.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 1.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 1.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 13.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 1.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 19.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 126.0 - }, - "demand_met_from_stock": { - "-3": 1.0 - }, - "demand_met_from_stock_cumul": { - "-3": 126.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 23, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 5.0, - 1.0, - 4.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 7.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 4.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 4.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 10.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 4.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 22.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 130.0 - }, - "demand_met_from_stock": { - "-3": 4.0 - }, - "demand_met_from_stock_cumul": { - "-3": 130.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 24, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 1.0, - 4.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 5.0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 0.0 - } - }, - "outbound_shipment": { - "1": { - "-3": 0.0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 5.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0.0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 0.0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 27.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-3": 130.0 - }, - "demand_met_from_stock": { - "-3": 0.0 - }, - "demand_met_from_stock_cumul": { - "-3": 130.0 - }, - "fill_rate": { - "-3": 1.0 - } - }, - { - "node": 3, - "period": 25, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 1.0, - 4.0, - 0.0, - 0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 0 - } - }, - "outbound_shipment": { - "1": { - "-3": 0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 5.0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0.0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0.0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 0 - } - }, - "raw_material_inventory": { - "-4": 0.0 - }, - "inventory_level": { - "-3": 27.0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-3": 130.0 - }, - "demand_met_from_stock": { - "-3": 0 - }, - "demand_met_from_stock_cumul": { - "-3": 130.0 - }, - "fill_rate": { - "-3": 0 - } - }, - { - "node": 3, - "period": 26, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 0 - } - }, - "outbound_shipment": { - "1": { - "-3": 0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 0 - } - }, - "raw_material_inventory": { - "-4": 0 - }, - "inventory_level": { - "-3": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-3": 0 - }, - "demand_met_from_stock": { - "-3": 0 - }, - "demand_met_from_stock_cumul": { - "-3": 0 - }, - "fill_rate": { - "-3": 0 - } - }, - { - "node": 3, - "period": 27, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 0 - } - }, - "outbound_shipment": { - "1": { - "-3": 0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 0 - } - }, - "raw_material_inventory": { - "-4": 0 - }, - "inventory_level": { - "-3": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-3": 0 - }, - "demand_met_from_stock": { - "-3": 0 - }, - "demand_met_from_stock_cumul": { - "-3": 0 - }, - "fill_rate": { - "-3": 0 - } - }, - { - "node": 3, - "period": 28, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 0 - } - }, - "outbound_shipment": { - "1": { - "-3": 0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 0 - } - }, - "raw_material_inventory": { - "-4": 0 - }, - "inventory_level": { - "-3": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-3": 0 - }, - "demand_met_from_stock": { - "-3": 0 - }, - "demand_met_from_stock_cumul": { - "-3": 0 - }, - "fill_rate": { - "-3": 0 - } - }, - { - "node": 3, - "period": 29, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 0 - } - }, - "outbound_shipment": { - "1": { - "-3": 0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 0 - } - }, - "raw_material_inventory": { - "-4": 0 - }, - "inventory_level": { - "-3": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-3": 0 - }, - "demand_met_from_stock": { - "-3": 0 - }, - "demand_met_from_stock_cumul": { - "-3": 0 - }, - "fill_rate": { - "-3": 0 - } - }, - { - "node": 3, - "period": 30, - "inbound_shipment_pipeline": { - "4": { - "-4": [ - 0, - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "4": { - "-4": 0 - } - }, - "inbound_order_pipeline": { - "1": { - "-3": [ - 0 - ] - } - }, - "inbound_order": { - "1": { - "-3": 0 - } - }, - "outbound_shipment": { - "1": { - "-3": 0 - } - }, - "on_order_by_predecessor": { - "4": { - "-4": 0 - } - }, - "backorders_by_successor": { - "1": { - "-3": 0 - } - }, - "outbound_disrupted_items": { - "1": { - "-3": 0 - } - }, - "inbound_disrupted_items": { - "4": { - "-4": 0 - } - }, - "order_quantity": { - "4": { - "-4": 0 - } - }, - "raw_material_inventory": { - "-4": 0 - }, - "inventory_level": { - "-3": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-3": 0 - }, - "demand_met_from_stock": { - "-3": 0 - }, - "demand_met_from_stock_cumul": { - "-3": 0 - }, - "fill_rate": { - "-3": 0 - } - } - ] - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 6, - 7 - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 16, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 4, - "product": null, - "base_stock_level": 76, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 4, - "period": 0, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0, - 8.0 - ] - }, - "7": { - "-7": [ - 0, - 0, - 16.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 14.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 14.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 36.0 - }, - "7": { - "-7": 36.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 36.0 - }, - "7": { - "-7": 36.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 2.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 14.0 - }, - "demand_met_from_stock": { - "-4": 14.0 - }, - "demand_met_from_stock_cumul": { - "-4": 14.0 - }, - "fill_rate": { - "-4": 1.0 - } - }, - { - "node": 4, - "period": 1, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 8.0, - 28.0 - ] - }, - "7": { - "-7": [ - 0, - 16.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 3.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 2.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 36.0 - }, - "7": { - "-7": 36.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 1.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": -1.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 17.0 - }, - "demand_met_from_stock": { - "-4": 2.0 - }, - "demand_met_from_stock_cumul": { - "-4": 16.0 - }, - "fill_rate": { - "-4": 0.9411764705882353 - } - }, - { - "node": 4, - "period": 2, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 28.0, - 6.0 - ] - }, - "7": { - "-7": [ - 0, - 0.0, - 26.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 8.0 - }, - "7": { - "-7": 16.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 9.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 8.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 34.0 - }, - "7": { - "-7": 26.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 2.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 6.0 - }, - "7": { - "-7": 6.0 - } - }, - "raw_material_inventory": { - "-7": 8.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": -2.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 26.0 - }, - "demand_met_from_stock": { - "-4": 7.0 - }, - "demand_met_from_stock_cumul": { - "-4": 23.0 - }, - "fill_rate": { - "-4": 0.8846153846153846 - } - }, - { - "node": 4, - "period": 3, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 6.0, - 0.0 - ] - }, - "7": { - "-7": [ - 0, - 26.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 28.0 - }, - "7": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 5.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 7.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 6.0 - }, - "7": { - "-7": 26.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 20.0 - }, - "inventory_level": { - "-4": 1.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 31.0 - }, - "demand_met_from_stock": { - "-4": 5.0 - }, - "demand_met_from_stock_cumul": { - "-4": 28.0 - }, - "fill_rate": { - "-4": 0.9032258064516129 - } - }, - { - "node": 4, - "period": 4, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0.0, - 0.0 - ] - }, - "7": { - "-7": [ - 0, - 0.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 6.0 - }, - "7": { - "-7": 26.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 5.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 5.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 22.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 36.0 - }, - "demand_met_from_stock": { - "-4": 5.0 - }, - "demand_met_from_stock_cumul": { - "-4": 33.0 - }, - "fill_rate": { - "-4": 0.9166666666666666 - } - }, - { - "node": 4, - "period": 5, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0.0, - 15.0 - ] - }, - "7": { - "-7": [ - 0, - 0.0, - 15.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 8.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 8.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 15.0 - }, - "7": { - "-7": 15.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 15.0 - }, - "7": { - "-7": 15.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 14.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 44.0 - }, - "demand_met_from_stock": { - "-4": 8.0 - }, - "demand_met_from_stock_cumul": { - "-4": 41.0 - }, - "fill_rate": { - "-4": 0.9318181818181818 - } - }, - { - "node": 4, - "period": 6, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 15.0, - 1.0 - ] - }, - "7": { - "-7": [ - 0, - 15.0, - 1.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 9.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 9.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 16.0 - }, - "7": { - "-7": 16.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 1.0 - }, - "7": { - "-7": 1.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 5.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 53.0 - }, - "demand_met_from_stock": { - "-4": 9.0 - }, - "demand_met_from_stock_cumul": { - "-4": 50.0 - }, - "fill_rate": { - "-4": 0.9433962264150944 - } - }, - { - "node": 4, - "period": 7, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 1.0, - 5.0 - ] - }, - "7": { - "-7": [ - 0, - 1.0, - 5.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 15.0 - }, - "7": { - "-7": 15.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 2.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 2.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 6.0 - }, - "7": { - "-7": 6.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 5.0 - }, - "7": { - "-7": 5.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 18.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 55.0 - }, - "demand_met_from_stock": { - "-4": 2.0 - }, - "demand_met_from_stock_cumul": { - "-4": 52.0 - }, - "fill_rate": { - "-4": 0.9454545454545454 - } - }, - { - "node": 4, - "period": 8, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 5.0, - 0.0 - ] - }, - "7": { - "-7": [ - 0, - 5.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 1.0 - }, - "7": { - "-7": 1.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 6.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 6.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 5.0 - }, - "7": { - "-7": 5.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 13.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 61.0 - }, - "demand_met_from_stock": { - "-4": 6.0 - }, - "demand_met_from_stock_cumul": { - "-4": 58.0 - }, - "fill_rate": { - "-4": 0.9508196721311475 - } - }, - { - "node": 4, - "period": 9, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0.0, - 18.0 - ] - }, - "7": { - "-7": [ - 0, - 0.0, - 18.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 5.0 - }, - "7": { - "-7": 5.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 10.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 10.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 18.0 - }, - "7": { - "-7": 18.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 18.0 - }, - "7": { - "-7": 18.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 8.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 71.0 - }, - "demand_met_from_stock": { - "-4": 10.0 - }, - "demand_met_from_stock_cumul": { - "-4": 68.0 - }, - "fill_rate": { - "-4": 0.9577464788732394 - } - }, - { - "node": 4, - "period": 10, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 18.0, - 5.0 - ] - }, - "7": { - "-7": [ - 0, - 18.0, - 5.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 10.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 8.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 23.0 - }, - "7": { - "-7": 23.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 2.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 5.0 - }, - "7": { - "-7": 5.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": -2.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 81.0 - }, - "demand_met_from_stock": { - "-4": 8.0 - }, - "demand_met_from_stock_cumul": { - "-4": 76.0 - }, - "fill_rate": { - "-4": 0.9382716049382716 - } - }, - { - "node": 4, - "period": 11, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 5.0, - 12.0 - ] - }, - "7": { - "-7": [ - 0, - 5.0, - 12.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 18.0 - }, - "7": { - "-7": 18.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 5.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 7.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 17.0 - }, - "7": { - "-7": 17.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 12.0 - }, - "7": { - "-7": 12.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 11.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 86.0 - }, - "demand_met_from_stock": { - "-4": 5.0 - }, - "demand_met_from_stock_cumul": { - "-4": 81.0 - }, - "fill_rate": { - "-4": 0.9418604651162791 - } - }, - { - "node": 4, - "period": 12, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 12.0, - 0.0 - ] - }, - "7": { - "-7": [ - 0, - 12.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 5.0 - }, - "7": { - "-7": 5.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 6.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 6.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 12.0 - }, - "7": { - "-7": 12.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 10.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 92.0 - }, - "demand_met_from_stock": { - "-4": 6.0 - }, - "demand_met_from_stock_cumul": { - "-4": 87.0 - }, - "fill_rate": { - "-4": 0.9456521739130435 - } - }, - { - "node": 4, - "period": 13, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0.0, - 0.0 - ] - }, - "7": { - "-7": [ - 0, - 0.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 12.0 - }, - "7": { - "-7": 12.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 3.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 3.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 19.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 95.0 - }, - "demand_met_from_stock": { - "-4": 3.0 - }, - "demand_met_from_stock_cumul": { - "-4": 90.0 - }, - "fill_rate": { - "-4": 0.9473684210526315 - } - }, - { - "node": 4, - "period": 14, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0.0, - 7.0 - ] - }, - "7": { - "-7": [ - 0, - 0.0, - 7.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 7.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 7.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 7.0 - }, - "7": { - "-7": 7.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 7.0 - }, - "7": { - "-7": 7.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 12.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 102.0 - }, - "demand_met_from_stock": { - "-4": 7.0 - }, - "demand_met_from_stock_cumul": { - "-4": 97.0 - }, - "fill_rate": { - "-4": 0.9509803921568627 - } - }, - { - "node": 4, - "period": 15, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 7.0, - 10.0 - ] - }, - "7": { - "-7": [ - 0, - 7.0, - 10.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 7.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 7.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 17.0 - }, - "7": { - "-7": 17.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 10.0 - }, - "7": { - "-7": 10.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 5.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 109.0 - }, - "demand_met_from_stock": { - "-4": 7.0 - }, - "demand_met_from_stock_cumul": { - "-4": 104.0 - }, - "fill_rate": { - "-4": 0.9541284403669725 - } - }, - { - "node": 4, - "period": 16, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 10.0, - 1.0 - ] - }, - "7": { - "-7": [ - 0, - 10.0, - 1.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 7.0 - }, - "7": { - "-7": 7.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 2.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 2.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 11.0 - }, - "7": { - "-7": 11.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 1.0 - }, - "7": { - "-7": 1.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 10.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 111.0 - }, - "demand_met_from_stock": { - "-4": 2.0 - }, - "demand_met_from_stock_cumul": { - "-4": 106.0 - }, - "fill_rate": { - "-4": 0.954954954954955 - } - }, - { - "node": 4, - "period": 17, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 1.0, - 6.0 - ] - }, - "7": { - "-7": [ - 0, - 1.0, - 6.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 10.0 - }, - "7": { - "-7": 10.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 5.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 5.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 7.0 - }, - "7": { - "-7": 7.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 6.0 - }, - "7": { - "-7": 6.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 15.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 116.0 - }, - "demand_met_from_stock": { - "-4": 5.0 - }, - "demand_met_from_stock_cumul": { - "-4": 111.0 - }, - "fill_rate": { - "-4": 0.9568965517241379 - } - }, - { - "node": 4, - "period": 18, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 6.0, - 2.0 - ] - }, - "7": { - "-7": [ - 0, - 6.0, - 2.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 1.0 - }, - "7": { - "-7": 1.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 4.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 4.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 8.0 - }, - "7": { - "-7": 8.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 2.0 - }, - "7": { - "-7": 2.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 12.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 120.0 - }, - "demand_met_from_stock": { - "-4": 4.0 - }, - "demand_met_from_stock_cumul": { - "-4": 115.0 - }, - "fill_rate": { - "-4": 0.9583333333333334 - } - }, - { - "node": 4, - "period": 19, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 2.0, - 0.0 - ] - }, - "7": { - "-7": [ - 0, - 2.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 6.0 - }, - "7": { - "-7": 6.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 1.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 1.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 2.0 - }, - "7": { - "-7": 2.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 17.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 121.0 - }, - "demand_met_from_stock": { - "-4": 1.0 - }, - "demand_met_from_stock_cumul": { - "-4": 116.0 - }, - "fill_rate": { - "-4": 0.9586776859504132 - } - }, - { - "node": 4, - "period": 20, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0.0, - 15.0 - ] - }, - "7": { - "-7": [ - 0, - 0.0, - 15.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 2.0 - }, - "7": { - "-7": 2.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 7.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 7.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 15.0 - }, - "7": { - "-7": 15.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 15.0 - }, - "7": { - "-7": 15.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 12.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 128.0 - }, - "demand_met_from_stock": { - "-4": 7.0 - }, - "demand_met_from_stock_cumul": { - "-4": 123.0 - }, - "fill_rate": { - "-4": 0.9609375 - } - }, - { - "node": 4, - "period": 21, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 15.0, - 0.0 - ] - }, - "7": { - "-7": [ - 0, - 15.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 5.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 5.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 15.0 - }, - "7": { - "-7": 15.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 7.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 133.0 - }, - "demand_met_from_stock": { - "-4": 5.0 - }, - "demand_met_from_stock_cumul": { - "-4": 128.0 - }, - "fill_rate": { - "-4": 0.9624060150375939 - } - }, - { - "node": 4, - "period": 22, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0.0, - 0.0 - ] - }, - "7": { - "-7": [ - 0, - 0.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 15.0 - }, - "7": { - "-7": 15.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 1.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 1.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 21.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 134.0 - }, - "demand_met_from_stock": { - "-4": 1.0 - }, - "demand_met_from_stock_cumul": { - "-4": 129.0 - }, - "fill_rate": { - "-4": 0.9626865671641791 - } - }, - { - "node": 4, - "period": 23, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0.0, - 8.0 - ] - }, - "7": { - "-7": [ - 0, - 0.0, - 8.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 4.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 4.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 8.0 - }, - "7": { - "-7": 8.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 8.0 - }, - "7": { - "-7": 8.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 17.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 138.0 - }, - "demand_met_from_stock": { - "-4": 4.0 - }, - "demand_met_from_stock_cumul": { - "-4": 133.0 - }, - "fill_rate": { - "-4": 0.9637681159420289 - } - }, - { - "node": 4, - "period": 24, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 8.0, - 0.0 - ] - }, - "7": { - "-7": [ - 0, - 8.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 0.0 - } - }, - "outbound_shipment": { - "3": { - "-4": 0.0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 8.0 - }, - "7": { - "-7": 8.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0.0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0.0 - }, - "7": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 17.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-4": 138.0 - }, - "demand_met_from_stock": { - "-4": 0.0 - }, - "demand_met_from_stock_cumul": { - "-4": 133.0 - }, - "fill_rate": { - "-4": 0.9637681159420289 - } - }, - { - "node": 4, - "period": 25, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 8.0, - 0.0, - 0 - ] - }, - "7": { - "-7": [ - 8.0, - 0.0, - 0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 0 - } - }, - "outbound_shipment": { - "3": { - "-4": 0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 8.0 - }, - "7": { - "-7": 8.0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0.0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0.0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0.0, - "-6": 0.0 - }, - "inventory_level": { - "-4": 17.0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-4": 138.0 - }, - "demand_met_from_stock": { - "-4": 0 - }, - "demand_met_from_stock_cumul": { - "-4": 133.0 - }, - "fill_rate": { - "-4": 0 - } - }, - { - "node": 4, - "period": 26, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0, - 0 - ] - }, - "7": { - "-7": [ - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 0 - } - }, - "outbound_shipment": { - "3": { - "-4": 0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0, - "-6": 0 - }, - "inventory_level": { - "-4": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-4": 0 - }, - "demand_met_from_stock": { - "-4": 0 - }, - "demand_met_from_stock_cumul": { - "-4": 0 - }, - "fill_rate": { - "-4": 0 - } - }, - { - "node": 4, - "period": 27, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0, - 0 - ] - }, - "7": { - "-7": [ - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 0 - } - }, - "outbound_shipment": { - "3": { - "-4": 0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0, - "-6": 0 - }, - "inventory_level": { - "-4": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-4": 0 - }, - "demand_met_from_stock": { - "-4": 0 - }, - "demand_met_from_stock_cumul": { - "-4": 0 - }, - "fill_rate": { - "-4": 0 - } - }, - { - "node": 4, - "period": 28, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0, - 0 - ] - }, - "7": { - "-7": [ - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 0 - } - }, - "outbound_shipment": { - "3": { - "-4": 0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0, - "-6": 0 - }, - "inventory_level": { - "-4": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-4": 0 - }, - "demand_met_from_stock": { - "-4": 0 - }, - "demand_met_from_stock_cumul": { - "-4": 0 - }, - "fill_rate": { - "-4": 0 - } - }, - { - "node": 4, - "period": 29, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0, - 0 - ] - }, - "7": { - "-7": [ - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 0 - } - }, - "outbound_shipment": { - "3": { - "-4": 0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0, - "-6": 0 - }, - "inventory_level": { - "-4": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-4": 0 - }, - "demand_met_from_stock": { - "-4": 0 - }, - "demand_met_from_stock_cumul": { - "-4": 0 - }, - "fill_rate": { - "-4": 0 - } - }, - { - "node": 4, - "period": 30, - "inbound_shipment_pipeline": { - "6": { - "-6": [ - 0, - 0, - 0 - ] - }, - "7": { - "-7": [ - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "3": { - "-4": [ - 0 - ] - } - }, - "inbound_order": { - "3": { - "-4": 0 - } - }, - "outbound_shipment": { - "3": { - "-4": 0 - } - }, - "on_order_by_predecessor": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "backorders_by_successor": { - "3": { - "-4": 0 - } - }, - "outbound_disrupted_items": { - "3": { - "-4": 0 - } - }, - "inbound_disrupted_items": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "order_quantity": { - "6": { - "-6": 0 - }, - "7": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0, - "-6": 0 - }, - "inventory_level": { - "-4": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-4": 0 - }, - "demand_met_from_stock": { - "-4": 0 - }, - "demand_met_from_stock_cumul": { - "-4": 0 - }, - "fill_rate": { - "-4": 0 - } - } - ] - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 4, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 32, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 5, - "product": null, - "base_stock_level": 62, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 5, - "period": 0, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0, - 0, - 0, - 22.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 14.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 14.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 22.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 22.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 18.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 14.0 - }, - "demand_met_from_stock": { - "-5": 14.0 - }, - "demand_met_from_stock_cumul": { - "-5": 14.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 1, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0, - 0, - 22.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 3.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 3.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 22.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 15.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 17.0 - }, - "demand_met_from_stock": { - "-5": 3.0 - }, - "demand_met_from_stock_cumul": { - "-5": 17.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 2, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0, - 22.0, - 0.0, - 11.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 10.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 10.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 33.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 11.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 5.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 27.0 - }, - "demand_met_from_stock": { - "-5": 10.0 - }, - "demand_met_from_stock_cumul": { - "-5": 27.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 3, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 22.0, - 0.0, - 11.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 0.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 33.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 5.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 27.0 - }, - "demand_met_from_stock": { - "-5": 0.0 - }, - "demand_met_from_stock_cumul": { - "-5": 27.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 4, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0.0, - 11.0, - 0.0, - 10.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 22.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 11.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 11.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 21.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 10.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 16.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 38.0 - }, - "demand_met_from_stock": { - "-5": 11.0 - }, - "demand_met_from_stock_cumul": { - "-5": 38.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 5, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 11.0, - 0.0, - 10.0, - 6.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 5.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 5.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 27.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 6.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 11.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 43.0 - }, - "demand_met_from_stock": { - "-5": 5.0 - }, - "demand_met_from_stock_cumul": { - "-5": 43.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 6, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0.0, - 10.0, - 6.0, - 11.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 11.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 10.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 10.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 27.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 11.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 12.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 53.0 - }, - "demand_met_from_stock": { - "-5": 10.0 - }, - "demand_met_from_stock_cumul": { - "-5": 53.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 7, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 10.0, - 6.0, - 11.0, - 1.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 2.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 2.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 28.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 1.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 10.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 55.0 - }, - "demand_met_from_stock": { - "-5": 2.0 - }, - "demand_met_from_stock_cumul": { - "-5": 55.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 8, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 6.0, - 11.0, - 1.0, - 6.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 10.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 6.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 6.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 24.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 6.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 14.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 61.0 - }, - "demand_met_from_stock": { - "-5": 6.0 - }, - "demand_met_from_stock_cumul": { - "-5": 61.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 9, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 11.0, - 1.0, - 6.0, - 10.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 6.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 10.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 10.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 28.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 10.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 10.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 71.0 - }, - "demand_met_from_stock": { - "-5": 10.0 - }, - "demand_met_from_stock_cumul": { - "-5": 71.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 10, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 1.0, - 6.0, - 10.0, - 10.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 11.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 10.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 10.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 27.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 10.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 11.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 81.0 - }, - "demand_met_from_stock": { - "-5": 10.0 - }, - "demand_met_from_stock_cumul": { - "-5": 81.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 11, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 6.0, - 10.0, - 10.0, - 7.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 1.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 7.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 7.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 33.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 7.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 5.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 88.0 - }, - "demand_met_from_stock": { - "-5": 7.0 - }, - "demand_met_from_stock_cumul": { - "-5": 88.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 12, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 10.0, - 10.0, - 7.0, - 3.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 6.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 3.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 3.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 30.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 3.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 8.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 91.0 - }, - "demand_met_from_stock": { - "-5": 3.0 - }, - "demand_met_from_stock_cumul": { - "-5": 91.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 13, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 10.0, - 7.0, - 3.0, - 5.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 10.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 4.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 4.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 25.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 5.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 14.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 95.0 - }, - "demand_met_from_stock": { - "-5": 4.0 - }, - "demand_met_from_stock_cumul": { - "-5": 95.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 14, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 7.0, - 3.0, - 5.0, - 6.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 10.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 7.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 7.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 21.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 6.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 17.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 102.0 - }, - "demand_met_from_stock": { - "-5": 7.0 - }, - "demand_met_from_stock_cumul": { - "-5": 102.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 15, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 3.0, - 5.0, - 6.0, - 7.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 7.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 7.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 7.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 21.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 7.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 17.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 109.0 - }, - "demand_met_from_stock": { - "-5": 7.0 - }, - "demand_met_from_stock_cumul": { - "-5": 109.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 16, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 5.0, - 6.0, - 7.0, - 2.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 3.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 2.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 2.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 20.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 2.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 18.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 111.0 - }, - "demand_met_from_stock": { - "-5": 2.0 - }, - "demand_met_from_stock_cumul": { - "-5": 111.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 17, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 6.0, - 7.0, - 2.0, - 5.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 5.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 5.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 5.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 20.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 5.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 18.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 116.0 - }, - "demand_met_from_stock": { - "-5": 5.0 - }, - "demand_met_from_stock_cumul": { - "-5": 116.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 18, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 7.0, - 2.0, - 5.0, - 4.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 6.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 4.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 4.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 18.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 4.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 20.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 120.0 - }, - "demand_met_from_stock": { - "-5": 4.0 - }, - "demand_met_from_stock_cumul": { - "-5": 120.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 19, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 2.0, - 5.0, - 4.0, - 1.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 7.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 1.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 1.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 12.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 1.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 26.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 121.0 - }, - "demand_met_from_stock": { - "-5": 1.0 - }, - "demand_met_from_stock_cumul": { - "-5": 121.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 20, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 5.0, - 4.0, - 1.0, - 7.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 2.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 7.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 7.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 17.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 7.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 21.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 128.0 - }, - "demand_met_from_stock": { - "-5": 7.0 - }, - "demand_met_from_stock_cumul": { - "-5": 128.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 21, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 4.0, - 1.0, - 7.0, - 5.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 5.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 5.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 5.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 17.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 5.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 21.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 133.0 - }, - "demand_met_from_stock": { - "-5": 5.0 - }, - "demand_met_from_stock_cumul": { - "-5": 133.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 22, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 1.0, - 7.0, - 5.0, - 1.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 4.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 1.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 1.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 14.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 1.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 24.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 134.0 - }, - "demand_met_from_stock": { - "-5": 1.0 - }, - "demand_met_from_stock_cumul": { - "-5": 134.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 23, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 7.0, - 5.0, - 1.0, - 4.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 1.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 4.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 4.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 17.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 4.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 21.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 138.0 - }, - "demand_met_from_stock": { - "-5": 4.0 - }, - "demand_met_from_stock_cumul": { - "-5": 138.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 24, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 5.0, - 1.0, - 4.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 7.0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 0.0 - } - }, - "outbound_shipment": { - "2": { - "-5": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 10.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0.0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 28.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-5": 138.0 - }, - "demand_met_from_stock": { - "-5": 0.0 - }, - "demand_met_from_stock_cumul": { - "-5": 138.0 - }, - "fill_rate": { - "-5": 1.0 - } - }, - { - "node": 5, - "period": 25, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 5.0, - 1.0, - 4.0, - 0.0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 0 - } - }, - "outbound_shipment": { - "2": { - "-5": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 10.0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0.0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0 - } - }, - "raw_material_inventory": { - "-6": 0.0 - }, - "inventory_level": { - "-5": 28.0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-5": 138.0 - }, - "demand_met_from_stock": { - "-5": 0 - }, - "demand_met_from_stock_cumul": { - "-5": 138.0 - }, - "fill_rate": { - "-5": 0 - } - }, - { - "node": 5, - "period": 26, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 0 - } - }, - "outbound_shipment": { - "2": { - "-5": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0 - } - }, - "raw_material_inventory": { - "-6": 0 - }, - "inventory_level": { - "-5": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-5": 0 - }, - "demand_met_from_stock": { - "-5": 0 - }, - "demand_met_from_stock_cumul": { - "-5": 0 - }, - "fill_rate": { - "-5": 0 - } - }, - { - "node": 5, - "period": 27, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 0 - } - }, - "outbound_shipment": { - "2": { - "-5": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0 - } - }, - "raw_material_inventory": { - "-6": 0 - }, - "inventory_level": { - "-5": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-5": 0 - }, - "demand_met_from_stock": { - "-5": 0 - }, - "demand_met_from_stock_cumul": { - "-5": 0 - }, - "fill_rate": { - "-5": 0 - } - }, - { - "node": 5, - "period": 28, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 0 - } - }, - "outbound_shipment": { - "2": { - "-5": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0 - } - }, - "raw_material_inventory": { - "-6": 0 - }, - "inventory_level": { - "-5": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-5": 0 - }, - "demand_met_from_stock": { - "-5": 0 - }, - "demand_met_from_stock_cumul": { - "-5": 0 - }, - "fill_rate": { - "-5": 0 - } - }, - { - "node": 5, - "period": 29, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 0 - } - }, - "outbound_shipment": { - "2": { - "-5": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0 - } - }, - "raw_material_inventory": { - "-6": 0 - }, - "inventory_level": { - "-5": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-5": 0 - }, - "demand_met_from_stock": { - "-5": 0 - }, - "demand_met_from_stock_cumul": { - "-5": 0 - }, - "fill_rate": { - "-5": 0 - } - }, - { - "node": 5, - "period": 30, - "inbound_shipment_pipeline": { - "null": { - "-6": [ - 0, - 0, - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-6": 0 - } - }, - "inbound_order_pipeline": { - "2": { - "-5": [ - 0 - ] - } - }, - "inbound_order": { - "2": { - "-5": 0 - } - }, - "outbound_shipment": { - "2": { - "-5": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-6": 0 - } - }, - "backorders_by_successor": { - "2": { - "-5": 0 - } - }, - "outbound_disrupted_items": { - "2": { - "-5": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-6": 0 - } - }, - "order_quantity": { - "null": { - "-6": 0 - } - }, - "raw_material_inventory": { - "-6": 0 - }, - "inventory_level": { - "-5": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-5": 0 - }, - "demand_met_from_stock": { - "-5": 0 - }, - "demand_met_from_stock_cumul": { - "-5": 0 - }, - "fill_rate": { - "-5": 0 - } - } - ] - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 8, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 6, - "product": null, - "base_stock_level": 84, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 6, - "period": 0, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 44.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 36.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 8.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 44.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 28.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 44.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": -28.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 36.0 - }, - "demand_met_from_stock": { - "-6": 8.0 - }, - "demand_met_from_stock_cumul": { - "-6": 8.0 - }, - "fill_rate": { - "-6": 0.2222222222222222 - } - }, - { - "node": 6, - "period": 1, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 44.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 28.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 16.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 36.0 - }, - "demand_met_from_stock": { - "-6": 0.0 - }, - "demand_met_from_stock_cumul": { - "-6": 8.0 - }, - "fill_rate": { - "-6": 0.2222222222222222 - } - }, - { - "node": 6, - "period": 2, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 6.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 6.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 10.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 42.0 - }, - "demand_met_from_stock": { - "-6": 6.0 - }, - "demand_met_from_stock_cumul": { - "-6": 14.0 - }, - "fill_rate": { - "-6": 0.3333333333333333 - } - }, - { - "node": 6, - "period": 3, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 3.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 3.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 3.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 10.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 42.0 - }, - "demand_met_from_stock": { - "-6": 0.0 - }, - "demand_met_from_stock_cumul": { - "-6": 14.0 - }, - "fill_rate": { - "-6": 0.3333333333333333 - } - }, - { - "node": 6, - "period": 4, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 27.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 3.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 27.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 27.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 13.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 42.0 - }, - "demand_met_from_stock": { - "-6": 0.0 - }, - "demand_met_from_stock_cumul": { - "-6": 14.0 - }, - "fill_rate": { - "-6": 0.3333333333333333 - } - }, - { - "node": 6, - "period": 5, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 27.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 15.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 15.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 25.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 57.0 - }, - "demand_met_from_stock": { - "-6": 15.0 - }, - "demand_met_from_stock_cumul": { - "-6": 29.0 - }, - "fill_rate": { - "-6": 0.5087719298245614 - } - }, - { - "node": 6, - "period": 6, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 1.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 1.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 24.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 58.0 - }, - "demand_met_from_stock": { - "-6": 1.0 - }, - "demand_met_from_stock_cumul": { - "-6": 30.0 - }, - "fill_rate": { - "-6": 0.5172413793103449 - } - }, - { - "node": 6, - "period": 7, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 3.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 5.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 5.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 3.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 3.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 19.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 63.0 - }, - "demand_met_from_stock": { - "-6": 5.0 - }, - "demand_met_from_stock_cumul": { - "-6": 35.0 - }, - "fill_rate": { - "-6": 0.5555555555555556 - } - }, - { - "node": 6, - "period": 8, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 3.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 22.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 63.0 - }, - "demand_met_from_stock": { - "-6": 0.0 - }, - "demand_met_from_stock_cumul": { - "-6": 35.0 - }, - "fill_rate": { - "-6": 0.5555555555555556 - } - }, - { - "node": 6, - "period": 9, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 22.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 18.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 18.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 22.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 22.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 4.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 81.0 - }, - "demand_met_from_stock": { - "-6": 18.0 - }, - "demand_met_from_stock_cumul": { - "-6": 53.0 - }, - "fill_rate": { - "-6": 0.654320987654321 - } - }, - { - "node": 6, - "period": 10, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 22.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 5.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 5.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 21.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 86.0 - }, - "demand_met_from_stock": { - "-6": 5.0 - }, - "demand_met_from_stock_cumul": { - "-6": 58.0 - }, - "fill_rate": { - "-6": 0.6744186046511628 - } - }, - { - "node": 6, - "period": 11, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 12.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 12.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 9.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 98.0 - }, - "demand_met_from_stock": { - "-6": 12.0 - }, - "demand_met_from_stock_cumul": { - "-6": 70.0 - }, - "fill_rate": { - "-6": 0.7142857142857143 - } - }, - { - "node": 6, - "period": 12, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 9.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 9.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 9.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 9.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 98.0 - }, - "demand_met_from_stock": { - "-6": 0.0 - }, - "demand_met_from_stock_cumul": { - "-6": 70.0 - }, - "fill_rate": { - "-6": 0.7142857142857143 - } - }, - { - "node": 6, - "period": 13, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 9.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 18.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 98.0 - }, - "demand_met_from_stock": { - "-6": 0.0 - }, - "demand_met_from_stock_cumul": { - "-6": 70.0 - }, - "fill_rate": { - "-6": 0.7142857142857143 - } - }, - { - "node": 6, - "period": 14, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 14.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 7.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 7.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 14.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 14.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 11.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 105.0 - }, - "demand_met_from_stock": { - "-6": 7.0 - }, - "demand_met_from_stock_cumul": { - "-6": 77.0 - }, - "fill_rate": { - "-6": 0.7333333333333333 - } - }, - { - "node": 6, - "period": 15, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 10.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 14.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 10.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 10.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 10.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 10.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 15.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 115.0 - }, - "demand_met_from_stock": { - "-6": 10.0 - }, - "demand_met_from_stock_cumul": { - "-6": 87.0 - }, - "fill_rate": { - "-6": 0.7565217391304347 - } - }, - { - "node": 6, - "period": 16, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 10.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 1.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 1.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 24.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 116.0 - }, - "demand_met_from_stock": { - "-6": 1.0 - }, - "demand_met_from_stock_cumul": { - "-6": 88.0 - }, - "fill_rate": { - "-6": 0.7586206896551724 - } - }, - { - "node": 6, - "period": 17, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 4.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 6.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 6.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 4.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 4.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 18.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 122.0 - }, - "demand_met_from_stock": { - "-6": 6.0 - }, - "demand_met_from_stock_cumul": { - "-6": 94.0 - }, - "fill_rate": { - "-6": 0.7704918032786885 - } - }, - { - "node": 6, - "period": 18, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 2.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 4.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 2.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 2.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 2.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 2.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 20.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 124.0 - }, - "demand_met_from_stock": { - "-6": 2.0 - }, - "demand_met_from_stock_cumul": { - "-6": 96.0 - }, - "fill_rate": { - "-6": 0.7741935483870968 - } - }, - { - "node": 6, - "period": 19, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 2.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 2.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 2.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 2.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 22.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 124.0 - }, - "demand_met_from_stock": { - "-6": 0.0 - }, - "demand_met_from_stock_cumul": { - "-6": 96.0 - }, - "fill_rate": { - "-6": 0.7741935483870968 - } - }, - { - "node": 6, - "period": 20, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 16.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 2.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 15.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 15.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 16.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 16.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 9.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 139.0 - }, - "demand_met_from_stock": { - "-6": 15.0 - }, - "demand_met_from_stock_cumul": { - "-6": 111.0 - }, - "fill_rate": { - "-6": 0.7985611510791367 - } - }, - { - "node": 6, - "period": 21, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 16.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 25.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 139.0 - }, - "demand_met_from_stock": { - "-6": 0.0 - }, - "demand_met_from_stock_cumul": { - "-6": 111.0 - }, - "fill_rate": { - "-6": 0.7985611510791367 - } - }, - { - "node": 6, - "period": 22, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 25.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 139.0 - }, - "demand_met_from_stock": { - "-6": 0.0 - }, - "demand_met_from_stock_cumul": { - "-6": 111.0 - }, - "fill_rate": { - "-6": 0.7985611510791367 - } - }, - { - "node": 6, - "period": 23, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 6.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 8.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 8.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 6.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 6.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 17.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 147.0 - }, - "demand_met_from_stock": { - "-6": 8.0 - }, - "demand_met_from_stock_cumul": { - "-6": 119.0 - }, - "fill_rate": { - "-6": 0.8095238095238095 - } - }, - { - "node": 6, - "period": 24, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 6.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0.0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 23.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-6": 147.0 - }, - "demand_met_from_stock": { - "-6": 0.0 - }, - "demand_met_from_stock_cumul": { - "-6": 119.0 - }, - "fill_rate": { - "-6": 0.8095238095238095 - } - }, - { - "node": 6, - "period": 25, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0.0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0.0 - }, - "inventory_level": { - "-6": 23.0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-6": 147.0 - }, - "demand_met_from_stock": { - "-6": 0 - }, - "demand_met_from_stock_cumul": { - "-6": 119.0 - }, - "fill_rate": { - "-6": 0 - } - }, - { - "node": 6, - "period": 26, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0 - }, - "inventory_level": { - "-6": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-6": 0 - }, - "demand_met_from_stock": { - "-6": 0 - }, - "demand_met_from_stock_cumul": { - "-6": 0 - }, - "fill_rate": { - "-6": 0 - } - }, - { - "node": 6, - "period": 27, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0 - }, - "inventory_level": { - "-6": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-6": 0 - }, - "demand_met_from_stock": { - "-6": 0 - }, - "demand_met_from_stock_cumul": { - "-6": 0 - }, - "fill_rate": { - "-6": 0 - } - }, - { - "node": 6, - "period": 28, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0 - }, - "inventory_level": { - "-6": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-6": 0 - }, - "demand_met_from_stock": { - "-6": 0 - }, - "demand_met_from_stock_cumul": { - "-6": 0 - }, - "fill_rate": { - "-6": 0 - } - }, - { - "node": 6, - "period": 29, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0 - }, - "inventory_level": { - "-6": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-6": 0 - }, - "demand_met_from_stock": { - "-6": 0 - }, - "demand_met_from_stock_cumul": { - "-6": 0 - }, - "fill_rate": { - "-6": 0 - } - }, - { - "node": 6, - "period": 30, - "inbound_shipment_pipeline": { - "null": { - "-7": [ - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-7": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-6": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-6": 0 - } - }, - "outbound_shipment": { - "4": { - "-6": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-7": 0 - } - }, - "backorders_by_successor": { - "4": { - "-6": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-6": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-7": 0 - } - }, - "order_quantity": { - "null": { - "-7": 0 - } - }, - "raw_material_inventory": { - "-7": 0 - }, - "inventory_level": { - "-6": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-6": 0 - }, - "demand_met_from_stock": { - "-6": 0 - }, - "demand_met_from_stock_cumul": { - "-6": 0 - }, - "fill_rate": { - "-6": 0 - } - } - ] - }, - { - "_index": 7, - "name": null, - "network": null, - "_products_by_index": { - "-7": -7 - }, - "_dummy_product": -7, - "_external_supplier_dummy_product": -8, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 16, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 7, - "product": null, - "base_stock_level": 92, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": [ - { - "node": 7, - "period": 0, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0, - 64.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 36.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 16.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 64.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 20.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 64.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": -20.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 36.0 - }, - "demand_met_from_stock": { - "-7": 16.0 - }, - "demand_met_from_stock_cumul": { - "-7": 16.0 - }, - "fill_rate": { - "-7": 0.4444444444444444 - } - }, - { - "node": 7, - "period": 1, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 64.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 64.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 20.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": -20.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0.0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 36.0 - }, - "demand_met_from_stock": { - "-7": 0.0 - }, - "demand_met_from_stock_cumul": { - "-7": 16.0 - }, - "fill_rate": { - "-7": 0.4444444444444444 - } - }, - { - "node": 7, - "period": 2, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 64.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 6.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 26.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 38.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 42.0 - }, - "demand_met_from_stock": { - "-7": 6.0 - }, - "demand_met_from_stock_cumul": { - "-7": 22.0 - }, - "fill_rate": { - "-7": 0.5238095238095238 - } - }, - { - "node": 7, - "period": 3, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 38.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 42.0 - }, - "demand_met_from_stock": { - "-7": 0.0 - }, - "demand_met_from_stock_cumul": { - "-7": 22.0 - }, - "fill_rate": { - "-7": 0.5238095238095238 - } - }, - { - "node": 7, - "period": 4, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 38.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 42.0 - }, - "demand_met_from_stock": { - "-7": 0.0 - }, - "demand_met_from_stock_cumul": { - "-7": 22.0 - }, - "fill_rate": { - "-7": 0.5238095238095238 - } - }, - { - "node": 7, - "period": 5, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 9.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 15.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 15.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 9.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 9.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 23.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 57.0 - }, - "demand_met_from_stock": { - "-7": 15.0 - }, - "demand_met_from_stock_cumul": { - "-7": 37.0 - }, - "fill_rate": { - "-7": 0.6491228070175439 - } - }, - { - "node": 7, - "period": 6, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 9.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 1.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 1.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 9.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 22.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 58.0 - }, - "demand_met_from_stock": { - "-7": 1.0 - }, - "demand_met_from_stock_cumul": { - "-7": 38.0 - }, - "fill_rate": { - "-7": 0.6551724137931034 - } - }, - { - "node": 7, - "period": 7, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 5.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 9.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 5.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 5.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 5.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 5.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 26.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 63.0 - }, - "demand_met_from_stock": { - "-7": 5.0 - }, - "demand_met_from_stock_cumul": { - "-7": 43.0 - }, - "fill_rate": { - "-7": 0.6825396825396826 - } - }, - { - "node": 7, - "period": 8, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 5.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 5.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 26.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 63.0 - }, - "demand_met_from_stock": { - "-7": 0.0 - }, - "demand_met_from_stock_cumul": { - "-7": 43.0 - }, - "fill_rate": { - "-7": 0.6825396825396826 - } - }, - { - "node": 7, - "period": 9, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 21.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 5.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 18.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 18.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 21.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 21.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 13.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 81.0 - }, - "demand_met_from_stock": { - "-7": 18.0 - }, - "demand_met_from_stock_cumul": { - "-7": 61.0 - }, - "fill_rate": { - "-7": 0.7530864197530864 - } - }, - { - "node": 7, - "period": 10, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 21.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 5.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 5.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 21.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 8.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 86.0 - }, - "demand_met_from_stock": { - "-7": 5.0 - }, - "demand_met_from_stock_cumul": { - "-7": 66.0 - }, - "fill_rate": { - "-7": 0.7674418604651163 - } - }, - { - "node": 7, - "period": 11, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 14.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 21.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 12.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 12.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 14.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 14.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 17.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 98.0 - }, - "demand_met_from_stock": { - "-7": 12.0 - }, - "demand_met_from_stock_cumul": { - "-7": 78.0 - }, - "fill_rate": { - "-7": 0.7959183673469388 - } - }, - { - "node": 7, - "period": 12, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 14.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 14.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 17.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 98.0 - }, - "demand_met_from_stock": { - "-7": 0.0 - }, - "demand_met_from_stock_cumul": { - "-7": 78.0 - }, - "fill_rate": { - "-7": 0.7959183673469388 - } - }, - { - "node": 7, - "period": 13, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 14.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 31.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 98.0 - }, - "demand_met_from_stock": { - "-7": 0.0 - }, - "demand_met_from_stock_cumul": { - "-7": 78.0 - }, - "fill_rate": { - "-7": 0.7959183673469388 - } - }, - { - "node": 7, - "period": 14, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 9.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 7.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 7.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 9.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 9.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 24.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 105.0 - }, - "demand_met_from_stock": { - "-7": 7.0 - }, - "demand_met_from_stock_cumul": { - "-7": 85.0 - }, - "fill_rate": { - "-7": 0.8095238095238095 - } - }, - { - "node": 7, - "period": 15, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 9.0, - 10.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 10.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 10.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 19.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 10.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 14.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 115.0 - }, - "demand_met_from_stock": { - "-7": 10.0 - }, - "demand_met_from_stock_cumul": { - "-7": 95.0 - }, - "fill_rate": { - "-7": 0.8260869565217391 - } - }, - { - "node": 7, - "period": 16, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 10.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 9.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 1.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 1.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 10.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 22.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 116.0 - }, - "demand_met_from_stock": { - "-7": 1.0 - }, - "demand_met_from_stock_cumul": { - "-7": 96.0 - }, - "fill_rate": { - "-7": 0.8275862068965517 - } - }, - { - "node": 7, - "period": 17, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 5.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 10.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 6.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 6.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 5.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 5.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 26.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 122.0 - }, - "demand_met_from_stock": { - "-7": 6.0 - }, - "demand_met_from_stock_cumul": { - "-7": 102.0 - }, - "fill_rate": { - "-7": 0.8360655737704918 - } - }, - { - "node": 7, - "period": 18, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 5.0, - 1.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 2.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 2.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 6.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 1.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 24.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 124.0 - }, - "demand_met_from_stock": { - "-7": 2.0 - }, - "demand_met_from_stock_cumul": { - "-7": 104.0 - }, - "fill_rate": { - "-7": 0.8387096774193549 - } - }, - { - "node": 7, - "period": 19, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 1.0, - 2.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 5.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 3.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 2.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 29.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 124.0 - }, - "demand_met_from_stock": { - "-7": 0.0 - }, - "demand_met_from_stock_cumul": { - "-7": 104.0 - }, - "fill_rate": { - "-7": 0.8387096774193549 - } - }, - { - "node": 7, - "period": 20, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 2.0, - 16.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 1.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 15.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 15.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 18.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 16.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 15.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 139.0 - }, - "demand_met_from_stock": { - "-7": 15.0 - }, - "demand_met_from_stock_cumul": { - "-7": 119.0 - }, - "fill_rate": { - "-7": 0.8561151079136691 - } - }, - { - "node": 7, - "period": 21, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 16.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 2.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 16.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 17.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 139.0 - }, - "demand_met_from_stock": { - "-7": 0.0 - }, - "demand_met_from_stock_cumul": { - "-7": 119.0 - }, - "fill_rate": { - "-7": 0.8561151079136691 - } - }, - { - "node": 7, - "period": 22, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 16.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 0.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 33.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 139.0 - }, - "demand_met_from_stock": { - "-7": 0.0 - }, - "demand_met_from_stock_cumul": { - "-7": 119.0 - }, - "fill_rate": { - "-7": 0.8561151079136691 - } - }, - { - "node": 7, - "period": 23, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0.0, - 6.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 8.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 8.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 6.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 6.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 25.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 147.0 - }, - "demand_met_from_stock": { - "-7": 8.0 - }, - "demand_met_from_stock_cumul": { - "-7": 127.0 - }, - "fill_rate": { - "-7": 0.8639455782312925 - } - }, - { - "node": 7, - "period": 24, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 6.0, - 0.0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0.0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0.0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0.0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 6.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0.0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 25.0 - }, - "disrupted": false, - "holding_cost_incurred": 0.0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0.0, - "revenue_earned": 0.0, - "total_cost_incurred": 0.0, - "demand_cumul": { - "-7": 147.0 - }, - "demand_met_from_stock": { - "-7": 0.0 - }, - "demand_met_from_stock_cumul": { - "-7": 127.0 - }, - "fill_rate": { - "-7": 0.8639455782312925 - } - }, - { - "node": 7, - "period": 25, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 6.0, - 0.0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 6.0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0.0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0.0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0 - } - }, - "raw_material_inventory": { - "-8": 0.0 - }, - "inventory_level": { - "-7": 25.0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-7": 147.0 - }, - "demand_met_from_stock": { - "-7": 0 - }, - "demand_met_from_stock_cumul": { - "-7": 127.0 - }, - "fill_rate": { - "-7": 0 - } - }, - { - "node": 7, - "period": 26, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0 - } - }, - "raw_material_inventory": { - "-8": 0 - }, - "inventory_level": { - "-7": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-7": 0 - }, - "demand_met_from_stock": { - "-7": 0 - }, - "demand_met_from_stock_cumul": { - "-7": 0 - }, - "fill_rate": { - "-7": 0 - } - }, - { - "node": 7, - "period": 27, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0 - } - }, - "raw_material_inventory": { - "-8": 0 - }, - "inventory_level": { - "-7": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-7": 0 - }, - "demand_met_from_stock": { - "-7": 0 - }, - "demand_met_from_stock_cumul": { - "-7": 0 - }, - "fill_rate": { - "-7": 0 - } - }, - { - "node": 7, - "period": 28, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0 - } - }, - "raw_material_inventory": { - "-8": 0 - }, - "inventory_level": { - "-7": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-7": 0 - }, - "demand_met_from_stock": { - "-7": 0 - }, - "demand_met_from_stock_cumul": { - "-7": 0 - }, - "fill_rate": { - "-7": 0 - } - }, - { - "node": 7, - "period": 29, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0 - } - }, - "raw_material_inventory": { - "-8": 0 - }, - "inventory_level": { - "-7": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-7": 0 - }, - "demand_met_from_stock": { - "-7": 0 - }, - "demand_met_from_stock_cumul": { - "-7": 0 - }, - "fill_rate": { - "-7": 0 - } - }, - { - "node": 7, - "period": 30, - "inbound_shipment_pipeline": { - "null": { - "-8": [ - 0, - 0, - 0 - ] - } - }, - "inbound_shipment": { - "null": { - "-8": 0 - } - }, - "inbound_order_pipeline": { - "4": { - "-7": [ - 0 - ] - } - }, - "inbound_order": { - "4": { - "-7": 0 - } - }, - "outbound_shipment": { - "4": { - "-7": 0 - } - }, - "on_order_by_predecessor": { - "null": { - "-8": 0 - } - }, - "backorders_by_successor": { - "4": { - "-7": 0 - } - }, - "outbound_disrupted_items": { - "4": { - "-7": 0 - } - }, - "inbound_disrupted_items": { - "null": { - "-8": 0 - } - }, - "order_quantity": { - "null": { - "-8": 0 - } - }, - "raw_material_inventory": { - "-8": 0 - }, - "inventory_level": { - "-7": 0 - }, - "disrupted": false, - "holding_cost_incurred": 0, - "stockout_cost_incurred": 0, - "in_transit_holding_cost_incurred": 0, - "revenue_earned": 0, - "total_cost_incurred": 0, - "demand_cumul": { - "-7": 0 - }, - "demand_met_from_stock": { - "-7": 0 - }, - "demand_met_from_stock_cumul": { - "-7": 0 - }, - "fill_rate": { - "-7": 0 - } - } - ] - } - ], - "_products": [ - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 24, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2022-07-17 13:25:41.527454" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:42.427125"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json index d0bed28..33a0b67 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json @@ -1,632 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "test_omit_state_vars_true", - "description": "this is test_omit_state_vars_true", - "data": { - "nodes": [ - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-5": -5 - }, - "_dummy_product": -5, - "_external_supplier_dummy_product": -6, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 3.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 2.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 33.3, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 1.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 35.14, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 1.0, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 12.0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 32.0, - "standard_deviation": 5.656854249492381, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 40.59, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 24, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2022-07-16 21:33:28.923480" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:42.193124"} \ No newline at end of file diff --git a/tests/additional_files/test_policy_TestFromDict_data.json b/tests/additional_files/test_policy_TestFromDict_data.json index 03f4bed..a801f63 100644 --- a/tests/additional_files/test_policy_TestFromDict_data.json +++ b/tests/additional_files/test_policy_TestFromDict_data.json @@ -1,800 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "missing_base_stock_level", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "missing_type", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2022-07-16 10:56:28.403019" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_base_stock_level", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_type", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.540582"} \ No newline at end of file diff --git a/tests/additional_files/test_sim_disruption_example_6_1_OP.csv b/tests/additional_files/test_sim_disruption_example_6_1_OP.csv index b58f641..b99207f 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_OP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_OP.csv @@ -1,101 +1,101 @@ -t,i=1 pr=-1,DISR,IO:EXT|-1,IOPL:EXT|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:EXT|-1,DMFS:-2,FR:-2,IL:-1,BO:EXT|-1,ODI:EXT|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:3|-3,OO:3|-3,IS:3|-3,ISPL:3|-3,IDI:3|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC,i=3 pr=-3,DISR,IO:2|-3,IOPL:2|-3,OQ:EXT|-4,OO:EXT|-4,IS:EXT|-4,ISPL:EXT|-4,IDI:EXT|-4,RM:-4,OS:2|-3,DMFS:-4,FR:-4,IL:-3,BO:2|-3,ODI:2|-3,HC,SC,ITHC,REV,TC -0,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,2.6018801180469200,0,0,18.213160826328400,0.0,0.0,0.0,18.213160826328400,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,1.6418801180469200,0,0,6.567520472187680,0,15.552479527812300,0.0,22.12,,False,3.8881198819530800,[],3.888119881953080,3.888119881953080,0,"[0, 3.888119881953079]",0,0,3.8881198819530800,3.8881198819530800,1.0,6.80188011804692,0,0,13.60376023609380,0,7.776239763906160,0.0,21.38 -1,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,1.1710978153106200,0,0,8.197684707174320,0.0,0.0,0.0,8.197684707174320,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,0.2110978153106170,0,0,0.8443912612424680,0,21.275608738757500,0.0,22.12,,False,5.318902184689380,[],5.318902184689380,9.207022066642460,0,"[3.888119881953079, 5.318902184689383]",0,0,5.318902184689380,5.318902184689380,1.0,1.482977933357540,0,0,2.965955866715070,0,10.637804369378800,0.0,13.60376023609380 -2,,False,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[5.279041292200137],0,0.0,5.279041292200140,5.279041292200140,1.0,1.210958707799860,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200140,[],0,0.0,5.318902184689380,[0],0,0.0,5.279041292200140,5.279041292200140,1.0,0.25095870779986300,0,0,1.0038348311994500,0,21.11616516880060,0.0,22.12,,False,0,[],0.0,5.318902184689380,3.888119881953080,"[5.318902184689383, 0.0]",0,0.0,0,0.0,1.0,5.371097815310620,0,0,10.742195630621200,0,0,0,10.742195630621200 -3,,False,6.010515284806530,[],6.010515284806530,6.010515284806530,5.279041292200140,[0.25095870779986296],0,0.0,6.010515284806530,6.010515284806530,1.0,0.4794847151934740,0,0,3.356393006354320,0.0,0.0,0.0,3.356393006354320,,False,6.010515284806530,[],11.289556577006700,11.289556577006700,0,[10.69],0,0.0,0.25095870779986300,0.25095870779986300,0.7189991228711110,-5.759556577006660,5.759556577006660,0,0.0,0.0,1.0038348311994500,0.0,1.0038348311994500,,False,11.289556577006700,[],11.289556577006700,11.289556577006700,5.318902184689380,"[0.0, 11.289556577006664]",0,0.0,10.69,10.69,0.9707484557578860,-0.5995565770066640,0.5995565770066640,0,0,0.0,21.38,0.0,21.38 -4,,False,4.419121865976490,[],4.419121865976490,10.178678442983100,0.25095870779986300,[10.178678442983148],0,0.0,0.7304434229933370,0.7304434229933370,0.8519536530165740,-3.6886784429831500,3.6886784429831500,0,0.0,136.92374380353400,0.0,0.0,136.92374380353400,,True,4.419121865976490,[],0,0.5995565770066640,10.69,[0.0],0,0.0,10.178678442983100,4.419121865976490,0.7688382642590530,0.511321557016851,0.0,0,2.045286228067400,0,40.714713771932600,0.0,42.76,,False,0,[],0.0,11.289556577006700,0.0,"[11.289556577006664, 0.0]",0,0.0,0.0,0.0,0.9707484557578860,-0.5995565770066640,0.5995565770066640,0.0,0.0,0.0,0.0,0.0,0.0 -5,,False,4.474830192821850,[],4.474830192821850,4.474830192821850,10.178678442983100,[0.511321557016851],0,0.0,8.163508635805000,4.4748301928218500,0.8744943233476220,2.0151698071781500,0.0,0,14.106188650247000,0.0,0.0,0.0,14.106188650247000,,True,4.474830192821850,[],0,0.5995565770066640,0.0,[0.5995565770066644],0,0.0,0.511321557016851,0.511321557016851,0.6691769430348540,-3.9635086358050000,3.9635086358050000,0,0.0,0.0,2.045286228067400,0.0,2.045286228067400,,False,0,[],0.0,1.77635683940025E-15,11.289556577006700,"[0.0, 0.0]",0,0.0,0.5995565770066640,0.0,0.9707484557578860,10.69,0.0,0.0,21.38,0,1.1991131540133300,0.0,22.579113154013300 -6,,False,2.3874509873064000,[],2.3874509873064000,6.3509596231114,0.511321557016851,[0.5995565770066644],0,0.0,2.3874509873064000,2.3874509873064000,0.8839234511809010,0.13904037688860000,0.0,0,0.9732826382202000,0.0,0.0,0.0,0.9732826382202000,,True,2.3874509873064000,[],0,0.0,0.5995565770066640,[0.0],0,0.0,0.5995565770066640,0.0,0.6189022852882180,-5.751403046104740,5.751403046104740,0,0.0,0.0,2.3982263080266600,0.0,2.3982263080266600,,False,0,[],0.0,1.77635683940025E-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.9707484557578860,10.69,0.0,0.0,21.38,0,0.0,0.0,21.38 -7,,False,5.950369682396900,[],5.950369682396900,11.70177272850160,0.5995565770066640,[0.0],0,0.0,0.7385969538952640,0.7385969538952640,0.7640911715518360,-5.211772728501640,5.211772728501640,0,0.0,193.4610036819810,0.0,0.0,193.4610036819810,,True,5.950369682396900,[],0,0.0,0.0,[0.0],0,0.0,0.0,0.0,0.5212914101556360,-11.70177272850160,11.70177272850160,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,1.77635683940025E-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.9707484557578860,10.69,0.0,0.0,21.38,0,0.0,0.0,21.38 -8,,False,4.571953935823770,[],4.571953935823770,16.273726664325400,0.0,[0.0],0,0.0,0.0,0.0,0.6815057241497330,-9.783726664325400,9.783726664325400,0,0.0,363.17193377975900,0.0,0.0,363.17193377975900,,False,4.571953935823770,[],21.803726664325400,21.803726664325400,0.0,[10.69],0,0.0,0.0,0.0,0.46494854697722600,-16.273726664325400,16.273726664325400,0.0,0.0,0.0,0.0,0.0,0.0,,False,21.803726664325400,[],21.803726664325400,21.803726664325400,0.0,"[0.0, 21.803726664325403]",0,0.0,10.69,10.69,0.7230922293337710,-11.113726664325400,11.113726664325400,0.0,0.0,0.0,21.38,0.0,21.38 -9,,False,4.257593162880830,[],4.257593162880830,20.531319827206200,0.0,[10.69],0,0.0,0.0,0.0,0.6191838795883770,-14.04131982720620,14.04131982720620,0,0.0,521.2137919858950,0.0,0.0,521.2137919858950,,False,4.257593162880830,[],4.257593162880830,15.371319827206200,10.69,[0.0],0,0.0,10.69,0.0,0.42243026716395700,-9.841319827206230,9.841319827206230,0.0,0.0,0.0,42.76,0.0,42.76,,False,4.257593162880830,[],4.257593162880830,26.061319827206200,0.0,"[21.803726664325403, 4.257593162880829]",0,0.0,0.0,0.0,0.6569674120018440,-15.371319827206200,15.371319827206200,0.0,0.0,0.0,0.0,0.0,0.0 -10,,False,4.3705250390757500,[],4.370525039075750,14.21184486628200,10.69,[0.0],0,0.0,10.69,0.0,0.5660473702871350,-7.72184486628198,7.72184486628198,0,0.0,286.6348814363870,0.0,0.0,286.6348814363870,,False,4.370525039075750,[],4.370525039075750,19.74184486628200,0.0,[19.741844866281976],0,0.0,0.0,0.0,0.3861785646241460,-14.211844866282000,14.211844866282000,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.370525039075750,[],4.370525039075740,8.628118201956580,21.803726664325400,"[4.257593162880829, 4.370525039075743]",0,0.0,19.741844866282000,4.370525039075740,0.68640544309999,2.0618817980434300,8.88178419700125E-16,0.0,4.123763596086850,0,39.48368973256400,0.0,43.607453328650800 -11,,False,5.597720466912610,[],5.597720466912610,19.809565333194600,0.0,[19.741844866281976],0,0.0,0.0,0.0,0.5099923358026250,-13.31956533319460,13.31956533319460,0,0.0,494.4222651681830,0.0,0.0,494.4222651681830,,False,5.597720466912610,[],5.597720466912610,5.597720466912610,19.741844866282000,[5.597720466912608],0,0.0,19.741844866282000,5.530000000000000,0.4457665730738350,-0.06772046691261040,0.06772046691261040,0.0,0.0,0.0,78.9673794651279,0.0,78.9673794651279,,False,5.597720466912610,[],5.597720466912610,9.968245505988350,4.257593162880830,"[4.370525039075743, 5.597720466912605]",0,0.0,5.597720466912610,5.597720466912610,0.7174603593913030,0.7217544940116470,0.0,0.0,1.4435089880232900,0,11.195440933825200,0.0,12.63894992184850 -12,,False,5.122219165222680,[],5.122219165222680,5.189939632135290,19.741844866282000,[5.1899396321352915],0,0.0,18.44178449841730,5.122219165222680,0.5507059333862910,1.3000603678647100,0.0,0,9.100422575052960,0.0,0.0,0.0,9.100422575052960,,False,5.122219165222680,[],5.122219165222680,5.122219165222680,5.597720466912610,[5.092279533087391],0,0.0,5.1899396321352900,5.122219165222680,0.4918165399621050,0.4077808347773160,0.0,0.0,1.6311233391092700,0,20.759758528541200,0.0,22.39088186765040,,False,5.122219165222680,[],5.122219165222690,10.719939632135300,4.370525039075740,"[5.597720466912605, 5.122219165222685]",0,0.0,5.092279533087390,5.092279533087390,0.7404502695477110,-0.02993963213529230,0.02993963213529230,0.0,0.0,0.0,10.184559066174800,0.0,10.184559066174800 -13,,False,4.484564337907550,[],4.484564337907550,4.484564337907550,5.1899396321352900,[4.484564337907547],0,0.0,4.484564337907550,4.484564337907550,0.5811731790556950,2.0054356620924500,0.0,0,14.038049634647200,0.0,0.0,0.0,14.038049634647200,,False,4.484564337907550,[],4.484564337907550,4.51450397004284,5.092279533087390,[4.514503970042839],0,0.0,4.484564337907550,4.484564337907550,0.5262771560098450,1.01549602995716,0.0,0.0,4.06198411982864,0,17.938257351630200,0.0,22.00024147145880,,False,4.484564337907550,[],4.484564337907550,9.606783503130230,5.597720466912610,"[5.122219165222685, 4.484564337907545]",0,0.0,4.514503970042840,4.484564337907550,0.7580506920521030,1.083216496869770,0.0,0.0,2.166432993739530,0,9.029007940085680,0.0,11.19544093382520 -14,,False,4.399746149894090,[],4.3997461498940900,4.3997461498940900,4.484564337907550,[4.3997461498940895],0,0.0,4.399746149894090,4.399746149894090,0.6072991090408840,2.0902538501059100,0.0,0,14.631776950741400,0.0,0.0,0.0,14.631776950741400,,True,4.3997461498940900,[],0,8.88178419700125E-16,4.514503970042840,[0.0],0,0.0,4.3997461498940900,4.3997461498940900,0.5558274360672850,1.1302538501059100,0.0,0.0,4.521015400423640,0,17.598984599576400,0.0,22.120000000000000,,False,0,[],0.0,4.48456433790755,5.122219165222690,"[4.484564337907545, 0.0]",0,0.0,0.0,0.0,0.7580506920521030,6.205435662092450,0.0,0.0,12.410871324184900,0,0.0,0.0,12.410871324184900 -15,,False,5.947439821046640,[],5.947439821046640,5.947439821046640,4.3997461498940900,[1.1302538501059098],0,0.0,5.947439821046640,5.947439821046640,0.6378373079433960,0.5425601789533610,0.0,0,3.7979212526735300,0.0,0.0,0.0,3.7979212526735300,,True,5.947439821046640,[],0,8.88178419700125E-16,0.0,[0.0],0,0.0,1.1302538501059100,1.1302538501059100,0.5273821804494680,-4.817185970940730,4.817185970940730,0.0,0.0,0.0,4.521015400423640,0.0,4.521015400423640,,False,0,[],0.0,4.44089209850063E-15,4.484564337907550,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7580506920521030,10.690000000000000,0.0,0.0,21.380000000000000,0,0.0,0.0,21.380000000000000 -16,,False,3.978447805324400,[],3.978447805324400,8.79563377626513,1.1302538501059100,[0.0],0,0.0,1.6728140290592700,1.6728140290592700,0.6270890619471990,-2.3056337762651300,2.3056337762651300,0,0.0,85.58512577496160,0.0,0.0,85.58512577496160,,False,3.978447805324400,[],14.325633776265100,14.325633776265100,0.0,[10.689999999999996],0,0.0,0.0,0.0,0.5013046264189610,-8.79563377626513,8.79563377626513,0.0,0.0,0.0,0.0,0.0,0.0,,False,14.325633776265100,[],14.32563377626510,14.325633776265100,0.0,"[0.0, 14.32563377626513]",0,0.0,10.690000000000000,10.690000000000000,0.7559433140983410,-3.635633776265140,3.635633776265140,0.0,0.0,0.0,21.380000000000000,0.0,21.380000000000000 -17,,False,4.838244613602480,[],4.838244613602480,13.63387838986760,0.0,[10.689999999999996],0,0.0,0.0,0.0,0.5915190280488040,-7.143878389867610,7.143878389867610,0,0.0,265.18076583188600,0.0,0.0,265.18076583188600,,False,4.838244613602480,[],4.838244613602480,8.473878389867610,10.690000000000000,[0.0],0,0.0,10.690000000000000,1.894366223734870,0.4950785059986830,-2.9438783898676100,2.9438783898676100,0.0,0.0,0.0,42.760000000000000,0.0,42.760000000000000,,False,4.838244613602480,[],4.838244613602480,19.163878389867600,0.0,"[14.32563377626513, 4.838244613602478]",0,0.0,0.0,0.0,0.713064350105174,-8.473878389867620,8.473878389867620,0.0,0.0,0.0,0.0,0.0,0.0 -18,,False,4.770549546168040,[],4.770549546168040,7.714427936035660,10.690000000000000,[0.0],0,0.0,10.690000000000000,3.5461216101323900,0.5995602409386370,-1.2244279360356600,1.2244279360356600,0,0.0,45.450764985643600,0.0,0.0,45.450764985643600,,True,4.770549546168040,[],0,8.473878389867610,0.0,[8.473878389867615],0,0.0,0.0,0.0,0.4688559469904750,-7.714427936035660,7.714427936035660,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],1.77635683940025E-15,4.838244613602480,14.32563377626510,"[4.838244613602478, 1.7763568394002505e-15]",0,0.0,8.473878389867620,0.0,0.713064350105174,5.851755386397520,0.0,0.0,11.703510772795000,0,16.94775677973520,0.0,28.65126755253030 -19,,False,5.389348913256120,[],5.389348913256120,13.10377684929180,0.0,[8.473878389867615],0,0.0,0.0,0.0,0.5657099277978390,-6.61377684929178,6.61377684929178,0,0.0,245.50339664571100,0.0,0.0,245.50339664571100,,False,5.389348913256120,[],10.159898459424200,10.159898459424200,8.473878389867620,[10.159898459424166],0,0.0,8.473878389867620,0.759450453831958,0.45034097890129300,-4.629898459424170,4.629898459424170,0.0,0.0,0.0,33.89551355947050,0.0,33.89551355947050,,False,10.159898459424200,[],10.159898459424200,10.159898459424200,4.838244613602480,"[1.7763568394002505e-15, 10.159898459424168]",0,0.0,10.159898459424200,10.159898459424200,0.7436042381916570,0.5301015405758280,0.0,0.0,1.0602030811516600,0,20.319796918848300,0.0,21.38000000000000 -20,,False,7.77831304155244,[],7.77831304155244,12.408211500976600,8.473878389867620,[10.159898459424166],0,0.0,8.473878389867620,1.860101540575840,0.5411042519986520,-5.918211500976610,5.918211500976610,0,0.0,219.68401091625200,0.0,0.0,219.68401091625200,,False,7.77831304155244,[],7.778313041552440,7.77831304155244,10.159898459424200,[0.5301015405758296],0,0.0,10.159898459424200,5.530000000000000,0.46997682478278600,-2.2483130415524400,2.2483130415524400,0.0,0.0,0.0,40.639593837696700,0.0,40.639593837696700,,False,7.778313041552440,[],7.778313041552440,17.938211500976600,1.77635683940025E-15,"[10.159898459424168, 7.778313041552441]",0,0.0,0.5301015405758300,0.5301015405758300,0.6927117683988530,-7.2482115009766100,7.2482115009766100,0.0,0.0,0.0,1.0602030811516600,0.0,1.0602030811516600 -21,,False,6.193639724282320,[],6.193639724282320,8.441952765834760,10.159898459424200,[0.5301015405758296],0,0.0,10.159898459424200,4.241686958447560,0.5492399834598990,-1.951952765834760,1.951952765834760,0,0.0,72.45648666778610,0.0,0.0,72.45648666778610,,False,6.193639724282320,[],6.193639724282320,13.441851225258900,0.5301015405758300,[10.159898459424168],0,0.0,0.5301015405758300,0.0,0.4433762321342170,-7.911851225258930,7.911851225258930,0.0,0.0,0.0,2.1204061623033200,0.0,2.1204061623033200,,False,6.193639724282320,[],6.193639724282310,13.971952765834800,10.159898459424200,"[7.778313041552441, 6.193639724282314]",0,0.0,10.159898459424200,2.9116869584475500,0.6801125077994360,-3.2819527658347600,3.2819527658347600,0.0,0.0,0.0,20.319796918848300,0.0,20.319796918848300 -22,,False,5.2186383160538600,[],5.2186383160538600,13.13048954131280,0.5301015405758300,[10.159898459424168],0,0.0,0.5301015405758300,0.0,0.5242390899620340,-6.640489541312790,6.640489541312790,0,0.0,246.4949717735310,0.0,0.0,246.4949717735310,,False,5.2186383160538600,[],5.218638316053860,8.50059108188862,10.159898459424200,[7.778313041552441],0,0.0,10.159898459424200,2.2480472341652400,0.4428025338272300,-2.970591081888620,2.970591081888620,0.0,0.0,0.0,40.63959383769670,0.0,40.63959383769670,,False,5.218638316053860,[],5.218638316053860,11.412278040336200,7.778313041552440,"[6.193639724282314, 5.218638316053863]",0,0.0,7.778313041552440,4.49636027571768,0.6883734883999070,-0.7222780403361820,0.7222780403361820,0.0,0.0,0.0,15.556626083104900,0.0,15.556626083104900 -23,,False,5.881761038948610,[],5.881761038948610,8.852352120837230,10.159898459424200,[7.778313041552441],0,0.0,10.159898459424200,3.5194089181113800,0.5278561419536360,-2.3623521208372300,2.3623521208372300,0,0.0,87.69051072547800,0.0,0.0,87.69051072547800,,False,5.881761038948610,[],5.8817610389486100,6.604039079284790,7.778313041552440,[6.193639724282314],0,0.0,7.778313041552440,4.80772195966382,0.46108246841846400,-1.0740390792847900,1.0740390792847900,0.0,0.0,0.0,31.113252166209800,0.0,31.113252166209800,,False,5.8817610389486100,[],5.88176103894861,11.10039935500250,6.193639724282310,"[5.218638316053863, 5.88176103894861]",0,0.0,6.193639724282310,5.4713616839461300,0.7001757322863790,-0.4103993550024790,0.4103993550024790,0.0,0.0,0.0,12.387279448564600,0.0,12.387279448564600 -24,,False,3.9909146571348900,[],3.9909146571348900,5.064953736419680,7.778313041552440,[5.064953736419681],0,0.0,6.353266777972120,3.9909146571348900,0.5429885406090350,1.4250462635803200,0.0,0,9.975323845062220,0.0,0.0,0.0,9.975323845062220,,True,3.9909146571348900,[],0,0.41039935500247700,6.193639724282310,[0.4103993550024789],0,0.0,5.064953736419680,3.9909146571348900,0.4783549898995640,1.1286859878626300,0.0,0.0,4.514743951450530,0,20.259814945678700,0.0,24.774558897129300,,False,0,[],0.0,5.881761038948620,5.218638316053860,"[5.88176103894861, 0.0]",0,0.0,0.4103993550024790,0.0,0.7001757322863790,4.8082389610513800,0.0,0.0,9.616477922102770,0,0.8207987100049580,0.0,10.437276632107700 -25,,False,3.4167057864631100,[],3.4167057864631100,3.4167057864631100,5.064953736419680,[1.5390853428651123],0,0.0,3.4167057864631100,3.4167057864631100,0.5551935918554300,3.0732942135368900,0.0,0,21.5130594947582,0.0,0.0,0.0,21.5130594947582,,True,3.4167057864631100,[],0,-1.77635683940025E-15,0.4103993550024790,[0.0],0,0.0,1.5390853428651100,1.5390853428651100,0.4776099891583980,-1.8776204435980000,1.8776204435980000,0.0,0.0,0.0,6.156341371460450,0.0,6.156341371460450,,False,0,[],0.0,7.105427357601E-15,5.88176103894861,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7001757322863790,10.690000000000000,0.0,0.0,21.38000000000000,0,0.0,0.0,21.38000000000000 -26,,False,3.6533219026386500,[],3.6533219026386500,5.530942346236660,1.5390853428651100,[0.0],0,0.0,3.6533219026386500,3.6533219026386500,0.5675427141912660,0.9590576537633440,0.0,0,6.713403576343410,0.0,0.0,0.0,6.713403576343410,,False,3.6533219026386500,[],11.060942346236700,11.060942346236700,0.0,[10.689999999999994],0,0.0,0.0,0.0,0.4643501438033420,-5.530942346236650,5.530942346236650,0.0,0.0,0.0,0.0,0.0,0.0,,False,11.060942346236700,[],11.060942346236700,11.060942346236700,0.0,"[0.0, 11.060942346236654]",0,0.0,10.690000000000000,10.690000000000000,0.722558866414261,-0.3709423462366620,0.3709423462366620,0.0,0.0,0.0,21.38000000000000,0.0,21.38000000000000 -27,,False,4.119408733952890,[],4.119408733952890,9.650351080189550,0.0,[9.650351080189548],0,0.0,0.9590576537633440,0.9590576537633440,0.55738216021744,-3.1603510801895500,3.1603510801895500,0,0.0,117.31223209663600,0.0,0.0,117.31223209663600,,False,4.119408733952890,[],4.119408733952890,4.490351080189550,10.690000000000000,[0.0],0,0.0,9.650351080189550,4.119408733952890,0.48060959652746200,1.039648919810450,0.0,0.0,4.158595679241790,0,38.60140432075820,0.0,42.76000000000000,,False,4.119408733952890,[],4.119408733952890,15.180351080189600,0.0,"[11.060942346236654, 4.119408733952893]",0,0.0,0.0,0.0,0.7006258600054190,-4.490351080189560,4.490351080189560,0.0,0.0,0.0,0.0,0.0,0.0 -28,,False,5.582122794713040,[],5.58212279471304,5.58212279471304,9.650351080189550,[1.039648919810447],0,0.0,8.742473874902590,5.582122794713040,0.5748690338263080,0.9078772052869600,0.0,0,6.3551404370087200,0.0,0.0,0.0,6.3551404370087200,,False,5.58212279471304,[],5.58212279471304,10.072473874902600,0.0,[10.072473874902595],0,0.0,1.039648919810450,1.039648919810450,0.46897993365564200,-4.542473874902590,4.542473874902590,0.0,0.0,0.0,4.158595679241790,0.0,4.158595679241790,,False,5.58212279471304,[],5.58212279471304,9.701531528665940,11.060942346236700,"[4.119408733952893, 5.58212279471304]",0,0.0,10.072473874902600,5.58212279471304,0.7124534848260110,0.988468471334059,0.0,0.0,1.976936942668120,0,20.14494774980520,0.0,22.12188469247330 -29,,False,5.887748459593360,[],5.887748459593360,10.430222334496000,1.039648919810450,[10.072473874902595],0,0.0,1.947526125097410,1.947526125097410,0.56510435665742,-3.9402223344959500,3.9402223344959500,0,0.0,146.26105305649000,0.0,0.0,146.26105305649000,,False,5.887748459593360,[],5.887748459593360,5.887748459593360,10.072473874902600,[5.107877205286952],0,0.0,10.072473874902600,5.530000000000000,0.48779212067614600,-0.35774845959335500,0.35774845959335500,0.0,0.0,0.0,40.28989549961040,0.0,40.28989549961040,,False,5.887748459593360,[],5.887748459593360,11.469871254306400,4.119408733952890,"[5.58212279471304, 5.887748459593356]",0,0.0,5.107877205286950,5.107877205286950,0.7186576890116220,-0.7798712543064050,0.7798712543064050,0.0,0.0,0.0,10.215754410573900,0.0,10.215754410573900 -30,,False,4.792834109895430,[],4.792834109895430,5.1505825694887800,10.072473874902600,[5.107877205286952],0,0.0,8.733056444391380,4.792834109895430,0.5788199169267190,1.3394174305112200,0.0,0,9.375922013578530,0.0,0.0,0.0,9.375922013578530,,False,4.792834109895430,[],4.792834109895430,5.572705364201830,5.107877205286950,[5.5727053642018305],0,0.0,5.107877205286950,4.750128745693600,0.5036649146067890,-0.042705364201828500,0.042705364201828500,0.0,0.0,0.0,20.43150882114780,0.0,20.43150882114780,,False,4.792834109895430,[],4.792834109895430,10.680582569488800,5.58212279471304,"[5.887748459593356, 4.792834109895425]",0,0.0,5.5727053642018300,4.792834109895430,0.7275305473208180,0.009417430511209800,0.0,0.0,0.018834861022419600,0,11.145410728403700,0.0,11.16424558942610 -31,,False,4.37652260501504,[],4.37652260501504,4.41922796921687,5.107877205286950,[4.419227969216869],0,0.0,4.37652260501504,4.37652260501504,0.5906096210610940,2.0707720307831300,0.0,0,14.495404215481900,0.0,0.0,0.0,14.495404215481900,,False,4.37652260501504,[],4.37652260501504,4.3765226050150400,5.5727053642018300,[4.37652260501504],0,0.0,4.419227969216870,4.37652260501504,0.5175583631421450,1.1534773949849600,0.0,0.0,4.613909579939850,0,17.676911876867500,0.0,22.290821456807300,,False,4.37652260501504,[],4.376522605015040,9.169356714910470,5.887748459593360,"[4.792834109895425, 4.376522605015042]",0,0.0,4.37652260501504,4.37652260501504,0.7351575324557810,1.520643285089530,0.0,0.0,3.04128657017905,0,8.75304521003008,0.0,11.79433178020910 -32,,False,3.491846710452520,[],3.491846710452520,3.491846710452520,4.419227969216870,[3.491846710452517],0,0.0,3.491846710452520,3.491846710452520,0.599553090376401,2.9981532895474800,0.0,0,20.987073026832400,0.0,0.0,0.0,20.987073026832400,,False,3.491846710452520,[],3.491846710452520,3.4918467104525200,4.37652260501504,[3.491846710452517],0,0.0,3.491846710452520,3.491846710452520,0.528097697229204,2.038153289547490,0.0,0.0,8.15261315818994,0,13.967386841810100,0.0,22.120000000000000,,False,3.491846710452520,[],3.491846710452520,7.868369315467570,4.792834109895430,"[4.376522605015042, 3.491846710452517]",0,0.0,3.491846710452520,3.491846710452520,0.7409432338394120,2.8216306845324300,0.0,0.0,5.6432613690648700,0,6.983693420905030,0.0,12.6269547899699 -33,,False,6.09964697578482,[],6.09964697578482,6.099646975784820,3.491846710452520,[5.530000000000002],0,0.0,6.09964697578482,6.09964697578482,0.6142727654377230,0.39035302421517900,0.0,0,2.7324711695062600,0.0,0.0,0.0,2.7324711695062600,,True,6.09964697578482,[],0,-1.77635683940025E-15,3.491846710452520,[0.0],0,0.0,5.530000000000000,5.530000000000000,0.5420110917137450,-0.5696469757848180,0.5696469757848180,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,0,[],0.0,3.491846710452520,4.376522605015040,"[3.491846710452517, 0.0]",0,0.0,0.0,0.0,0.7409432338394120,7.198153289547480,0.0,0.0,14.39630657909500,0,0.0,0.0,14.39630657909500 -34,,False,6.179716344700700,[],6.1797163447007,6.749363320485520,5.530000000000000,[0.0],0,0.0,5.920353024215180,5.920353024215180,0.6266148725839870,-0.25936332048551900,0.25936332048551900,0,0.0,9.627566456422480,0.0,0.0,9.627566456422480,,True,6.1797163447007,[],0,-1.77635683940025E-15,0.0,[0.0],0,0.0,0.0,0.0,0.5225509603607920,-6.749363320485520,6.749363320485520,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,7.105427357601E-15,3.491846710452520,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7409432338394120,10.690000000000000,0.0,0.0,21.380000000000000,0,0.0,0.0,21.380000000000000 -35,,False,4.101792060544320,[],4.101792060544320,10.851155381029800,0.0,[0.0],0,0.0,0.0,0.0,0.612029581330767,-4.361155381029840,4.361155381029840,0,0.0,161.88608774382800,0.0,0.0,161.88608774382800,,False,4.101792060544320,[],16.381155381029800,16.381155381029800,0.0,[10.689999999999992],0,0.0,0.0,0.0,0.510387894520872,-10.85115538102980,10.85115538102980,0.0,0.0,0.0,0.0,0.0,0.0,,False,16.381155381029800,[],16.381155381029800,16.38115538102990,0.0,"[0.0, 16.381155381029842]",0,0.0,10.690000000000000,10.690000000000000,0.7327291106373240,-5.69115538102985,5.69115538102985,0.0,0.0,0.0,21.380000000000000,0.0,21.380000000000000 -36,,False,3.962170123484520,[],3.962170123484520,14.81332550451440,0.0,[10.689999999999992],0,0.0,0.0,0.0,0.5985712947477670,-8.32332550451436,8.32332550451436,0,0.0,308.961842727573,0.0,0.0,308.961842727573,,False,3.962170123484520,[],3.9621701234845200,9.653325504514370,10.690000000000000,[0.0],0,0.0,10.690000000000000,0.0,0.4991646681238400,-4.123325504514370,4.123325504514370,0.0,0.0,0.0,42.76000000000000,0.0,42.76000000000000,,False,3.9621701234845200,[],3.9621701234845200,20.343325504514400,0.0,"[16.381155381029842, 3.9621701234845164]",0,0.0,0.0,0.0,0.7166166895069240,-9.653325504514370,9.653325504514370,0.0,0.0,0.0,0.0,0.0,0.0 -37,,False,4.924196254971820,[],4.924196254971820,9.047521759486180,10.690000000000000,[0.0],0,0.0,10.690000000000000,2.3666744954856300,0.5954336236585110,-2.557521759486180,2.557521759486180,0,0.0,94.93520771212710,0.0,0.0,94.93520771212710,,False,4.924196254971820,[],4.9241962549718200,14.577521759486200,0.0,[14.577521759486181],0,0.0,0.0,0.0,0.48588601600356100,-9.04752175948618,9.04752175948618,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.9241962549718200,[],4.924196254971820,8.88636637845634,16.381155381029800,"[3.9621701234845164, 4.924196254971817]",0,0.0,14.577521759486200,4.924196254971820,0.7241551805841750,1.8036336215436600,8.88178419700125E-16,0.0,3.6072672430873200,0,29.155043518972400,0.0,32.762310762059700 -38,,False,6.495434252883470,[],6.495434252883470,15.542956012369700,0.0,[14.577521759486181],0,0.0,0.0,0.0,0.575248182362086,-9.052956012369660,9.052956012369660,0,0.0,336.0457271791620,0.0,0.0,336.0457271791620,,False,6.495434252883470,[],6.495434252883470,6.495434252883470,14.577521759486200,[5.765803745028176],0,0.0,14.577521759486200,5.530000000000000,0.49827597805580100,-0.9654342528834730,0.9654342528834730,0.0,0.0,0.0,58.310087037944700,0.0,58.310087037944700,,False,6.495434252883470,[],6.495434252883470,11.419630507855300,3.9621701234845200,"[4.924196254971817, 6.495434252883471]",0,0.0,5.765803745028180,5.765803745028180,0.7296984077335040,-0.7296305078552970,0.7296305078552980,0.0,0.0,0.0,11.531607490056400,0.0,11.531607490056400 -39,,False,5.33818125199332,[],5.33818125199332,6.303615504876800,14.577521759486200,[5.765803745028176],0,0.0,14.391137264363000,5.338181251993320,0.5867612500199890,0.18638449512320600,8.88178419700125E-16,0,1.3046914658624400,0.0,0.0,0.0,1.3046914658624400,,False,5.33818125199332,[],5.338181251993320,6.067811759848620,5.765803745028180,[4.924196254971817],0,0.0,5.765803745028180,4.8003694921447000,0.5091445898478740,-0.5378117598486170,0.5378117598486170,0.0,0.0,0.0,23.063214980112700,0.0,23.063214980112700,,False,5.338181251993320,[],5.338181251993320,11.833615504876800,4.924196254971820,"[6.495434252883471, 5.338181251993321]",0,0.0,4.924196254971820,4.19456574711652,0.7312181646449330,-1.1436155048768000,1.1436155048768000,0.0,0.0,0.0,9.848392509943630,0.0,9.848392509943630 -40,,False,4.6013616099848000,[],4.601361609984800,5.139173369833420,5.765803745028180,[4.924196254971817],0,0.0,4.601361609984800,4.6013616099848000,0.5961957682040810,1.3508266301665800,0.0,0,9.455786411166080,0.0,0.0,0.0,9.455786411166080,,False,4.601361609984800,[],4.601361609984800,5.744977114861600,4.924196254971820,[5.744977114861597],0,0.0,4.924196254971820,4.386384495123200,0.5192844920884330,-0.21497711486159700,0.21497711486159700,0.0,0.0,0.0,19.69678501988730,0.0,19.69678501988730,,False,4.601361609984800,[],4.601361609984800,9.939542861978130,6.495434252883470,"[5.338181251993321, 4.601361609984799]",0,0.0,5.744977114861600,4.601361609984800,0.7373546344540540,0.7504571380218750,0.0,0.0,1.5009142760437500,0,11.489954229723200,0.0,12.990868505766900 -41,,False,4.939135912525250,[],4.939135912525250,5.154113027386850,4.924196254971820,[5.154113027386851],0,0.0,4.939135912525250,4.939135912525250,0.6058549290646000,1.3358869726131500,0.0,0,9.351208808292030,0.0,0.0,0.0,9.351208808292030,,False,4.939135912525250,[],4.939135912525250,4.939135912525250,5.744977114861600,[4.939135912525254],0,0.0,5.154113027386850,4.939135912525250,0.5307834018408460,0.5908640874747460,0.0,0.0,2.3634563498989900,0,20.616452109547400,0.0,22.97990845944640,,False,4.939135912525250,[],4.939135912525250,9.540497522510060,5.338181251993320,"[4.601361609984799, 4.939135912525252]",0,0.0,4.939135912525250,4.939135912525250,0.7436372180312370,1.1495024774899400,0.0,0.0,2.2990049549798800,0,9.878271825050510,0.0,12.177276780030400 -42,,False,3.581249541408600,[],3.581249541408600,3.5812495414086000,5.154113027386850,[3.581249541408597],0,0.0,3.581249541408600,3.581249541408600,0.6125744817300520,2.9087504585914000,0.0,0,20.361253210139800,0.0,0.0,0.0,20.361253210139800,,True,3.581249541408600,[],0,-8.88178419700125E-16,4.939135912525250,[0.0],0,0.0,3.581249541408600,3.581249541408600,0.5387828058048530,1.948750458591400,0.0,0.0,7.795001834365610,0,14.324998165634400,0.0,22.12,,False,0,[],1.77635683940025E-15,4.939135912525260,4.601361609984800,"[4.939135912525252, 1.7763568394002505e-15]",0,0.0,0.0,0.0,0.7436372180312370,5.750864087474740,0.0,0.0,11.501728174949500,0,0.0,0.0,11.501728174949500 -43,,False,6.0424916173394200,[],6.0424916173394200,6.042491617339420,3.581249541408600,[1.948750458591403],0,0.0,6.0424916173394200,6.0424916173394200,0.6234072072585020,0.447508382660577,0.0,0,3.132558678624040,0.0,0.0,0.0,3.132558678624040,,True,6.0424916173394200,[],0,-8.88178419700125E-16,0.0,[0.0],0,0.0,1.948750458591400,1.948750458591400,0.532735583669347,-4.093741158748020,4.093741158748020,0.0,0.0,0.0,7.795001834365610,0.0,7.795001834365610,,False,0,[],0.0,7.105427357601E-15,4.939135912525250,"[1.7763568394002505e-15, 0.0]",0,0.0,0.0,0.0,0.7436372180312370,10.690000000000000,0.0,0.0,21.38000000000000,0,0.0,0.0,21.38000000000000 -44,,False,4.465583546326500,[],4.465583546326500,8.559324705074510,1.948750458591400,[0.0],0,0.0,2.39625884125198,2.39625884125198,0.6216498712989950,-2.0693247050745100,2.0693247050745100,0,0.0,76.81333305236600,0.0,0.0,76.81333305236600,,False,4.465583546326500,[],14.089324705074500,14.089324705074500,0.0,[10.689999999999996],0,0.0,0.0,0.0,0.5219500747266640,-8.559324705074510,8.559324705074510,0.0,0.0,0.0,0.0,0.0,0.0,,False,14.089324705074500,[],14.089324705074500,14.089324705074500,1.77635683940025E-15,"[0.0, 14.089324705074512]",0,0.0,10.690000000000000,10.690000000000000,0.7446013218641660,-3.399324705074520,3.399324705074520,0.0,0.0,0.0,21.380000000000000,0.0,21.380000000000000 -45,,False,3.5049461291856600,[],3.5049461291856600,12.064270834260200,0.0,[10.689999999999996],0,0.0,0.0,0.0,0.6119261813948160,-5.574270834260180,5.574270834260180,0,0.0,206.91693336773800,0.0,0.0,206.91693336773800,,False,3.5049461291856600,[],3.5049461291856600,6.904270834260180,10.690000000000000,[0.0],0,0.0,10.690000000000000,2.1306752949254800,0.5232945644509050,-1.374270834260180,1.374270834260180,0.0,0.0,0.0,42.760000000000000,0.0,42.760000000000000,,False,3.5049461291856600,[],3.5049461291856600,17.59427083426020,0.0,"[14.089324705074512, 3.5049461291856634]",0,0.0,0.0,0.0,0.7329544564977830,-6.904270834260180,6.904270834260180,0.0,0.0,0.0,0.0,0.0,0.0 -46,,False,4.7878385782883700,[],4.787838578288380,6.162109412548560,10.690000000000000,[0.0],0,0.0,10.362109412548600,4.787838578288370,0.6200446839196190,0.32789058745144300,8.88178419700125E-16,0,2.2952341121601000,0.0,0.0,0.0,2.2952341121601000,,False,4.787838578288380,[],4.7878385782883700,11.692109412548600,0.0,[11.692109412548554],0,0.0,0.0,0.0,0.5123472445364120,-6.162109412548560,6.162109412548560,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.7878385782883700,[],4.787838578288380,8.292784707474040,14.089324705074500,"[3.5049461291856634, 4.787838578288375]",0,0.0,11.692109412548600,4.787838578288370,0.7385410480564510,2.3972152925259600,8.88178419700125E-16,0.0,4.794430585051920,0,23.384218825097100,0.0,28.17864941014900 -47,,False,4.573131205960280,[],4.5731312059602800,10.735240618508800,0.0,[10.735240618508833],0,0.0,0.32789058745144300,0.3278905874514420,0.6093023797259460,-4.245240618508830,4.245240618508840,0,0.0,157.58333175904800,0.0,0.0,157.58333175904800,,False,4.5731312059602800,[],4.573131205960280,4.57313120596028,11.692109412548600,[4.5731312059602764],0,0.0,10.735240618508800,4.5731312059602800,0.5219005570672950,0.9568687940397210,0.0,0.0,3.8274751761588800,0,42.94096247403530,0.0,46.768437650194200,,False,4.573131205960280,[],4.573131205960270,9.360969784248650,3.5049461291856600,"[4.787838578288375, 4.573131205960274]",0,0.0,4.5731312059602800,4.573131205960280,0.7436631335033790,1.3290302157513500,0.0,0.0,2.6580604315026900,0,9.146262411920550,0.0,11.804322843423200 -48,,False,5.501448331524810,[],5.501448331524810,5.501448331524810,10.735240618508800,[5.501448331524805],0,0.0,9.74668895003364,5.501448331524810,0.6182980000173830,0.9885516684751940,0.0,0,6.919861679326360,0.0,0.0,0.0,6.919861679326360,,False,5.501448331524810,[],5.501448331524800,5.5014483315248100,4.5731312059602800,[5.501448331524804],0,0.0,5.501448331524810,5.501448331524810,0.5329085612807670,0.02855166847519280,0.0,0.0,0.114206673900771,0,22.00579332609920,0.0,22.12000000000000,,False,5.501448331524800,[],5.501448331524800,10.074579537485100,4.787838578288380,"[4.573131205960274, 5.501448331524804]",0,0.0,5.501448331524800,5.501448331524800,0.7495651636106590,0.6154204625149160,0.0,0.0,1.2308409250298300,0,11.002896663049600,0.0,12.23373758807940 -49,,False,6.158186652932030,[],6.158186652932030,6.158186652932030,5.501448331524810,[5.529999999999997],0,0.0,6.158186652932030,6.158186652932030,0.6278884569901800,0.33181334706797100,0.0,0,2.322693429475800,0.0,0.0,0.0,2.322693429475800,,False,6.158186652932030,[],6.158186652932030,6.158186652932030,5.501448331524800,[5.18855166847519],0,0.0,5.530000000000000,5.530000000000000,0.5420814588624140,-0.6281866529320320,0.6281866529320320,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,6.158186652932030,[],6.15818665293203,11.65963498445680,4.573131205960270,"[5.501448331524804, 6.15818665293203]",0,0.0,5.18855166847519,5.18855166847519,0.7519013386748720,-0.9696349844568380,0.9696349844568380,0.0,0.0,0.0,10.37710333695040,0.0,10.37710333695040 -50,,False,6.371862133549780,[],6.371862133549780,7.00004878648181,5.530000000000000,[5.18855166847519],0,0.0,5.861813347067970,5.861813347067970,0.635288954621796,-0.5100487864818090,0.5100487864818090,0,0.0,18.933010954204700,0.0,0.0,18.933010954204700,,False,6.371862133549780,[],6.371862133549780,7.34149711800662,5.18855166847519,[5.501448331524804],0,0.0,5.18855166847519,4.560365015543160,0.5464807976818930,-1.8114971180066200,1.8114971180066200,0.0,0.0,0.0,20.75420667390080,0.0,20.75420667390080,,False,6.371862133549780,[],6.371862133549780,12.530048786481800,5.501448331524800,"[6.15818665293203, 6.371862133549775]",0,0.0,5.501448331524800,4.531813347067970,0.7508706014041490,-1.8400487864818100,1.8400487864818100,0.0,0.0,0.0,11.002896663049600,0.0,11.002896663049600 -51,,False,5.175553293954830,[],5.175553293954830,6.987050411961450,5.18855166847519,[5.501448331524804],0,0.0,5.18855166847519,4.678502881993380,0.6407070778958460,-0.4970504119614510,0.4970504119614510,0,0.0,18.450511292009100,0.0,0.0,18.450511292009100,,False,5.175553293954830,[],5.175553293954830,7.015602080436650,5.501448331524800,[6.15818665293203],0,0.0,5.501448331524800,3.689951213518190,0.54983801371327,-1.4856020804366500,1.4856020804366500,0.0,0.0,0.0,22.005793326099200,0.0,22.005793326099200,,False,5.175553293954830,[],5.175553293954830,11.54741542750460,6.15818665293203,"[6.371862133549775, 5.175553293954829]",0,0.0,6.15818665293203,4.318137866450220,0.7525537358832490,-0.8574154275046120,0.8574154275046120,0.0,0.0,0.0,12.31637330586410,0.0,12.31637330586410 -52,,False,4.743369817307450,[],4.743369817307450,6.228971897744090,5.501448331524800,[6.15818665293203],0,0.0,5.240420229268900,4.743369817307450,0.6472271195608930,0.26102810225590700,0.0,0,1.8271967157913500,0.0,0.0,0.0,1.8271967157913500,,False,4.743369817307450,[],4.743369817307450,5.600785244812060,6.15818665293203,[5.600785244812057],0,0.0,6.15818665293203,4.672584572495380,0.5577362389128690,-0.07078524481206210,0.07078524481206210,0.0,0.0,0.0,24.63274661172810,0.0,24.63274661172810,,False,4.743369817307450,[],4.743369817307450,9.91892311126228,6.371862133549780,"[5.175553293954829, 4.743369817307447]",0,0.0,5.600785244812060,4.743369817307450,0.7570441108743650,0.771076888737718,0.0,0.0,1.542153777475440,0,11.201570489624100,0.0,12.74372426709960 -53,,False,4.632174275867240,[],4.6321742758672400,4.702959520679300,6.15818665293203,[4.7029595206793],0,0.0,4.632174275867240,4.632174275867240,0.6533699124189780,1.7870404793207000,0.0,0,12.509283355244900,0.0,0.0,0.0,12.509283355244900,,False,4.6321742758672400,[],4.632174275867240,4.632174275867240,5.600785244812060,[4.632174275867237],0,0.0,4.7029595206793,4.6321742758672400,0.5654373259964740,0.8978257241327570,0.0,0.0,3.5913028965310300,0,18.8118380827172,0.0,22.403140979248200,,False,4.632174275867240,[],4.632174275867240,9.37554409317469,5.175553293954830,"[4.743369817307447, 4.632174275867238]",0,0.0,4.632174275867240,4.632174275867240,0.7612746733220590,1.3144559068253100,0.0,0.0,2.628911813650620,0,9.264348551734470,0.0,11.893260365385100 -54,,False,2.34482395243653,[],2.3448239524365300,2.3448239524365300,4.7029595206793,[2.3448239524365295],0,0.0,2.34482395243653,2.34482395243653,0.6563985756582040,4.145176047563470,0.0,0,29.016232332944300,0.0,0.0,0.0,29.016232332944300,,False,2.3448239524365300,[],2.3448239524365300,2.3448239524365400,4.632174275867240,[2.3448239524365295],0,0.0,2.3448239524365300,2.3448239524365300,0.569234295858724,3.1851760475634600,0.0,0.0,12.740704190253900,0,9.379295809746120,0.0,22.120000000000000,,False,2.3448239524365300,[],2.3448239524365300,6.9769982283037700,4.743369817307450,"[4.632174275867238, 2.3448239524365277]",0,0.0,2.3448239524365300,2.3448239524365300,0.7633605240519470,3.713001771696230,0.0,0.0,7.426003543392460,0,4.689647904873060,0.0,12.115651448265500 -55,,False,5.345517943888770,[],5.345517943888770,5.345517943888770,2.3448239524365300,[5.345517943888766],0,0.0,5.345517943888770,5.345517943888770,0.6631090561169770,1.144482056111230,0.0,0,8.011374392778620,0.0,0.0,0.0,8.011374392778620,,False,5.345517943888770,[],5.345517943888770,5.3455179438887700,2.3448239524365300,[5.345517943888766],0,0.0,5.345517943888770,5.345517943888770,0.5776470806586910,0.1844820561112280,0.0,0.0,0.7379282244449110,0,21.382071775555100,0.0,22.120000000000000,,False,5.345517943888770,[],5.345517943888770,7.690341896325300,4.632174275867240,"[2.3448239524365277, 5.345517943888766]",0,0.0,5.345517943888770,5.345517943888770,0.7679820548915400,2.9996581036747,0.0,0.0,5.9993162073494,0,10.691035887777500,0.0,16.690352095126900 -56,,False,5.45293632653351,[],5.45293632653351,5.452936326533510,5.345517943888770,[5.45293632653351],0,0.0,5.45293632653351,5.45293632653351,0.6696895963397010,1.0370636734664900,0.0,0,7.2594457142654200,0.0,0.0,0.0,7.2594457142654200,,False,5.45293632653351,[],5.45293632653351,5.452936326533520,5.345517943888770,[5.344482056111228],0,0.0,5.45293632653351,5.45293632653351,0.5858969621837800,0.07706367346648420,0.0,0.0,0.30825469386593700,0,21.81174530613400,0.0,22.120000000000000,,False,5.45293632653351,[],5.45293632653351,10.798454270422300,2.3448239524365300,"[5.345517943888766, 5.45293632653351]",0,0.0,5.344482056111230,5.344482056111230,0.7721255977551350,-0.10845427042228200,0.10845427042228200,0.0,0.0,0.0,10.688964112222500,0.0,10.688964112222500 -57,,False,4.833939091648940,[],4.833939091648940,4.833939091648940,5.45293632653351,[4.833939091648935],0,0.0,4.833939091648940,4.833939091648940,0.6753118367860000,1.6560609083510600,0.0,0,11.592426358457400,0.0,0.0,0.0,11.592426358457400,,False,4.833939091648940,[],4.833939091648930,4.942393362071220,5.344482056111230,[4.942393362071216],0,0.0,4.833939091648940,4.833939091648940,0.5929454439220060,0.5876066379287770,0.0,0.0,2.3504265517151100,0,19.33575636659570,0.0,21.68618291831090,,False,4.833939091648930,[],4.833939091648930,10.28687541818250,5.345517943888770,"[5.45293632653351, 4.833939091648934]",0,0.0,4.942393362071220,4.833939091648930,0.7760042666277480,0.4031245818175510,0.0,0.0,0.8062491636351010,0,9.884786724142430,0.0,10.691035887777500 -58,,False,4.056943191532740,[],4.056943191532740,4.05694319153274,4.833939091648940,[4.056943191532737],0,0.0,4.056943191532740,4.056943191532740,0.6798847325558660,2.433056808467260,0.0,0,17.031397659270800,0.0,0.0,0.0,17.031397659270800,,False,4.056943191532740,[],4.056943191532740,4.056943191532750,4.942393362071220,[4.056943191532737],0,0.0,4.056943191532740,4.056943191532740,0.5986783848434370,1.4730568084672600,0.0,0.0,5.892227233869030,0,16.227772766130900,0.0,22.120000000000000,,False,4.056943191532740,[],4.056943191532740,8.890882283181680,5.45293632653351,"[4.833939091648934, 4.056943191532735]",0,0.0,4.056943191532740,4.056943191532740,0.7791590140366660,1.7991177168183200,0.0,0.0,3.5982354336366500,0,8.113886383065470,0.0,11.71212181670210 -59,,False,6.403958738659290,[],6.403958738659290,6.403958738659300,4.056943191532740,[5.529999999999993],0,0.0,6.403958738659290,6.403958738659290,0.6868466913665810,0.08604126134070440,0.0,0,0.6022888293849310,0.0,0.0,0.0,0.6022888293849310,,False,6.403958738659290,[],6.403958738659290,6.4039587386593,4.056943191532740,[6.403958738659291],0,0.0,5.529999999999990,5.529999999999990,0.6044384182426640,-0.8739587386592990,0.8739587386592990,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,6.403958738659290,[],6.403958738659290,10.460901930192000,4.833939091648930,"[4.056943191532735, 6.403958738659293]",0,0.0,6.403958738659290,6.403958738659290,0.7839619272506160,0.2290980698079660,0.0,0.0,0.4581961396159320,0,12.807917477318600,0.0,13.266113616934500 -60,,False,4.98144919548836,[],4.981449195488360,5.855407934147660,5.529999999999990,[5.855407934147658],0,0.0,4.98144919548836,4.98144919548836,0.6920562819190760,0.6345920658523370,0.0,0,4.442144460966360,0.0,0.0,0.0,4.442144460966360,,False,4.981449195488360,[],4.981449195488360,4.981449195488370,6.403958738659290,[4.286041261340701],0,0.0,5.855407934147660,4.981449195488360,0.6110189454874370,0.548550804511633,0.0,0.0,2.194203218046530,0,23.421631736590600,0.0,25.615834954637200,,False,4.981449195488360,[],4.981449195488360,11.385407934147700,4.056943191532740,"[6.403958738659293, 4.981449195488358]",0,0.0,4.286041261340700,4.286041261340700,0.7852335521477960,-0.6954079341476570,0.6954079341476570,0.0,0.0,0.0,8.572082522681400,0.0,8.572082522681400 -61,,False,3.326495378009780,[],3.326495378009780,3.3264953780097800,5.855407934147660,[3.326495378009777],0,0.0,3.326495378009780,3.326495378009780,0.6954396647987810,3.163504621990220,0.0,0,22.14453235393150,0.0,0.0,0.0,22.14453235393150,,False,3.326495378009780,[],3.3264953780097800,4.021903312157440,4.286041261340700,[4.021903312157435],0,0.0,3.326495378009780,3.326495378009780,0.615292686963863,1.5080966878425600,0.0,0.0,6.032386751370230,0,13.305981512039100,0.0,19.338368263409300,,False,3.3264953780097800,[],3.326495378009780,8.30794457349814,6.403958738659290,"[4.981449195488358, 3.326495378009776]",0,0.0,4.021903312157440,3.3264953780097800,0.7875931947712160,2.382055426501860,0.0,0.0,4.764110853003720,0,8.04380662431487,0.0,12.807917477318600 -62,,False,5.1023476825496700,[],5.1023476825496700,5.102347682549670,3.326495378009780,[5.1023476825496665],0,0.0,5.1023476825496700,5.1023476825496700,0.700487188039663,1.3876523174503300,0.0,0,9.713566222152310,0.0,0.0,0.0,9.713566222152310,,False,5.1023476825496700,[],5.1023476825496700,5.1023476825496700,4.021903312157440,[5.1023476825496665],0,0.0,5.1023476825496700,5.1023476825496700,0.621668497859278,0.4276523174503260,0.0,0.0,1.710609269801300,0,20.409390730198700,0.0,22.12000000000000,,False,5.1023476825496700,[],5.102347682549670,8.428843060559450,4.981449195488360,"[3.326495378009776, 5.102347682549668]",0,0.0,5.1023476825496700,5.1023476825496700,0.7911134440026380,2.26115693944055,0.0,0.0,4.5223138788811,0,10.204695365099300,0.0,14.727009243980400 -63,,False,4.5673907194519900,[],4.5673907194519900,4.567390719451990,5.1023476825496700,[4.5673907194519865],0,0.0,4.5673907194519900,4.5673907194519900,0.7048656627138930,1.9226092805480100,0.0,0,13.458264963836100,0.0,0.0,0.0,13.458264963836100,,False,4.5673907194519900,[],4.5673907194519900,4.5673907194519900,5.1023476825496700,[4.5673907194519865],0,0.0,4.5673907194519900,4.5673907194519900,0.6271991958275700,0.9626092805480060,0.0,0.0,3.850437122192020,0,18.269562877807900,0.0,22.12000000000000,,False,4.5673907194519900,[],4.567390719451990,9.669738402001660,3.326495378009780,"[5.102347682549668, 4.567390719451985]",0,0.0,4.5673907194519900,4.5673907194519900,0.7941670846440370,1.0202615979983400,0.0,0.0,2.0405231959966800,0,9.134781438903970,0.0,11.175304634900700 -64,,False,5.477754099433530,[],5.477754099433530,5.477754099433530,4.5673907194519900,[5.477754099433527],0,0.0,5.477754099433530,5.477754099433530,0.7099509242175170,1.0122459005664700,0.0,0,7.08572130396528,0.0,0.0,0.0,7.08572130396528,,True,5.477754099433530,[],0,7.99360577730113E-15,4.5673907194519900,[0.0],0,0.0,5.477754099433530,5.477754099433530,0.6336226760481740,0.05224590056646510,0.0,0.0,0.2089836022658600,0,21.91101639773410,0.0,22.12000000000000,,False,0,[],0.0,4.567390719451990,5.102347682549670,"[4.567390719451985, 0.0]",0,0.0,0.0,0.0,0.7941670846440370,6.122609280548010,0.0,0.0,12.245218561096000,0,0.0,0.0,12.245218561096000 -65,,False,4.7409713552611100,[],4.7409713552611100,4.740971355261120,5.477754099433530,[0.05224590056646505],0,0.0,4.7409713552611100,4.7409713552611100,0.7142128032429590,1.7490286447388900,0.0,0,12.243200513172200,0.0,0.0,0.0,12.243200513172200,,True,4.7409713552611100,[],0,7.99360577730113E-15,0.0,[0.0],0,0.0,0.05224590056646510,0.05224590056646510,0.6244743727036990,-4.688725454694640,4.688725454694640,0.0,0.0,0.0,0.2089836022658600,0.0,0.2089836022658600,,False,0,[],0.0,7.99360577730113E-15,4.567390719451990,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7941670846440370,10.690000000000000,0.0,0.0,21.380000000000000,0,0.0,0.0,21.380000000000000 -66,,False,5.339820964186640,[],5.339820964186640,10.028546418881300,0.05224590056646510,[0.0],0,0.0,1.8012745453053500,1.8012745453053500,0.7080770443298270,-3.5385464188812900,3.5385464188812900,0,0.0,131.35084306887400,0.0,0.0,131.35084306887400,,True,5.339820964186640,[],0,7.99360577730113E-15,0.0,[0.0],0,0.0,0.0,0.0,0.6143077895062520,-10.028546418881300,10.028546418881300,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,7.99360577730113E-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7941670846440370,10.690000000000000,0.0,0.0,21.380000000000000,0,0.0,0.0,21.380000000000000 -67,,False,4.992619850055430,[],4.992619850055430,15.021166268936700,0.0,[0.0],0,0.0,0.0,0.0,0.6974605327250540,-8.531166268936720,8.531166268936720,0,0.0,316.676891902931,0.0,0.0,316.676891902931,,True,4.992619850055430,[],0,7.99360577730113E-15,0.0,[0.0],0,0.0,0.0,0.0,0.605097201720048,-15.021166268936700,15.021166268936700,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,7.99360577730113E-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7941670846440370,10.690000000000000,0.0,0.0,21.380000000000000,0,0.0,0.0,21.380000000000000 -68,,False,4.224663894043060,[],4.224663894043050,19.245830162979800,0.0,[0.0],0,0.0,0.0,0.0,0.6887225875727230,-12.755830162979800,12.755830162979800,0,0.0,473.4964156498090,0.0,0.0,473.4964156498090,,False,4.224663894043050,[],24.775830162979800,24.77583016297980,0.0,[10.689999999999992],0,0.0,0.0,0.0,0.5975164055138450,-19.245830162979800,19.245830162979800,0.0,0.0,0.0,0.0,0.0,0.0,,False,24.775830162979800,[],24.77583016297980,24.775830162979800,0.0,"[0.0, 24.77583016297976]",0,0.0,10.690000000000000,10.690000000000000,0.7675186857659370,-14.08583016297980,14.08583016297980,0.0,0.0,0.0,21.380000000000000,0.0,21.380000000000000 -69,,False,5.773140855889250,[],5.773140855889250,25.018971018869000,0.0,[10.689999999999992],0,0.0,0.0,0.0,0.6771299648851620,-18.528971018869000,18.528971018869000,0,0.0,687.795404220418,0.0,0.0,687.795404220418,,False,5.773140855889250,[],5.773140855889250,19.858971018869000,10.690000000000000,[0.0],0,0.0,10.690000000000000,0.0,0.5874589711219200,-14.328971018869000,14.328971018869000,0.0,0.0,0.0,42.76000000000000,0.0,42.76000000000000,,False,5.773140855889250,[],5.773140855889250,30.548971018869000,0.0,"[24.77583016297976, 5.773140855889252]",0,0.0,0.0,0.0,0.7545997621088890,-19.858971018869000,19.858971018869000,0.0,0.0,0.0,0.0,0.0,0.0 -70,,False,6.405205305878190,[],6.405205305878190,20.734176324747200,10.690000000000000,[0.0],0,0.0,10.690000000000000,0.0,0.6647164518924120,-14.244176324747200,14.244176324747200,0,0.0,528.7438251746170,0.0,0.0,528.7438251746170,,False,6.405205305878190,[],6.405205305878180,26.26417632474720,0.0,[24.77583016297976],0,0.0,0.0,0.0,0.5766893553185980,-20.73417632474720,20.73417632474720,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.405205305878180,[],6.405205305878180,12.178346161767400,24.77583016297980,"[5.773140855889252, 6.405205305878182]",0,0.0,24.77583016297980,4.916859144110740,0.754838729339219,-1.488346161767440,1.488346161767440,0.0,0.0,0.0,49.55166032595950,0.0,49.55166032595950 -71,,False,6.392325753491900,[],6.392325753491910,27.12650207823910,0.0,[24.77583016297976],0,0.0,0.0,0.0,0.6527735176467010,-20.636502078239100,20.636502078239100,0,0.0,766.0269571442360,0.0,0.0,766.0269571442360,,False,6.392325753491910,[],6.392325753491900,7.880671915259360,24.77583016297980,[5.773140855889252],0,0.0,24.77583016297980,4.041653838232550,0.5776879088272540,-2.3506719152593600,2.3506719152593600,0.0,0.0,0.0,99.10332065191900,0.0,99.10332065191900,,False,6.392325753491900,[],6.392325753491900,12.797531059370100,5.773140855889250,"[6.405205305878182, 6.392325753491902]",0,0.0,5.773140855889250,4.28479469412181,0.75331987800412,-2.1075310593700900,2.1075310593700900,0.0,0.0,0.0,11.546281711778500,0.0,11.546281711778500 -72,,False,4.5065675177966700,[],4.506567517796680,6.857239433056040,24.77583016297980,[5.773140855889252],0,0.0,24.77583016297980,4.139328084740640,0.6560974069101840,-0.3672394330560370,0.3672394330560370,0,0.0,13.631927755040100,0.0,0.0,13.631927755040100,,True,4.506567517796680,[],0,2.107531059370100,5.773140855889250,[2.1075310593700944],0,0.0,5.773140855889250,3.422468940629900,0.5799613053937520,-1.0840985771667800,1.0840985771667800,0.0,0.0,0.0,23.092563423557000,0.0,23.092563423557000,,False,0,[],0.0,6.392325753491910,6.405205305878180,"[6.392325753491902, 0.0]",0,0.0,2.1075310593700900,0.0,0.75331987800412,4.2976742465080900,0.0,0.0,8.595348493016180,0,4.215062118740190,0.0,12.810410611756400 -73,,False,5.923162608341950,[],5.923162608341950,7.007261185508740,5.773140855889250,[2.1075310593700944],0,0.0,5.773140855889250,5.405901422833220,0.6602472705154970,-0.5172611855087380,0.5172611855087380,0,0.0,19.200735206084300,0.0,0.0,19.200735206084300,,True,5.923162608341950,[],0,9.76996261670138E-15,2.1075310593700900,[0.0],0,0.0,2.1075310593700900,1.0234324822033100,0.5733755771139560,-4.899730126138640,4.899730126138640,0.0,0.0,0.0,8.430124237480380,0.0,8.430124237480380,,False,0,[],0.0,9.76996261670138E-15,6.392325753491900,"[0.0, 0.0]",0,0.0,0.0,0.0,0.75331987800412,10.69000000000000,0.0,0.0,21.38000000000000,0,0.0,0.0,21.38000000000000 -74,,False,6.706604953678460,[],6.706604953678460,11.606335079817100,2.1075310593700900,[0.0],0,0.0,2.1075310593700900,1.5902698738613600,0.6526377069112110,-5.116335079817110,5.116335079817110,0,0.0,189.91835816281100,0.0,0.0,189.91835816281100,,True,6.706604953678460,[],0,9.76996261670138E-15,0.0,[0.0],0,0.0,0.0,0.0,0.56306393383992,-11.6063350798171,11.6063350798171,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,9.76996261670138E-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.75331987800412,10.69000000000000,0.0,0.0,21.38000000000000,0,0.0,0.0,21.38000000000000 -75,,False,5.873589415635380,[],5.873589415635380,17.479924495452500,0.0,[0.0],0,0.0,0.0,0.0,0.6425178413999830,-10.989924495452500,10.989924495452500,0,0.0,407.9459972711960,0.0,0.0,407.9459972711960,,True,5.873589415635380,[],0,9.76996261670138E-15,0.0,[0.0],0,0.0,0.0,0.0,0.5543330082063840,-17.47992449545250,17.47992449545250,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,9.76996261670138E-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.75331987800412,10.69000000000000,0.0,0.0,21.38000000000000,0,0.0,0.0,21.38000000000000 -76,,False,5.649086732629110,[],5.6490867326291000,23.12901122808160,0.0,[0.0],0,0.0,0.0,0.0,0.633076505833836,-16.639011228081600,16.639011228081600,0,0.0,617.6400967863890,0.0,0.0,617.6400967863890,,True,5.6490867326291000,[],0,9.76996261670138E-15,0.0,[0.0],0,0.0,0.0,0.0,0.5461874850650120,-23.129011228081600,23.129011228081600,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,9.76996261670138E-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.75331987800412,10.69000000000000,0.0,0.0,21.38000000000000,0,0.0,0.0,21.38000000000000 -77,,False,3.7771264633246900,[],3.777126463324700,26.906137691406300,0.0,[0.0],0,0.0,0.0,0.0,0.6269170603779500,-20.416137691406300,20.416137691406300,0,0.0,757.8470311050010,0.0,0.0,757.8470311050010,,True,3.777126463324700,[],0,9.76996261670138E-15,0.0,[0.0],0,0.0,0.0,0.0,0.5408734163988340,-26.90613769140630,26.90613769140630,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,9.76996261670138E-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.75331987800412,10.69000000000000,0.0,0.0,21.38000000000000,0,0.0,0.0,21.38000000000000 -78,,False,5.620548215961740,[],5.620548215961730,32.52668590736800,0.0,[0.0],0,0.0,0.0,0.0,0.6179702113323730,-26.036685907368000,26.036685907368000,0,0.0,966.4817808815010,0.0,0.0,966.4817808815010,,False,5.620548215961730,[],38.056685907368000,38.05668590736800,0.0,[10.68999999999999],0,0.0,0.0,0.0,0.5331545120730070,-32.52668590736800,32.52668590736800,0.0,0.0,0.0,0.0,0.0,0.0,,False,38.056685907368000,[],38.056685907368000,38.05668590736800,0.0,"[0.0, 38.056685907368006]",0,0.0,10.69000000000000,10.69000000000000,0.7076695980221970,-27.366685907368000,27.366685907368000,0.0,0.0,0.0,21.38000000000000,0.0,21.38000000000000 -79,,False,4.839062623136940,[],4.839062623136940,37.36574853050500,0.0,[10.68999999999999],0,0.0,0.0,0.0,0.6104694299630820,-30.875748530505000,30.875748530505000,0,0.0,1146.1077854523400,0.0,0.0,1146.1077854523400,,False,4.839062623136940,[],4.839062623136930,32.205748530505000,10.69000000000000,[0.0],0,0.0,10.69000000000000,0.0,0.5266832043015720,-26.675748530505000,26.675748530505000,0.0,0.0,0.0,42.76000000000000,0.0,42.76000000000000,,False,4.839062623136930,[],4.839062623136940,42.895748530504900,0.0,"[38.056685907368006, 4.839062623136936]",0,0.0,0.0,0.0,0.699080065971754,-32.20574853050500,32.20574853050500,0.0,0.0,0.0,0.0,0.0,0.0 -80,,False,4.643254974231810,[],4.643254974231810,31.31900350473680,10.69000000000000,[0.0],0,0.0,10.69000000000000,0.0,0.6034413719384960,-24.829003504736800,24.829003504736800,0,0.0,921.6526100958290,0.0,0.0,921.6526100958290,,False,4.643254974231810,[],4.6432549742318100,36.849003504736800,0.0,[36.84900350473676],0,0.0,0.0,0.0,0.5206197391406220,-31.319003504736800,31.319003504736800,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.6432549742318100,[],4.643254974231810,9.482317597368750,38.056685907368000,"[4.839062623136936, 4.643254974231812]",0,0.0,36.84900350473680,4.643254974231810,0.7025444208653860,1.2076824026312500,1.77635683940025E-15,0.0,2.415364805262500,0,73.69800700947350,0.0,76.11337181473600 -81,,False,5.556121798533970,[],5.5561217985339600,36.875125303270700,0.0,[36.84900350473676],0,0.0,0.0,0.0,0.5952413738201290,-30.385125303270700,30.385125303270700,0,0.0,1127.8958512574100,0.0,0.0,1127.8958512574100,,False,5.5561217985339600,[],5.556121798533970,5.556121798533970,36.84900350473680,[5.556121798533968],0,0.0,36.84900350473680,5.5299999999999900,0.527070018457871,-0.026121798533973000,0.026121798533973000,0.0,0.0,0.0,147.39601401894700,0.0,147.39601401894700,,False,5.556121798533970,[],5.55612179853397,10.199376772765800,4.839062623136940,"[4.643254974231812, 5.55612179853397]",0,0.0,5.556121798533970,5.556121798533970,0.7065864625659170,0.4906232272342180,0.0,0.0,0.981246454468435,0,11.112243597067900,0.0,12.09349005153640 -82,,False,6.363886524417110,[],6.3638865244171000,6.390008322951080,36.84900350473680,[5.556121798533968],0,0.0,36.74901182768780,6.363886524417100,0.6014446059258020,0.09999167704891840,8.88178419700125E-16,0,0.699941739342429,0.0,0.0,0.0,0.699941739342429,,False,6.3638865244171000,[],6.363886524417100,6.363886524417110,5.556121798533970,[5.13387820146603],0,0.0,5.556121798533970,5.530000000000000,0.5323098305345920,-0.8338865244171090,0.8338865244171090,0.0,0.0,0.0,22.22448719413590,0.0,22.22448719413590,,False,6.363886524417100,[],6.363886524417110,11.920008322951100,4.643254974231810,"[5.55612179853397, 6.363886524417106]",0,0.0,5.13387820146603,5.13387820146603,0.7081210935930740,-1.2300083229510700,1.2300083229510700,0.0,0.0,0.0,10.26775640293210,0.0,10.26775640293210 -83,,False,7.539162716269330,[],7.539162716269330,8.373049240686450,5.556121798533970,[5.13387820146603],0,0.0,5.656113475582890,5.6561134755828900,0.6040978146472440,-1.8830492406864500,1.8830492406864500,0,0.0,69.8987878142809,0.0,0.0,69.8987878142809,,False,7.539162716269330,[],7.539162716269330,8.76917103922041,5.13387820146603,[5.55612179853397],0,0.0,5.13387820146603,4.299991677048920,0.5329882471030360,-3.2391710392204100,3.2391710392204100,0.0,0.0,0.0,20.53551280586410,0.0,20.53551280586410,,False,7.539162716269330,[],7.539162716269330,13.903049240686400,5.55612179853397,"[6.363886524417106, 7.539162716269334]",0,0.0,5.55612179853397,4.326113475582900,0.7057261703712690,-3.213049240686440,3.213049240686440,0.0,0.0,0.0,11.11224359706790,0.0,11.11224359706790 -84,,False,3.559958552316200,[],3.559958552316200,6.7991295915366200,5.13387820146603,[5.55612179853397],0,0.0,5.13387820146603,3.2508289607795800,0.6066785360758230,-0.3091295915366190,0.3091295915366200,0,0.0,11.474890437839300,0.0,0.0,11.474890437839300,,True,3.559958552316200,[],0,3.2130492406864400,5.55612179853397,[3.213049240686437],0,0.0,5.55612179853397,2.316950759313560,0.5339722840394190,-1.2430077930026400,1.2430077930026400,0.0,0.0,0.0,22.22448719413590,0.0,22.22448719413590,,False,0,[],0.0,7.539162716269330,6.363886524417110,"[7.539162716269334, 0.0]",0,0.0,3.213049240686440,0.0,0.7057261703712690,3.1508372837306700,0.0,0.0,6.301674567461340,0,6.426098481372870,0.0,12.727773048834200 -85,,False,6.19072725611364,[],6.19072725611364,7.433735049116290,5.55612179853397,[3.213049240686437],0,0.0,5.55612179853397,5.24699220699735,0.6101261744079390,-0.943735049116289,0.9437350491162910,0,0.0,35.031445023196600,0.0,0.0,35.031445023196600,,True,6.19072725611364,[],0,3.5527136788005E-15,3.213049240686440,[0.0],0,0.0,3.213049240686440,1.970041447683790,0.530884332043969,-4.220685808429850,4.220685808429850,0.0,0.0,0.0,12.852196962745700,0.0,12.852196962745700,,False,0,[],0.0,-8.88178419700125E-16,7.539162716269330,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7057261703712690,10.690000000000000,0.0,0.0,21.380000000000000,0,0.0,0.0,21.380000000000000 -86,,False,5.617640845511150,[],5.617640845511150,9.838326653941000,3.213049240686440,[0.0],0,0.0,3.213049240686440,2.269314191570150,0.6074828814473500,-3.3483266539410000,3.3483266539410000,0,0.0,124.28988539429000,0.0,0.0,124.28988539429000,,False,5.617640845511150,[],15.36832665394100,15.368326653941000,0.0,[10.690000000000003],0,0.0,0.0,0.0,0.5240776996934550,-9.838326653940990,9.838326653940990,0.0,0.0,0.0,0.0,0.0,0.0,,False,15.36832665394100,[],15.368326653941000,15.368326653941000,0.0,"[0.0, 15.368326653940988]",0,0.0,10.690000000000000,10.690000000000000,0.7053705141887700,-4.678326653940990,4.678326653940990,0.0,0.0,0.0,21.380000000000000,0.0,21.380000000000000 -87,,False,6.21707079698011,[],6.217070796980110,16.055397450921100,0.0,[10.690000000000003],0,0.0,0.0,0.0,0.5989836588689780,-9.565397450921110,9.56539745092111,0,0.0,355.06755337819100,0.0,0.0,355.06755337819100,,True,6.217070796980110,[],0,4.6783266539409900,10.690000000000000,[0.0],0,0.0,10.690000000000000,0.8516733460590090,0.5186619933943370,-5.365397450921100,5.365397450921100,0.0,0.0,0.0,42.76000000000000,0.0,42.76000000000000,,False,0,[],0.0,15.368326653941000,0.0,"[15.368326653940988, 0.0]",0,0.0,0.0,0.0,0.7053705141887700,-4.678326653940990,4.678326653940990,0.0,0.0,0.0,0.0,0.0,0.0 -88,,False,5.226288269498880,[],5.226288269498880,10.59168572042000,10.690000000000000,[0.0],0,0.0,10.690000000000000,1.1246025490788900,0.5945221511012550,-4.1016857204199800,4.101685720419980,0,0.0,152.25457394199000,0.0,0.0,152.25457394199000,,True,5.226288269498880,[],0,4.6783266539409900,0.0,[4.678326653940987],0,0.0,0.0,0.0,0.512632801619559,-10.59168572042000,10.59168572042000,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,-1.77635683940025E-15,15.368326653941000,"[0.0, 0.0]",0,0.0,4.678326653940990,0.0,0.7053705141887700,10.690000000000000,0.0,0.0,21.380000000000000,0,9.356653307881970,0.0,30.736653307882000 -89,,False,5.847401432576640,[],5.847401432576640,16.43908715299660,0.0,[4.678326653940987],0,0.0,0.0,0.0,0.5868890636335060,-9.949087152996620,9.94908715299662,0,0.0,369.31011511923400,0.0,0.0,369.31011511923400,,True,5.847401432576640,[],0,3.5527136788005E-15,4.678326653940990,[0.0],0,0.0,4.678326653940990,0.0,0.5060510939298600,-11.760760499055600,11.760760499055600,0.0,0.0,0.0,18.713306615763900,0.0,18.713306615763900,,False,0,[],0.0,-1.77635683940025E-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7053705141887700,10.690000000000000,0.0,0.0,21.380000000000000,0,0.0,0.0,21.380000000000000 -90,,False,5.174833011991470,[],5.17483301199147,16.935593511047100,4.678326653940990,[0.0],0,0.0,4.678326653940990,0.0,0.580295580617983,-10.445593511047100,10.445593511047100,0,0.0,387.7404311300690,0.0,0.0,387.7404311300690,,True,5.17483301199147,[],0,3.5527136788005E-15,0.0,[0.0],0,0.0,0.0,0.0,0.5003657958052790,-16.935593511047100,16.935593511047100,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,-1.77635683940025E-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7053705141887700,10.690000000000000,0.0,0.0,21.380000000000000,0,0.0,0.0,21.380000000000000 -91,,False,3.783145107640760,[],3.7831451076407600,20.718738618687900,0.0,[0.0],0,0.0,0.0,0.0,0.5755682890098320,-14.228738618687900,14.228738618687900,0,0.0,528.1707775256940,0.0,0.0,528.1707775256940,,False,3.7831451076407600,[],26.248738618687900,26.248738618687900,0.0,[10.690000000000001],0,0.0,0.0,0.0,0.49628964029674100,-20.718738618687900,20.718738618687900,0.0,0.0,0.0,0.0,0.0,0.0,,False,26.248738618687900,[],26.248738618687900,26.24873861868790,0.0,"[0.0, 26.248738618687863]",0,0.0,10.690000000000000,10.690000000000000,0.6885205390711130,-15.558738618687900,15.558738618687900,0.0,0.0,0.0,21.380000000000000,0.0,21.380000000000000 -92,,False,5.734501064880050,[],5.734501064880050,26.45323968356790,0.0,[10.690000000000001],0,0.0,0.0,0.0,0.568547713968799,-19.963239683567900,19.963239683567900,0,0.0,741.0354570540410,0.0,0.0,741.0354570540410,,False,5.734501064880050,[],5.734501064880050,21.29323968356790,10.690000000000000,[0.0],0,0.0,10.690000000000000,0.0,0.4902360777076960,-15.76323968356790,15.76323968356790,0.0,0.0,0.0,42.760000000000000,0.0,42.760000000000000,,False,5.734501064880050,[],5.734501064880050,31.983239683567900,0.0,"[26.248738618687863, 5.734501064880047]",0,0.0,0.0,0.0,0.6801222130963500,-21.293239683567900,21.293239683567900,0.0,0.0,0.0,0.0,0.0,0.0 -93,,False,4.0455027380385800,[],4.045502738038580,19.808742421606500,10.690000000000000,[0.0],0,0.0,10.690000000000000,0.0,0.5636970803276410,-13.31874242160650,13.31874242160650,0,0.0,494.3917186900330,0.0,0.0,494.3917186900330,,False,4.045502738038580,[],4.04550273803858,25.33874242160650,0.0,[25.33874242160649],0,0.0,0.0,0.0,0.4860535692704730,-19.808742421606500,19.808742421606500,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.04550273803858,[],4.045502738038580,9.780003802918630,26.248738618687900,"[5.734501064880047, 4.045502738038582]",0,0.0,25.33874242160650,4.045502738038580,0.6828512891546860,0.9099961970813750,0.0,0.0,1.8199923941627500,0,50.67748484321300,0.0,52.49747723737570 -94,,False,5.7699773599307900,[],5.769977359930790,25.578719781537300,0.0,[25.33874242160649],0,0.0,0.0,0.0,0.5569202567281500,-19.088719781537300,19.088719781537300,0,0.0,708.573278290664,0.0,0.0,708.573278290664,,False,5.769977359930790,[],5.769977359930790,5.769977359930800,25.33874242160650,[5.769977359930794],0,0.0,25.33874242160650,5.530000000000000,0.49173227795828600,-0.23997735993079400,0.23997735993079400,0.0,0.0,0.0,101.35496968642600,0.0,101.35496968642600,,False,5.769977359930790,[],5.769977359930790,9.815480097969370,5.734501064880050,"[4.045502738038582, 5.769977359930794]",0,0.0,5.769977359930790,5.769977359930790,0.6866640831946260,0.8745199020306270,0.0,0.0,1.7490398040612500,0,11.539954719861600,0.0,13.288994523922800 -95,,False,6.268389522403900,[],6.268389522403900,6.508366882334700,25.33874242160650,[5.769977359930794],0,0.0,25.33874242160650,6.250022640069200,0.5625947517944120,-0.018366882334698100,0.018366882334698100,0,0.0,0.6817786722639930,0.0,0.0,0.6817786722639930,,False,6.268389522403900,[],6.268389522403900,6.268389522403910,5.769977359930790,[4.9200226400692095],0,0.0,5.769977359930790,5.53,0.4967663188186130,-0.7383895224039040,0.7383895224039040,0.0,0.0,0.0,23.079909439723200,0.0,23.079909439723200,,False,6.268389522403900,[],6.2683895224039000,12.038366882334700,4.045502738038580,"[5.769977359930794, 6.2683895224039015]",0,0.0,4.9200226400692100,4.9200226400692100,0.6879304850902710,-1.3483668823346900,1.3483668823346900,0.0,0.0,0.0,9.840045280138420,0.0,9.840045280138420 -96,,False,4.132358910020630,[],4.132358910020630,4.870748432424530,5.769977359930790,[4.870748432424529],0,0.0,4.150725792355320,4.132358910020630,0.5662809392414040,1.6192515675754700,0.0,0,11.334760973028300,0.0,0.0,0.0,11.334760973028300,,False,4.132358910020630,[],4.132358910020620,5.480725792355320,4.9200226400692100,[5.480725792355318],0,0.0,4.870748432424530,4.132358910020630,0.5010072685696380,0.0492742076446806,0.0,0.0,0.1970968305787220,0,19.482993729698100,0.0,19.680090560276800,,False,4.132358910020620,[],4.132358910020630,10.400748432424500,5.769977359930790,"[6.2683895224039015, 4.132358910020626]",0,0.0,5.480725792355320,4.132358910020620,0.6905604186202600,0.28925156757547700,0.0,0.0,0.5785031351509530,0,10.961451584710600,0.0,11.539954719861600 -97,,False,5.145861852428310,[],5.14586185242831,5.145861852428310,4.870748432424530,[5.14586185242831],0,0.0,5.145861852428310,5.145861852428310,0.5707852480210790,1.344138147571690,0.0,0,9.408967033001840,0.0,0.0,0.0,9.408967033001840,,False,5.14586185242831,[],5.145861852428310,5.145861852428310,5.480725792355320,[5.145861852428311],0,0.0,5.14586185242831,5.14586185242831,0.5061894649371310,0.3841381475716880,0.0,0.0,1.5365525902867500,0,20.58344740971320,0.0,22.120000000000000,,False,5.145861852428310,[],5.145861852428310,9.278220762448930,6.2683895224039000,"[4.132358910020626, 5.145861852428309]",0,0.0,5.145861852428310,5.145861852428310,0.693774045941019,1.411779237551070,0.0,0.0,2.823558475102130,0,10.291723704856600,0.0,13.115282179958800 -98,,False,5.878673548190900,[],5.878673548190900,5.878673548190890,5.14586185242831,[5.529999999999999],0,0.0,5.878673548190900,5.878673548190900,0.5758178576960730,0.6113264518091060,0.0,0,4.27928516266374,0.0,0.0,0.0,4.27928516266374,,False,5.878673548190900,[],5.878673548190900,5.878673548190900,5.145861852428310,[5.544138147571693],0,0.0,5.530000000000000,5.530000000000000,0.511284032451784,-0.348673548190896,0.348673548190896,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,5.878673548190900,[],5.878673548190900,11.024535400619200,4.132358910020630,"[5.145861852428309, 5.878673548190897]",0,0.0,5.544138147571690,5.544138147571690,0.6966973539637310,-0.3345354006192030,0.3345354006192030,0.0,0.0,0.0,11.088276295143400,0.0,11.088276295143400 -99,,False,4.76040549180619,[],4.760405491806190,5.109079039997090,5.530000000000000,[5.109079039997087],0,0.0,4.76040549180619,4.76040549180619,0.5798074776864460,1.380920960002920,0.0,0,9.666446720020410,0.0,0.0,0.0,9.666446720020410,,False,4.760405491806190,[],4.760405491806190,5.094940892425390,5.544138147571690,[5.094940892425393],0,0.0,5.109079039997090,4.760405491806190,0.5158806215093870,0.435059107574606,0.0,0.0,1.740236430298420,0,20.436316159988300,0.0,22.17655259028680,,False,4.760405491806190,[],4.760405491806190,10.639079039997100,5.145861852428310,"[5.878673548190897, 4.760405491806191]",0,0.0,5.094940892425390,4.760405491806190,0.6995500490187060,0.050920960002915900,0.0,0.0,0.10184192000583200,0,10.189881784850800,0.0,10.291723704856600 \ No newline at end of file +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +0,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,2.6018801180469207,0,0,18.213160826328444,0.0,0.0,0.0,18.213160826328444,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,1.6418801180469207,0,0,6.567520472187683,0,15.552479527812318,0.0,22.12,,False,3.8881198819530796,[],3.888119881953079,3.888119881953079,0,"[0, 3.888119881953079]",0,0.0,3.8881198819530796,3.8881198819530796,1.0,6.80188011804692,0,0,13.60376023609384,0,7.776239763906159,0.0,21.38 +1,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,1.1710978153106169,0,0,8.197684707174318,0.0,0.0,0.0,8.197684707174318,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,0.2110978153106169,0,0,0.8443912612424676,0,21.275608738757533,0.0,22.12,,False,5.318902184689383,[],5.318902184689383,9.207022066642462,0,"[3.888119881953079, 5.318902184689383]",0,0.0,5.318902184689383,5.318902184689383,1.0,1.482977933357537,0,0,2.965955866715074,0,10.637804369378767,0.0,13.60376023609384 +2,,False,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[5.279041292200137],0,0.0,5.279041292200137,5.279041292200137,1.0,1.210958707799863,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200137,[],0,0.0,5.318902184689383,[0],0,0.0,5.279041292200137,5.279041292200137,1.0,0.25095870779986296,0,0,1.0038348311994518,0,21.11616516880055,0.0,22.12,,False,0,[],0.0,5.318902184689383,3.888119881953079,"[5.318902184689383, 0.0]",0,0.0,0,0.0,1.0,5.371097815310616,0,0,10.742195630621232,0,0.0,0.0,10.742195630621232 +3,,False,6.010515284806527,[],6.010515284806527,6.010515284806527,5.279041292200137,[0.25095870779986296],0,0.0,6.010515284806527,6.010515284806527,1.0,0.4794847151934736,0,0,3.356393006354315,0.0,0.0,0.0,3.356393006354315,,False,6.010515284806527,[],11.289556577006664,11.289556577006664,0,[10.69],0,0.0,0.25095870779986296,0.25095870779986296,0.7189991228711108,-5.759556577006664,5.759556577006664,0,0.0,0.0,1.0038348311994518,0.0,1.0038348311994518,,False,11.289556577006664,[],11.289556577006664,11.289556577006666,5.318902184689383,"[0.0, 11.289556577006664]",0,0.0,10.69,10.69,0.9707484557578864,-0.5995565770066644,0.5995565770066644,0,0.0,0.0,21.38,0.0,21.38 +4,,False,4.419121865976485,[],4.419121865976485,10.178678442983148,0.25095870779986296,[10.178678442983148],0,0.0,0.7304434229933365,0.7304434229933365,0.8519536530165743,-3.6886784429831483,3.6886784429831483,0,0.0,136.92374380353445,0.0,0.0,136.92374380353445,,True,4.419121865976485,[],0,0.5995565770066644,10.69,[0.0],0,0.0,10.178678442983148,4.419121865976485,0.7688382642590527,0.511321557016851,0.0,0,2.045286228067404,0,40.714713771932594,0.0,42.76,,False,0,[],0.0,11.289556577006666,0.0,"[11.289556577006664, 0.0]",0,0.0,0.0,0.0,0.9707484557578864,-0.5995565770066644,0.5995565770066644,0.0,0.0,0.0,0.0,0.0,0.0 +5,,False,4.474830192821853,[],4.474830192821853,4.474830192821852,10.178678442983148,[0.511321557016851],0,0.0,8.163508635805002,4.4748301928218535,0.8744943233476224,2.0151698071781476,0.0,0,14.106188650247034,0.0,0.0,0.0,14.106188650247034,,True,4.474830192821853,[],0,0.5995565770066644,0.0,[0.5995565770066644],0,0.0,0.511321557016851,0.511321557016851,0.6691769430348536,-3.9635086358050016,3.9635086358050016,0,0.0,0.0,2.045286228067404,0.0,2.045286228067404,,False,0,[],0.0,1.7763568394002505e-15,11.289556577006664,"[0.0, 0.0]",0,0.0,0.5995565770066644,0.0,0.9707484557578864,10.69,0.0,0.0,21.38,0,1.1991131540133289,0.0,22.579113154013328 +6,,False,2.3874509873063987,[],2.3874509873063996,6.3509596231114,0.511321557016851,[0.5995565770066644],0,0.0,2.3874509873063987,2.3874509873063987,0.8839234511809011,0.13904037688859994,0.0,0,0.9732826382201996,0.0,0.0,0.0,0.9732826382201996,,True,2.3874509873063996,[],0,0.0,0.5995565770066644,[0.0],0,0.0,0.5995565770066644,0.0,0.6189022852882176,-5.751403046104737,5.751403046104737,0,0.0,0.0,2.3982263080266577,0.0,2.3982263080266577,,False,0,[],0.0,1.7763568394002505e-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.9707484557578864,10.69,0.0,0.0,21.38,0,0.0,0.0,21.38 +7,,False,5.950369682396903,[],5.950369682396903,11.70177272850164,0.5995565770066644,[0.0],0,0.0,0.7385969538952644,0.7385969538952644,0.7640911715518356,-5.211772728501638,5.211772728501638,0,0.0,193.4610036819808,0.0,0.0,193.4610036819808,,True,5.950369682396903,[],0,0.0,0.0,[0.0],0,0.0,0.0,0.0,0.5212914101556361,-11.70177272850164,11.70177272850164,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,1.7763568394002505e-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.9707484557578864,10.69,0.0,0.0,21.38,0,0.0,0.0,21.38 +8,,False,4.571953935823766,[],4.571953935823765,16.273726664325405,0.0,[0.0],0,0.0,0.0,0.0,0.6815057241497331,-9.783726664325403,9.783726664325403,0,0.0,363.17193377975894,0.0,0.0,363.17193377975894,,False,4.571953935823765,[],21.803726664325406,21.803726664325406,0.0,[10.69],0,0.0,0.0,0.0,0.46494854697722604,-16.273726664325405,16.273726664325405,0.0,0.0,0.0,0.0,0.0,0.0,,False,21.803726664325406,[],21.803726664325403,21.803726664325403,0.0,"[0.0, 21.803726664325403]",0,0.0,10.69,10.69,0.7230922293337713,-11.113726664325407,11.113726664325407,0.0,0.0,0.0,21.38,0.0,21.38 +9,,False,4.257593162880828,[],4.257593162880826,20.531319827206232,0.0,[10.69],0,0.0,0.0,0.0,0.6191838795883768,-14.04131982720623,14.04131982720623,0,0.0,521.2137919858952,0.0,0.0,521.2137919858952,,False,4.257593162880826,[],4.257593162880825,15.371319827206234,10.69,[0.0],0,0.0,10.69,0.0,0.42243026716395676,-9.841319827206231,9.841319827206231,0.0,0.0,0.0,42.76,0.0,42.76,,False,4.257593162880825,[],4.257593162880829,26.061319827206233,0.0,"[21.803726664325403, 4.257593162880829]",0,0.0,0.0,0.0,0.6569674120018442,-15.371319827206232,15.371319827206232,0.0,0.0,0.0,0.0,0.0,0.0 +10,,False,4.3705250390757495,[],4.370525039075748,14.21184486628198,10.69,[0.0],0,0.0,10.69,0.0,0.5660473702871345,-7.72184486628198,7.72184486628198,0,0.0,286.6348814363871,0.0,0.0,286.6348814363871,,False,4.370525039075748,[],4.370525039075745,19.74184486628198,0.0,[19.741844866281976],0,0.0,0.0,0.0,0.3861785646241459,-14.211844866281979,14.211844866281979,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.370525039075745,[],4.370525039075743,8.628118201956575,21.803726664325403,"[4.257593162880829, 4.370525039075743]",0,0.0,19.741844866281976,4.370525039075744,0.68640544309999,2.0618817980434256,8.881784197001252e-16,0.0,4.123763596086851,0,39.48368973256395,0.0,43.607453328650806 +11,,False,5.597720466912608,[],5.597720466912608,19.809565333194588,0.0,[19.741844866281976],0,0.0,0.0,0.0,0.5099923358026245,-13.31956533319459,13.31956533319459,0,0.0,494.4222651681831,0.0,0.0,494.4222651681831,,False,5.597720466912608,[],5.597720466912607,5.597720466912609,19.741844866281976,[5.597720466912608],0,0.0,19.741844866281976,5.529999999999998,0.4457665730738346,-0.06772046691261036,0.06772046691261036,0.0,0.0,0.0,78.9673794651279,0.0,78.9673794651279,,False,5.597720466912607,[],5.597720466912605,9.968245505988351,4.257593162880829,"[4.370525039075743, 5.597720466912605]",0,0.0,5.597720466912608,5.597720466912607,0.7174603593913028,0.7217544940116474,0.0,0.0,1.4435089880232947,0,11.195440933825216,0.0,12.63894992184851 +12,,False,5.122219165222679,[],5.122219165222681,5.189939632135292,19.741844866281976,[5.1899396321352915],0,0.0,18.44178449841727,5.122219165222681,0.5507059333862905,1.3000603678647078,0.0,0,9.100422575052955,0.0,0.0,0.0,9.100422575052955,,False,5.122219165222681,[],5.122219165222683,5.122219165222684,5.597720466912608,[5.092279533087391],0,0.0,5.1899396321352915,5.122219165222681,0.4918165399621054,0.4077808347773164,0.0,0.0,1.6311233391092657,0,20.759758528541166,0.0,22.39088186765043,,False,5.122219165222683,[],5.122219165222685,10.719939632135294,4.370525039075743,"[5.597720466912605, 5.122219165222685]",0,0.0,5.092279533087391,5.092279533087391,0.7404502695477106,-0.02993963213529227,0.02993963213529227,0.0,0.0,0.0,10.184559066174781,0.0,10.184559066174781 +13,,False,4.484564337907547,[],4.484564337907547,4.484564337907547,5.1899396321352915,[4.484564337907547],0,0.0,4.484564337907547,4.484564337907547,0.5811731790556953,2.0054356620924523,0.0,0,14.038049634647166,0.0,0.0,0.0,14.038049634647166,,False,4.484564337907547,[],4.484564337907547,4.51450397004284,5.092279533087391,[4.514503970042839],0,0.0,4.484564337907547,4.484564337907547,0.5262771560098453,1.01549602995716,0.0,0.0,4.06198411982864,0,17.938257351630188,0.0,22.00024147145883,,False,4.484564337907547,[],4.484564337907545,9.606783503130234,5.597720466912605,"[5.122219165222685, 4.484564337907545]",0,0.0,4.514503970042839,4.484564337907547,0.7580506920521026,1.083216496869766,0.0,0.0,2.166432993739532,0,9.029007940085679,0.0,11.19544093382521 +14,,False,4.399746149894089,[],4.3997461498940895,4.3997461498940895,4.484564337907547,[4.3997461498940895],0,0.0,4.399746149894089,4.399746149894089,0.6072991090408838,2.0902538501059107,0.0,0,14.631776950741376,0.0,0.0,0.0,14.631776950741376,,True,4.3997461498940895,[],0,8.881784197001252e-16,4.514503970042839,[0.0],0,0.0,4.3997461498940895,4.3997461498940895,0.5558274360672846,1.1302538501059098,0.0,0.0,4.521015400423639,0,17.598984599576358,0.0,22.119999999999997,,False,0,[],0.0,4.48456433790755,5.122219165222685,"[4.484564337907545, 0.0]",0,0.0,0.0,0.0,0.7580506920521026,6.205435662092451,0.0,0.0,12.410871324184901,0,0.0,0.0,12.410871324184901 +15,,False,5.947439821046639,[],5.947439821046639,5.947439821046639,4.3997461498940895,[1.1302538501059098],0,0.0,5.947439821046639,5.947439821046639,0.6378373079433961,0.5425601789533614,0.0,0,3.7979212526735298,0.0,0.0,0.0,3.7979212526735298,,True,5.947439821046639,[],0,8.881784197001252e-16,0.0,[0.0],0,0.0,1.1302538501059098,1.1302538501059098,0.5273821804494675,-4.817185970940729,4.817185970940729,0.0,0.0,0.0,4.521015400423639,0.0,4.521015400423639,,False,0,[],0.0,4.440892098500626e-15,4.484564337907545,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7580506920521026,10.689999999999996,0.0,0.0,21.379999999999992,0,0.0,0.0,21.379999999999992 +16,,False,3.978447805324402,[],3.978447805324402,8.79563377626513,1.1302538501059098,[0.0],0,0.0,1.6728140290592712,1.6728140290592712,0.6270890619471989,-2.3056337762651307,2.3056337762651307,0,0.0,85.58512577496164,0.0,0.0,85.58512577496164,,False,3.978447805324402,[],14.325633776265132,14.325633776265132,0.0,[10.689999999999996],0,0.0,0.0,0.0,0.5013046264189611,-8.79563377626513,8.79563377626513,0.0,0.0,0.0,0.0,0.0,0.0,,False,14.325633776265132,[],14.32563377626513,14.325633776265136,0.0,"[0.0, 14.32563377626513]",0,0.0,10.689999999999996,10.689999999999996,0.7559433140983411,-3.635633776265136,3.635633776265136,0.0,0.0,0.0,21.379999999999992,0.0,21.379999999999992 +17,,False,4.838244613602479,[],4.838244613602479,13.63387838986761,0.0,[10.689999999999996],0,0.0,0.0,0.0,0.5915190280488041,-7.143878389867609,7.143878389867609,0,0.0,265.18076583188565,0.0,0.0,265.18076583188565,,False,4.838244613602479,[],4.838244613602478,8.473878389867613,10.689999999999996,[0.0],0,0.0,10.689999999999996,1.894366223734865,0.4950785059986834,-2.9438783898676135,2.9438783898676135,0.0,0.0,0.0,42.759999999999984,0.0,42.759999999999984,,False,4.838244613602478,[],4.838244613602478,19.163878389867612,0.0,"[14.32563377626513, 4.838244613602478]",0,0.0,0.0,0.0,0.713064350105174,-8.473878389867615,8.473878389867615,0.0,0.0,0.0,0.0,0.0,0.0 +18,,False,4.770549546168043,[],4.770549546168043,7.714427936035657,10.689999999999996,[0.0],0,0.0,10.689999999999996,3.5461216101323867,0.5995602409386372,-1.2244279360356565,1.2244279360356565,0,0.0,45.450764985643566,0.0,0.0,45.450764985643566,,True,4.770549546168043,[],0,8.473878389867613,0.0,[8.473878389867615],0,0.0,0.0,0.0,0.4688559469904752,-7.714427936035657,7.714427936035657,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],1.7763568394002505e-15,4.838244613602482,14.32563377626513,"[4.838244613602478, 1.7763568394002505e-15]",0,0.0,8.473878389867615,0.0,0.713064350105174,5.851755386397516,0.0,0.0,11.703510772795031,0,16.94775677973523,0.0,28.65126755253026 +19,,False,5.389348913256123,[],5.389348913256123,13.10377684929178,0.0,[8.473878389867615],0,0.0,0.0,0.0,0.5657099277978391,-6.61377684929178,6.61377684929178,0,0.0,245.50339664571084,0.0,0.0,245.50339664571084,,False,5.389348913256123,[],10.159898459424166,10.159898459424163,8.473878389867615,[10.159898459424166],0,0.0,8.473878389867615,0.759450453831958,0.45034097890129327,-4.629898459424165,4.629898459424165,0.0,0.0,0.0,33.89551355947046,0.0,33.89551355947046,,False,10.159898459424166,[],10.159898459424168,10.159898459424173,4.838244613602478,"[1.7763568394002505e-15, 10.159898459424168]",0,0.0,10.159898459424166,10.159898459424166,0.7436042381916573,0.5301015405758278,0.0,0.0,1.0602030811516556,0,20.319796918848333,0.0,21.37999999999999 +20,,False,7.77831304155244,[],7.77831304155244,12.408211500976606,8.473878389867615,[10.159898459424166],0,0.0,8.473878389867615,1.860101540575835,0.5411042519986522,-5.918211500976605,5.918211500976605,0,0.0,219.68401091625157,0.0,0.0,219.68401091625157,,False,7.77831304155244,[],7.778313041552443,7.77831304155244,10.159898459424166,[0.5301015405758296],0,0.0,10.159898459424166,5.530000000000001,0.46997682478278574,-2.2483130415524393,2.2483130415524393,0.0,0.0,0.0,40.639593837696665,0.0,40.639593837696665,,False,7.778313041552443,[],7.778313041552441,17.938211500976614,1.7763568394002505e-15,"[10.159898459424168, 7.778313041552441]",0,0.0,0.5301015405758296,0.5301015405758296,0.6927117683988528,-7.2482115009766135,7.2482115009766135,0.0,0.0,0.0,1.0602030811516592,0.0,1.0602030811516592 +21,,False,6.193639724282317,[],6.193639724282317,8.441952765834756,10.159898459424166,[0.5301015405758296],0,0.0,10.159898459424166,4.241686958447561,0.5492399834598993,-1.951952765834756,1.951952765834756,0,0.0,72.45648666778614,0.0,0.0,72.45648666778614,,False,6.193639724282317,[],6.193639724282316,13.441851225258928,0.5301015405758296,[10.159898459424168],0,0.0,0.5301015405758296,0.0,0.4433762321342165,-7.911851225258927,7.911851225258927,0.0,0.0,0.0,2.1204061623033184,0.0,2.1204061623033184,,False,6.193639724282316,[],6.193639724282314,13.971952765834759,10.159898459424168,"[7.778313041552441, 6.193639724282314]",0,0.0,10.159898459424168,2.9116869584475547,0.6801125077994358,-3.2819527658347614,3.2819527658347614,0.0,0.0,0.0,20.319796918848336,0.0,20.319796918848336 +22,,False,5.2186383160538625,[],5.2186383160538625,13.13048954131279,0.5301015405758296,[10.159898459424168],0,0.0,0.5301015405758296,0.0,0.5242390899620336,-6.640489541312789,6.640489541312789,0,0.0,246.4949717735307,0.0,0.0,246.4949717735307,,False,5.2186383160538625,[],5.218638316053862,8.50059108188862,10.159898459424168,[7.778313041552441],0,0.0,10.159898459424168,2.2480472341652415,0.4428025338272299,-2.970591081888621,2.970591081888621,0.0,0.0,0.0,40.63959383769667,0.0,40.63959383769667,,False,5.218638316053862,[],5.218638316053863,11.412278040336183,7.778313041552441,"[6.193639724282314, 5.218638316053863]",0,0.0,7.778313041552441,4.49636027571768,0.6883734883999072,-0.7222780403361817,0.7222780403361817,0.0,0.0,0.0,15.556626083104883,0.0,15.556626083104883 +23,,False,5.881761038948611,[],5.881761038948611,8.852352120837233,10.159898459424168,[7.778313041552441],0,0.0,10.159898459424168,3.5194089181113792,0.5278561419536362,-2.3623521208372313,2.3623521208372313,0,0.0,87.69051072547802,0.0,0.0,87.69051072547802,,False,5.881761038948611,[],5.8817610389486115,6.604039079284791,7.778313041552441,[6.193639724282314],0,0.0,7.778313041552441,4.80772195966382,0.46108246841846445,-1.0740390792847903,1.0740390792847903,0.0,0.0,0.0,31.113252166209765,0.0,31.113252166209765,,False,5.8817610389486115,[],5.88176103894861,11.10039935500248,6.193639724282314,"[5.218638316053863, 5.88176103894861]",0,0.0,6.193639724282314,5.4713616839461325,0.7001757322863787,-0.4103993550024789,0.4103993550024789,0.0,0.0,0.0,12.387279448564628,0.0,12.387279448564628 +24,,False,3.9909146571348924,[],3.9909146571348906,5.064953736419683,7.778313041552441,[5.064953736419681],0,0.0,6.353266777972124,3.9909146571348924,0.5429885406090348,1.4250462635803176,0.0,0,9.975323845062224,0.0,0.0,0.0,9.975323845062224,,True,3.9909146571348906,[],0,0.41039935500247715,6.193639724282314,[0.4103993550024789],0,0.0,5.064953736419681,3.9909146571348906,0.4783549898995643,1.1286859878626334,0.0,0.0,4.514743951450534,0,20.259814945678723,0.0,24.774558897129257,,False,0,[],0.0,5.881761038948617,5.218638316053863,"[5.88176103894861, 0.0]",0,0.0,0.4103993550024789,0.0,0.7001757322863787,4.8082389610513845,0.0,0.0,9.616477922102769,0,0.8207987100049579,0.0,10.437276632107727 +25,,False,3.4167057864631127,[],3.4167057864631127,3.4167057864631145,5.064953736419681,[1.5390853428651123],0,0.0,3.4167057864631127,3.4167057864631127,0.5551935918554295,3.0732942135368857,0.0,0,21.5130594947582,0.0,0.0,0.0,21.5130594947582,,True,3.4167057864631127,[],0,-1.7763568394002505e-15,0.4103993550024789,[0.0],0,0.0,1.5390853428651123,1.5390853428651123,0.4776099891583975,-1.8776204435980004,1.8776204435980004,0.0,0.0,0.0,6.156341371460449,0.0,6.156341371460449,,False,0,[],0.0,7.105427357601002e-15,5.88176103894861,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7001757322863787,10.689999999999994,0.0,0.0,21.37999999999999,0,0.0,0.0,21.37999999999999 +26,,False,3.6533219026386536,[],3.6533219026386536,5.530942346236656,1.5390853428651123,[0.0],0,0.0,3.6533219026386536,3.6533219026386536,0.5675427141912661,0.9590576537633444,0.0,0,6.713403576343411,0.0,0.0,0.0,6.713403576343411,,False,3.6533219026386536,[],11.060942346236656,11.060942346236654,0.0,[10.689999999999994],0,0.0,0.0,0.0,0.4643501438033421,-5.530942346236654,5.530942346236654,0.0,0.0,0.0,0.0,0.0,0.0,,False,11.060942346236656,[],11.060942346236654,11.060942346236661,0.0,"[0.0, 11.060942346236654]",0,0.0,10.689999999999994,10.689999999999994,0.722558866414261,-0.3709423462366619,0.3709423462366619,0.0,0.0,0.0,21.37999999999999,0.0,21.37999999999999 +27,,False,4.119408733952893,[],4.119408733952893,9.650351080189548,0.0,[9.650351080189548],0,0.0,0.9590576537633444,0.9590576537633444,0.55738216021744,-3.1603510801895487,3.1603510801895487,0,0.0,117.31223209663604,0.0,0.0,117.31223209663604,,False,4.119408733952893,[],4.119408733952893,4.490351080189553,10.689999999999994,[0.0],0,0.0,9.650351080189548,4.119408733952894,0.48060959652746205,1.039648919810447,0.0,0.0,4.158595679241788,0,38.60140432075819,0.0,42.75999999999998,,False,4.119408733952893,[],4.119408733952893,15.180351080189554,0.0,"[11.060942346236654, 4.119408733952893]",0,0.0,0.0,0.0,0.7006258600054194,-4.490351080189555,4.490351080189555,0.0,0.0,0.0,0.0,0.0,0.0 +28,,False,5.582122794713039,[],5.58212279471304,5.58212279471304,9.650351080189548,[1.039648919810447],0,0.0,8.742473874902588,5.582122794713039,0.5748690338263078,0.9078772052869599,0.0,0,6.3551404370087194,0.0,0.0,0.0,6.3551404370087194,,False,5.58212279471304,[],5.58212279471304,10.072473874902593,0.0,[10.072473874902595],0,0.0,1.039648919810447,1.039648919810447,0.46897993365564217,-4.542473874902593,4.542473874902593,0.0,0.0,0.0,4.158595679241788,0.0,4.158595679241788,,False,5.58212279471304,[],5.58212279471304,9.701531528665942,11.060942346236654,"[4.119408733952893, 5.58212279471304]",0,0.0,10.072473874902595,5.58212279471304,0.7124534848260108,0.988468471334059,0.0,0.0,1.976936942668118,0,20.14494774980519,0.0,22.12188469247331 +29,,False,5.887748459593357,[],5.887748459593357,10.430222334495951,1.039648919810447,[10.072473874902595],0,0.0,1.947526125097407,1.947526125097407,0.56510435665742,-3.9402223344959504,3.9402223344959504,0,0.0,146.26105305648966,0.0,0.0,146.26105305648966,,False,5.887748459593357,[],5.887748459593357,5.887748459593356,10.072473874902595,[5.107877205286952],0,0.0,10.072473874902595,5.530000000000002,0.48779212067614636,-0.35774845959335533,0.35774845959335533,0.0,0.0,0.0,40.28989549961038,0.0,40.28989549961038,,False,5.887748459593357,[],5.887748459593356,11.469871254306405,4.119408733952893,"[5.58212279471304, 5.887748459593356]",0,0.0,5.107877205286952,5.107877205286952,0.7186576890116223,-0.7798712543064052,0.7798712543064052,0.0,0.0,0.0,10.215754410573904,0.0,10.215754410573904 +30,,False,4.792834109895426,[],4.792834109895425,5.1505825694887815,10.072473874902595,[5.107877205286952],0,0.0,8.733056444391377,4.792834109895426,0.5788199169267194,1.3394174305112188,0.0,0,9.375922013578531,0.0,0.0,0.0,9.375922013578531,,False,4.792834109895425,[],4.792834109895425,5.572705364201829,5.107877205286952,[5.5727053642018305],0,0.0,5.107877205286952,4.750128745693597,0.5036649146067894,-0.042705364201828466,0.042705364201828466,0.0,0.0,0.0,20.43150882114781,0.0,20.43150882114781,,False,4.792834109895425,[],4.792834109895425,10.680582569488788,5.58212279471304,"[5.887748459593356, 4.792834109895425]",0,0.0,5.5727053642018305,4.792834109895425,0.7275305473208177,0.009417430511209801,0.0,0.0,0.018834861022419602,0,11.145410728403661,0.0,11.16424558942608 +31,,False,4.37652260501504,[],4.37652260501504,4.41922796921687,5.107877205286952,[4.419227969216869],0,0.0,4.37652260501504,4.37652260501504,0.5906096210610935,2.0707720307831305,0.0,0,14.495404215481914,0.0,0.0,0.0,14.495404215481914,,False,4.37652260501504,[],4.37652260501504,4.3765226050150385,5.5727053642018305,[4.37652260501504],0,0.0,4.419227969216869,4.37652260501504,0.5175583631421447,1.1534773949849617,0.0,0.0,4.613909579939847,0,17.676911876867475,0.0,22.290821456807322,,False,4.37652260501504,[],4.376522605015042,9.169356714910474,5.887748459593356,"[4.792834109895425, 4.376522605015042]",0,0.0,4.37652260501504,4.37652260501504,0.7351575324557807,1.520643285089525,0.0,0.0,3.04128657017905,0,8.75304521003008,0.0,11.79433178020913 +32,,False,3.491846710452517,[],3.491846710452517,3.491846710452518,4.419227969216869,[3.491846710452517],0,0.0,3.491846710452517,3.491846710452517,0.599553090376401,2.9981532895474823,0.0,0,20.987073026832377,0.0,0.0,0.0,20.987073026832377,,False,3.491846710452517,[],3.491846710452517,3.4918467104525153,4.37652260501504,[3.491846710452517],0,0.0,3.491846710452517,3.491846710452517,0.528097697229204,2.038153289547485,0.0,0.0,8.15261315818994,0,13.967386841810068,0.0,22.120000000000008,,False,3.491846710452517,[],3.491846710452517,7.868369315467566,4.792834109895425,"[4.376522605015042, 3.491846710452517]",0,0.0,3.491846710452517,3.491846710452517,0.7409432338394117,2.8216306845324333,0.0,0.0,5.6432613690648665,0,6.983693420905034,0.0,12.6269547899699 +33,,False,6.09964697578482,[],6.09964697578482,6.099646975784822,3.491846710452517,[5.530000000000002],0,0.0,6.09964697578482,6.09964697578482,0.6142727654377228,0.39035302421517937,0.0,0,2.7324711695062556,0.0,0.0,0.0,2.7324711695062556,,True,6.09964697578482,[],0,-1.7763568394002505e-15,3.491846710452517,[0.0],0,0.0,5.530000000000002,5.530000000000002,0.5420110917137447,-0.5696469757848179,0.5696469757848179,0.0,0.0,0.0,22.120000000000008,0.0,22.120000000000008,,False,0,[],0.0,3.491846710452524,4.376522605015042,"[3.491846710452517, 0.0]",0,0.0,0.0,0.0,0.7409432338394117,7.198153289547475,0.0,0.0,14.39630657909495,0,0.0,0.0,14.39630657909495 +34,,False,6.179716344700701,[],6.1797163447007,6.749363320485521,5.530000000000002,[0.0],0,0.0,5.920353024215181,5.920353024215181,0.6266148725839868,-0.25936332048551947,0.25936332048551947,0,0.0,9.627566456422482,0.0,0.0,9.627566456422482,,True,6.1797163447007,[],0,-1.7763568394002505e-15,0.0,[0.0],0,0.0,0.0,0.0,0.5225509603607917,-6.749363320485518,6.749363320485518,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,7.105427357601002e-15,3.491846710452517,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7409432338394117,10.689999999999992,0.0,0.0,21.379999999999985,0,0.0,0.0,21.379999999999985 +35,,False,4.101792060544322,[],4.101792060544321,10.851155381029841,0.0,[0.0],0,0.0,0.0,0.0,0.612029581330767,-4.361155381029842,4.361155381029842,0,0.0,161.88608774382772,0.0,0.0,161.88608774382772,,False,4.101792060544321,[],16.381155381029842,16.381155381029842,0.0,[10.689999999999992],0,0.0,0.0,0.0,0.510387894520872,-10.85115538102984,10.85115538102984,0.0,0.0,0.0,0.0,0.0,0.0,,False,16.381155381029842,[],16.381155381029842,16.38115538102985,0.0,"[0.0, 16.381155381029842]",0,0.0,10.689999999999992,10.689999999999992,0.7327291106373236,-5.69115538102985,5.69115538102985,0.0,0.0,0.0,21.379999999999985,0.0,21.379999999999985 +36,,False,3.962170123484518,[],3.962170123484519,14.81332550451436,0.0,[10.689999999999992],0,0.0,0.0,0.0,0.5985712947477674,-8.32332550451436,8.32332550451436,0,0.0,308.961842727573,0.0,0.0,308.961842727573,,False,3.962170123484519,[],3.9621701234845164,9.653325504514365,10.689999999999992,[0.0],0,0.0,10.689999999999992,0.0,0.4991646681238404,-4.123325504514366,4.123325504514366,0.0,0.0,0.0,42.75999999999997,0.0,42.75999999999997,,False,3.9621701234845164,[],3.9621701234845164,20.343325504514365,0.0,"[16.381155381029842, 3.9621701234845164]",0,0.0,0.0,0.0,0.7166166895069239,-9.653325504514367,9.653325504514367,0.0,0.0,0.0,0.0,0.0,0.0 +37,,False,4.924196254971815,[],4.924196254971815,9.047521759486182,10.689999999999992,[0.0],0,0.0,10.689999999999992,2.3666744954856327,0.5954336236585107,-2.557521759486182,2.557521759486182,0,0.0,94.93520771212707,0.0,0.0,94.93520771212707,,False,4.924196254971815,[],4.9241962549718155,14.577521759486181,0.0,[14.577521759486181],0,0.0,0.0,0.0,0.48588601600356074,-9.04752175948618,9.04752175948618,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.9241962549718155,[],4.924196254971817,8.88636637845634,16.381155381029842,"[3.9621701234845164, 4.924196254971817]",0,0.0,14.577521759486181,4.924196254971815,0.7241551805841754,1.8036336215436597,8.881784197001252e-16,0.0,3.6072672430873194,0,29.155043518972363,0.0,32.762310762059684 +38,,False,6.495434252883474,[],6.495434252883474,15.542956012369656,0.0,[14.577521759486181],0,0.0,0.0,0.0,0.575248182362086,-9.052956012369656,9.052956012369656,0,0.0,336.0457271791616,0.0,0.0,336.0457271791616,,False,6.495434252883474,[],6.495434252883473,6.495434252883474,14.577521759486181,[5.765803745028176],0,0.0,14.577521759486181,5.530000000000001,0.49827597805580065,-0.9654342528834725,0.9654342528834725,0.0,0.0,0.0,58.310087037944726,0.0,58.310087037944726,,False,6.495434252883473,[],6.495434252883471,11.419630507855295,3.9621701234845164,"[4.924196254971817, 6.495434252883471]",0,0.0,5.765803745028176,5.765803745028175,0.7296984077335038,-0.7296305078552967,0.7296305078552976,0.0,0.0,0.0,11.531607490056352,0.0,11.531607490056352 +39,,False,5.33818125199332,[],5.33818125199332,6.303615504876795,14.577521759486181,[5.765803745028176],0,0.0,14.391137264362975,5.338181251993319,0.5867612500199885,0.18638449512320587,8.881784197001252e-16,0,1.3046914658624411,0.0,0.0,0.0,1.3046914658624411,,False,5.33818125199332,[],5.338181251993319,6.067811759848617,5.765803745028176,[4.924196254971817],0,0.0,5.765803745028176,4.8003694921447035,0.5091445898478736,-0.5378117598486165,0.5378117598486165,0.0,0.0,0.0,23.063214980112704,0.0,23.063214980112704,,False,5.338181251993319,[],5.338181251993321,11.833615504876796,4.924196254971817,"[6.495434252883471, 5.338181251993321]",0,0.0,4.924196254971817,4.19456574711652,0.7312181646449328,-1.1436155048767986,1.1436155048767995,0.0,0.0,0.0,9.848392509943634,0.0,9.848392509943634 +40,,False,4.6013616099847985,[],4.601361609984798,5.139173369833417,5.765803745028176,[4.924196254971817],0,0.0,4.601361609984799,4.6013616099847985,0.5961957682040809,1.3508266301665834,0.0,0,9.455786411166084,0.0,0.0,0.0,9.455786411166084,,False,4.601361609984798,[],4.601361609984798,5.744977114861597,4.924196254971817,[5.744977114861597],0,0.0,4.924196254971817,4.386384495123201,0.5192844920884326,-0.21497711486159687,0.21497711486159687,0.0,0.0,0.0,19.69678501988727,0.0,19.69678501988727,,False,4.601361609984798,[],4.601361609984799,9.939542861978126,6.495434252883471,"[5.338181251993321, 4.601361609984799]",0,0.0,5.744977114861597,4.601361609984798,0.7373546344540536,0.7504571380218747,0.0,0.0,1.5009142760437495,0,11.489954229723194,0.0,12.990868505766944 +41,,False,4.939135912525254,[],4.939135912525254,5.154113027386853,4.924196254971817,[5.154113027386851],0,0.0,4.939135912525254,4.939135912525254,0.6058549290645998,1.3358869726131468,0.0,0,9.351208808292029,0.0,0.0,0.0,9.351208808292029,,False,4.939135912525254,[],4.939135912525254,4.939135912525253,5.744977114861597,[4.939135912525254],0,0.0,5.154113027386851,4.939135912525254,0.5307834018408459,0.5908640874747464,0.0,0.0,2.3634563498989856,0,20.616452109547403,0.0,22.97990845944639,,False,4.939135912525254,[],4.939135912525252,9.540497522510057,5.338181251993321,"[4.601361609984799, 4.939135912525252]",0,0.0,4.939135912525254,4.939135912525254,0.7436372180312367,1.1495024774899418,0.0,0.0,2.2990049549798837,0,9.878271825050508,0.0,12.177276780030391 +42,,False,3.581249541408597,[],3.581249541408597,3.5812495414085994,5.154113027386851,[3.581249541408597],0,0.0,3.581249541408597,3.581249541408597,0.6125744817300518,2.9087504585914004,0.0,0,20.361253210139804,0.0,0.0,0.0,20.361253210139804,,True,3.581249541408597,[],0,-8.881784197001252e-16,4.939135912525254,[0.0],0,0.0,3.581249541408597,3.581249541408597,0.5387828058048534,1.948750458591403,0.0,0.0,7.795001834365612,0,14.324998165634389,0.0,22.12,,False,0,[],1.7763568394002505e-15,4.939135912525259,4.601361609984799,"[4.939135912525252, 1.7763568394002505e-15]",0,0.0,0.0,0.0,0.7436372180312367,5.750864087474741,0.0,0.0,11.501728174949482,0,0.0,0.0,11.501728174949482 +43,,False,6.0424916173394205,[],6.0424916173394205,6.042491617339422,3.581249541408597,[1.948750458591403],0,0.0,6.0424916173394205,6.0424916173394205,0.6234072072585016,0.447508382660577,0.0,0,3.132558678624039,0.0,0.0,0.0,3.132558678624039,,True,6.0424916173394205,[],0,-8.881784197001252e-16,0.0,[0.0],0,0.0,1.948750458591403,1.948750458591403,0.532735583669347,-4.093741158748017,4.093741158748017,0.0,0.0,0.0,7.795001834365612,0.0,7.795001834365612,,False,0,[],0.0,7.105427357601002e-15,4.939135912525252,"[1.7763568394002505e-15, 0.0]",0,0.0,0.0,0.0,0.7436372180312367,10.689999999999994,0.0,0.0,21.37999999999999,0,0.0,0.0,21.37999999999999 +44,,False,4.465583546326495,[],4.465583546326496,8.559324705074514,1.948750458591403,[0.0],0,0.0,2.39625884125198,2.39625884125198,0.6216498712989953,-2.0693247050745147,2.0693247050745147,0,0.0,76.81333305236598,0.0,0.0,76.81333305236598,,False,4.465583546326496,[],14.089324705074514,14.089324705074514,0.0,[10.689999999999996],0,0.0,0.0,0.0,0.5219500747266638,-8.559324705074513,8.559324705074513,0.0,0.0,0.0,0.0,0.0,0.0,,False,14.089324705074514,[],14.089324705074512,14.089324705074517,1.7763568394002505e-15,"[0.0, 14.089324705074512]",0,0.0,10.689999999999996,10.689999999999996,0.7446013218641663,-3.399324705074518,3.399324705074518,0.0,0.0,0.0,21.379999999999992,0.0,21.379999999999992 +45,,False,3.5049461291856643,[],3.5049461291856643,12.064270834260178,0.0,[10.689999999999996],0,0.0,0.0,0.0,0.6119261813948159,-5.574270834260179,5.574270834260179,0,0.0,206.91693336773784,0.0,0.0,206.91693336773784,,False,3.5049461291856643,[],3.5049461291856634,6.904270834260183,10.689999999999996,[0.0],0,0.0,10.689999999999996,2.1306752949254832,0.5232945644509054,-1.374270834260181,1.374270834260181,0.0,0.0,0.0,42.759999999999984,0.0,42.759999999999984,,False,3.5049461291856634,[],3.5049461291856634,17.59427083426018,0.0,"[14.089324705074512, 3.5049461291856634]",0,0.0,0.0,0.0,0.7329544564977826,-6.904270834260181,6.904270834260181,0.0,0.0,0.0,0.0,0.0,0.0 +46,,False,4.7878385782883734,[],4.787838578288375,6.162109412548558,10.689999999999996,[0.0],0,0.0,10.362109412548552,4.787838578288373,0.6200446839196185,0.32789058745144306,8.881784197001252e-16,0,2.2952341121601014,0.0,0.0,0.0,2.2952341121601014,,False,4.787838578288375,[],4.7878385782883734,11.692109412548557,0.0,[11.692109412548554],0,0.0,0.0,0.0,0.5123472445364117,-6.162109412548556,6.162109412548556,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.7878385782883734,[],4.787838578288375,8.292784707474043,14.089324705074512,"[3.5049461291856634, 4.787838578288375]",0,0.0,11.692109412548554,4.787838578288373,0.7385410480564513,2.3972152925259573,8.881784197001252e-16,0.0,4.794430585051915,0,23.384218825097108,0.0,28.17864941014902 +47,,False,4.573131205960277,[],4.5731312059602764,10.735240618508834,0.0,[10.735240618508833],0,0.0,0.32789058745144306,0.3278905874514422,0.6093023797259459,-4.245240618508834,4.245240618508835,0,0.0,157.58333175904792,0.0,0.0,157.58333175904792,,False,4.5731312059602764,[],4.573131205960276,4.57313120596028,11.692109412548554,[4.5731312059602764],0,0.0,10.735240618508833,4.5731312059602764,0.5219005570672954,0.9568687940397211,0.0,0.0,3.8274751761588846,0,42.94096247403533,0.0,46.768437650194215,,False,4.573131205960276,[],4.573131205960274,9.360969784248654,3.5049461291856634,"[4.787838578288375, 4.573131205960274]",0,0.0,4.5731312059602764,4.573131205960276,0.7436631335033785,1.3290302157513452,0.0,0.0,2.6580604315026903,0,9.146262411920553,0.0,11.804322843423243 +48,,False,5.501448331524805,[],5.501448331524805,5.501448331524806,10.735240618508833,[5.501448331524805],0,0.0,9.74668895003364,5.501448331524805,0.6182980000173831,0.9885516684751936,0.0,0,6.919861679326355,0.0,0.0,0.0,6.919861679326355,,False,5.501448331524805,[],5.501448331524804,5.5014483315248075,4.5731312059602764,[5.501448331524804],0,0.0,5.501448331524805,5.501448331524805,0.5329085612807672,0.02855166847519275,0.0,0.0,0.114206673900771,0,22.00579332609922,0.0,22.11999999999999,,False,5.501448331524804,[],5.501448331524804,10.074579537485082,4.787838578288375,"[4.573131205960274, 5.501448331524804]",0,0.0,5.501448331524804,5.501448331524804,0.7495651636106593,0.6154204625149164,0.0,0.0,1.2308409250298329,0,11.002896663049608,0.0,12.23373758807944 +49,,False,6.158186652932027,[],6.158186652932028,6.158186652932028,5.501448331524805,[5.529999999999997],0,0.0,6.158186652932027,6.158186652932027,0.6278884569901804,0.33181334706797116,0.0,0,2.322693429475798,0.0,0.0,0.0,2.322693429475798,,False,6.158186652932028,[],6.158186652932028,6.158186652932033,5.501448331524804,[5.18855166847519],0,0.0,5.529999999999997,5.529999999999997,0.5420814588624139,-0.6281866529320315,0.6281866529320315,0.0,0.0,0.0,22.119999999999987,0.0,22.119999999999987,,False,6.158186652932028,[],6.15818665293203,11.65963498445684,4.573131205960274,"[5.501448331524804, 6.15818665293203]",0,0.0,5.18855166847519,5.18855166847519,0.7519013386748722,-0.9696349844568379,0.9696349844568379,0.0,0.0,0.0,10.37710333695038,0.0,10.37710333695038 +50,,False,6.371862133549777,[],6.371862133549778,7.00004878648181,5.529999999999997,[5.18855166847519],0,0.0,5.861813347067968,5.861813347067968,0.635288954621796,-0.5100487864818088,0.5100487864818088,0,0.0,18.933010954204743,0.0,0.0,18.933010954204743,,False,6.371862133549778,[],6.371862133549777,7.34149711800662,5.18855166847519,[5.501448331524804],0,0.0,5.18855166847519,4.560365015543159,0.5464807976818927,-1.8114971180066188,1.8114971180066188,0.0,0.0,0.0,20.75420667390076,0.0,20.75420667390076,,False,6.371862133549777,[],6.371862133549775,12.530048786481812,5.501448331524804,"[6.15818665293203, 6.371862133549775]",0,0.0,5.501448331524804,4.531813347067966,0.7508706014041485,-1.8400487864818107,1.8400487864818107,0.0,0.0,0.0,11.002896663049608,0.0,11.002896663049608 +51,,False,5.175553293954833,[],5.175553293954832,6.987050411961452,5.18855166847519,[5.501448331524804],0,0.0,5.18855166847519,4.678502881993381,0.6407070778958456,-0.4970504119614514,0.4970504119614514,0,0.0,18.450511292009075,0.0,0.0,18.450511292009075,,False,5.175553293954832,[],5.175553293954831,7.015602080436647,5.501448331524804,[6.15818665293203],0,0.0,5.501448331524804,3.689951213518185,0.54983801371327,-1.4856020804366468,1.4856020804366468,0.0,0.0,0.0,22.005793326099216,0.0,22.005793326099216,,False,5.175553293954831,[],5.175553293954829,11.54741542750461,6.15818665293203,"[6.371862133549775, 5.175553293954829]",0,0.0,6.15818665293203,4.318137866450219,0.7525537358832493,-0.8574154275046117,0.8574154275046117,0.0,0.0,0.0,12.31637330586406,0.0,12.31637330586406 +52,,False,4.743369817307445,[],4.743369817307445,6.228971897744094,5.501448331524804,[6.15818665293203],0,0.0,5.240420229268897,4.743369817307445,0.6472271195608931,0.26102810225590733,0.0,0,1.8271967157913513,0.0,0.0,0.0,1.8271967157913513,,False,4.743369817307445,[],4.743369817307445,5.600785244812063,6.15818665293203,[5.600785244812057],0,0.0,6.15818665293203,4.672584572495383,0.5577362389128694,-0.07078524481206205,0.07078524481206205,0.0,0.0,0.0,24.63274661172812,0.0,24.63274661172812,,False,4.743369817307445,[],4.743369817307447,9.91892311126228,6.371862133549775,"[5.175553293954829, 4.743369817307447]",0,0.0,5.600785244812057,4.743369817307445,0.7570441108743654,0.771076888737718,0.0,0.0,1.542153777475436,0,11.201570489624114,0.0,12.74372426709955 +53,,False,4.632174275867238,[],4.6321742758672375,4.702959520679301,6.15818665293203,[4.7029595206793],0,0.0,4.632174275867238,4.632174275867238,0.6533699124189775,1.7870404793206989,0.0,0,12.509283355244893,0.0,0.0,0.0,12.509283355244893,,False,4.6321742758672375,[],4.632174275867237,4.632174275867243,5.600785244812057,[4.632174275867237],0,0.0,4.7029595206793,4.6321742758672375,0.5654373259964739,0.8978257241327574,0.0,0.0,3.5913028965310296,0,18.8118380827172,0.0,22.403140979248228,,False,4.632174275867237,[],4.632174275867238,9.37554409317469,5.175553293954829,"[4.743369817307447, 4.632174275867238]",0,0.0,4.632174275867237,4.632174275867237,0.7612746733220593,1.3144559068253105,0.0,0.0,2.628911813650621,0,9.264348551734473,0.0,11.893260365385094 +54,,False,2.34482395243653,[],2.3448239524365295,2.3448239524365313,4.7029595206793,[2.3448239524365295],0,0.0,2.34482395243653,2.34482395243653,0.6563985756582035,4.145176047563469,0.0,0,29.016232332944284,0.0,0.0,0.0,29.016232332944284,,False,2.3448239524365295,[],2.3448239524365295,2.3448239524365357,4.632174275867237,[2.3448239524365295],0,0.0,2.3448239524365295,2.3448239524365295,0.569234295858724,3.1851760475634645,0.0,0.0,12.740704190253858,0,9.379295809746118,0.0,22.119999999999976,,False,2.3448239524365295,[],2.3448239524365277,6.9769982283037715,4.743369817307447,"[4.632174275867238, 2.3448239524365277]",0,0.0,2.3448239524365295,2.3448239524365295,0.7633605240519465,3.713001771696228,0.0,0.0,7.426003543392456,0,4.689647904873059,0.0,12.115651448265515 +55,,False,5.345517943888766,[],5.345517943888766,5.345517943888768,2.3448239524365295,[5.345517943888766],0,0.0,5.345517943888766,5.345517943888766,0.6631090561169767,1.144482056111232,0.0,0,8.011374392778624,0.0,0.0,0.0,8.011374392778624,,False,5.345517943888766,[],5.345517943888766,5.3455179438887725,2.3448239524365295,[5.345517943888766],0,0.0,5.345517943888766,5.345517943888766,0.5776470806586911,0.1844820561112277,0.0,0.0,0.7379282244449108,0,21.382071775555065,0.0,22.119999999999976,,False,5.345517943888766,[],5.345517943888766,7.690341896325299,4.632174275867238,"[2.3448239524365277, 5.345517943888766]",0,0.0,5.345517943888766,5.345517943888766,0.7679820548915397,2.9996581036747,0.0,0.0,5.9993162073494,0,10.691035887777533,0.0,16.690352095126933 +56,,False,5.45293632653351,[],5.45293632653351,5.452936326533512,5.345517943888766,[5.45293632653351],0,0.0,5.45293632653351,5.45293632653351,0.6696895963397007,1.0370636734664886,0.0,0,7.2594457142654205,0.0,0.0,0.0,7.2594457142654205,,False,5.45293632653351,[],5.45293632653351,5.452936326533517,5.345517943888766,[5.344482056111228],0,0.0,5.45293632653351,5.45293632653351,0.5858969621837802,0.07706367346648424,0.0,0.0,0.30825469386593696,0,21.81174530613404,0.0,22.119999999999976,,False,5.45293632653351,[],5.45293632653351,10.798454270422281,2.3448239524365277,"[5.345517943888766, 5.45293632653351]",0,0.0,5.344482056111228,5.344482056111228,0.7721255977551347,-0.10845427042228195,0.10845427042228195,0.0,0.0,0.0,10.688964112222456,0.0,10.688964112222456 +57,,False,4.833939091648935,[],4.833939091648935,4.833939091648937,5.45293632653351,[4.833939091648935],0,0.0,4.833939091648935,4.833939091648935,0.6753118367859999,1.6560609083510638,0.0,0,11.592426358457447,0.0,0.0,0.0,11.592426358457447,,False,4.833939091648935,[],4.833939091648934,4.942393362071223,5.344482056111228,[4.942393362071216],0,0.0,4.833939091648935,4.833939091648935,0.5929454439220063,0.5876066379287774,0.0,0.0,2.3504265517151097,0,19.33575636659574,0.0,21.68618291831085,,False,4.833939091648934,[],4.833939091648934,10.28687541818245,5.345517943888766,"[5.45293632653351, 4.833939091648934]",0,0.0,4.942393362071216,4.833939091648934,0.7760042666277475,0.4031245818175506,0.0,0.0,0.8062491636351012,0,9.884786724142431,0.0,10.691035887777533 +58,,False,4.056943191532738,[],4.056943191532737,4.05694319153274,4.833939091648935,[4.056943191532737],0,0.0,4.056943191532738,4.056943191532738,0.6798847325558658,2.433056808467261,0.0,0,17.031397659270826,0.0,0.0,0.0,17.031397659270826,,False,4.056943191532737,[],4.056943191532737,4.056943191532745,4.942393362071216,[4.056943191532737],0,0.0,4.056943191532737,4.056943191532737,0.5986783848434369,1.4730568084672564,0.0,0.0,5.892227233869026,0,16.227772766130947,0.0,22.119999999999973,,False,4.056943191532737,[],4.056943191532735,8.890882283181675,5.45293632653351,"[4.833939091648934, 4.056943191532735]",0,0.0,4.056943191532737,4.056943191532737,0.7791590140366662,1.7991177168183237,0.0,0.0,3.5982354336366473,0,8.113886383065473,0.0,11.71212181670212 +59,,False,6.403958738659293,[],6.403958738659292,6.403958738659297,4.056943191532737,[5.529999999999993],0,0.0,6.403958738659293,6.403958738659293,0.6868466913665814,0.08604126134070444,0.0,0,0.6022888293849311,0.0,0.0,0.0,0.6022888293849311,,False,6.403958738659292,[],6.403958738659291,6.4039587386593,4.056943191532737,[6.403958738659291],0,0.0,5.529999999999993,5.529999999999993,0.6044384182426641,-0.8739587386592991,0.8739587386592991,0.0,0.0,0.0,22.119999999999973,0.0,22.119999999999973,,False,6.403958738659291,[],6.403958738659293,10.460901930192033,4.833939091648934,"[4.056943191532735, 6.403958738659293]",0,0.0,6.403958738659291,6.403958738659291,0.7839619272506162,0.2290980698079661,0.0,0.0,0.4581961396159322,0,12.807917477318583,0.0,13.266113616934515 +60,,False,4.98144919548836,[],4.981449195488359,5.855407934147663,5.529999999999993,[5.855407934147658],0,0.0,4.98144919548836,4.98144919548836,0.6920562819190762,0.6345920658523374,0.0,0,4.442144460966362,0.0,0.0,0.0,4.442144460966362,,False,4.981449195488359,[],4.981449195488358,4.981449195488366,6.403958738659291,[4.286041261340701],0,0.0,5.855407934147658,4.981449195488359,0.6110189454874368,0.548550804511633,0.0,0.0,2.194203218046532,0,23.421631736590633,0.0,25.615834954637165,,False,4.981449195488358,[],4.981449195488358,11.385407934147658,4.056943191532735,"[6.403958738659293, 4.981449195488358]",0,0.0,4.286041261340701,4.286041261340701,0.7852335521477962,-0.6954079341476573,0.6954079341476573,0.0,0.0,0.0,8.572082522681402,0.0,8.572082522681402 +61,,False,3.326495378009777,[],3.326495378009777,3.3264953780097812,5.855407934147658,[3.326495378009777],0,0.0,3.326495378009777,3.326495378009777,0.6954396647987809,3.163504621990219,0.0,0,22.14453235393153,0.0,0.0,0.0,22.14453235393153,,False,3.326495378009777,[],3.3264953780097777,4.021903312157443,4.286041261340701,[4.021903312157435],0,0.0,3.326495378009777,3.326495378009777,0.615292686963863,1.5080966878425572,0.0,0.0,6.032386751370229,0,13.305981512039107,0.0,19.338368263409336,,False,3.3264953780097777,[],3.326495378009776,8.30794457349814,6.403958738659293,"[4.981449195488358, 3.326495378009776]",0,0.0,4.021903312157435,3.3264953780097777,0.7875931947712161,2.382055426501858,0.0,0.0,4.764110853003716,0,8.04380662431487,0.0,12.807917477318586 +62,,False,5.1023476825496665,[],5.1023476825496665,5.102347682549671,3.326495378009777,[5.1023476825496665],0,0.0,5.1023476825496665,5.1023476825496665,0.700487188039663,1.3876523174503292,0.0,0,9.713566222152306,0.0,0.0,0.0,9.713566222152306,,False,5.1023476825496665,[],5.1023476825496665,5.1023476825496745,4.021903312157435,[5.1023476825496665],0,0.0,5.1023476825496665,5.1023476825496665,0.621668497859278,0.4276523174503257,0.0,0.0,1.710609269801303,0,20.409390730198666,0.0,22.11999999999997,,False,5.1023476825496665,[],5.102347682549668,8.428843060559451,4.981449195488358,"[3.326495378009776, 5.102347682549668]",0,0.0,5.1023476825496665,5.1023476825496665,0.7911134440026383,2.26115693944055,0.0,0.0,4.5223138788811,0,10.204695365099333,0.0,14.727009243980433 +63,,False,4.5673907194519865,[],4.5673907194519865,4.567390719451991,5.1023476825496665,[4.5673907194519865],0,0.0,4.5673907194519865,4.5673907194519865,0.7048656627138931,1.9226092805480093,0.0,0,13.458264963836065,0.0,0.0,0.0,13.458264963836065,,False,4.5673907194519865,[],4.5673907194519865,4.5673907194519945,5.1023476825496665,[4.5673907194519865],0,0.0,4.5673907194519865,4.5673907194519865,0.6271991958275703,0.9626092805480058,0.0,0.0,3.850437122192023,0,18.269562877807946,0.0,22.11999999999997,,False,4.5673907194519865,[],4.567390719451985,9.669738402001661,3.326495378009776,"[5.102347682549668, 4.567390719451985]",0,0.0,4.5673907194519865,4.5673907194519865,0.7941670846440367,1.0202615979983394,0.0,0.0,2.0405231959966788,0,9.134781438903973,0.0,11.175304634900652 +64,,False,5.477754099433527,[],5.477754099433527,5.477754099433532,4.5673907194519865,[5.477754099433527],0,0.0,5.477754099433527,5.477754099433527,0.7099509242175172,1.0122459005664686,0.0,0,7.08572130396528,0.0,0.0,0.0,7.08572130396528,,True,5.477754099433527,[],0,7.993605777301127e-15,4.5673907194519865,[0.0],0,0.0,5.477754099433527,5.477754099433527,0.6336226760481736,0.05224590056646505,0.0,0.0,0.2089836022658602,0,21.91101639773411,0.0,22.11999999999997,,False,0,[],0.0,4.567390719451993,5.102347682549668,"[4.567390719451985, 0.0]",0,0.0,0.0,0.0,0.7941670846440367,6.122609280548008,0.0,0.0,12.245218561096015,0,0.0,0.0,12.245218561096015 +65,,False,4.7409713552611095,[],4.7409713552611095,4.740971355261115,5.477754099433527,[0.05224590056646505],0,0.0,4.7409713552611095,4.7409713552611095,0.7142128032429589,1.7490286447388863,0.0,0,12.243200513172205,0.0,0.0,0.0,12.243200513172205,,True,4.7409713552611095,[],0,7.993605777301127e-15,0.0,[0.0],0,0.0,0.05224590056646505,0.05224590056646505,0.6244743727036988,-4.688725454694644,4.688725454694644,0.0,0.0,0.0,0.2089836022658602,0.0,0.2089836022658602,,False,0,[],0.0,7.993605777301127e-15,4.567390719451985,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7941670846440367,10.689999999999992,0.0,0.0,21.379999999999985,0,0.0,0.0,21.379999999999985 +66,,False,5.339820964186644,[],5.339820964186643,10.028546418881293,0.05224590056646505,[0.0],0,0.0,1.8012745453053514,1.8012745453053514,0.7080770443298271,-3.5385464188812925,3.5385464188812925,0,0.0,131.35084306887356,0.0,0.0,131.35084306887356,,True,5.339820964186643,[],0,7.993605777301127e-15,0.0,[0.0],0,0.0,0.0,0.0,0.6143077895062519,-10.028546418881287,10.028546418881287,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,7.993605777301127e-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7941670846440367,10.689999999999992,0.0,0.0,21.379999999999985,0,0.0,0.0,21.379999999999985 +67,,False,4.992619850055427,[],4.992619850055427,15.021166268936721,0.0,[0.0],0,0.0,0.0,0.0,0.6974605327250539,-8.531166268936719,8.531166268936719,0,0.0,316.676891902931,0.0,0.0,316.676891902931,,True,4.992619850055427,[],0,7.993605777301127e-15,0.0,[0.0],0,0.0,0.0,0.0,0.605097201720048,-15.021166268936714,15.021166268936714,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,7.993605777301127e-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7941670846440367,10.689999999999992,0.0,0.0,21.379999999999985,0,0.0,0.0,21.379999999999985 +68,,False,4.224663894043056,[],4.224663894043054,19.245830162979775,0.0,[0.0],0,0.0,0.0,0.0,0.6887225875727231,-12.755830162979775,12.755830162979775,0,0.0,473.4964156498092,0.0,0.0,473.4964156498092,,False,4.224663894043054,[],24.775830162979762,24.77583016297977,0.0,[10.689999999999992],0,0.0,0.0,0.0,0.5975164055138447,-19.245830162979768,19.245830162979768,0.0,0.0,0.0,0.0,0.0,0.0,,False,24.775830162979762,[],24.77583016297976,24.775830162979766,0.0,"[0.0, 24.77583016297976]",0,0.0,10.689999999999992,10.689999999999992,0.7675186857659372,-14.08583016297977,14.08583016297977,0.0,0.0,0.0,21.379999999999985,0.0,21.379999999999985 +69,,False,5.773140855889249,[],5.773140855889249,25.018971018869024,0.0,[10.689999999999992],0,0.0,0.0,0.0,0.6771299648851624,-18.528971018869022,18.528971018869022,0,0.0,687.795404220418,0.0,0.0,687.795404220418,,False,5.773140855889249,[],5.773140855889248,19.858971018869028,10.689999999999992,[0.0],0,0.0,10.689999999999992,0.0,0.5874589711219196,-14.328971018869025,14.328971018869025,0.0,0.0,0.0,42.75999999999997,0.0,42.75999999999997,,False,5.773140855889248,[],5.773140855889252,30.548971018869018,0.0,"[24.77583016297976, 5.773140855889252]",0,0.0,0.0,0.0,0.7545997621088887,-19.858971018869017,19.858971018869017,0.0,0.0,0.0,0.0,0.0,0.0 +70,,False,6.405205305878188,[],6.405205305878186,20.734176324747217,10.689999999999992,[0.0],0,0.0,10.689999999999992,0.0,0.6647164518924117,-14.244176324747219,14.244176324747219,0,0.0,528.7438251746167,0.0,0.0,528.7438251746167,,False,6.405205305878186,[],6.405205305878184,26.26417632474721,0.0,[24.77583016297976],0,0.0,0.0,0.0,0.5766893553185979,-20.73417632474721,20.73417632474721,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.405205305878184,[],6.405205305878182,12.178346161767443,24.77583016297976,"[5.773140855889252, 6.405205305878182]",0,0.0,24.77583016297976,4.916859144110742,0.754838729339219,-1.488346161767442,1.488346161767442,0.0,0.0,0.0,49.55166032595952,0.0,49.55166032595952 +71,,False,6.392325753491903,[],6.392325753491905,27.12650207823912,0.0,[24.77583016297976],0,0.0,0.0,0.0,0.6527735176467013,-20.636502078239122,20.636502078239122,0,0.0,766.0269571442361,0.0,0.0,766.0269571442361,,False,6.392325753491905,[],6.392325753491904,7.880671915259356,24.77583016297976,[5.773140855889252],0,0.0,24.77583016297976,4.041653838232548,0.5776879088272543,-2.3506719152593565,2.3506719152593565,0.0,0.0,0.0,99.10332065191903,0.0,99.10332065191903,,False,6.392325753491904,[],6.392325753491902,12.797531059370094,5.773140855889252,"[6.405205305878182, 6.392325753491902]",0,0.0,5.773140855889252,4.28479469412181,0.75331987800412,-2.1075310593700944,2.1075310593700944,0.0,0.0,0.0,11.546281711778503,0.0,11.546281711778503 +72,,False,4.5065675177966735,[],4.506567517796675,6.857239433056037,24.77583016297976,[5.773140855889252],0,0.0,24.77583016297976,4.139328084740637,0.6560974069101843,-0.3672394330560369,0.3672394330560369,0,0.0,13.631927755040088,0.0,0.0,13.631927755040088,,True,4.506567517796675,[],0,2.107531059370104,5.773140855889252,[2.1075310593700944],0,0.0,5.773140855889252,3.422468940629895,0.5799613053937517,-1.0840985771667802,1.0840985771667802,0.0,0.0,0.0,23.092563423557007,0.0,23.092563423557007,,False,0,[],0.0,6.392325753491912,6.405205305878182,"[6.392325753491902, 0.0]",0,0.0,2.1075310593700944,0.0,0.75331987800412,4.2976742465080875,0.0,0.0,8.595348493016175,0,4.215062118740189,0.0,12.810410611756364 +73,,False,5.923162608341952,[],5.923162608341952,7.007261185508738,5.773140855889252,[2.1075310593700944],0,0.0,5.773140855889252,5.405901422833215,0.6602472705154971,-0.5172611855087377,0.5172611855087377,0,0.0,19.200735206084342,0.0,0.0,19.200735206084342,,True,5.923162608341952,[],0,9.769962616701378e-15,2.1075310593700944,[0.0],0,0.0,2.1075310593700944,1.0234324822033143,0.5733755771139555,-4.899730126138638,4.899730126138638,0.0,0.0,0.0,8.430124237480378,0.0,8.430124237480378,,False,0,[],0.0,9.769962616701378e-15,6.392325753491902,"[0.0, 0.0]",0,0.0,0.0,0.0,0.75331987800412,10.68999999999999,0.0,0.0,21.37999999999998,0,0.0,0.0,21.37999999999998 +74,,False,6.706604953678462,[],6.706604953678462,11.606335079817105,2.1075310593700944,[0.0],0,0.0,2.1075310593700944,1.5902698738613568,0.6526377069112107,-5.116335079817105,5.116335079817105,0,0.0,189.91835816281093,0.0,0.0,189.91835816281093,,True,6.706604953678462,[],0,9.769962616701378e-15,0.0,[0.0],0,0.0,0.0,0.0,0.56306393383992,-11.6063350798171,11.6063350798171,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,9.769962616701378e-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.75331987800412,10.68999999999999,0.0,0.0,21.37999999999998,0,0.0,0.0,21.37999999999998 +75,,False,5.873589415635379,[],5.873589415635379,17.479924495452487,0.0,[0.0],0,0.0,0.0,0.0,0.6425178413999826,-10.989924495452485,10.989924495452485,0,0.0,407.9459972711962,0.0,0.0,407.9459972711962,,True,5.873589415635379,[],0,9.769962616701378e-15,0.0,[0.0],0,0.0,0.0,0.0,0.5543330082063844,-17.47992449545248,17.47992449545248,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,9.769962616701378e-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.75331987800412,10.68999999999999,0.0,0.0,21.37999999999998,0,0.0,0.0,21.37999999999998 +76,,False,5.649086732629106,[],5.6490867326291045,23.12901122808159,0.0,[0.0],0,0.0,0.0,0.0,0.633076505833836,-16.639011228081593,16.639011228081593,0,0.0,617.6400967863887,0.0,0.0,617.6400967863887,,True,5.6490867326291045,[],0,9.769962616701378e-15,0.0,[0.0],0,0.0,0.0,0.0,0.5461874850650124,-23.129011228081584,23.129011228081584,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,9.769962616701378e-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.75331987800412,10.68999999999999,0.0,0.0,21.37999999999998,0,0.0,0.0,21.37999999999998 +77,,False,3.7771264633246933,[],3.777126463324695,26.906137691406286,0.0,[0.0],0,0.0,0.0,0.0,0.6269170603779503,-20.416137691406284,20.416137691406284,0,0.0,757.8470311050012,0.0,0.0,757.8470311050012,,True,3.777126463324695,[],0,9.769962616701378e-15,0.0,[0.0],0,0.0,0.0,0.0,0.5408734163988338,-26.90613769140628,26.90613769140628,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,9.769962616701378e-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.75331987800412,10.68999999999999,0.0,0.0,21.37999999999998,0,0.0,0.0,21.37999999999998 +78,,False,5.620548215961735,[],5.620548215961733,32.52668590736802,0.0,[0.0],0,0.0,0.0,0.0,0.6179702113323725,-26.036685907368017,26.036685907368017,0,0.0,966.4817808815008,0.0,0.0,966.4817808815008,,False,5.620548215961733,[],38.056685907368006,38.05668590736801,0.0,[10.68999999999999],0,0.0,0.0,0.0,0.5331545120730066,-32.52668590736801,32.52668590736801,0.0,0.0,0.0,0.0,0.0,0.0,,False,38.056685907368006,[],38.056685907368006,38.05668590736801,0.0,"[0.0, 38.056685907368006]",0,0.0,10.68999999999999,10.68999999999999,0.7076695980221965,-27.366685907368016,27.366685907368016,0.0,0.0,0.0,21.37999999999998,0.0,21.37999999999998 +79,,False,4.839062623136937,[],4.839062623136935,37.36574853050495,0.0,[10.68999999999999],0,0.0,0.0,0.0,0.6104694299630821,-30.875748530504953,30.875748530504953,0,0.0,1146.1077854523437,0.0,0.0,1146.1077854523437,,False,4.839062623136935,[],4.839062623136934,32.205748530504955,10.68999999999999,[0.0],0,0.0,10.68999999999999,0.0,0.5266832043015718,-26.675748530504958,26.675748530504958,0.0,0.0,0.0,42.75999999999996,0.0,42.75999999999996,,False,4.839062623136934,[],4.839062623136936,42.895748530504946,0.0,"[38.056685907368006, 4.839062623136936]",0,0.0,0.0,0.0,0.699080065971754,-32.20574853050495,32.20574853050495,0.0,0.0,0.0,0.0,0.0,0.0 +80,,False,4.643254974231806,[],4.643254974231808,31.31900350473677,10.68999999999999,[0.0],0,0.0,10.68999999999999,0.0,0.6034413719384962,-24.829003504736768,24.829003504736768,0,0.0,921.6526100958288,0.0,0.0,921.6526100958288,,False,4.643254974231808,[],4.6432549742318106,36.849003504736764,0.0,[36.84900350473676],0,0.0,0.0,0.0,0.5206197391406217,-31.319003504736767,31.319003504736767,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.6432549742318106,[],4.643254974231812,9.482317597368748,38.056685907368006,"[4.839062623136936, 4.643254974231812]",0,0.0,36.84900350473676,4.643254974231809,0.7025444208653856,1.2076824026312476,1.7763568394002505e-15,0.0,2.415364805262495,0,73.69800700947351,0.0,76.11337181473601 +81,,False,5.556121798533965,[],5.5561217985339635,36.875125303270735,0.0,[36.84900350473676],0,0.0,0.0,0.0,0.5952413738201293,-30.385125303270733,30.385125303270733,0,0.0,1127.8958512574095,0.0,0.0,1127.8958512574095,,False,5.5561217985339635,[],5.556121798533966,5.556121798533972,36.84900350473676,[5.556121798533968],0,0.0,36.84900350473676,5.5299999999999905,0.527070018457871,-0.026121798533973006,0.026121798533973006,0.0,0.0,0.0,147.39601401894703,0.0,147.39601401894703,,False,5.556121798533966,[],5.55612179853397,10.199376772765781,4.839062623136936,"[4.643254974231812, 5.55612179853397]",0,0.0,5.556121798533968,5.556121798533966,0.7065864625659174,0.4906232272342175,0.0,0.0,0.981246454468435,0,11.112243597067936,0.0,12.09349005153637 +82,,False,6.363886524417105,[],6.3638865244171035,6.390008322951083,36.84900350473676,[5.556121798533968],0,0.0,36.74901182768784,6.363886524417104,0.6014446059258021,0.09999167704891843,8.881784197001252e-16,0,0.699941739342429,0.0,0.0,0.0,0.699941739342429,,False,6.3638865244171035,[],6.363886524417104,6.363886524417109,5.556121798533968,[5.13387820146603],0,0.0,5.556121798533968,5.529999999999995,0.5323098305345924,-0.8338865244171085,0.8338865244171085,0.0,0.0,0.0,22.22448719413587,0.0,22.22448719413587,,False,6.363886524417104,[],6.363886524417106,11.920008322951073,4.643254974231812,"[5.55612179853397, 6.363886524417106]",0,0.0,5.13387820146603,5.13387820146603,0.7081210935930743,-1.2300083229510745,1.2300083229510745,0.0,0.0,0.0,10.26775640293206,0.0,10.26775640293206 +83,,False,7.539162716269333,[],7.539162716269332,8.373049240686445,5.556121798533968,[5.13387820146603],0,0.0,5.656113475582886,5.6561134755828855,0.6040978146472442,-1.8830492406864465,1.8830492406864474,0,0.0,69.8987878142809,0.0,0.0,69.8987878142809,,False,7.539162716269332,[],7.539162716269332,8.76917103922041,5.13387820146603,[5.55612179853397],0,0.0,5.13387820146603,4.299991677048921,0.5329882471030358,-3.2391710392204107,3.2391710392204107,0.0,0.0,0.0,20.53551280586412,0.0,20.53551280586412,,False,7.539162716269332,[],7.539162716269334,13.903049240686439,5.55612179853397,"[6.363886524417106, 7.539162716269334]",0,0.0,5.55612179853397,4.326113475582895,0.7057261703712688,-3.213049240686437,3.213049240686437,0.0,0.0,0.0,11.11224359706794,0.0,11.11224359706794 +84,,False,3.559958552316202,[],3.559958552316204,6.7991295915366186,5.13387820146603,[5.55612179853397],0,0.0,5.13387820146603,3.2508289607795824,0.6066785360758232,-0.3091295915366188,0.3091295915366197,0,0.0,11.474890437839289,0.0,0.0,11.474890437839289,,True,3.559958552316204,[],0,3.2130492406864404,5.55612179853397,[3.213049240686437],0,0.0,5.55612179853397,2.316950759313559,0.5339722840394193,-1.2430077930026449,1.2430077930026449,0.0,0.0,0.0,22.22448719413588,0.0,22.22448719413588,,False,0,[],0.0,7.539162716269333,6.363886524417106,"[7.539162716269334, 0.0]",0,0.0,3.213049240686437,0.0,0.7057261703712688,3.1508372837306693,0.0,0.0,6.301674567461339,0,6.426098481372874,0.0,12.727773048834212 +85,,False,6.19072725611364,[],6.19072725611364,7.433735049116289,5.55612179853397,[3.213049240686437],0,0.0,5.55612179853397,5.24699220699735,0.6101261744079391,-0.943735049116289,0.9437350491162908,0,0.0,35.031445023196646,0.0,0.0,35.031445023196646,,True,6.19072725611364,[],0,3.552713678800501e-15,3.213049240686437,[0.0],0,0.0,3.213049240686437,1.970041447683792,0.530884332043969,-4.220685808429849,4.220685808429849,0.0,0.0,0.0,12.852196962745747,0.0,12.852196962745747,,False,0,[],0.0,-8.881784197001252e-16,7.539162716269334,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7057261703712688,10.690000000000003,0.0,0.0,21.380000000000006,0,0.0,0.0,21.380000000000006 +86,,False,5.617640845511145,[],5.617640845511145,9.838326653940996,3.213049240686437,[0.0],0,0.0,3.213049240686437,2.269314191570146,0.6074828814473501,-3.3483266539409975,3.3483266539409993,0,0.0,124.28988539428981,0.0,0.0,124.28988539428981,,False,5.617640845511145,[],15.36832665394099,15.368326653940994,0.0,[10.690000000000003],0,0.0,0.0,0.0,0.5240776996934552,-9.838326653940994,9.838326653940994,0.0,0.0,0.0,0.0,0.0,0.0,,False,15.36832665394099,[],15.368326653940988,15.368326653940986,0.0,"[0.0, 15.368326653940988]",0,0.0,10.690000000000003,10.690000000000003,0.7053705141887703,-4.678326653940987,4.678326653940987,0.0,0.0,0.0,21.380000000000006,0.0,21.380000000000006 +87,,False,6.21707079698011,[],6.217070796980112,16.055397450921106,0.0,[10.690000000000003],0,0.0,0.0,0.0,0.5989836588689778,-9.565397450921107,9.56539745092111,0,0.0,355.06755337819146,0.0,0.0,355.06755337819146,,True,6.217070796980112,[],0,4.6783266539409905,10.690000000000003,[0.0],0,0.0,10.690000000000003,0.8516733460590089,0.5186619933943365,-5.365397450921103,5.365397450921103,0.0,0.0,0.0,42.76000000000001,0.0,42.76000000000001,,False,0,[],0.0,15.368326653940986,0.0,"[15.368326653940988, 0.0]",0,0.0,0.0,0.0,0.7053705141887703,-4.678326653940987,4.678326653940987,0.0,0.0,0.0,0.0,0.0,0.0 +88,,False,5.226288269498875,[],5.226288269498877,10.59168572041998,10.690000000000003,[0.0],0,0.0,10.690000000000003,1.1246025490788938,0.5945221511012547,-4.1016857204199795,4.101685720419981,0,0.0,152.25457394198963,0.0,0.0,152.25457394198963,,True,5.226288269498877,[],0,4.6783266539409905,0.0,[4.678326653940987],0,0.0,0.0,0.0,0.512632801619559,-10.59168572041998,10.59168572041998,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,-1.7763568394002505e-15,15.368326653940988,"[0.0, 0.0]",0,0.0,4.678326653940987,0.0,0.7053705141887703,10.690000000000001,0.0,0.0,21.380000000000003,0,9.356653307881974,0.0,30.736653307881976 +89,,False,5.847401432576639,[],5.847401432576639,16.43908715299662,0.0,[4.678326653940987],0,0.0,0.0,0.0,0.5868890636335055,-9.949087152996618,9.94908715299662,0,0.0,369.31011511923447,0.0,0.0,369.31011511923447,,True,5.847401432576639,[],0,3.552713678800501e-15,4.678326653940987,[0.0],0,0.0,4.678326653940987,0.0,0.5060510939298601,-11.760760499055632,11.760760499055632,0.0,0.0,0.0,18.713306615763948,0.0,18.713306615763948,,False,0,[],0.0,-1.7763568394002505e-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7053705141887703,10.690000000000001,0.0,0.0,21.380000000000003,0,0.0,0.0,21.380000000000003 +90,,False,5.174833011991471,[],5.17483301199147,16.935593511047102,4.678326653940987,[0.0],0,0.0,4.678326653940987,0.0,0.580295580617983,-10.445593511047104,10.445593511047104,0,0.0,387.7404311300685,0.0,0.0,387.7404311300685,,True,5.17483301199147,[],0,3.552713678800501e-15,0.0,[0.0],0,0.0,0.0,0.0,0.5003657958052785,-16.935593511047102,16.935593511047102,0.0,0.0,0.0,0.0,0.0,0.0,,False,0,[],0.0,-1.7763568394002505e-15,0.0,"[0.0, 0.0]",0,0.0,0.0,0.0,0.7053705141887703,10.690000000000001,0.0,0.0,21.380000000000003,0,0.0,0.0,21.380000000000003 +91,,False,3.783145107640761,[],3.7831451076407627,20.718738618687865,0.0,[0.0],0,0.0,0.0,0.0,0.5755682890098319,-14.228738618687865,14.228738618687865,0,0.0,528.1707775256936,0.0,0.0,528.1707775256936,,False,3.7831451076407627,[],26.248738618687863,26.248738618687867,0.0,[10.690000000000001],0,0.0,0.0,0.0,0.49628964029674066,-20.718738618687865,20.718738618687865,0.0,0.0,0.0,0.0,0.0,0.0,,False,26.248738618687863,[],26.248738618687863,26.24873861868786,0.0,"[0.0, 26.248738618687863]",0,0.0,10.690000000000001,10.690000000000001,0.6885205390711132,-15.558738618687862,15.558738618687862,0.0,0.0,0.0,21.380000000000003,0.0,21.380000000000003 +92,,False,5.734501064880046,[],5.734501064880046,26.45323968356791,0.0,[10.690000000000001],0,0.0,0.0,0.0,0.568547713968799,-19.963239683567913,19.963239683567913,0,0.0,741.0354570540409,0.0,0.0,741.0354570540409,,False,5.734501064880046,[],5.734501064880045,21.29323968356791,10.690000000000001,[0.0],0,0.0,10.690000000000001,0.0,0.4902360777076957,-15.76323968356791,15.76323968356791,0.0,0.0,0.0,42.760000000000005,0.0,42.760000000000005,,False,5.734501064880045,[],5.734501064880047,31.983239683567906,0.0,"[26.248738618687863, 5.734501064880047]",0,0.0,0.0,0.0,0.6801222130963501,-21.293239683567908,21.293239683567908,0.0,0.0,0.0,0.0,0.0,0.0 +93,,False,4.0455027380385795,[],4.045502738038581,19.808742421606492,10.690000000000001,[0.0],0,0.0,10.690000000000001,0.0,0.5636970803276414,-13.31874242160649,13.31874242160649,0,0.0,494.3917186900329,0.0,0.0,494.3917186900329,,False,4.045502738038581,[],4.04550273803858,25.33874242160649,0.0,[25.33874242160649],0,0.0,0.0,0.0,0.4860535692704733,-19.808742421606492,19.808742421606492,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.04550273803858,[],4.045502738038582,9.780003802918625,26.248738618687863,"[5.734501064880047, 4.045502738038582]",0,0.0,25.33874242160649,4.045502738038582,0.6828512891546861,0.9099961970813748,0.0,0.0,1.8199923941627496,0,50.67748484321298,0.0,52.49747723737573 +94,,False,5.7699773599307935,[],5.769977359930792,25.578719781537284,0.0,[25.33874242160649],0,0.0,0.0,0.0,0.5569202567281499,-19.088719781537286,19.088719781537286,0,0.0,708.573278290664,0.0,0.0,708.573278290664,,False,5.769977359930792,[],5.769977359930794,5.769977359930795,25.33874242160649,[5.769977359930794],0,0.0,25.33874242160649,5.529999999999998,0.49173227795828595,-0.23997735993079417,0.23997735993079417,0.0,0.0,0.0,101.35496968642596,0.0,101.35496968642596,,False,5.769977359930794,[],5.769977359930794,9.815480097969374,5.734501064880047,"[4.045502738038582, 5.769977359930794]",0,0.0,5.769977359930794,5.769977359930794,0.6866640831946261,0.8745199020306273,0.0,0.0,1.7490398040612547,0,11.539954719861589,0.0,13.288994523922844 +95,,False,6.268389522403902,[],6.268389522403904,6.508366882334698,25.33874242160649,[5.769977359930794],0,0.0,25.33874242160649,6.250022640069204,0.5625947517944117,-0.018366882334698076,0.018366882334698076,0,0.0,0.6817786722639926,0.0,0.0,0.6817786722639926,,False,6.268389522403904,[],6.268389522403903,6.268389522403905,5.769977359930794,[4.9200226400692095],0,0.0,5.769977359930794,5.53,0.4967663188186131,-0.7383895224039039,0.7383895224039039,0.0,0.0,0.0,23.079909439723178,0.0,23.079909439723178,,False,6.268389522403903,[],6.2683895224039015,12.038366882334692,4.045502738038582,"[5.769977359930794, 6.2683895224039015]",0,0.0,4.9200226400692095,4.9200226400692095,0.6879304850902708,-1.3483668823346937,1.3483668823346937,0.0,0.0,0.0,9.840045280138419,0.0,9.840045280138419 +96,,False,4.132358910020625,[],4.132358910020625,4.870748432424528,5.769977359930794,[4.870748432424529],0,0.0,4.150725792355323,4.132358910020625,0.5662809392414035,1.6192515675754713,0.0,0,11.334760973028299,0.0,0.0,0.0,11.334760973028299,,False,4.132358910020625,[],4.132358910020624,5.480725792355319,4.9200226400692095,[5.480725792355318],0,0.0,4.870748432424529,4.132358910020625,0.5010072685696376,0.0492742076446806,0.0,0.0,0.1970968305787224,0,19.482993729698116,0.0,19.680090560276838,,False,4.132358910020624,[],4.132358910020626,10.400748432424525,5.769977359930794,"[6.2683895224039015, 4.132358910020626]",0,0.0,5.480725792355318,4.132358910020624,0.6905604186202599,0.28925156757547654,0.0,0.0,0.5785031351509531,0,10.961451584710636,0.0,11.539954719861589 +97,,False,5.145861852428309,[],5.14586185242831,5.145861852428309,4.870748432424529,[5.14586185242831],0,0.0,5.145861852428309,5.145861852428309,0.5707852480210789,1.344138147571691,0.0,0,9.408967033001836,0.0,0.0,0.0,9.408967033001836,,False,5.14586185242831,[],5.145861852428311,5.145861852428312,5.480725792355318,[5.145861852428311],0,0.0,5.14586185242831,5.14586185242831,0.5061894649371314,0.3841381475716883,0.0,0.0,1.5365525902867532,0,20.58344740971324,0.0,22.119999999999994,,False,5.145861852428311,[],5.145861852428309,9.278220762448932,6.2683895224039015,"[4.132358910020626, 5.145861852428309]",0,0.0,5.145861852428311,5.145861852428311,0.693774045941019,1.411779237551067,0.0,0.0,2.823558475102134,0,10.291723704856622,0.0,13.115282179958756 +98,,False,5.878673548190895,[],5.878673548190895,5.878673548190894,5.14586185242831,[5.529999999999999],0,0.0,5.878673548190895,5.878673548190895,0.5758178576960733,0.6113264518091057,0.0,0,4.27928516266374,0.0,0.0,0.0,4.27928516266374,,False,5.878673548190895,[],5.878673548190895,5.878673548190896,5.145861852428311,[5.544138147571693],0,0.0,5.529999999999999,5.529999999999999,0.511284032451784,-0.348673548190896,0.348673548190896,0.0,0.0,0.0,22.119999999999997,0.0,22.119999999999997,,False,5.878673548190895,[],5.878673548190897,11.024535400619202,4.132358910020626,"[5.145861852428309, 5.878673548190897]",0,0.0,5.544138147571693,5.544138147571693,0.6966973539637307,-0.3345354006192025,0.3345354006192025,0.0,0.0,0.0,11.088276295143386,0.0,11.088276295143386 +99,,False,4.76040549180619,[],4.760405491806191,5.109079039997086,5.529999999999999,[5.109079039997087],0,0.0,4.76040549180619,4.76040549180619,0.5798074776864464,1.380920960002915,0.0,0,9.666446720020407,0.0,0.0,0.0,9.666446720020407,,False,4.760405491806191,[],4.760405491806191,5.094940892425394,5.544138147571693,[5.094940892425393],0,0.0,5.109079039997087,4.760405491806191,0.5158806215093871,0.435059107574606,0.0,0.0,1.740236430298424,0,20.436316159988348,0.0,22.17655259028677,,False,4.760405491806191,[],4.760405491806191,10.639079039997084,5.145861852428309,"[5.878673548190897, 4.760405491806191]",0,0.0,5.094940892425393,4.760405491806191,0.6995500490187062,0.050920960002915905,0.0,0.0,0.10184192000583181,0,10.189881784850787,0.0,10.291723704856619 diff --git a/tests/additional_files/test_sim_disruption_example_6_1_RP.csv b/tests/additional_files/test_sim_disruption_example_6_1_RP.csv index b52a1cd..8f71f54 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_RP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_RP.csv @@ -1,101 +1,101 @@ -t,i=1 pr=-1,DISR,IO:EXT|-1,IOPL:EXT|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:EXT|-1,DMFS:-2,FR:-2,IL:-1,BO:EXT|-1,ODI:EXT|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:3|-3,OO:3|-3,IS:3|-3,ISPL:3|-3,IDI:3|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC,i=3 pr=-3,DISR,IO:2|-3,IOPL:2|-3,OQ:EXT|-4,OO:EXT|-4,IS:EXT|-4,ISPL:EXT|-4,IDI:EXT|-4,RM:-4,OS:2|-3,DMFS:-4,FR:-4,IL:-3,BO:2|-3,ODI:2|-3,HC,SC,ITHC,REV,TC -0,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,2.6018801180469200,0,0,18.213160826328400,0.0,0.0,0.0,18.213160826328400,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,1.6418801180469200,0,0,6.567520472187680,0,15.552479527812300,0.0,22.12,,False,3.8881198819530800,[],3.888119881953080,3.888119881953080,0,"[0, 3.888119881953079]",0,0,3.8881198819530800,3.8881198819530800,1.0,6.80188011804692,0,0,13.60376023609380,0,7.776239763906160,0.0,21.38 -1,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,1.1710978153106200,0,0,8.197684707174320,0.0,0.0,0.0,8.197684707174320,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,0.2110978153106170,0,0,0.8443912612424680,0,21.275608738757500,0.0,22.12,,False,5.318902184689380,[],5.318902184689380,9.207022066642460,0,"[3.888119881953079, 5.318902184689383]",0,0,5.318902184689380,5.318902184689380,1.0,1.482977933357540,0,0,2.965955866715070,0,10.637804369378800,0.0,13.60376023609380 -2,,False,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[0.2110978153106169],0,0.0,5.279041292200140,5.279041292200140,1.0,1.210958707799860,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200140,[],5.279041292200140,5.279041292200140,0,[5.279041292200137],5.318902184689380,0.0,0.2110978153106170,0.2110978153106170,0.6501503996393930,-5.06794347688952,5.06794347688952,0,10.637804369378800,0.0,0.8443912612424680,0.0,11.482195630621200,,False,5.279041292200140,[],5.279041292200140,10.59794347688950,3.888119881953080,"[5.318902184689383, 5.279041292200137]",0,0.0,5.279041292200140,5.279041292200140,1.0,0.09205652311047890,0,0,0.1841130462209580,0,10.558082584400300,0.0,10.742195630621200 -3,,False,6.010515284806530,[],6.010515284806530,11.078458761696000,0.2110978153106170,[10.59794347688952],0,0.0,1.4220565231104800,1.4220565231104800,0.776135381349717,-4.588458761696050,4.588458761696050,0,0.0,170.32358923415700,0.0,0.0,170.32358923415700,,False,6.010515284806530,[],6.010515284806530,6.010515284806530,10.59794347688950,[5.410958707799862],0.0,0.0,10.59794347688950,5.53,0.7292982961614800,-0.4805152848065260,0.4805152848065260,0,0.0,0.0,42.39177390755810,0.0,42.39177390755810,,False,6.010515284806530,[],6.010515284806530,11.289556577006700,5.318902184689380,"[5.279041292200137, 6.010515284806527]",0,0.0,5.410958707799860,5.410958707799860,0.9707484557578860,-0.5995565770066640,0.5995565770066640,0,0,0.0,10.821917415599700,0.0,10.821917415599700 -4,,False,4.419121865976490,[],4.419121865976480,4.899637150783010,10.59794347688950,[0.0],0,0.0,9.007580627672530,4.419121865976490,0.8158406680188100,1.590362849216990,0.0,0,11.132539944518900,0.0,0.0,0.0,11.132539944518900,,True,4.419121865976480,[],4.419121865976480,5.018678442983150,0,[5.018678442983148],5.410958707799860,0.0,0.0,0.0,0.5999478070535570,-4.89963715078301,4.89963715078301,0.0,10.821917415599700,0.0,0.0,0.0,10.821917415599700,,False,4.419121865976480,[],4.419121865976480,10.42963715078300,5.279041292200140,"[6.010515284806527, 4.419121865976482]",0,0.0,5.018678442983150,4.419121865976480,0.9759365956106660,0.26036284921698900,0.0,0,0.5207256984339780,0,10.037356885966300,0.0,10.558082584400300 -5,,False,4.474830192821850,[],4.474830192821850,9.374467343604860,0.0,[0.0],0,0.0,1.590362849216990,1.590362849216990,0.7457369456524100,-2.8844673436048600,2.8844673436048600,0,0.0,107.07142779461300,0.0,0.0,107.07142779461300,,True,4.474830192821850,[],4.474830192821850,4.474830192821850,0,[4.474830192821853],10.42963715078300,0.0,0.0,0.0,0.5086032652247510,-9.374467343604860,9.374467343604860,0.0,20.85927430156600,0.0,0.0,0.0,20.85927430156600,,False,4.474830192821850,[],4.474830192821850,8.893952058798340,6.010515284806530,"[4.419121865976482, 4.474830192821853]",0,0.0,4.474830192821850,4.474830192821850,0.979600348728758,1.796047941201660,0.0,0,3.592095882403330,0,8.949660385643710,0.0,12.541756268047000 -6,,False,2.3874509873064000,[],2.3874509873064000,11.761918330911300,0.0,[0.0],0,0.0,0.0,0.0,0.6897104042392170,-5.271918330911260,5.271918330911260,0,0.0,195.69360844342600,0.0,0.0,195.69360844342600,,True,2.3874509873064000,[],2.3874509873064000,2.3874509873064000,0,[2.3874509873064005],14.904467343604900,0.0,0.0,0.0,0.4703923624820010,-11.761918330911300,11.761918330911300,0.0,29.808934687209700,0.0,0.0,0.0,29.808934687209700,,False,2.3874509873064000,[],2.3874509873064000,6.862281180128260,4.419121865976480,"[4.474830192821853, 2.3874509873063996]",0,0.0,2.3874509873064000,2.3874509873064000,0.9811329560555450,3.8277188198717400,0.0,0,7.655437639743490,0,4.774901974612800,0.0,12.43033961435630 -7,,False,5.950369682396900,[],5.950369682396900,17.712288013308200,0.0,[0.0],0,0.0,0.0,0.0,0.5809319464015880,-11.222288013308200,11.222288013308200,0,0.0,416.5713310539990,0.0,0.0,416.5713310539990,,True,5.950369682396900,[],5.950369682396900,5.950369682396900,0,[5.950369682396902],17.291918330911300,0.0,0.0,0.0,0.39620389808463900,-17.712288013308200,17.712288013308200,0.0,34.58383666182250,0.0,0.0,0.0,34.58383666182250,,False,5.950369682396900,[],5.950369682396900,8.337820669703310,4.474830192821850,"[2.3874509873063996, 5.950369682396902]",0,0.0,5.950369682396900,5.950369682396900,0.9841085932673640,2.3521793302966900,0.0,0,4.704358660593390,0,11.900739364793800,0.0,16.605098025387200 -8,,False,4.571953935823770,[],4.5719539358237700,22.284241949131900,0.0,[22.284241949131932],0,0.0,0.0,0.0,0.5181429409923100,-15.794241949131900,15.794241949131900,0,0.0,586.2822611517770,0.0,0.0,586.2822611517770,,False,4.5719539358237700,[],4.571953935823770,4.571953935823770,23.24228801330820,[4.571953935823767],0.0,0.0,22.284241949131900,4.5719539358237700,0.4614641354396300,0.9580460641762370,0.0,0.0,3.8321842567049500,0,89.13696779652770,0.0,92.96915205323270,,False,4.571953935823770,[],4.571953935823770,10.522323618220700,2.3874509873064000,"[5.950369682396902, 4.571953935823767]",0,0.0,4.571953935823770,4.571953935823770,0.9858261879520380,0.16767638177932700,0.0,0,0.33535276355865500,0,9.143907871647530,0.0,9.479260635206190 -9,,False,4.257593162880830,[],4.257593162880830,4.257593162880830,22.284241949131900,[4.257593162880828],0,0.0,20.05183511201280,4.257593162880830,0.5622074582342400,2.2324068371191700,0.0,0,15.626847859834200,0.0,0.0,0.0,15.626847859834200,,False,4.257593162880830,[],4.257593162880830,4.257593162880820,4.571953935823770,[4.257593162880825],0.0,0.0,4.257593162880830,4.257593162880830,0.5107117752649890,1.272406837119180,0.0,0.0,5.089627348476700,0,17.03037265152330,0.0,22.120000000000000,,False,4.257593162880830,[],4.2575931628808200,8.829547098704600,5.950369682396900,"[4.571953935823767, 4.2575931628808235]",0,0.0,4.257593162880830,4.257593162880830,0.9871223445065510,1.860452901295400,0.0,0,3.720905802590810,0,8.51518632576165,0.0,12.236092128352500 -10,,False,4.3705250390757500,[],4.37052503907575,4.37052503907575,4.257593162880830,[4.37052503907575],0,0.0,4.3705250390757500,4.3705250390757500,0.5997775052500240,2.1194749609242500,0.0,0,14.836324726469800,0.0,0.0,0.0,14.836324726469800,,False,4.37052503907575,[],4.37052503907575,4.3705250390757500,4.257593162880830,[4.37052503907575],0.0,0.0,4.37052503907575,4.37052503907575,0.5527010278306470,1.1594749609242500,0.0,0.0,4.637899843697000,0,17.482100156303,0.0,22.120000000000000,,False,4.37052503907575,[],4.370525039075750,8.628118201956580,4.571953935823770,"[4.2575931628808235, 4.370525039075752]",0,0.0,4.37052503907575,4.37052503907575,0.9882274663991960,2.0618817980434200,0.0,0,4.123763596086840,0,8.7410500781515,0.0,12.864813674238300 -11,,False,5.597720466912610,[],5.597720466912610,5.597720466912610,4.37052503907575,[5.530000000000001],0,0.0,5.597720466912610,5.597720466912610,0.6394110888020620,0.8922795330873930,0.0,0,6.245956731611750,0.0,0.0,0.0,6.245956731611750,,False,5.597720466912610,[],5.597720466912610,5.597720466912610,4.37052503907575,[5.597720466912607],0.0,0.0,5.530000000000000,5.530000000000000,0.5957985040254990,-0.06772046691260590,0.06772046691260590,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,5.597720466912610,[],5.597720466912610,9.968245505988360,4.2575931628808200,"[4.370525039075752, 5.597720466912609]",0,0.0,5.597720466912610,5.597720466912610,0.9893932871619140,0.7217544940116370,0.0,0,1.4435089880232700,0,11.195440933825200,0.0,12.638949921848500 -12,,False,5.122219165222680,[],5.12221916522268,5.189939632135290,5.530000000000000,[5.189939632135286],0,0.0,5.122219165222680,5.122219165222680,0.6693715830888040,1.300060367864720,0.0,0,9.100422575053000,0.0,0.0,0.0,9.100422575053000,,False,5.12221916522268,[],5.12221916522268,5.122219165222680,5.597720466912610,[5.092279533087389],0.0,0.0,5.189939632135290,5.12221916522268,0.6293826665850310,0.40778083477732100,0.0,0.0,1.6311233391092800,0,20.759758528541100,0.0,22.390881867650400,,False,5.12221916522268,[],5.1222191652226800,10.71993963213530,4.370525039075750,"[5.597720466912609, 5.1222191652226785]",0,0.0,5.092279533087390,5.092279533087390,0.9897889225754250,-0.029939632135291400,0.029939632135291400,0,0,0.0,10.184559066174800,0.0,10.184559066174800 -13,,False,4.484564337907550,[],4.484564337907550,4.484564337907550,5.189939632135290,[4.484564337907547],0,0.0,4.484564337907550,4.484564337907550,0.6917919486174240,2.005435662092450,0.0,0,14.038049634647200,0.0,0.0,0.0,14.038049634647200,,False,4.484564337907550,[],4.484564337907550,4.514503970042840,5.092279533087390,[4.514503970042838],0.0,0.0,4.484564337907550,4.484564337907550,0.6545147352802580,1.0154960299571600,0.0,0.0,4.061984119828650,0,17.938257351630200,0.0,22.00024147145880,,False,4.484564337907550,[],4.484564337907550,9.60678350313023,5.597720466912610,"[5.1222191652226785, 4.484564337907549]",0,0.0,4.514503970042840,4.484564337907550,0.9904813497129310,1.0832164968697700,0.0,0,2.166432993739540,0,9.029007940085680,0.0,11.195440933825200 -14,,False,4.399746149894090,[],4.3997461498940900,4.399746149894090,4.484564337907550,[1.0154960299571627],0,0.0,4.399746149894090,4.399746149894090,0.7110176084095500,2.0902538501059100,0.0,0,14.631776950741400,0.0,0.0,0.0,14.631776950741400,,True,4.3997461498940900,[],4.399746149894090,4.399746149894090,0,[4.399746149894089],4.514503970042840,0.0,1.0154960299571600,1.0154960299571600,0.6280843936995060,-3.384250119936930,3.384250119936930,0.0,9.029007940085680,0.0,4.061984119828650,0.0,13.090992059914300,,False,4.399746149894090,[],4.399746149894090,8.884310487801640,5.1222191652226800,"[4.484564337907549, 4.399746149894087]",0,0.0,4.399746149894090,4.399746149894090,0.9910751120474270,1.8056895121983600,0.0,0,3.6113790243967200,0,8.799492299788180,0.0,12.410871324184900 -15,,False,5.947439821046640,[],5.947439821046640,9.331689940983560,1.0154960299571600,[0.0],0,0.0,3.105749880063080,3.105749880063080,0.696334254698549,-2.8416899409835600,2.8416899409835600,0,0.0,105.48353060931000,0.0,0.0,105.48353060931000,,True,5.947439821046640,[],5.947439821046640,5.94743982104664,0,[5.947439821046639],8.914250119936930,0.0,0.0,0.0,0.5792417081239440,-9.331689940983570,9.331689940983570,0.0,17.828500239873900,0.0,0.0,0.0,17.828500239873900,,False,5.947439821046640,[],5.947439821046640,10.347185970940700,4.484564337907550,"[4.399746149894087, 5.947439821046641]",0,0.0,5.947439821046640,5.947439821046640,0.9917691517345100,0.3428140290592700,0.0,0,0.6856280581185410,0,11.894879642093300,0.0,12.580507700211800 -16,,False,3.978447805324400,[],3.978447805324400,13.310137746308000,0.0,[13.310137746307968],0,0.0,0.0,0.0,0.6619024994679910,-6.8201377463079700,6.8201377463079700,0,0.0,253.16351314295200,0.0,0.0,253.16351314295200,,False,3.978447805324400,[],3.978447805324400,3.978447805324400,14.861689940983600,[3.978447805324401],0.0,0.0,13.310137746308000,3.978447805324400,0.6000470130753360,1.5515521946756000,0.0,0.0,6.206208778702400,0,53.24055098523190,0.0,59.44675976393430,,False,3.978447805324400,[],3.978447805324400,9.925887626371050,4.399746149894090,"[5.947439821046641, 3.978447805324403]",0,0.0,3.978447805324400,3.978447805324400,0.9921761438520240,0.7641123736289560,0.0,0,1.5282247472579100,0,7.956895610648800,0.0,9.485120357906710 -17,,False,4.838244613602480,[],4.838244613602480,4.838244613602480,13.310137746308000,[4.838244613602479],0,0.0,11.658382359910400,4.838244613602480,0.681080221237756,1.6517553863975200,0.0,0,11.562287704782700,0.0,0.0,0.0,11.562287704782700,,False,4.838244613602480,[],4.838244613602480,4.8382446136024800,3.978447805324400,[4.838244613602479],0.0,0.0,4.838244613602480,4.838244613602480,0.6227333301648100,0.6917553863975220,0.0,0.0,2.7670215455900900,0,19.352978454409900,0.0,22.12,,False,4.838244613602480,[],4.838244613602480,8.81669241892688,5.947439821046640,"[3.978447805324403, 4.838244613602477]",0,0.0,4.838244613602480,4.838244613602480,0.9926199322152520,1.8733075810731200,0.0,0,3.7466151621462400,0,9.676489227204960,0.0,13.423104389351200 -18,,False,4.770549546168040,[],4.770549546168050,4.770549546168040,4.838244613602480,[0.6917553863975217],0,0.0,4.770549546168040,4.770549546168040,0.6979722749547880,1.7194504538319600,0.0,0,12.036153176823700,0.0,0.0,0.0,12.036153176823700,,True,4.770549546168050,[],4.770549546168040,4.770549546168050,0,[4.770549546168044],4.838244613602480,0.0,0.6917553863975220,0.6917553863975220,0.5974297691944960,-4.078794159770520,4.078794159770520,0.0,9.676489227204960,0.0,2.7670215455900900,0.0,12.443510772795000,,False,4.770549546168040,[],4.770549546168050,9.608794159770520,3.978447805324400,"[4.838244613602477, 4.770549546168046]",0,0.0,4.770549546168040,4.770549546168040,0.9930108283269290,1.0812058402294800,0.0,0,2.1624116804589500,0,9.541099092336090,0.0,11.703510772795000 -19,,False,5.389348913256120,[],5.389348913256120,9.468143073026640,0.6917553863975220,[9.468143073026646],0,0.0,2.4112058402294800,2.4112058402294800,0.6838254395829850,-2.9781430730266400,2.9781430730266400,0,0.0,110.54867087074900,0.0,0.0,110.54867087074900,,False,5.389348913256120,[],5.389348913256120,5.389348913256120,9.608794159770520,[5.389348913256123],0.0,0.0,9.468143073026650,5.389348913256120,0.6201583082860740,0.14065108674387500,8.88178419700125E-16,0.0,0.5626043469755010,0,37.87257229210660,0.0,38.43517663908210,,False,5.389348913256120,[],5.389348913256130,10.15989845942420,4.838244613602480,"[4.770549546168046, 5.389348913256125]",0,0.0,5.389348913256120,5.389348913256120,0.9934054269570150,0.5301015405758310,0.0,0,1.060203081151660,0,10.778697826512200,0.0,11.838900907663900 -20,,False,7.77831304155244,[],7.778313041552440,7.778313041552440,9.468143073026650,[5.5299999999999985],0,0.0,9.468143073026650,6.490000000000000,0.695168409197066,-1.2883130415524400,1.2883130415524400,0,0.0,47.82218010242650,0.0,0.0,47.82218010242650,,False,7.778313041552440,[],7.778313041552440,7.778313041552440,5.389348913256120,[5.300651086743876],0.0,0.0,5.5300000000000000,5.530000000000000,0.6269991512559990,-2.248313041552440,2.2483130415524400,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,7.778313041552440,[],7.77831304155244,13.167661954808600,4.770549546168050,"[5.389348913256125, 7.77831304155244]",0,0.0,5.300651086743880,5.300651086743880,0.9699020909466250,-2.477661954808570,2.477661954808570,0,0,0.0,10.601302173487800,0.0,10.601302173487800 -21,,False,6.193639724282320,[],6.193639724282320,8.441952765834760,5.5300000000000000,[5.300651086743876],0,0.0,5.5300000000000000,4.241686958447560,0.6945841407109240,-1.951952765834760,1.951952765834760,0,0.0,72.45648666778610,0.0,0.0,72.45648666778610,,False,6.193639724282320,[],6.193639724282320,8.671301679090890,5.300651086743880,[5.389348913256125],0.0,0.0,5.300651086743880,3.0523380451914300,0.6194045336559980,-3.1413016790908800,3.141301679090890,0.0,0.0,0.0,21.202604346975500,0.0,21.202604346975500,,False,6.193639724282320,[],6.193639724282320,13.97195276583480,5.389348913256130,"[7.77831304155244, 6.193639724282319]",0,0.0,5.389348913256130,2.911686958447560,0.9416139144956090,-3.2819527658347600,3.2819527658347600,0,0,0.0,10.77869782651230,0.0,10.77869782651230 -22,,False,5.2186383160538600,[],5.2186383160538600,8.359939995144740,5.300651086743880,[5.389348913256125],0,0.0,5.300651086743880,3.3486983209091200,0.6921760150893110,-1.8699399951447400,1.8699399951447400,0,0.0,69.41217261977280,0.0,0.0,69.41217261977280,,False,5.2186383160538600,[],5.2186383160538600,8.500591081888620,5.389348913256130,[7.77831304155244],0.0,0.0,5.389348913256130,2.2480472341652400,0.6108181906918740,-2.970591081888620,2.9705910818886200,0.0,0.0,0.0,21.5573956530245,0.0,21.5573956530245,,False,5.2186383160538600,[],5.218638316053860,11.41227804033620,7.77831304155244,"[6.193639724282319, 5.218638316053861]",0,0.0,7.77831304155244,4.496360275717680,0.9379715941434270,-0.7222780403361820,0.7222780403361820,0,0,0.0,15.55662608310490,0.0,15.55662608310490 -23,,False,5.881761038948610,[],5.881761038948610,8.852352120837230,5.389348913256130,[7.77831304155244],0,0.0,5.389348913256130,3.519408918111380,0.6875978244372990,-2.362352120837230,2.362352120837230,0,0.0,87.69051072547790,0.0,0.0,87.69051072547790,,False,5.881761038948610,[],5.881761038948610,6.604039079284790,7.77831304155244,[6.193639724282319],0.0,0.0,7.77831304155244,4.807721959663820,0.6208990405678890,-1.074039079284790,1.074039079284790,0.0,0.0,0.0,31.11325216620980,0.0,31.11325216620980,,False,5.881761038948610,[],5.881761038948610,11.100399355002500,6.193639724282320,"[5.218638316053861, 5.881761038948612]",0,0.0,6.193639724282320,5.471361683946140,0.937593568333974,-0.4103993550024740,0.4103993550024740,0,0,0.0,12.387279448564600,0.0,12.387279448564600 -24,,False,3.9909146571348900,[],3.9909146571348900,5.06495373641968,7.77831304155244,[0.0],0,0.0,6.35326677797212,3.9909146571348900,0.6976104385608620,1.4250462635803200,0.0,0,9.975323845062240,0.0,0.0,0.0,9.975323845062240,,True,3.9909146571348900,[],3.9909146571348900,4.401314012137370,0,[4.401314012137366],6.193639724282320,0.0,0.0,0.0,0.6009989790792030,-5.064953736419680,5.064953736419690,0.0,12.387279448564600,0.0,0.0,0.0,12.387279448564600,,False,3.9909146571348900,[],3.9909146571348900,9.872675696083510,5.218638316053860,"[5.881761038948612, 3.9909146571348906]",0,0.0,4.401314012137370,3.9909146571348900,0.9395937193187580,0.8173243039164950,0.0,0,1.6346486078329900,0,8.802628024274730,0.0,10.437276632107700 -25,,False,3.4167057864631100,[],3.4167057864631100,8.481659522882790,0.0,[0.0],0,0.0,1.4250462635803200,1.4250462635803200,0.6901185810121160,-1.9916595228827900,1.9916595228827900,0,0.0,73.93040148940930,0.0,0.0,73.93040148940930,,True,3.4167057864631100,[],3.4167057864631100,3.4167057864631100,0,[3.4167057864631127],10.594953736419700,0.0,0.0,0.0,0.5849485646137370,-8.481659522882800,8.481659522882800,0.0,21.18990747283940,0.0,0.0,0.0,21.18990747283940,,False,3.4167057864631100,[],3.4167057864631100,7.407620443598000,5.881761038948610,"[3.9909146571348906, 3.4167057864631127]",0,0.0,3.4167057864631100,3.4167057864631100,0.9412069430928430,3.2823795564019900,0.0,0,6.564759112803990,0,6.8334115729262300,0.0,13.398170685730200 -26,,False,3.6533219026386500,[],3.6533219026386500,12.134981425521400,0.0,[12.134981425521449],0,0.0,0.0,0.0,0.670958877763455,-5.644981425521450,5.644981425521450,0,0.0,209.54171051535600,0.0,0.0,209.54171051535600,,False,3.6533219026386500,[],3.6533219026386500,3.6533219026386500,14.011659522882800,[3.6533219026386528],0.0,0.0,12.134981425521400,3.653321902638650,0.5964716021810910,1.8766780973613500,8.88178419700125E-16,0.0,7.5067123894453900,0,48.539925702085800,0.0,56.04663809153120,,False,3.6533219026386500,[],3.6533219026386500,7.070027689101770,3.9909146571348900,"[3.4167057864631127, 3.6533219026386545]",0,0.0,3.6533219026386500,3.6533219026386500,0.9428392097125460,3.6199723108982300,0.0,0,7.2399446217964600,0,7.3066438052773100,0.0,14.54658842707380 -27,,False,4.119408733952890,[],4.119408733952890,4.119408733952890,12.134981425521400,[4.119408733952895],0,0.0,9.764390159474340,4.119408733952890,0.6809467989948430,2.37059126604711,8.88178419700125E-16,0,16.594138862329800,0.0,0.0,0.0,16.594138862329800,,False,4.119408733952890,[],4.119408733952890,4.119408733952890,3.6533219026386500,[4.119408733952893],0.0,0.0,4.119408733952900,4.119408733952890,0.608720557037092,1.4105912660471100,0.0,0.0,5.642365064188430,0,16.47763493581160,0.0,22.120000000000000,,False,4.119408733952890,[],4.119408733952890,7.772730636591550,3.4167057864631100,"[3.6533219026386545, 4.119408733952893]",0,0.0,4.119408733952890,4.119408733952890,0.9445743043020440,2.917269363408450,0.0,0,5.834538726816900,0,8.238817467905790,0.0,14.07335619472270 -28,,False,5.582122794713040,[],5.5821227947130400,5.582122794713040,4.119408733952900,[5.53],0,0.0,5.58212279471304,5.582122794713040,0.6935519009564420,0.9078772052869650,0.0,0,6.355140437008760,0.0,0.0,0.0,6.355140437008760,,False,5.5821227947130400,[],5.5821227947130400,5.5821227947130400,4.119408733952890,[5.5821227947130385],0.0,0.0,5.53,5.53,0.6238102591448450,-0.05212279471303830,0.05212279471303830,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.5821227947130400,[],5.5821227947130400,9.701531528665930,3.6533219026386500,"[4.119408733952893, 5.5821227947130385]",0,0.0,5.5821227947130400,5.5821227947130400,0.9467640536710020,0.9884684713340680,0.0,0,1.9769369426681400,0,11.164245589426100,0.0,13.141182532094200 -29,,False,5.887748459593360,[],5.887748459593360,5.939871254306390,5.53,[5.5821227947130385],0,0.0,5.887748459593360,5.887748459593360,0.7058110269556230,0.5501287456936080,0.0,0,3.850901219855260,0.0,0.0,0.0,3.850901219855260,,False,5.887748459593360,[],5.887748459593360,5.887748459593360,5.5821227947130400,[5.107877205286961],0.0,0.0,5.5821227947130400,5.53,0.6364286258264710,-0.3577484595933570,0.3577484595933570,0.0,0.0,0.0,22.328491178852200,0.0,22.328491178852200,,False,5.887748459593360,[],5.887748459593360,11.469871254306400,4.119408733952890,"[5.5821227947130385, 5.887748459593357]",0,0.0,5.107877205286960,5.107877205286960,0.9435949160236070,-0.7798712543063960,0.7798712543063960,0,0,0.0,10.215754410573900,0.0,10.215754410573900 -30,,False,4.792834109895430,[],4.792834109895430,5.15058256948878,5.5821227947130400,[5.107877205286961],0,0.0,4.792834109895430,4.792834109895430,0.7150890380190150,1.3394174305112200,0.0,0,9.375922013578540,0.0,0.0,0.0,9.375922013578540,,False,4.792834109895430,[],4.792834109895430,5.572705364201820,5.107877205286960,[5.5727053642018225],0.0,0.0,5.107877205286960,4.750128745693600,0.6476137826749430,-0.04270536420182230,0.04270536420182230,0.0,0.0,0.0,20.431508821147800,0.0,20.431508821147800,,False,4.792834109895430,[],4.792834109895430,10.680582569488800,5.5821227947130400,"[5.887748459593357, 4.792834109895426]",0,0.0,5.5727053642018200,4.792834109895430,0.9453737964070180,0.009417430511216020,0.0,0,0.018834861022432000,0,11.145410728403600,0.0,11.164245589426100 -31,,False,4.37652260501504,[],4.37652260501504,4.419227969216860,5.107877205286960,[4.419227969216863],0,0.0,4.37652260501504,4.37652260501504,0.7230642868054380,2.070772030783140,0.0,0,14.495404215482000,0.0,0.0,0.0,14.495404215482000,,False,4.37652260501504,[],4.376522605015040,4.376522605015040,5.5727053642018200,[4.376522605015039],0.0,0.0,4.419227969216860,4.37652260501504,0.6574778038152090,1.15347739498496,0.0,0.0,4.61390957993984,0,17.67691187686750,0.0,22.29082145680730,,False,4.376522605015040,[],4.376522605015040,9.169356714910470,5.887748459593360,"[4.792834109895426, 4.376522605015041]",0,0.0,4.376522605015040,4.376522605015040,0.9469028971509230,1.520643285089530,0.0,0,3.041286570179070,0,8.753045210030080,0.0,11.794331780209100 -32,,False,3.491846710452520,[],3.491846710452520,3.4918467104525100,4.419227969216860,[3.491846710452517],0,0.0,3.491846710452520,3.491846710452520,0.7291141750800180,2.9981532895474900,0.0,0,20.987073026832400,0.0,0.0,0.0,20.987073026832400,,False,3.491846710452520,[],3.491846710452520,3.491846710452520,4.376522605015040,[3.491846710452516],0.0,0.0,3.491846710452520,3.491846710452520,0.6649604827177520,2.0381532895474800,0.0,0.0,8.15261315818993,0,13.967386841810100,0.0,22.120000000000000,,False,3.491846710452520,[],3.4918467104525100,7.868369315467560,4.792834109895430,"[4.376522605015041, 3.4918467104525144]",0,0.0,3.491846710452520,3.491846710452520,0.9480628470043940,2.821630684532440,0.0,0,5.643261369064890,0,6.983693420905030,0.0,12.62695478996990 -33,,False,6.09964697578482,[],6.09964697578482,6.099646975784820,3.491846710452520,[2.0381532895474823],0,0.0,6.09964697578482,6.09964697578482,0.7390714284030320,0.3903530242151840,0.0,0,2.7324711695062900,0.0,0.0,0.0,2.7324711695062900,,True,6.09964697578482,[],6.09964697578482,6.099646975784820,0,[6.09964697578482],3.491846710452520,0.0,2.0381532895474800,2.0381532895474800,0.6528002480730060,-4.061493686237340,4.061493686237340,0.0,6.983693420905030,0.0,8.15261315818993,0.0,15.136306579095000,,False,6.09964697578482,[],6.099646975784820,9.591493686237340,4.376522605015040,"[3.4918467104525144, 6.099646975784822]",0,0.0,6.09964697578482,6.09964697578482,0.9499719590423020,1.0985063137626700,0.0,0,2.1970126275253300,0,12.19929395156960,0.0,14.39630657909500 -34,,False,6.179716344700700,[],6.179716344700700,10.241210030938000,2.0381532895474800,[0.0],0,0.0,2.428506313762670,2.428506313762670,0.7266455197830850,-3.7512100309380300,3.7512100309380300,0,0.0,139.24491634842000,0.0,0.0,139.24491634842000,,True,6.179716344700700,[],6.1797163447007,6.179716344700700,0,[4.5903530242151795],9.591493686237340,0.0,0.0,0.0,0.6293623908613120,-10.241210030938000,10.241210030938000,0.0,19.18298737247470,0.0,0.0,0.0,19.18298737247470,,False,6.1797163447007,[],6.179716344700700,12.279363320485500,3.4918467104525100,"[6.099646975784822, 6.179716344700698]",0,0.0,4.5903530242151800,4.5903530242151800,0.9425340937912580,-1.5893633204855200,1.5893633204855200,0,0,0.0,9.180706048430360,0.0,9.180706048430360 -35,,False,4.101792060544320,[],4.101792060544320,14.343002091482400,0.0,[14.181846710452515],0,0.0,0.0,0.0,0.7097318827029770,-7.853002091482360,7.853002091482360,0,0.0,291.5034376358250,0.0,0.0,291.5034376358250,,False,4.101792060544320,[],4.101792060544320,5.691155381029850,14.181846710452500,[5.691155381029843],0.0,0.0,14.181846710452500,3.9406366795144800,0.637074968272656,-0.16115538102984600,0.16115538102984600,0.0,0.0,0.0,56.72738684181010,0.0,56.72738684181010,,False,4.101792060544320,[],4.101792060544330,10.28150840524500,6.099646975784820,"[6.179716344700698, 4.101792060544325]",0,0.0,5.691155381029840,4.101792060544320,0.9438716888849210,0.4084915947549780,0.0,0,0.8169831895099570,0,11.382310762059700,0.0,12.199293951569600 -36,,False,3.962170123484520,[],3.9621701234845200,4.123325504514360,14.181846710452500,[4.123325504514363],0,0.0,11.815172214966900,3.962170123484520,0.7161147629225850,2.36667449548564,0.0,0,16.56672146839950,0.0,0.0,0.0,16.56672146839950,,False,3.9621701234845200,[],3.9621701234845200,3.96217012348452,5.691155381029840,[3.9621701234845172],0.0,0.0,4.123325504514360,3.9621701234845200,0.6450555450848260,1.5678298765154800,0.0,0.0,6.271319506061920,0,16.493302018057500,0.0,22.764621524119400,,False,3.9621701234845200,[],3.962170123484520,8.063962184028840,6.179716344700700,"[4.101792060544325, 3.962170123484519]",0,0.0,3.9621701234845200,3.9621701234845200,0.9451059280776810,2.6260378159711600,0.0,0,5.2520756319423200,0,7.9243402469690300,0.0,13.176415878911400 -37,,False,4.924196254971820,[],4.924196254971820,4.924196254971810,4.123325504514360,[4.924196254971816],0,0.0,4.924196254971820,4.924196254971820,0.7236666061237520,1.5658037450281900,0.0,0,10.960626215197300,0.0,0.0,0.0,10.960626215197300,,False,4.924196254971820,[],4.924196254971820,4.92419625497182,3.9621701234845200,[4.924196254971816],0.0,0.0,4.924196254971820,4.924196254971820,0.6544976876077660,0.6058037450281810,0.0,0.0,2.423214980112730,0,19.696785019887300,0.0,22.12000000000000,,False,4.924196254971820,[],4.924196254971820,8.886366378456330,4.101792060544330,"[3.962170123484519, 4.924196254971815]",0,0.0,4.924196254971820,4.924196254971820,0.9465662062805870,1.8036336215436700,0.0,0,3.6072672430873400,0,9.848392509943630,0.0,13.455659753031000 -38,,False,6.495434252883470,[],6.495434252883470,6.495434252883470,4.924196254971820,[5.529999999999998],0,0.0,6.490000000000010,6.490000000000010,0.7330060582521600,-0.005434252883468990,0.005434252883468990,0,0.0,0.201719467034369,0.0,0.0,0.201719467034369,,False,6.495434252883470,[],6.495434252883470,6.495434252883480,4.924196254971820,[5.765803745028187],0.0,0.0,5.530000000000000,5.530000000000000,0.6611716456188720,-0.9654342528834760,0.9654342528834760,0.0,0.0,0.0,22.12000000000000,0.0,22.12000000000000,,False,6.495434252883470,[],6.495434252883470,11.419630507855300,3.962170123484520,"[4.924196254971815, 6.495434252883473]",0,0.0,5.765803745028190,5.765803745028190,0.9445696094688700,-0.729630507855286,0.729630507855286,0,0,0.0,11.531607490056400,0.0,11.531607490056400 -39,,False,5.33818125199332,[],5.338181251993320,6.303615504876790,5.530000000000000,[5.765803745028187],0,0.0,5.343615504876790,5.33818125199332,0.7402430356774420,0.18638449512320900,0.0,0,1.3046914658624600,0.0,0.0,0.0,1.3046914658624600,,False,5.338181251993320,[],5.338181251993320,6.06781175984861,5.765803745028190,[4.924196254971815],0.0,0.0,5.765803745028190,4.800369492144710,0.6676249052830550,-0.5378117598486100,0.5378117598486100,0.0,0.0,0.0,23.063214980112700,0.0,23.063214980112700,,False,5.338181251993320,[],5.338181251993320,11.833615504876800,4.924196254971820,"[6.495434252883473, 5.338181251993324]",0,0.0,4.924196254971820,4.1945657471165300,0.9402651966402580,-1.1436155048767900,1.1436155048767900,0,0,0.0,9.84839250994363,0.0,9.84839250994363 -40,,False,4.6013616099848000,[],4.6013616099848000,5.139173369833400,5.765803745028190,[4.924196254971815],0,0.0,4.6013616099848000,4.6013616099848000,0.7461734616199860,1.3508266301666000,0.0,0,9.455786411166180,0.0,0.0,0.0,9.455786411166180,,False,4.6013616099848000,[],4.601361609984800,5.7449771148615900,4.924196254971820,[5.744977114861593],0.0,0.0,4.924196254971820,4.386384495123200,0.6741465954903370,-0.2149771148615940,0.2149771148615940,0.0,0.0,0.0,19.69678501988730,0.0,19.69678501988730,,False,4.601361609984800,[],4.601361609984800,9.939542861978120,6.495434252883470,"[5.338181251993324, 4.601361609984799]",0,0.0,5.744977114861590,4.601361609984800,0.9416289823175400,0.7504571380218800,0.0,0,1.5009142760437600,0,11.489954229723200,0.0,12.990868505766900 -41,,False,4.939135912525250,[],4.939135912525250,5.154113027386840,4.924196254971820,[5.154113027386847],0,0.0,4.939135912525250,4.939135912525250,0.7522450952776550,1.3358869726131600,0.0,0,9.351208808292100,0.0,0.0,0.0,9.351208808292100,,False,4.939135912525250,[],4.939135912525250,4.939135912525250,5.744977114861590,[4.939135912525253],0.0,0.0,5.154113027386850,4.939135912525250,0.6819411409736970,0.5908640874747460,0.0,0.0,2.363456349898980,0,20.61645210954740,0.0,22.97990845944640,,False,4.939135912525250,[],4.939135912525260,9.540497522510050,5.338181251993320,"[4.601361609984799, 4.939135912525255]",0,0.0,4.939135912525250,4.939135912525250,0.9430252407145350,1.1495024774899500,0.0,0,2.2990049549799000,0,9.878271825050510,0.0,12.177276780030400 -42,,False,3.581249541408600,[],3.581249541408600,3.5812495414085900,5.154113027386850,[0.5908640874747455],0,0.0,3.581249541408600,3.581249541408600,0.7564689261794460,2.9087504585914100,0.0,0,20.361253210139900,0.0,0.0,0.0,20.361253210139900,,True,3.581249541408600,[],3.581249541408600,3.5812495414086000,0,[3.581249541408599],4.939135912525250,0.0,0.5908640874747460,0.5908640874747460,0.6731279083695820,-2.9903854539338500,2.9903854539338500,0.0,9.878271825050510,0.0,2.363456349898980,0.0,12.241728174949500,,False,3.581249541408600,[],3.5812495414086000,8.52038545393385,4.601361609984800,"[4.939135912525255, 3.5812495414085976]",0,0.0,3.581249541408600,3.581249541408600,0.9439965706228640,2.169614546066150,0.0,0,4.339229092132300,0,7.162499082817200,0.0,11.5017281749495 -43,,False,6.0424916173394200,[],6.0424916173394200,9.032877071273270,0.5908640874747460,[0.0],0,0.0,3.499614546066150,3.499614546066150,0.7515114363256560,-2.5428770712732700,2.5428770712732700,0,0.0,94.39159688566370,0.0,0.0,94.39159688566370,,True,6.0424916173394200,[],6.04249161733942,6.0424916173394200,0,[6.04249161733942],8.520385453933850,0.0,0.0,0.0,0.6543067168552270,-9.032877071273270,9.032877071273270,0.0,17.040770907867700,0.0,0.0,0.0,17.040770907867700,,False,6.04249161733942,[],6.042491617339420,9.623741158748010,4.939135912525260,"[3.5812495414085976, 6.042491617339418]",0,0.0,6.04249161733942,6.04249161733942,0.9455624710359390,1.0662588412519900,0.0,0,2.1325176825039700,0,12.08498323467880,0.0,14.21750091718280 -44,,False,4.465583546326500,[],4.465583546326500,13.498460617599800,0.0,[13.498460617599768],0,0.0,0.0,0.0,0.736296696470678,-7.008460617599760,7.008460617599760,0,0.0,260.15405812530300,0.0,0.0,260.15405812530300,,False,4.465583546326500,[],4.465583546326500,4.465583546326500,14.56287707127330,[4.465583546326496],0.0,0.0,13.498460617599800,4.465583546326500,0.6613054571516840,1.0644164536735000,0.0,0.0,4.257665814694010,0,53.99384247039910,0.0,58.25150828509310,,False,4.465583546326500,[],4.4655835463265000,10.50807516366590,3.5812495414086000,"[6.042491617339418, 4.4655835463264975]",0,0.0,4.465583546326500,4.465583546326500,0.9466645871202730,0.18192483633408800,0.0,0,0.3638496726681760,0,8.931167092652990,0.0,9.295016765321170 -45,,False,3.5049461291856600,[],3.504946129185670,3.504946129185660,13.498460617599800,[3.504946129185666],0,0.0,10.513406746785400,3.504946129185670,0.7404214767828960,2.9850538708143400,0.0,0,20.89537709570040,0.0,0.0,0.0,20.89537709570040,,False,3.504946129185670,[],3.504946129185670,3.504946129185670,4.465583546326500,[3.504946129185667],0.0,0.0,3.504946129185670,3.504946129185670,0.666603231443848,2.0250538708143300,0.0,0.0,8.10021548325733,0,14.019784516742700,0.0,22.120000000000000,,False,3.504946129185670,[],3.5049461291856700,7.970529675512160,6.042491617339420,"[4.4655835463264975, 3.5049461291856687]",0,0.0,3.504946129185670,3.504946129185670,0.9474988461456470,2.7194703244878400,0.0,0,5.438940648975680,0,7.009892258371330,0.0,12.448832907347000 -46,,False,4.7878385782883700,[],4.787838578288370,4.787838578288370,3.504946129185670,[4.787838578288374],0,0.0,4.7878385782883700,4.7878385782883700,0.7458518583110730,1.7021614217116300,0.0,0,11.915129951981400,0.0,0.0,0.0,11.915129951981400,,False,4.787838578288370,[],4.787838578288370,4.787838578288370,3.504946129185670,[4.787838578288374],0.0,0.0,4.787838578288370,4.787838578288370,0.6735778903296560,0.742161421711625,0.0,0.0,2.9686456868465,0,19.151354313153500,0.0,22.120000000000000,,False,4.787838578288370,[],4.787838578288370,8.292784707474040,4.4655835463265000,"[3.5049461291856687, 4.787838578288373]",0,0.0,4.787838578288370,4.787838578288370,0.9485971700461200,2.3972152925259600,0.0,0,4.7944305850519200,0,9.575677156576750,0.0,14.370107741628700 -47,,False,4.573131205960280,[],4.573131205960280,4.573131205960270,4.787838578288370,[4.573131205960277],0,0.0,4.573131205960280,4.573131205960280,0.7508307220609340,1.9168687940397300,0.0,0,13.418081558278100,0.0,0.0,0.0,13.418081558278100,,False,4.573131205960280,[],4.573131205960280,4.573131205960280,4.787838578288370,[4.573131205960278],0.0,0.0,4.573131205960280,4.573131205960280,0.6799726300204160,0.956868794039722,0.0,0.0,3.827475176158890,0,18.29252482384110,0.0,22.120000000000000,,False,4.573131205960280,[],4.57313120596028,9.360969784248650,3.5049461291856700,"[4.787838578288373, 4.57313120596028]",0,0.0,4.573131205960280,4.573131205960280,0.9496041720450200,1.3290302157513500,0.0,0,2.6580604315027000,0,9.146262411920560,0.0,11.804322843423300 -48,,False,5.501448331524810,[],5.501448331524810,5.501448331524800,4.573131205960280,[5.501448331524805],0,0.0,5.501448331524810,5.501448331524810,0.7565677219716550,0.9885516684752030,0.0,0,6.919861679326420,0.0,0.0,0.0,6.919861679326420,,False,5.501448331524810,[],5.501448331524810,5.501448331524800,4.573131205960280,[5.501448331524805],0.0,0.0,5.501448331524810,5.501448331524810,0.6873411026033410,0.028551668475195400,0.0,0.0,0.11420667390078200,0,22.00579332609920,0.0,22.12,,False,5.501448331524810,[],5.501448331524810,10.074579537485100,4.787838578288370,"[4.57313120596028, 5.501448331524805]",0,0.0,5.501448331524810,5.501448331524810,0.950764511164152,0.61542046251492,0.0,0,1.23084092502984,0,11.00289666304960,0.0,12.23373758807950 -49,,False,6.158186652932030,[],6.158186652932030,6.158186652932020,5.501448331524810,[5.53],0,0.0,6.158186652932030,6.158186652932030,0.762684081823915,0.33181334706798100,0.0,0,2.3226934294758700,0.0,0.0,0.0,2.3226934294758700,,False,6.158186652932030,[],6.158186652932030,6.158186652932030,5.501448331524810,[5.1885516684752],0.0,0.0,5.53,5.53,0.6926338040036180,-0.6281866529320260,0.6281866529320260,0.0,0.0,0.0,22.12,0.0,22.12,,False,6.158186652932030,[],6.158186652932030,11.65963498445680,4.57313120596028,"[5.501448331524805, 6.158186652932029]",0,0.0,5.1885516684752,5.1885516684752,0.9480454502438680,-0.9696349844568270,0.9696349844568270,0,0,0.0,10.3771033369504,0.0,10.3771033369504 -50,,False,6.371862133549780,[],6.371862133549780,7.000048786481800,5.53,[5.1885516684752],0,0.0,5.861813347067980,5.861813347067980,0.7666690505680390,-0.5100487864817960,0.5100487864817960,0,0.0,18.93301095420430,0.0,0.0,18.93301095420430,,False,6.371862133549780,[],6.371862133549780,7.341497118006600,5.1885516684752,[5.501448331524805],0.0,0.0,5.1885516684752,4.560365015543170,0.6932183611152800,-1.8114971180066000,1.8114971180066000,0.0,0.0,0.0,20.7542066739008,0.0,20.7542066739008,,False,6.371862133549780,[],6.371862133549780,12.5300487864818,5.501448331524810,"[6.158186652932029, 6.371862133549775]",0,0.0,5.501448331524810,4.531813347067980,0.9420447009271180,-1.8400487864818000,1.8400487864818000,0,0,0.0,11.00289666304960,0.0,11.00289666304960 -51,,False,5.175553293954830,[],5.175553293954830,6.987050411961430,5.1885516684752,[5.501448331524805],0,0.0,5.1885516684752,4.6785028819934000,0.7694377310057480,-0.4970504119614280,0.4970504119614280,0,0.0,18.450511292008200,0.0,0.0,18.450511292008200,,False,5.175553293954830,[],5.175553293954830,7.01560208043663,5.501448331524810,[6.158186652932029],0.0,0.0,5.501448331524810,3.689951213518200,0.6936164319012490,-1.4856020804366300,1.4856020804366300,0.0,0.0,0.0,22.00579332609920,0.0,22.00579332609920,,False,5.175553293954830,[],5.175553293954830,11.547415427504600,6.158186652932030,"[6.371862133549775, 5.175553293954831]",0,0.0,6.158186652932030,4.31813786645023,0.9398725722110830,-0.8574154275046030,0.8574154275046030,0,0,0.0,12.316373305864100,0.0,12.316373305864100 -52,,False,4.743369817307450,[],4.743369817307440,6.228971897744070,5.501448331524810,[6.158186652932029],0,0.0,5.2404202292688700,4.743369817307450,0.7736217143456560,0.2610281022559310,0.0,0,1.8271967157915200,0.0,0.0,0.0,1.8271967157915200,,False,4.743369817307440,[],4.743369817307450,5.600785244812050,6.158186652932030,[5.600785244812048],0.0,0.0,6.158186652932030,4.672584572495400,0.698905528950953,-0.07078524481204610,0.07078524481204610,0.0,0.0,0.0,24.632746611728100,0.0,24.632746611728100,,False,4.743369817307450,[],4.743369817307450,9.918923111262270,6.371862133549780,"[5.175553293954831, 4.743369817307447]",0,0.0,5.600785244812050,4.743369817307450,0.9409636967790260,0.7710768887377270,0.0,0,1.5421537774754500,0,11.201570489624100,0.0,12.74372426709960 -53,,False,4.632174275867240,[],4.632174275867240,4.702959520679280,6.158186652932030,[4.702959520679285],0,0.0,4.632174275867240,4.632174275867240,0.7775636129253090,1.787040479320720,0.0,0,12.509283355245100,0.0,0.0,0.0,12.509283355245100,,False,4.632174275867240,[],4.632174275867240,4.6321742758672400,5.600785244812050,[4.632174275867239],0.0,0.0,4.702959520679290,4.632174275867240,0.7041484517177670,0.8978257241327630,0.0,0.0,3.591302896531050,0,18.81183808271710,0.0,22.403140979248200,,False,4.632174275867240,[],4.6321742758672400,9.37554409317468,5.175553293954830,"[4.743369817307447, 4.6321742758672375]",0,0.0,4.632174275867240,4.632174275867240,0.9419916890139800,1.3144559068253200,0.0,0,2.628911813650640,0,9.264348551734480,0.0,11.893260365385100 -54,,False,2.34482395243653,[],2.3448239524365300,2.3448239524365200,4.702959520679290,[2.3448239524365313],0,0.0,2.34482395243653,2.34482395243653,0.7795071398513780,4.145176047563480,0.0,0,29.016232332944300,0.0,0.0,0.0,29.016232332944300,,False,2.3448239524365300,[],2.3448239524365300,2.3448239524365300,4.632174275867240,[2.3448239524365313],0.0,0.0,2.3448239524365300,2.3448239524365300,0.7067334399823570,3.1851760475634700,0.0,0.0,12.740704190253900,0,9.379295809746130,0.0,22.120000000000000,,False,2.3448239524365300,[],2.344823952436530,6.976998228303770,4.743369817307450,"[4.6321742758672375, 2.344823952436533]",0,0.0,2.3448239524365300,2.3448239524365300,0.9424985337610100,3.7130017716962300,0.0,0,7.4260035433924700,0,4.689647904873060,0.0,12.115651448265500 -55,,False,5.345517943888770,[],5.3455179438887700,5.3455179438887600,2.3448239524365300,[5.3455179438887654],0,0.0,5.345517943888770,5.345517943888770,0.783813329885836,1.1444820561112400,0.0,0,8.011374392778700,0.0,0.0,0.0,8.011374392778700,,False,5.3455179438887700,[],5.3455179438887700,5.345517943888760,2.3448239524365300,[5.3455179438887654],0.0,0.0,5.3455179438887700,5.3455179438887700,0.712460888650475,0.18448205611123700,0.0,0.0,0.7379282244449460,0,21.382071775555100,0.0,22.120000000000000,,False,5.3455179438887700,[],5.345517943888760,7.690341896325290,4.6321742758672400,"[2.344823952436533, 5.345517943888764]",0,0.0,5.3455179438887700,5.3455179438887700,0.9436215281324290,2.9996581036747100,0.0,0,5.999316207349410,0,10.691035887777500,0.0,16.690352095126900 -56,,False,5.45293632653351,[],5.45293632653351,5.452936326533500,5.3455179438887700,[5.45293632653351],0,0.0,5.45293632653351,5.45293632653351,0.7880361358238820,1.0370636734665000,0.0,0,7.259445714265490,0.0,0.0,0.0,7.259445714265490,,False,5.45293632653351,[],5.45293632653351,5.452936326533510,5.3455179438887700,[5.344482056111239],0.0,0.0,5.45293632653351,5.45293632653351,0.7180774322892940,0.07706367346649220,0.0,0.0,0.30825469386596900,0,21.81174530613400,0.0,22.120000000000000,,False,5.45293632653351,[],5.452936326533510,10.79845427042230,2.344823952436530,"[5.345517943888764, 5.452936326533512]",0,0.0,5.344482056111240,5.344482056111240,0.9443342794020510,-0.1084542704222700,0.1084542704222700,0,0,0.0,10.688964112222500,0.0,10.688964112222500 -57,,False,4.833939091648940,[],4.833939091648940,4.833939091648930,5.45293632653351,[4.833939091648935],0,0.0,4.833939091648940,4.833939091648940,0.7916439901243180,1.6560609083510700,0.0,0,11.592426358457500,0.0,0.0,0.0,11.592426358457500,,False,4.833939091648940,[],4.8339390916489400,4.942393362071200,5.344482056111240,[4.942393362071206],0.0,0.0,4.833939091648940,4.833939091648940,0.7228760594150010,0.587606637928797,0.0,0.0,2.350426551715190,0,19.33575636659570,0.0,21.686182918310900,,False,4.8339390916489400,[],4.833939091648930,10.286875418182400,5.345517943888760,"[5.452936326533512, 4.833939091648934]",0,0.0,4.942393362071210,4.8339390916489400,0.9452817701935910,0.4031245818175580,0.0,0,0.8062491636351160,0,9.884786724142410,0.0,10.691035887777500 -58,,False,4.056943191532740,[],4.056943191532740,4.05694319153273,4.833939091648940,[4.056943191532738],0,0.0,4.056943191532740,4.056943191532740,0.7945784682609870,2.4330568084672700,0.0,0,17.031397659270900,0.0,0.0,0.0,17.031397659270900,,False,4.056943191532740,[],4.056943191532740,4.056943191532740,4.942393362071210,[4.056943191532737],0.0,0.0,4.056943191532740,4.056943191532740,0.726779062478265,1.4730568084672700,0.0,0.0,5.892227233869060,0,16.22777276613100,0.0,22.12000000000000,,False,4.056943191532740,[],4.056943191532740,8.890882283181670,5.452936326533510,"[4.833939091648934, 4.056943191532737]",0,0.0,4.056943191532740,4.056943191532740,0.9460524196658090,1.7991177168183300,0.0,0,3.598235433636670,0,8.113886383065470,0.0,11.712121816702100 -59,,False,6.403958738659290,[],6.403958738659290,6.403958738659290,4.056943191532740,[5.530000000000002],0,0.0,6.403958738659290,6.403958738659290,0.7990460347542060,0.0860412613407151,0.0,0,0.6022888293850060,0.0,0.0,0.0,0.6022888293850060,,False,6.403958738659290,[],6.403958738659290,6.403958738659290,4.056943191532740,[6.403958738659293],0.0,0.0,5.530000000000000,5.530000000000000,0.7297531255348750,-0.8739587386592910,0.8739587386592910,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,6.403958738659290,[],6.403958738659290,10.460901930192000,4.833939091648930,"[4.056943191532737, 6.403958738659291]",0,0.0,6.403958738659290,6.403958738659290,0.9472256871429370,0.2290980698079730,0.0,0,0.4581961396159460,0,12.807917477318600,0.0,13.266113616934500 -60,,False,4.98144919548836,[],4.98144919548836,5.855407934147640,5.530000000000000,[5.855407934147651],0,0.0,4.98144919548836,4.98144919548836,0.8023890870227560,0.634592065852357,0.0,0,4.442144460966500,0.0,0.0,0.0,4.442144460966500,,False,4.98144919548836,[],4.98144919548836,4.9814491954883600,6.403958738659290,[4.28604126134071],0.0,0.0,5.855407934147650,4.98144919548836,0.7342489284698610,0.5485508045116420,0.0,0.0,2.1942032180465700,0,23.421631736590600,0.0,25.615834954637200,,False,4.98144919548836,[],4.98144919548836,11.385407934147600,4.056943191532740,"[6.403958738659291, 4.98144919548836]",0,0.0,4.28604126134071,4.28604126134071,0.9457812706710780,-0.6954079341476500,0.6954079341476500,0,0,0.0,8.57208252268142,0.0,8.57208252268142 -61,,False,3.326495378009780,[],3.326495378009780,3.326495378009770,5.855407934147650,[3.326495378009777],0,0.0,3.326495378009780,3.326495378009780,0.8045602414920740,3.1635046219902300,0.0,0,22.14453235393160,0.0,0.0,0.0,22.14453235393160,,False,3.326495378009780,[],3.3264953780097800,4.021903312157430,4.28604126134071,[4.021903312157428],0.0,0.0,3.326495378009780,3.326495378009780,0.7371687400227040,1.508096687842580,0.0,0.0,6.0323867513703,0,13.305981512039100,0.0,19.338368263409400,,False,3.3264953780097800,[],3.3264953780097800,8.307944573498140,6.403958738659290,"[4.98144919548836, 3.3264953780097795]",0,0.0,4.021903312157430,3.3264953780097800,0.9463769727744170,2.3820554265018600,0.0,0,4.764110853003730,0,8.043806624314860,0.0,12.807917477318600 -62,,False,5.1023476825496700,[],5.1023476825496700,5.1023476825496600,3.326495378009780,[5.1023476825496665],0,0.0,5.1023476825496700,5.1023476825496700,0.8077992933620740,1.3876523174503400,0.0,0,9.71356622215239,0.0,0.0,0.0,9.71356622215239,,False,5.1023476825496700,[],5.1023476825496700,5.102347682549660,4.021903312157430,[5.1023476825496665],0.0,0.0,5.1023476825496700,5.1023476825496700,0.7415246811609000,0.4276523174503360,0.0,0.0,1.7106092698013500,0,20.409390730198700,0.0,22.12000000000000,,False,5.1023476825496700,[],5.102347682549670,8.42884306055944,4.98144919548836,"[3.3264953780097795, 5.102347682549665]",0,0.0,5.1023476825496700,5.1023476825496700,0.9472656750934130,2.261156939440560,0.0,0,4.522313878881110,0,10.204695365099300,0.0,14.727009243980400 -63,,False,4.5673907194519900,[],4.5673907194519900,4.5673907194519800,5.1023476825496700,[4.5673907194519865],0,0.0,4.5673907194519900,4.5673907194519900,0.8106090093167110,1.9226092805480200,0.0,0,13.458264963836200,0.0,0.0,0.0,13.458264963836200,,False,4.5673907194519900,[],4.5673907194519900,4.567390719451980,5.1023476825496700,[4.5673907194519865],0.0,0.0,4.5673907194519900,4.5673907194519900,0.7453032428526130,0.9626092805480160,0.0,0.0,3.8504371221920700,0,18.269562877807900,0.0,22.12000000000000,,False,4.5673907194519900,[],4.567390719451990,9.66973840200165,3.3264953780097800,"[5.102347682549665, 4.567390719451988]",0,0.0,4.5673907194519900,4.5673907194519900,0.9480365800325210,1.02026159799835,0.0,0,2.0405231959967,0,9.134781438903970,0.0,11.175304634900700 -64,,False,5.477754099433530,[],5.477754099433530,5.477754099433520,4.5673907194519900,[0.9626092805480164],0,0.0,5.477754099433530,5.477754099433530,0.8138722782501440,1.012245900566480,0.0,0,7.085721303965370,0.0,0.0,0.0,7.085721303965370,,True,5.477754099433530,[],5.477754099433530,5.4777540994335200,0,[5.477754099433527],4.5673907194519900,0.0,0.9626092805480160,0.9626092805480160,0.7354893201016810,-4.515144818885510,4.515144818885510,0.0,9.134781438903970,0.0,3.8504371221920700,0.0,12.985218561096000,,False,5.477754099433530,[],5.477754099433530,10.045144818885500,5.102347682549670,"[4.567390719451988, 5.477754099433525]",0,0.0,5.477754099433530,5.477754099433530,0.9489319268145560,0.6448551811144880,0.0,0,1.2897103622289800,0,10.955508198867100,0.0,12.24521856109600 -65,,False,4.7409713552611100,[],4.7409713552611100,9.256116174146610,0.9626092805480160,[0.0],0,0.0,1.9748551811145000,1.9748551811145000,0.8080341755896600,-2.766116174146610,2.766116174146610,0,0.0,102.67823238432200,0.0,0.0,102.67823238432200,,True,4.7409713552611100,[],4.7409713552611100,4.740971355261110,0,[4.7409713552611095],10.045144818885500,0.0,0.0,0.0,0.7246822989163130,-9.25611617414662,9.25611617414662,0.0,20.09028963777100,0.0,0.0,0.0,20.09028963777100,,False,4.7409713552611100,[],4.740971355261110,10.218725454694600,4.567390719451990,"[5.477754099433525, 4.740971355261111]",0,0.0,4.7409713552611100,4.7409713552611100,0.9496823031065390,0.4712745453053660,0.0,0,0.9425490906107330,0,9.481942710522220,0.0,10.424491801133000 -66,,False,5.339820964186640,[],5.339820964186640,14.595937138333300,0.0,[0.0],0,0.0,0.0,0.0,0.7948791975287580,-8.105937138333260,8.105937138333260,0,0.0,300.89238657493000,0.0,0.0,300.89238657493000,,True,5.339820964186640,[],5.339820964186640,5.339820964186640,0,[5.339820964186641],14.786116174146600,0.0,0.0,0.0,0.7128843081488910,-14.595937138333300,14.595937138333300,0.0,29.572232348293200,0.0,0.0,0.0,29.572232348293200,,False,5.339820964186640,[],5.339820964186640,10.080792319447700,5.477754099433530,"[4.740971355261111, 5.339820964186639]",0,0.0,5.339820964186640,5.339820964186640,0.9505014865256380,0.6092076805522510,0.0,0,1.2184153611045000,0,10.679641928373300,0.0,11.898057289477800 -67,,False,4.992619850055430,[],4.992619850055430,19.588556988388700,0.0,[0.0],0,0.0,0.0,0.0,0.7829612229347020,-13.098556988388700,13.098556988388700,0,0.0,486.2184354089880,0.0,0.0,486.2184354089880,,True,4.992619850055430,[],4.992619850055430,4.992619850055430,0,[4.992619850055428],20.125937138333300,0.0,0.0,0.0,0.7021957191162010,-19.588556988388700,19.588556988388700,0.0,40.25187427666650,0.0,0.0,0.0,40.25187427666650,,False,4.992619850055430,[],4.992619850055430,10.332440814242100,4.740971355261110,"[5.339820964186639, 4.992619850055428]",0,0.0,4.992619850055430,4.992619850055430,0.9512436395821850,0.35755918575793400,0.0,0,0.7151183715158670,0,9.985239700110860,0.0,10.700358071626700 -68,,False,4.224663894043060,[],4.224663894043050,23.81322088243170,0.0,[23.813220882431747],0,0.0,0.0,0.0,0.7731521055704910,-17.32322088243170,17.32322088243170,0,0.0,643.0379591558660,0.0,0.0,643.0379591558660,,False,4.224663894043050,[],4.224663894043060,4.224663894043060,25.11855698838870,[4.224663894043057],0.0,0.0,23.813220882431700,4.224663894043050,0.7059266792930090,1.3053361059569400,0.0,0.0,5.221344423827770,0,95.25288352972700,0.0,100.47422795355500,,False,4.224663894043060,[],4.224663894043060,9.217283744098480,5.339820964186640,"[4.992619850055428, 4.224663894043057]",0,0.0,4.224663894043060,4.224663894043060,0.9518544704223090,1.4727162559015200,0.0,0,2.9454325118030300,0,8.449327788086110,0.0,11.394760299889100 -69,,False,5.773140855889250,[],5.773140855889250,5.773140855889240,23.813220882431700,[5.53],0,0.0,23.09636173832100,5.773140855889250,0.77697042385283,0.7168591441107570,0.0,0,5.018014008775300,0.0,0.0,0.0,5.018014008775300,,False,5.773140855889250,[],5.773140855889250,5.77314085588925,4.224663894043060,[5.773140855889252],0.0,0.0,5.53,5.53,0.7101676432163630,-0.2431408558892510,0.2431408558892510,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.773140855889250,[],5.77314085588925,9.997804749932310,4.992619850055430,"[4.224663894043057, 5.77314085588925]",0,0.0,5.773140855889250,5.773140855889250,0.9526648590585440,0.6921952500676930,0.0,0,1.3843905001353900,0,11.546281711778500,0.0,12.930672211913900 -70,,False,6.405205305878190,[],6.40520530587819,6.648346161767430,5.53,[5.773140855889252],0,0.0,6.246859144110760,6.246859144110760,0.78060591518001,-0.15834616176743100,0.15834616176743100,0,0.0,5.87780952480705,0.0,0.0,5.87780952480705,,False,6.40520530587819,[],6.405205305878190,6.405205305878190,5.773140855889250,[4.91685914411075],0.0,0.0,5.773140855889250,5.530000000000000,0.7129760539846370,-0.8752053058781890,0.8752053058781890,0.0,0.0,0.0,23.092563423557000,0.0,23.092563423557000,,False,6.405205305878190,[],6.405205305878190,12.17834616176740,4.224663894043060,"[5.77314085588925, 6.405205305878193]",0,0.0,4.91685914411075,4.91685914411075,0.9492727897347440,-1.4883461617674400,1.4883461617674400,0,0,0.0,9.8337182882215,0.0,9.8337182882215 -71,,False,6.392325753491900,[],6.392325753491900,7.267531059370080,5.773140855889250,[4.91685914411075],0,0.0,5.773140855889250,5.61479469412182,0.7823623473457920,-0.7775310593700830,0.7775310593700830,0,0.0,28.861952923817500,0.0,0.0,28.861952923817500,,False,6.392325753491900,[],6.392325753491900,7.880671915259340,4.91685914411075,[5.77314085588925],0.0,0.0,4.91685914411075,4.041653838232560,0.711525949759459,-2.3506719152593400,2.3506719152593400,0.0,0.0,0.0,19.667436576443,0.0,19.667436576443,,False,6.392325753491900,[],6.392325753491910,12.797531059370100,5.77314085588925,"[6.405205305878193, 6.392325753491905]",0,0.0,5.77314085588925,4.284794694121810,0.9442605493134870,-2.1075310593700900,2.1075310593700900,0,0,0.0,11.5462817117785,0.0,11.5462817117785 -72,,False,4.5065675177966700,[],4.5065675177966700,6.857239433056010,4.91685914411075,[0.0],0,0.0,4.91685914411075,4.139328084740670,0.78406531258446,-0.3672394330560070,0.3672394330560070,0,0.0,13.631927755039000,0.0,0.0,13.631927755039000,,True,4.5065675177966700,[],4.506567517796670,6.614098577166770,0,[6.405205305878193],5.77314085588925,0.0,0.0,0.0,0.7026260352458230,-6.857239433056020,6.857239433056020,0.0,11.5462817117785,0.0,0.0,0.0,11.5462817117785,,False,4.506567517796670,[],4.506567517796670,10.898893271288600,6.405205305878190,"[6.392325753491905, 4.506567517796671]",0,0.0,6.405205305878190,4.297674246508100,0.9443779560267260,-0.20889327128857600,0.20889327128857600,0,0,0.0,12.810410611756400,0.0,12.810410611756400 -73,,False,5.923162608341950,[],5.9231626083419500,12.78040204139800,0.0,[0.0],0,0.0,0.0,0.0,0.7713837333007990,-6.290402041397960,6.290402041397960,0,0.0,233.49972377669200,0.0,0.0,233.49972377669200,,True,5.9231626083419500,[],5.9231626083419500,6.132055879630520,0,[6.132055879630528],12.178346161767400,0.0,0.0,0.0,0.6912616659391850,-12.780402041398000,12.780402041398000,0.0,24.356692323534900,0.0,0.0,0.0,24.356692323534900,,False,5.9231626083419500,[],5.92316260834195,10.42973012613860,6.392325753491910,"[4.506567517796671, 5.92316260834195]",0,0.0,6.132055879630530,5.9231626083419500,0.9452775945507690,0.2602698738613770,0.0,0,0.5205397477227540,0,12.264111759261100,0.0,12.78465150698380 -74,,False,6.706604953678460,[],6.706604953678460,19.48700699507640,0.0,[0.0],0,0.0,0.0,0.0,0.7575110916978400,-12.997006995076400,12.997006995076400,0,0.0,482.4488996572370,0.0,0.0,482.4488996572370,,True,6.706604953678460,[],6.706604953678460,6.7066049536784600,0,[4.766837391658048],18.31040204139800,0.0,0.0,0.0,0.6788299475460520,-19.487006995076400,19.487006995076400,0.0,36.62080408279590,0.0,0.0,0.0,36.62080408279590,,False,6.706604953678460,[],6.706604953678460,12.629767562020400,4.506567517796670,"[5.92316260834195, 6.706604953678463]",0,0.0,4.766837391658050,4.766837391658050,0.9410601432291910,-1.9397675620204100,1.9397675620204100,0,0,0.0,9.533674783316100,0.0,9.533674783316100 -75,,False,5.873589415635380,[],5.873589415635380,25.3605964107118,0.0,[0.0],0,0.0,0.0,0.0,0.7457650490005420,-18.8705964107118,18.8705964107118,0,0.0,700.476538765622,0.0,0.0,700.476538765622,,True,5.873589415635380,[],5.87358941563538,7.813356977655790,0,[5.92316260834195],23.077239433056000,0.0,0.0,0.0,0.6683039425337580,-25.360596410711800,25.360596410711800,0.0,46.154478866112000,0.0,0.0,0.0,46.154478866112000,,False,5.87358941563538,[],5.873589415635380,12.580194369313800,5.92316260834195,"[6.706604953678463, 5.873589415635382]",0,0.0,5.92316260834195,3.9833950463215400,0.9369840140791680,-1.8901943693138400,1.8901943693138400,0,0,0.0,11.8463252166839,0.0,11.8463252166839 -76,,False,5.649086732629110,[],5.649086732629110,31.009683143340900,0.0,[0.0],0,0.0,0.0,0.0,0.7348065702977930,-24.519683143340900,24.519683143340900,0,0.0,910.1706382808140,0.0,0.0,910.1706382808140,,True,5.649086732629110,[],5.649086732629110,7.539281101942950,0,[6.706604953678463],29.00040204139800,0.0,0.0,0.0,0.6584836988376570,-31.009683143340900,31.009683143340900,0.0,58.00080408279590,0.0,0.0,0.0,58.00080408279590,,False,5.649086732629110,[],5.649086732629110,11.522676148264500,6.706604953678460,"[5.873589415635382, 5.649086732629105]",0,0.0,6.706604953678460,4.816410584364620,0.9357440499588400,-0.832676148264488,0.832676148264488,0,0,0.0,13.413209907356900,0.0,13.413209907356900 -77,,False,3.7771264633246900,[],3.7771264633246900,34.7868096066656,0.0,[0.0],0,0.0,0.0,0.0,0.7276573538150010,-28.296809606665600,28.296809606665600,0,0.0,1050.377572599430,0.0,0.0,1050.377572599430,,True,3.7771264633246900,[],3.7771264633246900,4.609802611589170,0,[4.609802611589179],35.70700699507640,0.0,0.0,0.0,0.6520770570033690,-34.78680960666560,34.78680960666560,0.0,71.41401399015290,0.0,0.0,0.0,71.41401399015290,,False,3.7771264633246900,[],3.7771264633246900,9.426213195953800,5.873589415635380,"[5.649086732629105, 3.7771264633246924]",0,0.0,4.609802611589180,3.7771264633246900,0.9363692208755420,1.2637868040462000,0.0,0,2.527573608092410,0,9.219605223178360,0.0,11.747178831270800 -78,,False,5.620548215961740,[],5.620548215961730,40.40735782262730,0.0,[40.316809606665615],0,0.0,0.0,0.0,0.7172728214534760,-33.91735782262730,33.91735782262730,0,0.0,1259.0123223759300,0.0,0.0,1259.0123223759300,,False,5.620548215961730,[],5.620548215961730,5.620548215961730,40.316809606665600,[5.620548215961732],0.0,0.0,40.316809606665600,5.530000000000010,0.6568124177312190,-0.09054821596172500,0.09054821596172500,0.0,0.0,0.0,161.26723842666200,0.0,161.26723842666200,,False,5.620548215961730,[],5.620548215961730,9.397674679286430,5.649086732629110,"[3.7771264633246924, 5.620548215961732]",0,0.0,5.620548215961730,5.620548215961730,0.9372773074653950,1.2923253207135800,0.0,0,2.584650641427150,0,11.241096431923500,0.0,13.825747073350600 -79,,False,4.839062623136940,[],4.839062623136940,4.92961083909865,40.316809606665600,[4.92961083909866],0,0.0,38.75642044576430,4.83906262313694,0.7207044994122910,1.5603891609013500,0.0,0,10.92272412630940,0.0,0.0,0.0,10.92272412630940,,False,4.839062623136940,[],4.839062623136930,4.839062623136930,5.620548215961730,[4.839062623136932],0.0,0.0,4.92961083909866,4.839062623136940,0.6609779502699210,0.6909373768630720,0.0,0.0,2.763749507452290,0,19.71844335639460,0.0,22.48219286384690,,False,4.839062623136930,[],4.83906262313693,10.459610839098700,3.7771264633246900,"[5.620548215961732, 4.83906262313693]",0,0.0,4.839062623136930,4.839062623136930,0.938038621190503,0.23038916090133700,0.0,0,0.46077832180267500,0,9.678125246273860,0.0,10.138903568076500 -80,,False,4.643254974231810,[],4.643254974231810,4.643254974231800,4.92961083909866,[4.643254974231809],0,0.0,4.643254974231810,4.643254974231810,0.7239199019988790,1.8467450257682000,0.0,0,12.92721518037740,0.0,0.0,0.0,12.92721518037740,,False,4.643254974231810,[],4.643254974231810,4.643254974231810,4.839062623136930,[4.643254974231809],0.0,0.0,4.643254974231810,4.643254974231810,0.6648809575626220,0.886745025768195,0.0,0.0,3.54698010307278,0,18.573019896927200,0.0,22.120000000000000,,False,4.643254974231810,[],4.643254974231810,9.482317597368740,5.620548215961730,"[4.83906262313693, 4.643254974231809]",0,0.0,4.643254974231810,4.643254974231810,0.9387519544782690,1.207682402631260,0.0,0,2.415364805262520,0,9.286509948463620,0.0,11.70187475372610 -81,,False,5.556121798533970,[],5.556121798533970,5.556121798533960,4.643254974231810,[5.530000000000004],0,0.0,5.556121798533970,5.556121798533970,0.7276714781907060,0.9338782014660450,0.0,0,6.537147410262310,0.0,0.0,0.0,6.537147410262310,,False,5.556121798533970,[],5.556121798533960,5.556121798533960,4.643254974231810,[5.556121798533964],0.0,0.0,5.530000000000000,5.530000000000000,0.6693709110311260,-0.02612179853396150,0.02612179853396150,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,5.556121798533960,[],5.556121798533970,10.199376772765800,4.83906262313693,"[4.643254974231809, 5.556121798533966]",0,0.0,5.556121798533960,5.556121798533960,0.9395842372506930,0.49062322723422600,0.0,0,0.9812464544684530,0,11.112243597067900,0.0,12.093490051536400 -82,,False,6.363886524417110,[],6.363886524417110,6.390008322951060,5.530000000000000,[5.556121798533964],0,0.0,6.363886524417110,6.363886524417110,0.731845118776755,0.0999916770489433,0.0,0,0.6999417393426030,0.0,0.0,0.0,0.6999417393426030,,False,6.363886524417110,[],6.363886524417110,6.3638865244171000,5.556121798533960,[5.133878201466035],0.0,0.0,5.556121798533960,5.530000000000000,0.6724298542927530,-0.8338865244171030,0.8338865244171030,0.0,0.0,0.0,22.224487194135900,0.0,22.224487194135900,,False,6.363886524417110,[],6.363886524417100,11.92000832295110,4.643254974231810,"[5.556121798533966, 6.363886524417104]",0,0.0,5.133878201466040,5.133878201466040,0.9375480011412650,-1.230008322951070,1.230008322951070,0,0,0.0,10.26775640293210,0.0,10.26775640293210 -83,,False,7.539162716269330,[],7.539162716269330,8.373049240686420,5.556121798533960,[5.133878201466035],0,0.0,5.656113475582910,5.656113475582910,0.7321729817331880,-1.8830492406864300,1.8830492406864300,0,0.0,69.8987878142801,0.0,0.0,69.8987878142801,,False,7.539162716269330,[],7.539162716269330,8.7691710392204,5.133878201466040,[5.556121798533966],0.0,0.0,5.133878201466040,4.299991677048930,0.6706096035115400,-3.239171039220400,3.239171039220400,0.0,0.0,0.0,20.53551280586410,0.0,20.53551280586410,,False,7.539162716269330,[],7.539162716269340,13.903049240686400,5.556121798533970,"[6.363886524417104, 7.539162716269335]",0,0.0,5.556121798533970,4.326113475582900,0.9310618602073320,-3.2130492406864400,3.2130492406864400,0,0,0.0,11.112243597067900,0.0,11.112243597067900 -84,,False,3.559958552316200,[],3.559958552316200,6.799129591536590,5.133878201466040,[0.0],0,0.0,5.133878201466040,3.25082896077961,0.733684270620024,-0.30912959153659200,0.30912959153659200,0,0.0,11.4748904378383,0.0,0.0,11.4748904378383,,True,3.559958552316200,[],3.5599585523162100,6.773007793002640,0,[6.363886524417104],5.556121798533970,0.0,0.0,0.0,0.6650099876834430,-6.799129591536610,6.799129591536610,0.0,11.112243597067900,0.0,0.0,0.0,11.112243597067900,,False,3.5599585523162100,[],3.5599585523162000,11.099121268585500,6.363886524417100,"[7.539162716269335, 3.5599585523162034]",0,0.0,6.363886524417100,3.1508372837306700,0.9306778845102690,-0.409121268585539,0.409121268585539,0,0,0.0,12.727773048834200,0.0,12.727773048834200 -85,,False,6.19072725611364,[],6.19072725611364,12.989856847650200,0.0,[0.0],0,0.0,0.0,0.0,0.7231832013665240,-6.499856847650230,6.499856847650230,0,0.0,241.27468618477700,0.0,0.0,241.27468618477700,,True,6.19072725611364,[],6.190727256113640,6.599848524699180,0,[6.59984852469918],11.92000832295110,0.0,0.0,0.0,0.6554918390538810,-12.989856847650200,12.989856847650200,0.0,23.84001664590210,0.0,0.0,0.0,23.84001664590210,,False,6.190727256113640,[],6.190727256113640,9.750685808429850,7.539162716269340,"[3.5599585523162034, 6.190727256113641]",0,0.0,6.59984852469918,6.190727256113640,0.9316700774258150,0.9393141915701550,0.0,0,1.8786283831403100,0,13.19969704939840,0.0,15.07832543253870 -86,,False,5.617640845511150,[],5.617640845511150,18.607497693161400,0.0,[18.51985684765025],0,0.0,0.0,0.0,0.7139110456884360,-12.117497693161400,12.117497693161400,0,0.0,449.8015143701500,0.0,0.0,449.8015143701500,,False,5.617640845511150,[],5.617640845511140,5.61764084551114,18.51985684765030,[4.499272743886358],0.0,0.0,18.51985684765030,5.530000000000010,0.6597088595039260,-0.0876408455111406,0.0876408455111406,0.0,0.0,0.0,74.079427390601,0.0,74.079427390601,,False,5.617640845511140,[],5.617640845511140,11.808368101624800,3.5599585523162000,"[6.190727256113641, 5.617640845511143]",0,0.0,4.499272743886360,4.499272743886360,0.9299936715822920,-1.1183681016247900,1.1183681016247900,0,0,0.0,8.998545487772720,0.0,8.998545487772720 -87,,False,6.21707079698011,[],6.21707079698011,6.304711642491240,18.51985684765030,[0.0],0,0.0,18.334568490141500,6.217070796980110,0.7179136830864060,0.18528835750876200,1.77635683940025E-15,0,1.2970185025613300,0.0,0.0,0.0,1.2970185025613300,,True,6.21707079698011,[],6.217070796980110,7.335438898604890,0,[6.190727256113641],4.499272743886360,0.0,0.0,0.0,0.6504789493203020,-6.304711642491250,6.304711642491250,0.0,8.998545487772720,0.0,0.0,0.0,8.998545487772720,,False,6.217070796980110,[],6.217070796980110,11.834711642491300,6.190727256113640,"[5.617640845511143, 6.217070796980109]",0,0.0,6.190727256113640,5.072359154488860,0.9283970651442720,-1.1447116424912600,1.1447116424912600,0,0,0.0,12.381454512227300,0.0,12.381454512227300 -88,,False,5.226288269498880,[],5.226288269498880,11.530999911990100,0.0,[0.0],0,0.0,0.18528835750876200,0.18528835750876000,0.7099804134169310,-5.040999911990110,5.040999911990120,0,0.0,187.121916733073,0.0,0.0,187.121916733073,,True,5.226288269498880,[],5.226288269498880,6.370999911990130,0,[5.617640845511143],10.69,0.0,0.0,0.0,0.6429174499606870,-11.530999911990100,11.530999911990100,0.0,21.38,0.0,0.0,0.0,21.38,,False,5.226288269498880,[],5.226288269498880,11.443359066479000,5.617640845511140,"[6.217070796980109, 5.226288269498876]",0,0.0,5.617640845511140,4.472929203019890,0.9275537641300590,-0.7533590664789890,0.7533590664789890,0,0,0.0,11.235281691022300,0.0,11.235281691022300 -89,,False,5.847401432576640,[],5.847401432576640,17.378401344566800,0.0,[0.0],0,0.0,0.0,0.0,0.7008649539072030,-10.888401344566800,10.888401344566800,0,0.0,404.1774579103180,0.0,0.0,404.1774579103180,,True,5.847401432576640,[],5.847401432576640,6.600760499055620,0,[6.217070796980109],16.30764084551110,0.0,0.0,0.0,0.6346630138206680,-17.378401344566800,17.378401344566800,0.0,32.61528169102230,0.0,0.0,0.0,32.61528169102230,,False,5.847401432576640,[],5.84740143257664,11.073689702075500,6.217070796980110,"[5.226288269498876, 5.84740143257664]",0,0.0,6.217070796980110,5.46371173050112,0.9276414432175050,-0.3836897020755180,0.3836897020755180,0,0,0.0,12.434141593960200,0.0,12.434141593960200 -90,,False,5.174833011991470,[],5.17483301199147,22.553234356558200,0.0,[0.0],0,0.0,0.0,0.0,0.6929909936375190,-16.063234356558200,16.063234356558200,0,0.0,596.2672593154410,0.0,0.0,596.2672593154410,,True,5.17483301199147,[],5.174833011991470,5.558522714066990,0,[5.226288269498876],22.52471164249130,0.0,0.0,0.0,0.6275328080262390,-22.553234356558200,22.553234356558200,0.0,45.0494232849825,0.0,0.0,0.0,45.0494232849825,,False,5.174833011991470,[],5.174833011991470,11.022234444568100,5.226288269498880,"[5.84740143257664, 5.174833011991474]",0,0.0,5.226288269498880,4.842598567423360,0.9277330795368400,-0.33223444456811400,0.33223444456811400,0,0,0.0,10.452576538997800,0.0,10.452576538997800 -91,,False,3.783145107640760,[],3.783145107640760,26.336379464199000,0.0,[26.336379464198995],0,0.0,0.0,0.0,0.6873456456146060,-19.846379464199000,19.846379464199000,0,0.0,736.6976057110660,0.0,0.0,736.6976057110660,,False,3.783145107640760,[],3.7831451076407600,4.115379552208870,27.750999911990100,[4.115379552208873],0.0,0.0,26.336379464199000,3.7831451076407600,0.6305670565880730,1.4146204477911300,0.0,0.0,5.658481791164540,0,105.34551785679600,0.0,111.00399964796100,,False,3.7831451076407600,[],3.7831451076407600,8.957978119632230,5.84740143257664,"[5.174833011991474, 3.7831451076407596]",0,0.0,4.115379552208870,3.7831451076407600,0.9283217912521500,1.7320218803677700,0.0,0,3.4640437607355300,0,8.230759104417750,0.0,11.694802865153300 -92,,False,5.734501064880050,[],5.734501064880040,5.734501064880030,26.336379464199000,[5.5300000000000065],0,0.0,25.58088052907900,5.734501064880050,0.6911592910130420,0.7554989351199670,0.0,0,5.288492545839770,0.0,0.0,0.0,5.288492545839770,,False,5.734501064880040,[],5.734501064880040,5.734501064880040,4.115379552208870,[5.734501064880042],0.0,0.0,5.5300000000000100,5.5300000000000100,0.6346382803156820,-0.20450106488003800,0.20450106488003800,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,5.734501064880040,[],5.73450106488004,9.517646172520800,5.174833011991470,"[3.7831451076407596, 5.73450106488004]",0,0.0,5.734501064880040,5.734501064880040,0.9291960962702160,1.1723538274792,0.0,0,2.3447076549584,0,11.469002129760100,0.0,13.813709784718500 -93,,False,4.0455027380385800,[],4.045502738038580,4.250003802918610,5.5300000000000100,[4.250003802918619],0,0.0,4.0455027380385800,4.0455027380385800,0.6937942029051570,2.2399961970813900,0.0,0,15.679973379569800,0.0,0.0,0.0,15.679973379569800,,False,4.045502738038580,[],4.045502738038580,4.045502738038580,5.734501064880040,[4.045502738038582],0.0,0.0,4.250003802918620,4.045502738038580,0.637755408052105,1.4844972619614200,0.0,0.0,5.93798904784569,0,17.000015211674500,0.0,22.938004259520200,,False,4.045502738038580,[],4.045502738038580,9.780003802918620,3.7831451076407600,"[5.73450106488004, 4.045502738038584]",0,0.0,4.045502738038580,4.045502738038580,0.9298001683452920,0.9099961970813780,0.0,0,1.819992394162760,0,8.091005476077160,0.0,9.91099787023992 -94,,False,5.7699773599307900,[],5.769977359930790,5.769977359930780,4.250003802918620,[5.530000000000005],0,0.0,5.7699773599307900,5.7699773599307900,0.6974754401236420,0.7200226400692190,0.0,0,5.040158480484530,0.0,0.0,0.0,5.040158480484530,,False,5.769977359930790,[],5.769977359930790,5.769977359930790,4.045502738038580,[5.769977359930793],0.0,0.0,5.530000000000010,5.530000000000010,0.6416103418135970,-0.23997735993078800,0.23997735993078800,0.0,0.0,0.0,22.12000000000000,0.0,22.12000000000000,,False,5.769977359930790,[],5.769977359930790,9.815480097969370,5.73450106488004,"[4.045502738038584, 5.769977359930791]",0,0.0,5.769977359930790,5.769977359930790,0.930644117857256,0.8745199020306250,0.0,0,1.7490398040612500,0,11.539954719861600,0.0,13.288994523922800 -95,,False,6.268389522403900,[],6.2683895224039000,6.508366882334680,5.530000000000010,[5.769977359930793],0,0.0,6.250022640069220,6.250022640069220,0.7013378704284320,-0.018366882334678500,0.018366882334678500,0,0.0,0.6817786722632670,0.0,0.0,0.6817786722632670,,False,6.2683895224039000,[],6.2683895224039000,6.268389522403900,5.769977359930790,[4.920022640069209],0.0,0.0,5.769977359930790,5.530000000000010,0.6447121255243200,-0.7383895224038970,0.7383895224038970,0.0,0.0,0.0,23.07990943972320,0.0,23.07990943972320,,False,6.2683895224039000,[],6.268389522403900,12.038366882334700,4.045502738038580,"[5.769977359930791, 6.268389522403903]",0,0.0,4.920022640069210,4.920022640069210,0.9287650816933810,-1.3483668823346900,1.3483668823346900,0,0,0.0,9.840045280138420,0.0,9.840045280138420 -96,,False,4.132358910020630,[],4.132358910020630,4.870748432424510,5.769977359930790,[4.870748432424522],0,0.0,4.150725792355300,4.132358910020630,0.7038548146064790,1.619251567575490,0.0,0,11.334760973028400,0.0,0.0,0.0,11.334760973028400,,False,4.132358910020630,[],4.132358910020630,5.4807257923553100,4.920022640069210,[5.480725792355319],0.0,0.0,4.870748432424520,4.132358910020630,0.6477062773053820,0.04927420764468680,0.0,0.0,0.19709683057874700,0,19.482993729698100,0.0,19.680090560276800,,False,4.132358910020630,[],4.132358910020620,10.400748432424500,5.769977359930790,"[6.268389522403903, 4.132358910020624]",0,0.0,5.480725792355320,4.132358910020630,0.929365406592834,0.2892515675754720,0.0,0,0.5785031351509440,0,10.961451584710600,0.0,11.539954719861600 -97,,False,5.145861852428310,[],5.145861852428310,5.145861852428300,4.870748432424520,[5.145861852428308],0,0.0,5.145861852428310,5.145861852428310,0.7069303754460090,1.3441381475717000,0.0,0,9.408967033001910,0.0,0.0,0.0,9.408967033001910,,False,5.145861852428310,[],5.145861852428310,5.145861852428300,5.480725792355320,[5.145861852428309],0.0,0.0,5.145861852428310,5.145861852428310,0.6513649583543140,0.3841381475716970,0.0,0.0,1.5365525902867900,0,20.583447409713200,0.0,22.120000000000000,,False,5.145861852428310,[],5.1458618524283100,9.278220762448930,6.268389522403900,"[4.132358910020624, 5.1458618524283075]",0,0.0,5.145861852428310,5.145861852428310,0.9300989690483930,1.411779237551070,0.0,0,2.823558475102130,0,10.291723704856600,0.0,13.11528217995880 -98,,False,5.878673548190900,[],5.878673548190900,5.878673548190890,5.145861852428310,[5.5300000000000065],0,0.0,5.878673548190900,5.878673548190900,0.7103666623424340,0.6113264518091150,0.0,0,4.279285162663800,0.0,0.0,0.0,4.279285162663800,,False,5.878673548190900,[],5.8786735481908900,5.878673548190890,5.145861852428310,[5.54413814757169],0.0,0.0,5.5300000000000100,5.5300000000000100,0.6547573206456490,-0.3486735481908890,0.3486735481908890,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,5.8786735481908900,[],5.878673548190900,11.024535400619200,4.132358910020620,"[5.1458618524283075, 5.878673548190896]",0,0.0,5.54413814757169,5.54413814757169,0.9302513306183350,-0.3345354006192040,0.3345354006192040,0,0,0.0,11.08827629514340,0.0,11.08827629514340 -99,,False,4.76040549180619,[],4.760405491806190,5.109079039997070,5.5300000000000100,[5.10907903999708],0,0.0,4.76040549180619,4.76040549180619,0.7130907915278840,1.380920960002930,0.0,0,9.666446720020520,0.0,0.0,0.0,9.666446720020520,,False,4.760405491806190,[],4.760405491806190,5.09494089242539,5.54413814757169,[5.094940892425395],0.0,0.0,5.10907903999708,4.760405491806190,0.6580044801974420,0.4350591075746100,0.0,0.0,1.7402364302984400,0,20.43631615998830,0.0,22.17655259028680,,False,4.760405491806190,[],4.760405491806190,10.639079039997100,5.1458618524283100,"[5.878673548190896, 4.760405491806191]",0,0.0,5.094940892425400,4.760405491806190,0.9309073475929190,0.05092096000291240,0.0,0,0.1018419200058250,0,10.18988178485080,0.0,10.291723704856600 \ No newline at end of file +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +0,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,2.6018801180469207,0,0,18.213160826328444,0.0,0.0,0.0,18.213160826328444,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,1.6418801180469207,0,0,6.567520472187683,0,15.552479527812318,0.0,22.12,,False,3.8881198819530796,[],3.888119881953079,3.888119881953079,0,"[0, 3.888119881953079]",0,0.0,3.8881198819530796,3.8881198819530796,1.0,6.80188011804692,0,0,13.60376023609384,0,7.776239763906159,0.0,21.38 +1,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,1.1710978153106169,0,0,8.197684707174318,0.0,0.0,0.0,8.197684707174318,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,0.2110978153106169,0,0,0.8443912612424676,0,21.275608738757533,0.0,22.12,,False,5.318902184689383,[],5.318902184689383,9.207022066642462,0,"[3.888119881953079, 5.318902184689383]",0,0.0,5.318902184689383,5.318902184689383,1.0,1.482977933357537,0,0,2.965955866715074,0,10.637804369378767,0.0,13.60376023609384 +2,,False,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[0.2110978153106169],0,0.0,5.279041292200137,5.279041292200137,1.0,1.210958707799863,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200137,[],5.279041292200137,5.279041292200137,0,[5.279041292200137],5.318902184689383,0.0,0.2110978153106169,0.2110978153106169,0.6501503996393926,-5.06794347688952,5.06794347688952,0,10.637804369378767,0.0,0.8443912612424676,0.0,11.482195630621234,,False,5.279041292200137,[],5.279041292200137,10.59794347688952,3.888119881953079,"[5.318902184689383, 5.279041292200137]",0,0.0,5.279041292200137,5.279041292200137,1.0,0.09205652311047885,0,0,0.1841130462209577,0,10.558082584400275,0.0,10.742195630621232 +3,,False,6.010515284806527,[],6.010515284806527,11.078458761696048,0.2110978153106169,[10.59794347688952],0,0.0,1.4220565231104798,1.4220565231104798,0.776135381349717,-4.588458761696047,4.588458761696047,0,0.0,170.32358923415725,0.0,0.0,170.32358923415725,,False,6.010515284806527,[],6.010515284806527,6.010515284806527,10.59794347688952,[5.410958707799862],0.0,0.0,10.59794347688952,5.53,0.7292982961614797,-0.4805152848065264,0.4805152848065264,0,0.0,0.0,42.39177390755808,0.0,42.39177390755808,,False,6.010515284806527,[],6.010515284806527,11.289556577006666,5.318902184689383,"[5.279041292200137, 6.010515284806527]",0,0.0,5.410958707799862,5.410958707799862,0.9707484557578864,-0.5995565770066644,0.5995565770066644,0,0.0,0.0,10.821917415599724,0.0,10.821917415599724 +4,,False,4.419121865976485,[],4.419121865976484,4.899637150783011,10.59794347688952,[0.0],0,0.0,9.007580627672532,4.419121865976485,0.8158406680188101,1.590362849216989,0.0,0,11.132539944518923,0.0,0.0,0.0,11.132539944518923,,True,4.419121865976484,[],4.419121865976484,5.018678442983148,0,[5.018678442983148],5.410958707799862,0.0,0.0,0.0,0.5999478070535571,-4.89963715078301,4.89963715078301,0.0,10.821917415599724,0.0,0.0,0.0,10.821917415599724,,False,4.419121865976484,[],4.419121865976482,10.42963715078301,5.279041292200137,"[6.010515284806527, 4.419121865976482]",0,0.0,5.018678442983148,4.419121865976484,0.9759365956106659,0.26036284921698893,0.0,0,0.5207256984339779,0,10.037356885966297,0.0,10.558082584400275 +5,,False,4.474830192821853,[],4.474830192821853,9.374467343604863,0.0,[0.0],0,0.0,1.590362849216989,1.590362849216989,0.7457369456524102,-2.8844673436048636,2.8844673436048636,0,0.0,107.07142779461253,0.0,0.0,107.07142779461253,,True,4.474830192821853,[],4.474830192821853,4.474830192821852,0,[4.474830192821853],10.42963715078301,0.0,0.0,0.0,0.5086032652247512,-9.374467343604863,9.374467343604863,0.0,20.85927430156602,0.0,0.0,0.0,20.85927430156602,,False,4.474830192821853,[],4.474830192821853,8.893952058798337,6.010515284806527,"[4.419121865976482, 4.474830192821853]",0,0.0,4.474830192821853,4.474830192821853,0.979600348728758,1.796047941201663,0.0,0,3.592095882403326,0,8.949660385643705,0.0,12.541756268047031 +6,,False,2.3874509873063987,[],2.3874509873063996,11.761918330911262,0.0,[0.0],0,0.0,0.0,0.0,0.6897104042392165,-5.271918330911262,5.271918330911262,0,0.0,195.69360844342603,0.0,0.0,195.69360844342603,,True,2.3874509873063996,[],2.3874509873064005,2.3874509873063996,0,[2.3874509873064005],14.904467343604864,0.0,0.0,0.0,0.4703923624820008,-11.761918330911262,11.761918330911262,0.0,29.808934687209728,0.0,0.0,0.0,29.808934687209728,,False,2.3874509873064005,[],2.3874509873063996,6.862281180128255,4.419121865976482,"[4.474830192821853, 2.3874509873063996]",0,0.0,2.3874509873064005,2.3874509873064005,0.9811329560555454,3.8277188198717447,0.0,0,7.655437639743489,0,4.774901974612801,0.0,12.43033961435629 +7,,False,5.950369682396903,[],5.950369682396903,17.712288013308164,0.0,[0.0],0,0.0,0.0,0.0,0.5809319464015877,-11.222288013308166,11.222288013308166,0,0.0,416.5713310539991,0.0,0.0,416.5713310539991,,True,5.950369682396903,[],5.950369682396902,5.950369682396901,0,[5.950369682396902],17.291918330911265,0.0,0.0,0.0,0.39620389808463924,-17.712288013308164,17.712288013308164,0.0,34.58383666182253,0.0,0.0,0.0,34.58383666182253,,False,5.950369682396902,[],5.950369682396902,8.337820669703305,4.474830192821853,"[2.3874509873063996, 5.950369682396902]",0,0.0,5.950369682396902,5.950369682396902,0.9841085932673639,2.3521793302966945,0.0,0,4.704358660593389,0,11.900739364793804,0.0,16.605098025387193 +8,,False,4.571953935823766,[],4.5719539358237675,22.284241949131932,0.0,[22.284241949131932],0,0.0,0.0,0.0,0.5181429409923104,-15.794241949131932,15.794241949131932,0,0.0,586.2822611517772,0.0,0.0,586.2822611517772,,False,4.5719539358237675,[],4.571953935823767,4.571953935823766,23.24228801330817,[4.571953935823767],0.0,0.0,22.284241949131932,4.5719539358237675,0.4614641354396298,0.9580460641762372,0.0,0.0,3.8321842567049487,0,89.13696779652773,0.0,92.96915205323268,,False,4.571953935823767,[],4.571953935823767,10.522323618220673,2.3874509873063996,"[5.950369682396902, 4.571953935823767]",0,0.0,4.571953935823767,4.571953935823767,0.9858261879520376,0.16767638177932742,0.0,0,0.33535276355865484,0,9.143907871647533,0.0,9.479260635206188 +9,,False,4.257593162880828,[],4.257593162880828,4.257593162880827,22.284241949131932,[4.257593162880828],0,0.0,20.05183511201276,4.257593162880829,0.5622074582342398,2.2324068371191723,0.0,0,15.626847859834207,0.0,0.0,0.0,15.626847859834207,,False,4.257593162880828,[],4.257593162880825,4.257593162880824,4.571953935823767,[4.257593162880825],0.0,0.0,4.257593162880828,4.257593162880828,0.5107117752649893,1.272406837119176,0.0,0.0,5.089627348476704,0,17.03037265152331,0.0,22.120000000000015,,False,4.257593162880825,[],4.2575931628808235,8.829547098704595,5.950369682396902,"[4.571953935823767, 4.2575931628808235]",0,0.0,4.257593162880825,4.257593162880825,0.9871223445065508,1.860452901295404,0.0,0,3.720905802590808,0,8.51518632576165,0.0,12.236092128352459 +10,,False,4.3705250390757495,[],4.37052503907575,4.37052503907575,4.257593162880828,[4.37052503907575],0,0.0,4.3705250390757495,4.3705250390757495,0.5997775052500238,2.1194749609242507,0.0,0,14.836324726469755,0.0,0.0,0.0,14.836324726469755,,False,4.37052503907575,[],4.37052503907575,4.3705250390757495,4.257593162880825,[4.37052503907575],0.0,0.0,4.37052503907575,4.37052503907575,0.5527010278306473,1.1594749609242507,0.0,0.0,4.637899843697003,0,17.482100156303,0.0,22.120000000000005,,False,4.37052503907575,[],4.370525039075752,8.628118201956578,4.571953935823767,"[4.2575931628808235, 4.370525039075752]",0,0.0,4.37052503907575,4.37052503907575,0.9882274663991957,2.0618817980434203,0.0,0,4.123763596086841,0,8.7410500781515,0.0,12.864813674238341 +11,,False,5.597720466912608,[],5.597720466912607,5.597720466912606,4.37052503907575,[5.530000000000001],0,0.0,5.597720466912608,5.597720466912608,0.6394110888020618,0.8922795330873932,0.0,0,6.245956731611752,0.0,0.0,0.0,6.245956731611752,,False,5.597720466912607,[],5.597720466912607,5.597720466912606,4.37052503907575,[5.597720466912607],0.0,0.0,5.530000000000001,5.530000000000001,0.5957985040254986,-0.06772046691260591,0.06772046691260591,0.0,0.0,0.0,22.120000000000005,0.0,22.120000000000005,,False,5.597720466912607,[],5.597720466912609,9.968245505988364,4.2575931628808235,"[4.370525039075752, 5.597720466912609]",0,0.0,5.597720466912607,5.597720466912607,0.9893932871619144,0.7217544940116367,0.0,0,1.4435089880232734,0,11.195440933825214,0.0,12.638949921848488 +12,,False,5.122219165222679,[],5.12221916522268,5.189939632135285,5.530000000000001,[5.189939632135286],0,0.0,5.122219165222679,5.122219165222679,0.6693715830888035,1.300060367864715,0.0,0,9.100422575053004,0.0,0.0,0.0,9.100422575053004,,False,5.12221916522268,[],5.12221916522268,5.122219165222679,5.597720466912607,[5.092279533087389],0.0,0.0,5.189939632135286,5.12221916522268,0.6293826665850314,0.40778083477732086,0.0,0.0,1.6311233391092834,0,20.759758528541145,0.0,22.390881867650428,,False,5.12221916522268,[],5.1222191652226785,10.71993963213529,4.370525039075752,"[5.597720466912609, 5.1222191652226785]",0,0.0,5.092279533087389,5.092279533087389,0.9897889225754252,-0.029939632135291383,0.029939632135291383,0,0.0,0.0,10.184559066174778,0.0,10.184559066174778 +13,,False,4.484564337907547,[],4.484564337907547,4.484564337907545,5.189939632135286,[4.484564337907547],0,0.0,4.484564337907547,4.484564337907547,0.6917919486174242,2.005435662092454,0.0,0,14.038049634647178,0.0,0.0,0.0,14.038049634647178,,False,4.484564337907547,[],4.484564337907547,4.514503970042838,5.092279533087389,[4.514503970042838],0.0,0.0,4.484564337907547,4.484564337907547,0.6545147352802583,1.0154960299571627,0.0,0.0,4.061984119828651,0,17.938257351630188,0.0,22.00024147145884,,False,4.484564337907547,[],4.484564337907549,9.60678350313023,5.597720466912609,"[5.1222191652226785, 4.484564337907549]",0,0.0,4.514503970042838,4.484564337907547,0.9904813497129313,1.0832164968697704,0.0,0,2.166432993739541,0,9.029007940085677,0.0,11.195440933825218 +14,,False,4.399746149894089,[],4.3997461498940895,4.399746149894088,4.484564337907547,[1.0154960299571627],0,0.0,4.399746149894089,4.399746149894089,0.7110176084095495,2.0902538501059125,0.0,0,14.631776950741386,0.0,0.0,0.0,14.631776950741386,,True,4.3997461498940895,[],4.399746149894089,4.399746149894089,0,[4.399746149894089],4.514503970042838,0.0,1.0154960299571627,1.0154960299571627,0.6280843936995064,-3.384250119936927,3.384250119936927,0.0,9.029007940085677,0.0,4.061984119828651,0.0,13.090992059914328,,False,4.399746149894089,[],4.399746149894087,8.884310487801638,5.1222191652226785,"[4.484564337907549, 4.399746149894087]",0,0.0,4.399746149894089,4.399746149894089,0.9910751120474274,1.8056895121983603,0.0,0,3.6113790243967205,0,8.799492299788177,0.0,12.410871324184898 +15,,False,5.947439821046639,[],5.947439821046639,9.331689940983564,1.0154960299571627,[0.0],0,0.0,3.105749880063075,3.105749880063075,0.696334254698549,-2.8416899409835636,2.8416899409835636,0,0.0,105.48353060930988,0.0,0.0,105.48353060930988,,True,5.947439821046639,[],5.947439821046639,5.94743982104664,0,[5.947439821046639],8.914250119936927,0.0,0.0,0.0,0.5792417081239438,-9.331689940983566,9.331689940983566,0.0,17.828500239873854,0.0,0.0,0.0,17.828500239873854,,False,5.947439821046639,[],5.947439821046641,10.347185970940728,4.484564337907549,"[4.399746149894087, 5.947439821046641]",0,0.0,5.947439821046639,5.947439821046639,0.9917691517345099,0.3428140290592703,0.0,0,0.6856280581185406,0,11.894879642093278,0.0,12.580507700211818 +16,,False,3.978447805324402,[],3.978447805324402,13.310137746307966,0.0,[13.310137746307968],0,0.0,0.0,0.0,0.6619024994679914,-6.8201377463079655,6.8201377463079655,0,0.0,253.16351314295167,0.0,0.0,253.16351314295167,,False,3.978447805324402,[],3.978447805324401,3.978447805324401,14.861689940983567,[3.978447805324401],0.0,0.0,13.310137746307968,3.978447805324402,0.6000470130753361,1.5515521946755992,0.0,0.0,6.206208778702397,0,53.24055098523187,0.0,59.44675976393427,,False,3.978447805324401,[],3.978447805324403,9.925887626371045,4.399746149894087,"[5.947439821046641, 3.978447805324403]",0,0.0,3.978447805324401,3.978447805324401,0.9921761438520238,0.7641123736289561,0.0,0,1.5282247472579122,0,7.956895610648802,0.0,9.485120357906714 +17,,False,4.838244613602479,[],4.838244613602479,4.838244613602475,13.310137746307968,[4.838244613602479],0,0.0,11.658382359910444,4.838244613602479,0.681080221237756,1.6517553863975234,0.0,0,11.562287704782664,0.0,0.0,0.0,11.562287704782664,,False,4.838244613602479,[],4.838244613602479,4.8382446136024795,3.978447805324401,[4.838244613602479],0.0,0.0,4.838244613602479,4.838244613602479,0.6227333301648095,0.6917553863975217,0.0,0.0,2.7670215455900866,0,19.352978454409914,0.0,22.12,,False,4.838244613602479,[],4.838244613602477,8.81669241892688,5.947439821046641,"[3.978447805324403, 4.838244613602477]",0,0.0,4.838244613602479,4.838244613602479,0.9926199322152517,1.8733075810731181,0.0,0,3.7466151621462362,0,9.676489227204957,0.0,13.423104389351193 +18,,False,4.770549546168043,[],4.770549546168045,4.770549546168041,4.838244613602479,[0.6917553863975217],0,0.0,4.770549546168043,4.770549546168043,0.6979722749547879,1.7194504538319588,0.0,0,12.036153176823712,0.0,0.0,0.0,12.036153176823712,,True,4.770549546168045,[],4.770549546168044,4.770549546168045,0,[4.770549546168044],4.838244613602479,0.0,0.6917553863975217,0.6917553863975217,0.5974297691944956,-4.078794159770523,4.078794159770523,0.0,9.676489227204957,0.0,2.7670215455900866,0.0,12.443510772795044,,False,4.770549546168044,[],4.770549546168046,9.608794159770522,3.978447805324403,"[4.838244613602477, 4.770549546168046]",0,0.0,4.770549546168044,4.770549546168044,0.9930108283269294,1.0812058402294769,0.0,0,2.1624116804589537,0,9.541099092336088,0.0,11.703510772795042 +19,,False,5.389348913256123,[],5.389348913256123,9.468143073026642,0.6917553863975217,[9.468143073026646],0,0.0,2.4112058402294805,2.4112058402294805,0.6838254395829847,-2.9781430730266427,2.9781430730266427,0,0.0,110.54867087074896,0.0,0.0,110.54867087074896,,False,5.389348913256123,[],5.389348913256123,5.389348913256124,9.608794159770522,[5.389348913256123],0.0,0.0,9.468143073026646,5.389348913256122,0.6201583082860735,0.14065108674387528,8.881784197001252e-16,0.0,0.5626043469755011,0,37.87257229210658,0.0,38.43517663908209,,False,5.389348913256123,[],5.389348913256125,10.15989845942417,4.838244613602477,"[4.770549546168046, 5.389348913256125]",0,0.0,5.389348913256123,5.389348913256123,0.9934054269570152,0.5301015405758305,0.0,0,1.060203081151661,0,10.778697826512246,0.0,11.838900907663907 +20,,False,7.77831304155244,[],7.778313041552441,7.778313041552437,9.468143073026646,[5.5299999999999985],0,0.0,9.468143073026646,6.490000000000003,0.695168409197066,-1.2883130415524375,1.2883130415524375,0,0.0,47.82218010242648,0.0,0.0,47.82218010242648,,False,7.778313041552441,[],7.778313041552442,7.778313041552442,5.389348913256123,[5.300651086743876],0.0,0.0,5.5299999999999985,5.529999999999998,0.6269991512559994,-2.248313041552443,2.2483130415524437,0.0,0.0,0.0,22.119999999999994,0.0,22.119999999999994,,False,7.778313041552442,[],7.77831304155244,13.167661954808565,4.770549546168046,"[5.389348913256125, 7.77831304155244]",0,0.0,5.300651086743876,5.300651086743876,0.9699020909466246,-2.477661954808566,2.477661954808566,0,0.0,0.0,10.601302173487753,0.0,10.601302173487753 +21,,False,6.193639724282317,[],6.193639724282318,8.441952765834756,5.5299999999999985,[5.300651086743876],0,0.0,5.5299999999999985,4.241686958447561,0.6945841407109238,-1.951952765834756,1.951952765834756,0,0.0,72.45648666778614,0.0,0.0,72.45648666778614,,False,6.193639724282318,[],6.193639724282319,8.671301679090885,5.300651086743876,[5.389348913256125],0.0,0.0,5.300651086743876,3.0523380451914326,0.6194045336559975,-3.1413016790908843,3.141301679090885,0.0,0.0,0.0,21.202604346975505,0.0,21.202604346975505,,False,6.193639724282319,[],6.193639724282319,13.97195276583476,5.389348913256125,"[7.77831304155244, 6.193639724282319]",0,0.0,5.389348913256125,2.911686958447559,0.9416139144956085,-3.2819527658347596,3.2819527658347596,0,0.0,0.0,10.77869782651225,0.0,10.77869782651225 +22,,False,5.2186383160538625,[],5.2186383160538625,8.359939995144742,5.300651086743876,[5.389348913256125],0,0.0,5.300651086743876,3.3486983209091203,0.6921760150893107,-1.8699399951447422,1.8699399951447422,0,0.0,69.41217261977283,0.0,0.0,69.41217261977283,,False,5.2186383160538625,[],5.2186383160538625,8.500591081888622,5.389348913256125,[7.77831304155244],0.0,0.0,5.389348913256125,2.2480472341652398,0.6108181906918735,-2.970591081888622,2.9705910818886228,0.0,0.0,0.0,21.5573956530245,0.0,21.5573956530245,,False,5.2186383160538625,[],5.218638316053861,11.41227804033618,7.77831304155244,"[6.193639724282319, 5.218638316053861]",0,0.0,7.77831304155244,4.496360275717681,0.9379715941434273,-0.7222780403361817,0.7222780403361817,0,0.0,0.0,15.55662608310488,0.0,15.55662608310488 +23,,False,5.881761038948611,[],5.881761038948611,8.852352120837228,5.389348913256125,[7.77831304155244],0,0.0,5.389348913256125,3.519408918111383,0.6875978244372991,-2.362352120837228,2.362352120837228,0,0.0,87.69051072547789,0.0,0.0,87.69051072547789,,False,5.881761038948611,[],5.881761038948611,6.604039079284792,7.77831304155244,[6.193639724282319],0.0,0.0,7.77831304155244,4.807721959663818,0.6208990405678889,-1.074039079284792,1.074039079284793,0.0,0.0,0.0,31.11325216620976,0.0,31.11325216620976,,False,5.881761038948611,[],5.881761038948612,11.100399355002475,6.193639724282319,"[5.218638316053861, 5.881761038948612]",0,0.0,6.193639724282319,5.471361683946137,0.937593568333974,-0.4103993550024736,0.4103993550024736,0,0.0,0.0,12.387279448564637,0.0,12.387279448564637 +24,,False,3.9909146571348924,[],3.9909146571348924,5.06495373641968,7.77831304155244,[0.0],0,0.0,6.35326677797212,3.9909146571348924,0.6976104385608624,1.4250462635803203,0.0,0,9.975323845062242,0.0,0.0,0.0,9.975323845062242,,True,3.9909146571348924,[],3.9909146571348924,4.401314012137366,0,[4.401314012137366],6.193639724282319,0.0,0.0,0.0,0.6009989790792033,-5.064953736419684,5.064953736419685,0.0,12.387279448564637,0.0,0.0,0.0,12.387279448564637,,False,3.9909146571348924,[],3.9909146571348906,9.872675696083505,5.218638316053861,"[5.881761038948612, 3.9909146571348906]",0,0.0,4.401314012137366,3.9909146571348924,0.9395937193187581,0.8173243039164948,0.0,0,1.6346486078329896,0,8.802628024274732,0.0,10.437276632107721 +25,,False,3.4167057864631127,[],3.4167057864631127,8.481659522882794,0.0,[0.0],0,0.0,1.4250462635803203,1.4250462635803203,0.6901185810121155,-1.9916595228827925,1.9916595228827925,0,0.0,73.93040148940925,0.0,0.0,73.93040148940925,,True,3.4167057864631127,[],3.4167057864631127,3.4167057864631127,0,[3.4167057864631127],10.594953736419685,0.0,0.0,0.0,0.5849485646137371,-8.481659522882797,8.481659522882797,0.0,21.18990747283937,0.0,0.0,0.0,21.18990747283937,,False,3.4167057864631127,[],3.4167057864631127,7.407620443598004,5.881761038948612,"[3.9909146571348906, 3.4167057864631127]",0,0.0,3.4167057864631127,3.4167057864631127,0.9412069430928429,3.2823795564019944,0.0,0,6.564759112803989,0,6.8334115729262255,0.0,13.398170685730214 +26,,False,3.6533219026386536,[],3.6533219026386528,12.134981425521445,0.0,[12.134981425521449],0,0.0,0.0,0.0,0.670958877763455,-5.644981425521446,5.644981425521446,0,0.0,209.54171051535607,0.0,0.0,209.54171051535607,,False,3.6533219026386528,[],3.6533219026386528,3.6533219026386528,14.011659522882798,[3.6533219026386528],0.0,0.0,12.134981425521449,3.653321902638652,0.5964716021810907,1.8766780973613484,8.881784197001252e-16,0.0,7.5067123894453935,0,48.539925702085796,0.0,56.04663809153119,,False,3.6533219026386528,[],3.6533219026386545,7.070027689101767,3.9909146571348906,"[3.4167057864631127, 3.6533219026386545]",0,0.0,3.6533219026386528,3.6533219026386528,0.9428392097125456,3.6199723108982322,0.0,0,7.2399446217964645,0,7.3066438052773055,0.0,14.54658842707377 +27,,False,4.119408733952893,[],4.119408733952894,4.119408733952891,12.134981425521449,[4.119408733952895],0,0.0,9.764390159474338,4.119408733952892,0.6809467989948429,2.37059126604711,8.881784197001252e-16,0,16.594138862329768,0.0,0.0,0.0,16.594138862329768,,False,4.119408733952894,[],4.119408733952893,4.119408733952893,3.6533219026386528,[4.119408733952893],0.0,0.0,4.119408733952895,4.119408733952894,0.608720557037092,1.4105912660471072,0.0,0.0,5.642365064188429,0,16.47763493581158,0.0,22.120000000000008,,False,4.119408733952893,[],4.119408733952893,7.772730636591548,3.4167057864631127,"[3.6533219026386545, 4.119408733952893]",0,0.0,4.119408733952893,4.119408733952893,0.9445743043020437,2.917269363408452,0.0,0,5.834538726816904,0,8.238817467905786,0.0,14.07335619472269 +28,,False,5.582122794713039,[],5.5821227947130385,5.582122794713035,4.119408733952895,[5.53],0,0.0,5.58212279471304,5.582122794713039,0.6935519009564419,0.9078772052869652,0.0,0,6.355140437008757,0.0,0.0,0.0,6.355140437008757,,False,5.5821227947130385,[],5.5821227947130385,5.5821227947130385,4.119408733952893,[5.5821227947130385],0.0,0.0,5.53,5.53,0.6238102591448448,-0.05212279471303827,0.05212279471303827,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.5821227947130385,[],5.5821227947130385,9.701531528665932,3.6533219026386545,"[4.119408733952893, 5.5821227947130385]",0,0.0,5.5821227947130385,5.5821227947130385,0.9467640536710024,0.9884684713340679,0.0,0,1.9769369426681358,0,11.164245589426077,0.0,13.141182532094213 +29,,False,5.887748459593357,[],5.887748459593357,5.939871254306392,5.53,[5.5821227947130385],0,0.0,5.887748459593357,5.887748459593357,0.7058110269556231,0.5501287456936081,0.0,0,3.850901219855257,0.0,0.0,0.0,3.850901219855257,,False,5.887748459593357,[],5.887748459593357,5.887748459593357,5.5821227947130385,[5.107877205286961],0.0,0.0,5.5821227947130385,5.53,0.6364286258264713,-0.3577484595933571,0.3577484595933571,0.0,0.0,0.0,22.328491178852154,0.0,22.328491178852154,,False,5.887748459593357,[],5.887748459593357,11.469871254306396,4.119408733952893,"[5.5821227947130385, 5.887748459593357]",0,0.0,5.107877205286961,5.107877205286961,0.9435949160236066,-0.7798712543063964,0.7798712543063964,0,0.0,0.0,10.215754410573922,0.0,10.215754410573922 +30,,False,4.792834109895426,[],4.792834109895426,5.15058256948878,5.5821227947130385,[5.107877205286961],0,0.0,4.792834109895426,4.792834109895426,0.7150890380190152,1.3394174305112205,0.0,0,9.375922013578544,0.0,0.0,0.0,9.375922013578544,,False,4.792834109895426,[],4.792834109895426,5.572705364201823,5.107877205286961,[5.5727053642018225],0.0,0.0,5.107877205286961,4.750128745693604,0.6476137826749433,-0.04270536420182225,0.04270536420182225,0.0,0.0,0.0,20.431508821147844,0.0,20.431508821147844,,False,4.792834109895426,[],4.792834109895426,10.680582569488783,5.5821227947130385,"[5.887748459593357, 4.792834109895426]",0,0.0,5.5727053642018225,4.792834109895426,0.9453737964070178,0.009417430511216018,0.0,0,0.018834861022432037,0,11.145410728403645,0.0,11.164245589426077 +31,,False,4.37652260501504,[],4.37652260501504,4.419227969216859,5.107877205286961,[4.419227969216863],0,0.0,4.37652260501504,4.37652260501504,0.7230642868054382,2.070772030783141,0.0,0,14.495404215481988,0.0,0.0,0.0,14.495404215481988,,False,4.37652260501504,[],4.376522605015039,4.376522605015041,5.5727053642018225,[4.376522605015039],0.0,0.0,4.419227969216863,4.37652260501504,0.6574778038152089,1.15347739498496,0.0,0.0,4.61390957993984,0,17.67691187686745,0.0,22.29082145680729,,False,4.376522605015039,[],4.376522605015041,9.169356714910467,5.887748459593357,"[4.792834109895426, 4.376522605015041]",0,0.0,4.376522605015039,4.376522605015039,0.9469028971509229,1.520643285089534,0.0,0,3.041286570179068,0,8.753045210030079,0.0,11.794331780209147 +32,,False,3.491846710452517,[],3.491846710452517,3.4918467104525135,4.419227969216863,[3.491846710452517],0,0.0,3.491846710452517,3.491846710452517,0.7291141750800182,2.9981532895474867,0.0,0,20.987073026832405,0.0,0.0,0.0,20.987073026832405,,False,3.491846710452517,[],3.491846710452516,3.491846710452518,4.376522605015039,[3.491846710452516],0.0,0.0,3.491846710452517,3.491846710452517,0.6649604827177523,2.0381532895474823,0.0,0.0,8.15261315818993,0,13.967386841810068,0.0,22.119999999999997,,False,3.491846710452516,[],3.4918467104525144,7.868369315467555,4.792834109895426,"[4.376522605015041, 3.4918467104525144]",0,0.0,3.491846710452516,3.491846710452516,0.9480628470043935,2.821630684532444,0.0,0,5.643261369064888,0,6.983693420905032,0.0,12.62695478996992 +33,,False,6.09964697578482,[],6.09964697578482,6.099646975784816,3.491846710452517,[2.0381532895474823],0,0.0,6.09964697578482,6.09964697578482,0.7390714284030322,0.3903530242151838,0.0,0,2.7324711695062867,0.0,0.0,0.0,2.7324711695062867,,True,6.09964697578482,[],6.09964697578482,6.099646975784823,0,[6.09964697578482],3.491846710452516,0.0,2.0381532895474823,2.0381532895474823,0.6528002480730055,-4.061493686237338,4.061493686237338,0.0,6.983693420905032,0.0,8.15261315818993,0.0,15.136306579094962,,False,6.09964697578482,[],6.099646975784822,9.591493686237335,4.376522605015041,"[3.4918467104525144, 6.099646975784822]",0,0.0,6.09964697578482,6.09964697578482,0.9499719590423015,1.0985063137626652,0.0,0,2.1970126275253303,0,12.19929395156964,0.0,14.39630657909497 +34,,False,6.179716344700701,[],6.179716344700701,10.241210030938035,2.0381532895474823,[0.0],0,0.0,2.428506313762666,2.428506313762666,0.7266455197830846,-3.7512100309380347,3.7512100309380347,0,0.0,139.24491634841985,0.0,0.0,139.24491634841985,,True,6.179716344700701,[],6.1797163447007,6.179716344700703,0,[4.5903530242151795],9.591493686237335,0.0,0.0,0.0,0.6293623908613117,-10.241210030938038,10.241210030938038,0.0,19.18298737247467,0.0,0.0,0.0,19.18298737247467,,False,6.1797163447007,[],6.179716344700698,12.279363320485519,3.4918467104525144,"[6.099646975784822, 6.179716344700698]",0,0.0,4.5903530242151795,4.5903530242151795,0.9425340937912581,-1.5893633204855204,1.5893633204855204,0,0.0,0.0,9.180706048430359,0.0,9.180706048430359 +35,,False,4.101792060544322,[],4.101792060544322,14.343002091482358,0.0,[14.181846710452515],0,0.0,0.0,0.0,0.7097318827029766,-7.853002091482357,7.853002091482357,0,0.0,291.5034376358251,0.0,0.0,291.5034376358251,,False,4.101792060544322,[],4.101792060544323,5.691155381029846,14.181846710452515,[5.691155381029843],0.0,0.0,14.181846710452515,3.9406366795144763,0.637074968272656,-0.16115538102984583,0.16115538102984583,0.0,0.0,0.0,56.72738684181006,0.0,56.72738684181006,,False,4.101792060544323,[],4.101792060544325,10.28150840524502,6.099646975784822,"[6.179716344700698, 4.101792060544325]",0,0.0,5.691155381029843,4.101792060544323,0.9438716888849212,0.4084915947549783,0.0,0,0.8169831895099566,0,11.382310762059687,0.0,12.199293951569643 +36,,False,3.962170123484518,[],3.9621701234845172,4.123325504514359,14.181846710452515,[4.123325504514363],0,0.0,11.815172214966875,3.962170123484518,0.7161147629225845,2.36667449548564,0.0,0,16.56672146839948,0.0,0.0,0.0,16.56672146839948,,False,3.9621701234845172,[],3.9621701234845172,3.96217012348452,5.691155381029843,[3.9621701234845172],0.0,0.0,4.123325504514363,3.9621701234845172,0.6450555450848264,1.5678298765154803,0.0,0.0,6.271319506061921,0,16.493302018057452,0.0,22.764621524119374,,False,3.9621701234845172,[],3.962170123484519,8.063962184028842,6.179716344700698,"[4.101792060544325, 3.962170123484519]",0,0.0,3.9621701234845172,3.9621701234845172,0.9451059280776806,2.6260378159711593,0.0,0,5.2520756319423185,0,7.9243402469690345,0.0,13.176415878911353 +37,,False,4.924196254971815,[],4.924196254971816,4.924196254971812,4.123325504514363,[4.924196254971816],0,0.0,4.924196254971815,4.924196254971815,0.7236666061237521,1.5658037450281883,0.0,0,10.960626215197319,0.0,0.0,0.0,10.960626215197319,,False,4.924196254971816,[],4.924196254971816,4.92419625497182,3.9621701234845172,[4.924196254971816],0.0,0.0,4.924196254971816,4.924196254971816,0.6544976876077656,0.6058037450281812,0.0,0.0,2.423214980112725,0,19.696785019887265,0.0,22.11999999999999,,False,4.924196254971816,[],4.924196254971815,8.886366378456332,4.101792060544325,"[3.962170123484519, 4.924196254971815]",0,0.0,4.924196254971816,4.924196254971816,0.9465662062805866,1.8036336215436677,0.0,0,3.6072672430873354,0,9.848392509943633,0.0,13.455659753030968 +38,,False,6.495434252883474,[],6.495434252883474,6.495434252883468,4.924196254971816,[5.529999999999998],0,0.0,6.490000000000005,6.490000000000005,0.7330060582521601,-0.005434252883468993,0.005434252883468993,0,0.0,0.201719467034369,0.0,0.0,0.201719467034369,,False,6.495434252883474,[],6.495434252883473,6.495434252883475,4.924196254971816,[5.765803745028187],0.0,0.0,5.529999999999998,5.529999999999998,0.6611716456188722,-0.9654342528834761,0.9654342528834761,0.0,0.0,0.0,22.11999999999999,0.0,22.11999999999999,,False,6.495434252883473,[],6.495434252883473,11.419630507855285,3.962170123484519,"[4.924196254971815, 6.495434252883473]",0,0.0,5.765803745028187,5.765803745028187,0.9445696094688697,-0.729630507855286,0.729630507855286,0,0.0,0.0,11.531607490056373,0.0,11.531607490056373 +39,,False,5.33818125199332,[],5.338181251993321,6.303615504876792,5.529999999999998,[5.765803745028187],0,0.0,5.343615504876789,5.33818125199332,0.7402430356774419,0.18638449512320854,0.0,0,1.3046914658624598,0.0,0.0,0.0,1.3046914658624598,,False,5.338181251993321,[],5.338181251993322,6.06781175984861,5.765803745028187,[4.924196254971815],0.0,0.0,5.765803745028187,4.800369492144711,0.6676249052830548,-0.5378117598486103,0.5378117598486103,0.0,0.0,0.0,23.063214980112747,0.0,23.063214980112747,,False,5.338181251993322,[],5.338181251993324,11.833615504876793,4.924196254971815,"[6.495434252883473, 5.338181251993324]",0,0.0,4.924196254971815,4.1945657471165285,0.9402651966402581,-1.1436155048767933,1.1436155048767933,0,0.0,0.0,9.84839250994363,0.0,9.84839250994363 +40,,False,4.6013616099847985,[],4.6013616099847985,5.139173369833404,5.765803745028187,[4.924196254971815],0,0.0,4.6013616099847985,4.6013616099847985,0.7461734616199857,1.3508266301665968,0.0,0,9.455786411166176,0.0,0.0,0.0,9.455786411166176,,False,4.6013616099847985,[],4.601361609984799,5.7449771148615945,4.924196254971815,[5.744977114861593],0.0,0.0,4.924196254971815,4.386384495123204,0.6741465954903371,-0.2149771148615942,0.2149771148615942,0.0,0.0,0.0,19.69678501988726,0.0,19.69678501988726,,False,4.601361609984799,[],4.601361609984799,9.939542861978119,6.495434252883473,"[5.338181251993324, 4.601361609984799]",0,0.0,5.744977114861593,4.601361609984799,0.9416289823175401,0.7504571380218801,0.0,0,1.5009142760437602,0,11.489954229723185,0.0,12.990868505766946 +41,,False,4.939135912525254,[],4.939135912525253,5.154113027386842,4.924196254971815,[5.154113027386847],0,0.0,4.939135912525254,4.939135912525254,0.7522450952776545,1.3358869726131575,0.0,0,9.351208808292103,0.0,0.0,0.0,9.351208808292103,,False,4.939135912525253,[],4.939135912525253,4.939135912525254,5.744977114861593,[4.939135912525253],0.0,0.0,5.154113027386847,4.939135912525253,0.6819411409736971,0.5908640874747455,0.0,0.0,2.363456349898982,0,20.61645210954739,0.0,22.97990845944637,,False,4.939135912525253,[],4.939135912525255,9.540497522510051,5.338181251993324,"[4.601361609984799, 4.939135912525255]",0,0.0,4.939135912525253,4.939135912525253,0.9430252407145349,1.1495024774899507,0.0,0,2.2990049549799014,0,9.878271825050506,0.0,12.177276780030407 +42,,False,3.581249541408597,[],3.581249541408598,3.5812495414085923,5.154113027386847,[0.5908640874747455],0,0.0,3.581249541408597,3.581249541408597,0.7564689261794462,2.9087504585914075,0.0,0,20.361253210139854,0.0,0.0,0.0,20.361253210139854,,True,3.581249541408598,[],3.581249541408599,3.5812495414086003,0,[3.581249541408599],4.939135912525253,0.0,0.5908640874747455,0.5908640874747455,0.6731279083695824,-2.9903854539338526,2.9903854539338526,0.0,9.878271825050506,0.0,2.363456349898982,0.0,12.241728174949488,,False,3.581249541408599,[],3.5812495414085976,8.52038545393385,4.601361609984799,"[4.939135912525255, 3.5812495414085976]",0,0.0,3.581249541408599,3.581249541408599,0.9439965706228642,2.169614546066151,0.0,0,4.339229092132302,0,7.162499082817198,0.0,11.5017281749495 +43,,False,6.0424916173394205,[],6.0424916173394205,9.032877071273267,0.5908640874747455,[0.0],0,0.0,3.499614546066153,3.499614546066153,0.7515114363256561,-2.5428770712732676,2.5428770712732676,0,0.0,94.39159688566369,0.0,0.0,94.39159688566369,,True,6.0424916173394205,[],6.04249161733942,6.0424916173394205,0,[6.04249161733942],8.520385453933851,0.0,0.0,0.0,0.6543067168552267,-9.032877071273273,9.032877071273273,0.0,17.040770907867703,0.0,0.0,0.0,17.040770907867703,,False,6.04249161733942,[],6.042491617339418,9.623741158748011,4.939135912525255,"[3.5812495414085976, 6.042491617339418]",0,0.0,6.04249161733942,6.04249161733942,0.9455624710359385,1.0662588412519858,0.0,0,2.1325176825039716,0,12.08498323467884,0.0,14.21750091718281 +44,,False,4.465583546326495,[],4.465583546326495,13.498460617599761,0.0,[13.498460617599768],0,0.0,0.0,0.0,0.736296696470678,-7.008460617599763,7.008460617599763,0,0.0,260.15405812530315,0.0,0.0,260.15405812530315,,False,4.465583546326495,[],4.465583546326496,4.465583546326497,14.56287707127327,[4.465583546326496],0.0,0.0,13.498460617599768,4.465583546326496,0.6613054571516842,1.0644164536735028,0.0,0.0,4.257665814694011,0,53.99384247039907,0.0,58.25150828509308,,False,4.465583546326496,[],4.4655835463264975,10.50807516366591,3.5812495414085976,"[6.042491617339418, 4.4655835463264975]",0,0.0,4.465583546326496,4.465583546326496,0.9466645871202732,0.18192483633408774,0.0,0,0.3638496726681755,0,8.931167092652991,0.0,9.295016765321167 +45,,False,3.5049461291856643,[],3.504946129185666,3.504946129185658,13.498460617599768,[3.504946129185666],0,0.0,10.513406746785428,3.504946129185665,0.7404214767828957,2.9850538708143413,0.0,0,20.89537709570039,0.0,0.0,0.0,20.89537709570039,,False,3.504946129185666,[],3.504946129185667,3.504946129185668,4.465583546326496,[3.504946129185667],0.0,0.0,3.504946129185666,3.504946129185666,0.666603231443848,2.0250538708143324,0.0,0.0,8.10021548325733,0,14.019784516742664,0.0,22.119999999999994,,False,3.504946129185667,[],3.5049461291856687,7.970529675512162,6.042491617339418,"[4.4655835463264975, 3.5049461291856687]",0,0.0,3.504946129185667,3.504946129185667,0.9474988461456474,2.7194703244878387,0.0,0,5.438940648975677,0,7.009892258371334,0.0,12.448832907347011 +46,,False,4.7878385782883734,[],4.787838578288374,4.787838578288366,3.504946129185666,[4.787838578288374],0,0.0,4.7878385782883734,4.7878385782883734,0.7458518583110725,1.7021614217116339,0.0,0,11.915129951981438,0.0,0.0,0.0,11.915129951981438,,False,4.787838578288374,[],4.787838578288374,4.787838578288374,3.504946129185667,[4.787838578288374],0.0,0.0,4.787838578288374,4.787838578288374,0.6735778903296563,0.742161421711625,0.0,0.0,2.9686456868465,0,19.151354313153497,0.0,22.119999999999997,,False,4.787838578288374,[],4.787838578288373,8.292784707474036,4.4655835463264975,"[3.5049461291856687, 4.787838578288373]",0,0.0,4.787838578288374,4.787838578288374,0.9485971700461197,2.3972152925259618,0.0,0,4.7944305850519235,0,9.575677156576749,0.0,14.370107741628672 +47,,False,4.573131205960277,[],4.573131205960277,4.573131205960269,4.787838578288374,[4.573131205960277],0,0.0,4.573131205960277,4.573131205960277,0.7508307220609337,1.9168687940397309,0.0,0,13.418081558278116,0.0,0.0,0.0,13.418081558278116,,False,4.573131205960277,[],4.573131205960278,4.573131205960278,4.787838578288374,[4.573131205960278],0.0,0.0,4.573131205960277,4.573131205960277,0.6799726300204156,0.956868794039722,0.0,0.0,3.827475176158888,0,18.29252482384111,0.0,22.119999999999997,,False,4.573131205960278,[],4.57313120596028,9.360969784248647,3.5049461291856687,"[4.787838578288373, 4.57313120596028]",0,0.0,4.573131205960278,4.573131205960278,0.9496041720450203,1.3290302157513523,0.0,0,2.6580604315027045,0,9.146262411920556,0.0,11.804322843423261 +48,,False,5.501448331524805,[],5.501448331524805,5.501448331524798,4.573131205960277,[5.501448331524805],0,0.0,5.501448331524805,5.501448331524805,0.7565677219716553,0.9885516684752034,0.0,0,6.919861679326424,0.0,0.0,0.0,6.919861679326424,,False,5.501448331524805,[],5.501448331524805,5.501448331524804,4.573131205960278,[5.501448331524805],0.0,0.0,5.501448331524805,5.501448331524805,0.6873411026033411,0.028551668475195413,0.0,0.0,0.11420667390078165,0,22.00579332609922,0.0,22.12,,False,5.501448331524805,[],5.501448331524805,10.074579537485079,4.787838578288373,"[4.57313120596028, 5.501448331524805]",0,0.0,5.501448331524805,5.501448331524805,0.950764511164152,0.61542046251492,0.0,0,1.23084092502984,0,11.00289666304961,0.0,12.23373758807945 +49,,False,6.158186652932027,[],6.158186652932026,6.158186652932019,5.501448331524805,[5.53],0,0.0,6.158186652932027,6.158186652932027,0.762684081823915,0.33181334706798093,0.0,0,2.3226934294758665,0.0,0.0,0.0,2.3226934294758665,,False,6.158186652932026,[],6.158186652932027,6.158186652932026,5.501448331524805,[5.1885516684752],0.0,0.0,5.53,5.53,0.6926338040036177,-0.6281866529320261,0.6281866529320261,0.0,0.0,0.0,22.12,0.0,22.12,,False,6.158186652932027,[],6.158186652932029,11.65963498445683,4.57313120596028,"[5.501448331524805, 6.158186652932029]",0,0.0,5.1885516684752,5.1885516684752,0.9480454502438678,-0.9696349844568273,0.9696349844568273,0,0.0,0.0,10.3771033369504,0.0,10.3771033369504 +50,,False,6.371862133549777,[],6.371862133549777,7.000048786481796,5.53,[5.1885516684752],0,0.0,5.861813347067981,5.861813347067981,0.7666690505680388,-0.5100487864817955,0.5100487864817955,0,0.0,18.93301095420425,0.0,0.0,18.93301095420425,,False,6.371862133549777,[],6.371862133549777,7.341497118006603,5.1885516684752,[5.501448331524805],0.0,0.0,5.1885516684752,4.560365015543174,0.6932183611152801,-1.8114971180066028,1.8114971180066028,0.0,0.0,0.0,20.7542066739008,0.0,20.7542066739008,,False,6.371862133549777,[],6.371862133549775,12.5300487864818,5.501448331524805,"[6.158186652932029, 6.371862133549775]",0,0.0,5.501448331524805,4.531813347067978,0.9420447009271178,-1.8400487864817991,1.8400487864817991,0,0.0,0.0,11.00289666304961,0.0,11.00289666304961 +51,,False,5.175553293954833,[],5.175553293954833,6.987050411961429,5.1885516684752,[5.501448331524805],0,0.0,5.1885516684752,4.6785028819934045,0.7694377310057484,-0.4970504119614283,0.4970504119614283,0,0.0,18.450511292008215,0.0,0.0,18.450511292008215,,False,5.175553293954833,[],5.175553293954833,7.01560208043663,5.501448331524805,[6.158186652932029],0.0,0.0,5.501448331524805,3.689951213518202,0.6936164319012494,-1.4856020804366308,1.4856020804366308,0.0,0.0,0.0,22.00579332609922,0.0,22.00579332609922,,False,5.175553293954833,[],5.175553293954831,11.547415427504601,6.158186652932029,"[6.371862133549775, 5.175553293954831]",0,0.0,6.158186652932029,4.31813786645023,0.9398725722110832,-0.8574154275046029,0.8574154275046029,0,0.0,0.0,12.316373305864058,0.0,12.316373305864058 +52,,False,4.743369817307445,[],4.743369817307444,6.228971897744068,5.501448331524805,[6.158186652932029],0,0.0,5.2404202292688735,4.743369817307445,0.7736217143456557,0.2610281022559313,0.0,0,1.8271967157915192,0.0,0.0,0.0,1.8271967157915192,,False,4.743369817307444,[],4.743369817307445,5.600785244812046,6.158186652932029,[5.600785244812048],0.0,0.0,6.158186652932029,4.672584572495398,0.698905528950953,-0.07078524481204607,0.07078524481204607,0.0,0.0,0.0,24.632746611728116,0.0,24.632746611728116,,False,4.743369817307445,[],4.743369817307447,9.918923111262274,6.371862133549775,"[5.175553293954831, 4.743369817307447]",0,0.0,5.600785244812048,4.743369817307445,0.9409636967790262,0.7710768887377268,0.0,0,1.5421537774754537,0,11.201570489624096,0.0,12.74372426709955 +53,,False,4.632174275867238,[],4.632174275867239,4.702959520679277,6.158186652932029,[4.702959520679285],0,0.0,4.632174275867238,4.632174275867238,0.7775636129253085,1.787040479320722,0.0,0,12.509283355245053,0.0,0.0,0.0,12.509283355245053,,False,4.632174275867239,[],4.632174275867239,4.6321742758672375,5.600785244812048,[4.632174275867239],0.0,0.0,4.702959520679285,4.632174275867239,0.7041484517177672,0.8978257241327627,0.0,0.0,3.591302896531051,0,18.81183808271714,0.0,22.403140979248192,,False,4.632174275867239,[],4.6321742758672375,9.37554409317468,5.175553293954831,"[4.743369817307447, 4.6321742758672375]",0,0.0,4.632174275867239,4.632174275867239,0.9419916890139796,1.3144559068253185,0.0,0,2.628911813650637,0,9.264348551734479,0.0,11.893260365385116 +54,,False,2.34482395243653,[],2.3448239524365313,2.3448239524365233,4.702959520679285,[2.3448239524365313],0,0.0,2.34482395243653,2.34482395243653,0.7795071398513775,4.145176047563478,0.0,0,29.016232332944345,0.0,0.0,0.0,29.016232332944345,,False,2.3448239524365313,[],2.3448239524365313,2.3448239524365295,4.632174275867239,[2.3448239524365313],0.0,0.0,2.3448239524365313,2.3448239524365313,0.7067334399823565,3.1851760475634707,0.0,0.0,12.740704190253883,0,9.379295809746125,0.0,22.120000000000008,,False,2.3448239524365313,[],2.344823952436533,6.976998228303766,4.743369817307447,"[4.6321742758672375, 2.344823952436533]",0,0.0,2.3448239524365313,2.3448239524365313,0.9424985337610096,3.7130017716962342,0.0,0,7.4260035433924685,0,4.689647904873063,0.0,12.115651448265531 +55,,False,5.345517943888766,[],5.3455179438887654,5.3455179438887575,2.3448239524365313,[5.3455179438887654],0,0.0,5.345517943888766,5.345517943888766,0.783813329885836,1.1444820561112428,0.0,0,8.011374392778698,0.0,0.0,0.0,8.011374392778698,,False,5.3455179438887654,[],5.3455179438887654,5.345517943888764,2.3448239524365313,[5.3455179438887654],0.0,0.0,5.3455179438887654,5.3455179438887654,0.712460888650475,0.18448205611123658,0.0,0.0,0.7379282244449463,0,21.382071775555062,0.0,22.120000000000008,,False,5.3455179438887654,[],5.345517943888764,7.690341896325291,4.6321742758672375,"[2.344823952436533, 5.345517943888764]",0,0.0,5.3455179438887654,5.3455179438887654,0.9436215281324292,2.9996581036747063,0.0,0,5.999316207349413,0,10.691035887777531,0.0,16.690352095126944 +56,,False,5.45293632653351,[],5.45293632653351,5.452936326533502,5.3455179438887654,[5.45293632653351],0,0.0,5.45293632653351,5.45293632653351,0.7880361358238815,1.0370636734664984,0.0,0,7.259445714265489,0.0,0.0,0.0,7.259445714265489,,False,5.45293632653351,[],5.45293632653351,5.452936326533507,5.3455179438887654,[5.344482056111239],0.0,0.0,5.45293632653351,5.45293632653351,0.7180774322892939,0.07706367346649223,0.0,0.0,0.30825469386596893,0,21.81174530613404,0.0,22.120000000000008,,False,5.45293632653351,[],5.452936326533512,10.79845427042227,2.344823952436533,"[5.345517943888764, 5.452936326533512]",0,0.0,5.344482056111239,5.344482056111239,0.9443342794020506,-0.1084542704222704,0.1084542704222704,0,0.0,0.0,10.688964112222479,0.0,10.688964112222479 +57,,False,4.833939091648935,[],4.833939091648935,4.833939091648927,5.45293632653351,[4.833939091648935],0,0.0,4.833939091648935,4.833939091648935,0.7916439901243184,1.6560609083510736,0.0,0,11.592426358457516,0.0,0.0,0.0,11.592426358457516,,False,4.833939091648935,[],4.8339390916489355,4.942393362071204,5.344482056111239,[4.942393362071206],0.0,0.0,4.833939091648935,4.833939091648935,0.7228760594150012,0.587606637928797,0.0,0.0,2.350426551715188,0,19.33575636659574,0.0,21.686182918310926,,False,4.8339390916489355,[],4.833939091648934,10.286875418182442,5.345517943888764,"[5.452936326533512, 4.833939091648934]",0,0.0,4.942393362071206,4.8339390916489355,0.9452817701935912,0.4031245818175577,0.0,0,0.8062491636351155,0,9.884786724142412,0.0,10.691035887777527 +58,,False,4.056943191532738,[],4.056943191532738,4.05694319153273,4.833939091648935,[4.056943191532738],0,0.0,4.056943191532738,4.056943191532738,0.7945784682609872,2.4330568084672706,0.0,0,17.031397659270894,0.0,0.0,0.0,17.031397659270894,,False,4.056943191532738,[],4.056943191532737,4.056943191532735,4.942393362071206,[4.056943191532737],0.0,0.0,4.056943191532738,4.056943191532738,0.726779062478265,1.4730568084672653,0.0,0.0,5.892227233869061,0,16.22777276613095,0.0,22.12000000000001,,False,4.056943191532737,[],4.056943191532737,8.890882283181668,5.452936326533512,"[4.833939091648934, 4.056943191532737]",0,0.0,4.056943191532737,4.056943191532737,0.9460524196658091,1.7991177168183325,0.0,0,3.598235433636665,0,8.113886383065473,0.0,11.712121816702139 +59,,False,6.403958738659293,[],6.403958738659293,6.403958738659285,4.056943191532738,[5.530000000000002],0,0.0,6.403958738659293,6.403958738659293,0.7990460347542058,0.0860412613407151,0.0,0,0.6022888293850057,0.0,0.0,0.0,0.6022888293850057,,False,6.403958738659293,[],6.403958738659293,6.403958738659291,4.056943191532737,[6.403958738659293],0.0,0.0,5.530000000000002,5.530000000000002,0.7297531255348746,-0.8739587386592911,0.8739587386592911,0.0,0.0,0.0,22.120000000000008,0.0,22.120000000000008,,False,6.403958738659293,[],6.403958738659291,10.460901930192026,4.833939091648934,"[4.056943191532737, 6.403958738659291]",0,0.0,6.403958738659293,6.403958738659293,0.9472256871429373,0.2290980698079732,0.0,0,0.4581961396159464,0,12.807917477318586,0.0,13.266113616934533 +60,,False,4.98144919548836,[],4.98144919548836,5.855407934147643,5.530000000000002,[5.855407934147651],0,0.0,4.98144919548836,4.98144919548836,0.8023890870227557,0.634592065852357,0.0,0,4.442144460966499,0.0,0.0,0.0,4.442144460966499,,False,4.98144919548836,[],4.98144919548836,4.9814491954883575,6.403958738659293,[4.28604126134071],0.0,0.0,5.855407934147651,4.98144919548836,0.7342489284698608,0.5485508045116418,0.0,0.0,2.1942032180465674,0,23.421631736590605,0.0,25.615834954637172,,False,4.98144919548836,[],4.98144919548836,11.385407934147649,4.056943191532737,"[6.403958738659291, 4.98144919548836]",0,0.0,4.28604126134071,4.28604126134071,0.9457812706710783,-0.6954079341476502,0.6954079341476502,0,0.0,0.0,8.57208252268142,0.0,8.57208252268142 +61,,False,3.326495378009777,[],3.326495378009777,3.326495378009769,5.855407934147651,[3.326495378009777],0,0.0,3.326495378009777,3.326495378009777,0.8045602414920744,3.1635046219902314,0.0,0,22.14453235393162,0.0,0.0,0.0,22.14453235393162,,False,3.326495378009777,[],3.3264953780097777,4.021903312157425,4.28604126134071,[4.021903312157428],0.0,0.0,3.326495378009777,3.326495378009777,0.7371687400227043,1.508096687842575,0.0,0.0,6.0323867513703,0,13.305981512039107,0.0,19.338368263409407,,False,3.3264953780097777,[],3.3264953780097795,8.307944573498137,6.403958738659291,"[4.98144919548836, 3.3264953780097795]",0,0.0,4.021903312157428,3.3264953780097777,0.9463769727744172,2.3820554265018634,0.0,0,4.764110853003727,0,8.043806624314856,0.0,12.807917477318583 +62,,False,5.1023476825496665,[],5.1023476825496665,5.1023476825496585,3.326495378009777,[5.1023476825496665],0,0.0,5.1023476825496665,5.1023476825496665,0.8077992933620737,1.3876523174503417,0.0,0,9.71356622215239,0.0,0.0,0.0,9.71356622215239,,False,5.1023476825496665,[],5.1023476825496665,5.102347682549664,4.021903312157428,[5.1023476825496665],0.0,0.0,5.1023476825496665,5.1023476825496665,0.7415246811609001,0.4276523174503364,0.0,0.0,1.7106092698013455,0,20.409390730198666,0.0,22.12000000000001,,False,5.1023476825496665,[],5.102347682549665,8.42884306055944,4.98144919548836,"[3.3264953780097795, 5.102347682549665]",0,0.0,5.1023476825496665,5.1023476825496665,0.9472656750934134,2.261156939440557,0.0,0,4.522313878881114,0,10.204695365099333,0.0,14.727009243980447 +63,,False,4.5673907194519865,[],4.5673907194519865,4.5673907194519785,5.1023476825496665,[4.5673907194519865],0,0.0,4.5673907194519865,4.5673907194519865,0.8106090093167112,1.9226092805480217,0.0,0,13.458264963836152,0.0,0.0,0.0,13.458264963836152,,False,4.5673907194519865,[],4.5673907194519865,4.567390719451984,5.1023476825496665,[4.5673907194519865],0.0,0.0,4.5673907194519865,4.5673907194519865,0.7453032428526131,0.9626092805480164,0.0,0.0,3.8504371221920657,0,18.269562877807946,0.0,22.12000000000001,,False,4.5673907194519865,[],4.567390719451988,9.66973840200165,3.3264953780097795,"[5.102347682549665, 4.567390719451988]",0,0.0,4.5673907194519865,4.5673907194519865,0.9480365800325206,1.02026159799835,0.0,0,2.0405231959967,0,9.134781438903973,0.0,11.175304634900673 +64,,False,5.477754099433527,[],5.477754099433527,5.477754099433519,4.5673907194519865,[0.9626092805480164],0,0.0,5.477754099433527,5.477754099433527,0.8138722782501437,1.012245900566481,0.0,0,7.085721303965367,0.0,0.0,0.0,7.085721303965367,,True,5.477754099433527,[],5.477754099433527,5.4777540994335245,0,[5.477754099433527],4.5673907194519865,0.0,0.9626092805480164,0.9626092805480164,0.7354893201016812,-4.515144818885511,4.515144818885511,0.0,9.134781438903973,0.0,3.8504371221920657,0.0,12.985218561096039,,False,5.477754099433527,[],5.477754099433525,10.045144818885511,5.102347682549665,"[4.567390719451988, 5.477754099433525]",0,0.0,5.477754099433527,5.477754099433527,0.9489319268145561,0.6448551811144876,0.0,0,1.2897103622289752,0,10.955508198867054,0.0,12.24521856109603 +65,,False,4.7409713552611095,[],4.7409713552611095,9.256116174146612,0.9626092805480164,[0.0],0,0.0,1.9748551811144974,1.9748551811144974,0.8080341755896595,-2.766116174146612,2.766116174146612,0,0.0,102.67823238432223,0.0,0.0,102.67823238432223,,True,4.7409713552611095,[],4.7409713552611095,4.740971355261108,0,[4.7409713552611095],10.045144818885515,0.0,0.0,0.0,0.7246822989163131,-9.25611617414662,9.25611617414662,0.0,20.09028963777103,0.0,0.0,0.0,20.09028963777103,,False,4.7409713552611095,[],4.740971355261111,10.218725454694635,4.567390719451988,"[5.477754099433525, 4.740971355261111]",0,0.0,4.7409713552611095,4.7409713552611095,0.9496823031065391,0.4712745453053664,0.0,0,0.9425490906107328,0,9.481942710522219,0.0,10.424491801132952 +66,,False,5.339820964186644,[],5.339820964186644,14.595937138333255,0.0,[0.0],0,0.0,0.0,0.0,0.7948791975287575,-8.105937138333257,8.105937138333257,0,0.0,300.89238657493047,0.0,0.0,300.89238657493047,,True,5.339820964186644,[],5.339820964186641,5.339820964186639,0,[5.339820964186641],14.786116174146624,0.0,0.0,0.0,0.7128843081488913,-14.595937138333262,14.595937138333262,0.0,29.572232348293248,0.0,0.0,0.0,29.572232348293248,,False,5.339820964186641,[],5.339820964186639,10.080792319447749,5.477754099433525,"[4.740971355261111, 5.339820964186639]",0,0.0,5.339820964186641,5.339820964186641,0.9505014865256384,0.6092076805522506,0.0,0,1.2184153611045012,0,10.679641928373282,0.0,11.898057289477784 +67,,False,4.992619850055427,[],4.992619850055429,19.588556988388685,0.0,[0.0],0,0.0,0.0,0.0,0.7829612229347019,-13.098556988388683,13.098556988388683,0,0.0,486.2184354089879,0.0,0.0,486.2184354089879,,True,4.992619850055429,[],4.992619850055428,4.992619850055426,0,[4.992619850055428],20.125937138333263,0.0,0.0,0.0,0.7021957191162013,-19.588556988388692,19.588556988388692,0.0,40.25187427666653,0.0,0.0,0.0,40.25187427666653,,False,4.992619850055428,[],4.992619850055428,10.332440814242066,4.740971355261111,"[5.339820964186639, 4.992619850055428]",0,0.0,4.992619850055428,4.992619850055428,0.9512436395821845,0.35755918575793366,0.0,0,0.7151183715158673,0,9.985239700110856,0.0,10.700358071626724 +68,,False,4.224663894043056,[],4.224663894043054,23.81322088243174,0.0,[23.813220882431747],0,0.0,0.0,0.0,0.7731521055704907,-17.32322088243174,17.32322088243174,0,0.0,643.0379591558661,0.0,0.0,643.0379591558661,,False,4.224663894043054,[],4.224663894043057,4.224663894043056,25.11855698838869,[4.224663894043057],0.0,0.0,23.813220882431747,4.224663894043054,0.7059266792930086,1.3053361059569433,0.0,0.0,5.221344423827773,0,95.25288352972699,0.0,100.47422795355476,,False,4.224663894043057,[],4.224663894043057,9.217283744098484,5.339820964186639,"[4.992619850055428, 4.224663894043057]",0,0.0,4.224663894043057,4.224663894043057,0.9518544704223091,1.4727162559015161,0.0,0,2.9454325118030322,0,8.449327788086114,0.0,11.394760299889146 +69,,False,5.773140855889249,[],5.773140855889251,5.773140855889242,23.813220882431747,[5.53],0,0.0,23.09636173832099,5.773140855889249,0.77697042385283,0.7168591441107566,0.0,0,5.018014008775296,0.0,0.0,0.0,5.018014008775296,,False,5.773140855889251,[],5.773140855889252,5.77314085588925,4.224663894043057,[5.773140855889252],0.0,0.0,5.53,5.53,0.7101676432163625,-0.2431408558892505,0.2431408558892505,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.773140855889252,[],5.77314085588925,9.997804749932305,4.992619850055428,"[4.224663894043057, 5.77314085588925]",0,0.0,5.773140855889252,5.773140855889252,0.9526648590585436,0.6921952500676927,0.0,0,1.3843905001353853,0,11.546281711778503,0.0,12.930672211913889 +70,,False,6.405205305878188,[],6.40520530587819,6.648346161767432,5.53,[5.773140855889252],0,0.0,6.246859144110757,6.246859144110757,0.78060591518001,-0.15834616176743133,0.15834616176743133,0,0.0,5.87780952480705,0.0,0.0,5.87780952480705,,False,6.40520530587819,[],6.405205305878191,6.405205305878188,5.773140855889252,[4.91685914411075],0.0,0.0,5.773140855889252,5.530000000000001,0.7129760539846371,-0.8752053058781888,0.8752053058781888,0.0,0.0,0.0,23.092563423557007,0.0,23.092563423557007,,False,6.405205305878191,[],6.405205305878193,12.17834616176744,4.224663894043057,"[5.77314085588925, 6.405205305878193]",0,0.0,4.91685914411075,4.91685914411075,0.9492727897347437,-1.4883461617674412,1.4883461617674412,0,0.0,0.0,9.8337182882215,0.0,9.8337182882215 +71,,False,6.392325753491903,[],6.392325753491902,7.267531059370083,5.773140855889252,[4.91685914411075],0,0.0,5.773140855889252,5.61479469412182,0.7823623473457916,-0.7775310593700828,0.7775310593700828,0,0.0,28.861952923817473,0.0,0.0,28.861952923817473,,False,6.392325753491902,[],6.392325753491903,7.880671915259341,4.91685914411075,[5.77314085588925],0.0,0.0,4.91685914411075,4.041653838232561,0.711525949759459,-2.3506719152593414,2.3506719152593414,0.0,0.0,0.0,19.667436576443,0.0,19.667436576443,,False,6.392325753491903,[],6.392325753491905,12.797531059370097,5.77314085588925,"[6.405205305878193, 6.392325753491905]",0,0.0,5.77314085588925,4.284794694121809,0.9442605493134872,-2.1075310593700944,2.1075310593700944,0,0.0,0.0,11.5462817117785,0.0,11.5462817117785 +72,,False,4.5065675177966735,[],4.5065675177966735,6.857239433056008,4.91685914411075,[0.0],0,0.0,4.91685914411075,4.139328084740667,0.78406531258446,-0.3672394330560067,0.3672394330560067,0,0.0,13.631927755038967,0.0,0.0,13.631927755038967,,True,4.5065675177966735,[],4.506567517796674,6.614098577166765,0,[6.405205305878193],5.77314085588925,0.0,0.0,0.0,0.7026260352458226,-6.857239433056015,6.857239433056015,0.0,11.5462817117785,0.0,0.0,0.0,11.5462817117785,,False,4.506567517796674,[],4.506567517796671,10.898893271288577,6.405205305878193,"[6.392325753491905, 4.506567517796671]",0,0.0,6.405205305878193,4.297674246508098,0.9443779560267261,-0.20889327128857627,0.20889327128857627,0,0.0,0.0,12.810410611756385,0.0,12.810410611756385 +73,,False,5.923162608341952,[],5.9231626083419515,12.78040204139796,0.0,[0.0],0,0.0,0.0,0.0,0.7713837333007988,-6.290402041397959,6.290402041397959,0,0.0,233.49972377669224,0.0,0.0,233.49972377669224,,True,5.9231626083419515,[],5.9231626083419515,6.132055879630524,0,[6.132055879630528],12.178346161767443,0.0,0.0,0.0,0.6912616659391845,-12.780402041397966,12.780402041397966,0.0,24.356692323534887,0.0,0.0,0.0,24.356692323534887,,False,5.9231626083419515,[],5.92316260834195,10.42973012613862,6.392325753491905,"[4.506567517796671, 5.92316260834195]",0,0.0,6.132055879630528,5.9231626083419515,0.9452775945507685,0.2602698738613771,0.0,0,0.5205397477227542,0,12.264111759261056,0.0,12.78465150698381 +74,,False,6.706604953678462,[],6.706604953678462,19.48700699507642,0.0,[0.0],0,0.0,0.0,0.0,0.7575110916978401,-12.997006995076422,12.997006995076422,0,0.0,482.4488996572367,0.0,0.0,482.4488996572367,,True,6.706604953678462,[],6.706604953678461,6.7066049536784575,0,[4.766837391658048],18.31040204139797,0.0,0.0,0.0,0.6788299475460524,-19.487006995076428,19.487006995076428,0.0,36.62080408279594,0.0,0.0,0.0,36.62080408279594,,False,6.706604953678461,[],6.706604953678463,12.629767562020412,4.506567517796671,"[5.92316260834195, 6.706604953678463]",0,0.0,4.766837391658048,4.766837391658048,0.9410601432291905,-1.9397675620204131,1.9397675620204131,0,0.0,0.0,9.533674783316096,0.0,9.533674783316096 +75,,False,5.873589415635379,[],5.873589415635381,25.3605964107118,0.0,[0.0],0,0.0,0.0,0.0,0.7457650490005422,-18.8705964107118,18.8705964107118,0,0.0,700.476538765622,0.0,0.0,700.476538765622,,True,5.873589415635381,[],5.87358941563538,7.813356977655789,0,[5.92316260834195],23.077239433056018,0.0,0.0,0.0,0.6683039425337575,-25.360596410711807,25.360596410711807,0.0,46.154478866112036,0.0,0.0,0.0,46.154478866112036,,False,5.87358941563538,[],5.873589415635382,12.580194369313844,5.92316260834195,"[6.706604953678463, 5.873589415635382]",0,0.0,5.92316260834195,3.9833950463215366,0.9369840140791679,-1.8901943693138437,1.8901943693138437,0,0.0,0.0,11.8463252166839,0.0,11.8463252166839 +76,,False,5.649086732629106,[],5.649086732629108,31.009683143340908,0.0,[0.0],0,0.0,0.0,0.0,0.7348065702977933,-24.519683143340906,24.519683143340906,0,0.0,910.1706382808144,0.0,0.0,910.1706382808144,,True,5.649086732629108,[],5.649086732629107,7.539281101942946,0,[6.706604953678463],29.00040204139797,0.0,0.0,0.0,0.6584836988376573,-31.009683143340915,31.009683143340915,0.0,58.00080408279594,0.0,0.0,0.0,58.00080408279594,,False,5.649086732629107,[],5.649086732629105,11.522676148264486,6.706604953678463,"[5.873589415635382, 5.649086732629105]",0,0.0,6.706604953678463,4.816410584364619,0.9357440499588403,-0.832676148264488,0.832676148264488,0,0.0,0.0,13.413209907356926,0.0,13.413209907356926 +77,,False,3.7771264633246933,[],3.7771264633246915,34.7868096066656,0.0,[0.0],0,0.0,0.0,0.0,0.7276573538150011,-28.296809606665597,28.296809606665597,0,0.0,1050.377572599427,0.0,0.0,1050.377572599427,,True,3.7771264633246915,[],3.7771264633246906,4.609802611589174,0,[4.609802611589179],35.70700699507643,0.0,0.0,0.0,0.6520770570033685,-34.78680960666561,34.78680960666561,0.0,71.41401399015287,0.0,0.0,0.0,71.41401399015287,,False,3.7771264633246906,[],3.7771264633246924,9.426213195953796,5.873589415635382,"[5.649086732629105, 3.7771264633246924]",0,0.0,4.609802611589179,3.7771264633246906,0.9363692208755423,1.2637868040462035,0.0,0,2.527573608092407,0,9.219605223178357,0.0,11.747178831270764 +78,,False,5.620548215961735,[],5.620548215961733,40.40735782262733,0.0,[40.316809606665615],0,0.0,0.0,0.0,0.7172728214534755,-33.91735782262733,33.91735782262733,0,0.0,1259.0123223759265,0.0,0.0,1259.0123223759265,,False,5.620548215961733,[],5.620548215961732,5.620548215961729,40.316809606665615,[5.620548215961732],0.0,0.0,40.316809606665615,5.530000000000008,0.6568124177312192,-0.09054821596172502,0.09054821596172502,0.0,0.0,0.0,161.26723842666246,0.0,161.26723842666246,,False,5.620548215961732,[],5.620548215961732,9.397674679286425,5.649086732629105,"[3.7771264633246924, 5.620548215961732]",0,0.0,5.620548215961732,5.620548215961732,0.9372773074653948,1.2923253207135765,0.0,0,2.584650641427153,0,11.241096431923465,0.0,13.825747073350618 +79,,False,4.839062623136937,[],4.839062623136935,4.92961083909865,40.316809606665615,[4.92961083909866],0,0.0,38.75642044576427,4.83906262313694,0.7207044994122909,1.5603891609013472,0.0,0,10.92272412630943,0.0,0.0,0.0,10.92272412630943,,False,4.839062623136935,[],4.839062623136932,4.839062623136928,5.620548215961732,[4.839062623136932],0.0,0.0,4.92961083909866,4.839062623136935,0.6609779502699211,0.6909373768630722,0.0,0.0,2.763749507452289,0,19.71844335639464,0.0,22.48219286384693,,False,4.839062623136932,[],4.83906262313693,10.459610839098662,3.7771264633246924,"[5.620548215961732, 4.83906262313693]",0,0.0,4.839062623136932,4.839062623136932,0.938038621190503,0.23038916090133732,0.0,0,0.46077832180267464,0,9.678125246273863,0.0,10.138903568076538 +80,,False,4.643254974231806,[],4.643254974231809,4.643254974231799,4.92961083909866,[4.643254974231809],0,0.0,4.643254974231806,4.643254974231806,0.7239199019988789,1.8467450257682012,0.0,0,12.92721518037741,0.0,0.0,0.0,12.92721518037741,,False,4.643254974231809,[],4.643254974231809,4.643254974231806,4.839062623136932,[4.643254974231809],0.0,0.0,4.643254974231809,4.643254974231809,0.6648809575626223,0.886745025768195,0.0,0.0,3.54698010307278,0,18.573019896927235,0.0,22.120000000000015,,False,4.643254974231809,[],4.643254974231809,9.482317597368738,5.620548215961732,"[4.83906262313693, 4.643254974231809]",0,0.0,4.643254974231809,4.643254974231809,0.9387519544782694,1.207682402631261,0.0,0,2.415364805262522,0,9.286509948463618,0.0,11.70187475372614 +81,,False,5.556121798533965,[],5.556121798533965,5.556121798533955,4.643254974231809,[5.530000000000004],0,0.0,5.556121798533965,5.556121798533965,0.7276714781907057,0.9338782014660447,0.0,0,6.537147410262313,0.0,0.0,0.0,6.537147410262313,,False,5.556121798533965,[],5.556121798533964,5.556121798533962,4.643254974231809,[5.556121798533964],0.0,0.0,5.530000000000004,5.530000000000004,0.6693709110311259,-0.02612179853396146,0.02612179853396146,0.0,0.0,0.0,22.120000000000015,0.0,22.120000000000015,,False,5.556121798533964,[],5.556121798533966,10.199376772765774,4.83906262313693,"[4.643254974231809, 5.556121798533966]",0,0.0,5.556121798533964,5.556121798533964,0.9395842372506927,0.49062322723422636,0.0,0,0.9812464544684527,0,11.112243597067929,0.0,12.093490051536381 +82,,False,6.363886524417105,[],6.363886524417106,6.390008322951057,5.530000000000004,[5.556121798533964],0,0.0,6.363886524417105,6.363886524417105,0.731845118776755,0.0999916770489433,0.0,0,0.6999417393426031,0.0,0.0,0.0,0.6999417393426031,,False,6.363886524417106,[],6.363886524417106,6.3638865244171035,5.556121798533964,[5.133878201466035],0.0,0.0,5.556121798533964,5.530000000000003,0.6724298542927525,-0.8338865244171032,0.8338865244171032,0.0,0.0,0.0,22.224487194135857,0.0,22.224487194135857,,False,6.363886524417106,[],6.363886524417104,11.92000832295107,4.643254974231809,"[5.556121798533966, 6.363886524417104]",0,0.0,5.133878201466035,5.133878201466035,0.9375480011412647,-1.230008322951071,1.230008322951071,0,0.0,0.0,10.26775640293207,0.0,10.26775640293207 +83,,False,7.539162716269333,[],7.539162716269333,8.373049240686424,5.556121798533964,[5.133878201466035],0,0.0,5.656113475582908,5.656113475582908,0.7321729817331879,-1.8830492406864252,1.8830492406864252,0,0.0,69.8987878142801,0.0,0.0,69.8987878142801,,False,7.539162716269333,[],7.539162716269333,8.7691710392204,5.133878201466035,[5.556121798533966],0.0,0.0,5.133878201466035,4.299991677048932,0.6706096035115402,-3.239171039220401,3.239171039220401,0.0,0.0,0.0,20.53551280586414,0.0,20.53551280586414,,False,7.539162716269333,[],7.539162716269335,13.903049240686439,5.556121798533966,"[6.363886524417104, 7.539162716269335]",0,0.0,5.556121798533966,4.326113475582895,0.9310618602073316,-3.2130492406864377,3.2130492406864377,0,0.0,0.0,11.112243597067932,0.0,11.112243597067932 +84,,False,3.559958552316202,[],3.559958552316204,6.799129591536592,5.133878201466035,[0.0],0,0.0,5.133878201466035,3.25082896077961,0.733684270620024,-0.30912959153659214,0.30912959153659214,0,0.0,11.4748904378383,0.0,0.0,11.4748904378383,,True,3.559958552316204,[],3.5599585523162056,6.773007793002638,0,[6.363886524417104],5.556121798533966,0.0,0.0,0.0,0.6650099876834432,-6.799129591536605,6.799129591536605,0.0,11.112243597067932,0.0,0.0,0.0,11.112243597067932,,False,3.5599585523162056,[],3.5599585523162034,11.099121268585538,6.363886524417104,"[7.539162716269335, 3.5599585523162034]",0,0.0,6.363886524417104,3.1508372837306666,0.9306778845102693,-0.409121268585539,0.409121268585539,0,0.0,0.0,12.727773048834209,0.0,12.727773048834209 +85,,False,6.19072725611364,[],6.19072725611364,12.989856847650232,0.0,[0.0],0,0.0,0.0,0.0,0.7231832013665238,-6.499856847650232,6.499856847650232,0,0.0,241.27468618477658,0.0,0.0,241.27468618477658,,True,6.19072725611364,[],6.190727256113641,6.599848524699176,0,[6.59984852469918],11.92000832295107,0.0,0.0,0.0,0.6554918390538813,-12.989856847650245,12.989856847650245,0.0,23.84001664590214,0.0,0.0,0.0,23.84001664590214,,False,6.190727256113641,[],6.190727256113641,9.750685808429846,7.539162716269335,"[3.5599585523162034, 6.190727256113641]",0,0.0,6.59984852469918,6.190727256113641,0.9316700774258154,0.9393141915701548,0.0,0,1.8786283831403097,0,13.19969704939836,0.0,15.07832543253867 +86,,False,5.617640845511145,[],5.617640845511145,18.607497693161378,0.0,[18.51985684765025],0,0.0,0.0,0.0,0.7139110456884356,-12.117497693161377,12.117497693161377,0,0.0,449.8015143701503,0.0,0.0,449.8015143701503,,False,5.617640845511145,[],5.617640845511144,5.61764084551114,18.51985684765025,[4.499272743886358],0.0,0.0,18.51985684765025,5.530000000000005,0.6597088595039259,-0.0876408455111406,0.0876408455111406,0.0,0.0,0.0,74.079427390601,0.0,74.079427390601,,False,5.617640845511144,[],5.617640845511143,11.808368101624787,3.5599585523162034,"[6.190727256113641, 5.617640845511143]",0,0.0,4.499272743886358,4.499272743886358,0.9299936715822918,-1.1183681016247862,1.1183681016247862,0,0.0,0.0,8.998545487772716,0.0,8.998545487772716 +87,,False,6.21707079698011,[],6.21707079698011,6.304711642491238,18.51985684765025,[0.0],0,0.0,18.334568490141486,6.217070796980108,0.7179136830864057,0.18528835750876205,1.7763568394002505e-15,0,1.2970185025613343,0.0,0.0,0.0,1.2970185025613343,,True,6.21707079698011,[],6.217070796980111,7.335438898604892,0,[6.190727256113641],4.499272743886358,0.0,0.0,0.0,0.6504789493203021,-6.304711642491251,6.304711642491251,0.0,8.998545487772716,0.0,0.0,0.0,8.998545487772716,,False,6.217070796980111,[],6.217070796980109,11.834711642491255,6.190727256113641,"[5.617640845511143, 6.217070796980109]",0,0.0,6.190727256113641,5.072359154488855,0.9283970651442716,-1.1447116424912558,1.1447116424912558,0,0.0,0.0,12.381454512227283,0.0,12.381454512227283 +88,,False,5.226288269498875,[],5.226288269498875,11.530999911990113,0.0,[0.0],0,0.0,0.18528835750876205,0.18528835750876027,0.7099804134169311,-5.040999911990113,5.040999911990115,0,0.0,187.121916733073,0.0,0.0,187.121916733073,,True,5.226288269498875,[],5.226288269498876,6.370999911990127,0,[5.617640845511143],10.69,0.0,0.0,0.0,0.6429174499606872,-11.530999911990126,11.530999911990126,0.0,21.38,0.0,0.0,0.0,21.38,,False,5.226288269498876,[],5.226288269498876,11.443359066478987,5.617640845511143,"[6.217070796980109, 5.226288269498876]",0,0.0,5.617640845511143,4.472929203019887,0.9275537641300594,-0.7533590664789891,0.7533590664789891,0,0.0,0.0,11.235281691022285,0.0,11.235281691022285 +89,,False,5.847401432576639,[],5.847401432576639,17.378401344566754,0.0,[0.0],0,0.0,0.0,0.0,0.7008649539072025,-10.888401344566752,10.888401344566754,0,0.0,404.1774579103178,0.0,0.0,404.1774579103178,,True,5.847401432576639,[],5.847401432576638,6.600760499055622,0,[6.217070796980109],16.30764084551114,0.0,0.0,0.0,0.6346630138206679,-17.378401344566765,17.378401344566765,0.0,32.61528169102228,0.0,0.0,0.0,32.61528169102228,,False,5.847401432576638,[],5.84740143257664,11.073689702075516,6.217070796980109,"[5.226288269498876, 5.84740143257664]",0,0.0,6.217070796980109,5.46371173050112,0.9276414432175052,-0.3836897020755181,0.3836897020755181,0,0.0,0.0,12.434141593960218,0.0,12.434141593960218 +90,,False,5.174833011991471,[],5.17483301199147,22.553234356558225,0.0,[0.0],0,0.0,0.0,0.0,0.6929909936375189,-16.063234356558223,16.063234356558226,0,0.0,596.2672593154412,0.0,0.0,596.2672593154412,,True,5.17483301199147,[],5.174833011991472,5.558522714066986,0,[5.226288269498876],22.52471164249125,0.0,0.0,0.0,0.6275328080262386,-22.553234356558235,22.553234356558235,0.0,45.0494232849825,0.0,0.0,0.0,45.0494232849825,,False,5.174833011991472,[],5.174833011991474,11.022234444568113,5.226288269498876,"[5.84740143257664, 5.174833011991474]",0,0.0,5.226288269498876,4.842598567423358,0.9277330795368396,-0.33223444456811446,0.33223444456811446,0,0.0,0.0,10.452576538997752,0.0,10.452576538997752 +91,,False,3.783145107640761,[],3.783145107640759,26.336379464198984,0.0,[26.336379464198995],0,0.0,0.0,0.0,0.6873456456146059,-19.846379464198982,19.846379464198986,0,0.0,736.6976057110662,0.0,0.0,736.6976057110662,,False,3.783145107640759,[],3.7831451076407583,4.115379552208869,27.750999911990128,[4.115379552208873],0.0,0.0,26.336379464198995,3.7831451076407596,0.6305670565880732,1.4146204477911337,0.0,0.0,5.658481791164535,0,105.34551785679598,0.0,111.00399964796051,,False,3.7831451076407583,[],3.7831451076407596,8.957978119632234,5.84740143257664,"[5.174833011991474, 3.7831451076407596]",0,0.0,4.115379552208873,3.7831451076407587,0.9283217912521496,1.7320218803677672,0.0,0,3.4640437607355343,0,8.230759104417746,0.0,11.694802865153282 +92,,False,5.734501064880046,[],5.734501064880044,5.734501064880032,26.336379464198995,[5.5300000000000065],0,0.0,25.58088052907903,5.734501064880046,0.6911592910130424,0.7554989351199666,0.0,0,5.288492545839766,0.0,0.0,0.0,5.288492545839766,,False,5.734501064880044,[],5.734501064880042,5.734501064880037,4.115379552208873,[5.734501064880042],0.0,0.0,5.5300000000000065,5.5300000000000065,0.6346382803156821,-0.20450106488003783,0.20450106488003783,0.0,0.0,0.0,22.120000000000026,0.0,22.120000000000026,,False,5.734501064880042,[],5.73450106488004,9.517646172520799,5.174833011991474,"[3.7831451076407596, 5.73450106488004]",0,0.0,5.734501064880042,5.734501064880042,0.9291960962702159,1.1723538274792,0.0,0,2.3447076549584,0,11.469002129760083,0.0,13.813709784718483 +93,,False,4.0455027380385795,[],4.045502738038581,4.250003802918608,5.5300000000000065,[4.250003802918619],0,0.0,4.0455027380385795,4.0455027380385795,0.6937942029051573,2.2399961970813935,0.0,0,15.679973379569756,0.0,0.0,0.0,15.679973379569756,,False,4.045502738038581,[],4.045502738038582,4.045502738038578,5.734501064880042,[4.045502738038582],0.0,0.0,4.250003802918619,4.045502738038581,0.637755408052105,1.4844972619614225,0.0,0.0,5.93798904784569,0,17.000015211674476,0.0,22.938004259520167,,False,4.045502738038582,[],4.045502738038584,9.780003802918623,3.7831451076407596,"[5.73450106488004, 4.045502738038584]",0,0.0,4.045502738038582,4.045502738038582,0.9298001683452921,0.9099961970813775,0.0,0,1.819992394162755,0,8.091005476077164,0.0,9.91099787023992 +94,,False,5.7699773599307935,[],5.769977359930793,5.769977359930782,4.250003802918619,[5.530000000000005],0,0.0,5.7699773599307935,5.7699773599307935,0.6974754401236423,0.7200226400692191,0.0,0,5.040158480484534,0.0,0.0,0.0,5.040158480484534,,False,5.769977359930793,[],5.769977359930793,5.769977359930788,4.045502738038582,[5.769977359930793],0.0,0.0,5.530000000000005,5.530000000000005,0.6416103418135971,-0.23997735993078795,0.23997735993078795,0.0,0.0,0.0,22.12000000000002,0.0,22.12000000000002,,False,5.769977359930793,[],5.769977359930791,9.815480097969374,5.73450106488004,"[4.045502738038584, 5.769977359930791]",0,0.0,5.769977359930793,5.769977359930793,0.930644117857256,0.8745199020306247,0.0,0,1.7490398040612494,0,11.539954719861585,0.0,13.288994523922835 +95,,False,6.268389522403902,[],6.2683895224039015,6.508366882334679,5.530000000000005,[5.769977359930793],0,0.0,6.250022640069224,6.250022640069224,0.7013378704284317,-0.018366882334678536,0.018366882334678536,0,0.0,0.6817786722632672,0.0,0.0,0.6817786722632672,,False,6.2683895224039015,[],6.2683895224039015,6.268389522403896,5.769977359930793,[4.920022640069209],0.0,0.0,5.769977359930793,5.530000000000005,0.6447121255243198,-0.7383895224038968,0.7383895224038968,0.0,0.0,0.0,23.07990943972317,0.0,23.07990943972317,,False,6.2683895224039015,[],6.268389522403903,12.038366882334694,4.045502738038584,"[5.769977359930791, 6.268389522403903]",0,0.0,4.920022640069209,4.920022640069209,0.9287650816933808,-1.3483668823346928,1.3483668823346928,0,0.0,0.0,9.840045280138417,0.0,9.840045280138417 +96,,False,4.132358910020625,[],4.132358910020625,4.870748432424512,5.769977359930793,[4.870748432424522],0,0.0,4.150725792355304,4.132358910020625,0.7038548146064794,1.619251567575489,0.0,0,11.334760973028423,0.0,0.0,0.0,11.334760973028423,,False,4.132358910020625,[],4.132358910020626,5.4807257923553125,4.920022640069209,[5.480725792355319],0.0,0.0,4.870748432424522,4.132358910020625,0.6477062773053819,0.04927420764468682,0.0,0.0,0.19709683057874727,0,19.482993729698087,0.0,19.680090560276835,,False,4.132358910020626,[],4.132358910020624,10.400748432424528,5.769977359930791,"[6.268389522403903, 4.132358910020624]",0,0.0,5.480725792355319,4.132358910020626,0.929365406592834,0.2892515675754721,0.0,0,0.5785031351509442,0,10.961451584710638,0.0,11.539954719861582 +97,,False,5.145861852428309,[],5.145861852428308,5.145861852428299,4.870748432424522,[5.145861852428308],0,0.0,5.145861852428309,5.145861852428309,0.7069303754460088,1.3441381475717016,0.0,0,9.408967033001911,0.0,0.0,0.0,9.408967033001911,,False,5.145861852428308,[],5.145861852428309,5.145861852428304,5.480725792355319,[5.145861852428309],0.0,0.0,5.145861852428308,5.145861852428308,0.6513649583543135,0.3841381475716972,0.0,0.0,1.5365525902867887,0,20.583447409713234,0.0,22.120000000000022,,False,5.145861852428309,[],5.1458618524283075,9.278220762448932,6.268389522403903,"[4.132358910020624, 5.1458618524283075]",0,0.0,5.145861852428309,5.145861852428309,0.9300989690483927,1.411779237551066,0.0,0,2.823558475102132,0,10.291723704856619,0.0,13.11528217995875 +98,,False,5.878673548190895,[],5.878673548190895,5.878673548190885,5.145861852428308,[5.5300000000000065],0,0.0,5.878673548190895,5.878673548190895,0.7103666623424336,0.6113264518091146,0.0,0,4.279285162663802,0.0,0.0,0.0,4.279285162663802,,False,5.878673548190895,[],5.8786735481908945,5.878673548190889,5.145861852428309,[5.54413814757169],0.0,0.0,5.5300000000000065,5.5300000000000065,0.6547573206456488,-0.3486735481908889,0.3486735481908889,0.0,0.0,0.0,22.120000000000026,0.0,22.120000000000026,,False,5.8786735481908945,[],5.878673548190896,11.024535400619204,4.132358910020624,"[5.1458618524283075, 5.878673548190896]",0,0.0,5.54413814757169,5.54413814757169,0.9302513306183345,-0.3345354006192043,0.3345354006192043,0,0.0,0.0,11.08827629514338,0.0,11.08827629514338 +99,,False,4.76040549180619,[],4.760405491806191,5.109079039997068,5.5300000000000065,[5.10907903999708],0,0.0,4.76040549180619,4.76040549180619,0.7130907915278842,1.380920960002931,0.0,0,9.666446720020517,0.0,0.0,0.0,9.666446720020517,,False,4.760405491806191,[],4.760405491806191,5.09494089242539,5.54413814757169,[5.094940892425395],0.0,0.0,5.10907903999708,4.760405491806191,0.6580044801974415,0.4350591075746104,0.0,0.0,1.7402364302984417,0,20.43631615998832,0.0,22.17655259028676,,False,4.760405491806191,[],4.760405491806191,10.639079039997087,5.1458618524283075,"[5.878673548190896, 4.760405491806191]",0,0.0,5.094940892425395,4.760405491806191,0.9309073475929192,0.05092096000291235,0.0,0,0.1018419200058247,0,10.18988178485079,0.0,10.291723704856615 diff --git a/tests/additional_files/test_sim_disruption_example_6_1_SP.csv b/tests/additional_files/test_sim_disruption_example_6_1_SP.csv index 0ef2391..a74cf72 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_SP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_SP.csv @@ -1,101 +1,101 @@ -t,i=1 pr=-1,DISR,IO:EXT|-1,IOPL:EXT|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:EXT|-1,DMFS:-2,FR:-2,IL:-1,BO:EXT|-1,ODI:EXT|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:3|-3,OO:3|-3,IS:3|-3,ISPL:3|-3,IDI:3|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC,i=3 pr=-3,DISR,IO:2|-3,IOPL:2|-3,OQ:EXT|-4,OO:EXT|-4,IS:EXT|-4,ISPL:EXT|-4,IDI:EXT|-4,RM:-4,OS:2|-3,DMFS:-4,FR:-4,IL:-3,BO:2|-3,ODI:2|-3,HC,SC,ITHC,REV,TC -0,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,2.6018801180469200,0,0,18.213160826328400,0.0,0.0,0.0,18.213160826328400,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,1.6418801180469200,0,0,6.567520472187680,0,15.552479527812300,0.0,22.12,,False,3.8881198819530800,[],3.888119881953080,3.888119881953080,0,"[0, 3.888119881953079]",0,0,3.8881198819530800,3.8881198819530800,1.0,6.80188011804692,0,0,13.60376023609380,0,7.776239763906160,0.0,21.38 -1,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,1.1710978153106200,0,0,8.197684707174320,0.0,0.0,0.0,8.197684707174320,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,0.2110978153106170,0,0,0.8443912612424680,0,21.275608738757500,0.0,22.12,,False,5.318902184689380,[],5.318902184689380,9.207022066642460,0,"[3.888119881953079, 5.318902184689383]",0,0,5.318902184689380,5.318902184689380,1.0,1.482977933357540,0,0,2.965955866715070,0,10.637804369378800,0.0,13.60376023609380 -2,,False,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[5.279041292200137],0,0.0,5.279041292200140,5.279041292200140,1.0,1.210958707799860,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[0],0,0.0,5.279041292200140,5.279041292200140,1.0,0.25095870779986300,0,0,1.0038348311994500,0,21.11616516880060,0.0,22.12,,False,5.279041292200140,[],5.279041292200140,10.59794347688950,3.888119881953080,"[5.318902184689383, 5.279041292200137]",0,0.0,0,0.0,0.6355779233163650,0.09205652311047890,0,5.279041292200140,10.742195630621200,0,0,0,10.742195630621200 -3,,False,6.010515284806530,[],6.010515284806530,6.010515284806530,5.279041292200140,[0.25095870779986296],0,0.0,6.010515284806530,6.010515284806530,1.0,0.4794847151934740,0,0,3.356393006354320,0.0,0.0,0.0,3.356393006354320,,False,6.010515284806530,[],6.010515284806530,11.289556577006700,0,[10.69],0,0.0,0.25095870779986300,0.25095870779986300,0.7189991228711110,-5.759556577006660,5.759556577006660,0,0.0,0.0,1.0038348311994500,0.0,1.0038348311994500,,False,6.010515284806530,[],6.010515284806530,11.289556577006700,5.318902184689380,"[5.279041292200137, 6.010515284806527]",0,0.0,10.69,10.69,0.9707484557578860,-0.5995565770066640,0.5995565770066640,0.0,0.0,0.0,21.38,0.0,21.38 -4,,False,4.419121865976490,[],4.419121865976490,10.178678442983100,0.25095870779986300,[10.178678442983148],0,0.0,0.7304434229933370,0.7304434229933370,0.8519536530165740,-3.6886784429831500,3.6886784429831500,0,0.0,136.92374380353400,0.0,0.0,136.92374380353400,,True,4.419121865976490,[],4.419121865976490,5.01867844298315,10.69,[0],0,0.0,10.178678442983100,4.419121865976490,0.7688382642590530,0.511321557016851,0.0,0,2.045286228067400,0,40.714713771932600,0.0,42.76,,False,4.419121865976490,[],4.419121865976480,10.429637150783000,5.279041292200140,"[6.010515284806527, 4.419121865976483]",0,0.0,0,0.0,0.7985736567573410,0.26036284921698800,0.0,5.018678442983150,10.558082584400300,0,0,0,10.558082584400300 -5,,False,4.474830192821850,[],4.474830192821850,4.474830192821850,10.178678442983100,[0.511321557016851],0,0.0,8.163508635805000,4.4748301928218500,0.8744943233476220,2.0151698071781500,0.0,0,14.106188650247000,0.0,0.0,0.0,14.106188650247000,,True,4.474830192821850,[],4.474830192821850,9.493508635805000,0,[0],0,0.0,0.511321557016851,0.511321557016851,0.6691769430348540,-3.9635086358050000,3.9635086358050000,0,0.0,0.0,2.045286228067400,0.0,2.045286228067400,,False,4.474830192821850,[],4.47483019282185,8.893952058798340,6.010515284806530,"[4.419121865976483, 4.47483019282185]",0,0.0,0,0.0,0.6769875055364540,1.796047941201660,0.0,9.493508635805,22.579113154013300,0,0,0,22.579113154013300 -6,,False,2.3874509873064000,[],2.3874509873064000,6.3509596231114,0.511321557016851,[0.0],0,0.0,2.3874509873064000,2.3874509873064000,0.8839234511809010,0.13904037688860000,0.0,0,0.9732826382202000,0.0,0.0,0.0,0.9732826382202000,,True,2.3874509873064000,[],2.3874509873064000,11.880959623111400,0,[0],0,0.0,0.0,0.0,0.6189022852882180,-6.350959623111400,6.350959623111400,0.0,0.0,0.0,0.0,0.0,0.0,,False,2.3874509873064000,[],2.3874509873064000,6.862281180128250,4.419121865976480,"[4.47483019282185, 2.3874509873064014]",0,0.0,0,0.0,0.6261260473020490,3.8277188198717500,0.0,11.8809596231114,31.417356885966300,0,0,0,31.417356885966300 -7,,False,5.950369682396900,[],5.950369682396900,12.301329305508300,0.0,[0.0],0,0.0,0.13904037688860000,0.13904037688860000,0.7481997648191990,-5.811329305508300,5.811329305508300,0,0.0,215.7165438204680,0.0,0.0,215.7165438204680,,True,5.950369682396900,[],5.950369682396900,17.831329305508300,0,[0],0,0.0,0.0,0.0,0.5212914101556360,-12.301329305508300,12.301329305508300,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.950369682396900,[],5.950369682396900,8.337820669703310,4.47483019282185,"[2.3874509873064014, 5.950369682396901]",0,0.0,0,0.0,0.5273758683590260,2.3521793302966900,0.0,17.8313293055083,40.36701727161000,0,0,0,40.36701727161000 -8,,False,4.571953935823770,[],4.571953935823770,16.873283241332100,0.0,[0.0],0,0.0,0.0,0.0,0.6673319121017710,-10.38328324133210,10.38328324133210,0,0.0,385.4274739182460,0.0,0.0,385.4274739182460,,False,4.571953935823770,[],4.571953935823760,22.40328324133210,0,[22.403283241332066],0,0.0,0.0,0.0,0.46494854697722600,-16.873283241332100,16.873283241332100,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.571953935823760,[],4.571953935823770,10.52232361822070,2.3874509873064000,"[5.950369682396901, 4.571953935823766]",0,0.0,22.403283241332100,22.403283241332100,1.0000000000000000,0.16767638177933100,0.0,0.0,0.33535276355866200,0,44.80656648266410,0.0,45.14191924622280 -9,,False,4.257593162880830,[],4.25759316288083,21.1308764042129,0.0,[21.1308764042129],0,0.0,0.0,0.0,0.6063062240949280,-14.640876404212900,14.640876404212900,0,0.0,543.4693321243830,0.0,0.0,543.4693321243830,,False,4.25759316288083,[],4.257593162880830,4.257593162880830,22.403283241332100,[4.257593162880829],0,0.0,21.1308764042129,4.257593162880830,0.5138775468461790,1.272406837119170,0.0,0.0,5.089627348476670,0,84.5235056168516,0.0,89.61313296532830,,False,4.257593162880830,[],4.257593162880830,8.829547098704600,5.950369682396900,"[4.571953935823766, 4.257593162880827]",0,0.0,4.257593162880830,4.257593162880830,1.0000000000000000,1.8604529012954000,0.0,0.0,3.7209058025908100,0,8.515186325761660,0.0,12.236092128352500 -10,,False,4.3705250390757500,[],4.370525039075750,4.370525039075750,21.1308764042129,[4.370525039075748],0,0.0,19.011401443288600,4.370525039075750,0.6400918468716830,2.1194749609242500,0.0,0,14.836324726469800,0.0,0.0,0.0,14.836324726469800,,False,4.370525039075750,[],4.370525039075750,4.370525039075750,4.257593162880830,[4.370525039075746],0,0.0,4.370525039075750,4.370525039075750,0.5555951223598100,1.159474960924250,0.0,0.0,4.637899843697000,0,17.48210015630300,0.0,22.120000000000000,,False,4.370525039075750,[],4.370525039075750,8.628118201956580,4.571953935823770,"[4.257593162880827, 4.370525039075748]",0,0.0,4.370525039075750,4.370525039075750,1.0000000000000000,2.061881798043420,0.0,0.0,4.123763596086850,0,8.741050078151490,0.0,12.864813674238300 -11,,False,5.597720466912610,[],5.597720466912610,5.597720466912610,4.370525039075750,[5.529999999999995],0,0.0,5.597720466912610,5.597720466912610,0.6757331465117300,0.8922795330873920,0.0,0,6.245956731611750,0.0,0.0,0.0,6.245956731611750,,False,5.597720466912610,[],5.597720466912610,5.597720466912610,4.370525039075750,[5.597720466912608],0,0.0,5.530000000000000,5.530000000000000,0.5984059996282290,-0.06772046691261300,0.06772046691261300,0.0,0.0,0.0,22.12000000000000,0.0,22.12000000000000,,False,5.597720466912610,[],5.597720466912610,9.968245505988360,4.257593162880830,"[4.370525039075748, 5.597720466912608]",0,0.0,5.597720466912610,5.597720466912610,1.0000000000000000,0.721754494011642,0.0,0.0,1.443508988023280,0,11.195440933825200,0.0,12.6389499218485 -12,,False,5.122219165222680,[],5.1222191652226800,5.1899396321352900,5.530000000000000,[5.1899396321352915],0,0.0,5.122219165222680,5.122219165222680,0.7026757254696890,1.3000603678647100,0.0,0,9.100422575052960,0.0,0.0,0.0,9.100422575052960,,False,5.1222191652226800,[],5.122219165222680,5.122219165222680,5.597720466912610,[5.09227953308739],0,0.0,5.1899396321352900,5.1222191652226800,0.6317735114403810,0.4077808347773160,0.0,0.0,1.6311233391092700,0,20.759758528541200,0.0,22.39088186765040,,False,5.122219165222680,[],5.122219165222680,10.719939632135300,4.370525039075750,"[5.597720466912608, 5.122219165222679]",0,0.0,5.09227953308739,5.09227953308739,0.9995143483036800,-0.02993963213528780,0.02993963213528780,0.0,0.0,0.0,10.18455906617480,0.0,10.18455906617480 -13,,False,4.484564337907550,[],4.484564337907550,4.484564337907550,5.1899396321352900,[4.484564337907548],0,0.0,4.484564337907550,4.484564337907550,0.7228376915153720,2.0054356620924500,0.0,0,14.038049634647200,0.0,0.0,0.0,14.038049634647200,,False,4.484564337907550,[],4.484564337907550,4.514503970042840,5.09227953308739,[4.514503970042836],0,0.0,4.484564337907550,4.484564337907550,0.6567434536732790,1.0154960299571600,0.0,0.0,4.061984119828630,0,17.93825735163020,0.0,22.000241471458800,,False,4.484564337907550,[],4.484564337907550,9.606783503130230,5.597720466912610,"[5.122219165222679, 4.484564337907546]",0,0.0,4.514503970042840,4.484564337907550,0.9995472810099880,1.0832164968697700,0.0,0.0,2.1664329937395400,0,9.029007940085670,0.0,11.195440933825200 -14,,False,4.399746149894090,[],4.3997461498940900,4.399746149894090,4.484564337907550,[4.3997461498940895],0,0.0,4.399746149894090,4.399746149894090,0.7401267539724440,2.0902538501059100,0.0,0,14.631776950741400,0.0,0.0,0.0,14.631776950741400,,True,4.3997461498940900,[],4.39974614989409,4.399746149894100,4.514503970042840,[0],0,0.0,4.3997461498940900,4.3997461498940900,0.6781553978178070,1.1302538501059000,0.0,0.0,4.521015400423620,0,17.598984599576400,0.0,22.120000000000000,,False,4.39974614989409,[],4.39974614989409,8.884310487801640,5.122219165222680,"[4.484564337907546, 4.39974614989409]",0,0.0,0,0.0,0.9371966841172800,1.8056895121983600,0.0,4.39974614989409,12.410871324184900,0,0,0,12.410871324184900 -15,,False,5.947439821046640,[],5.947439821046640,5.947439821046640,4.3997461498940900,[1.1302538501059045],0,0.0,5.947439821046640,5.947439821046640,0.7603356739401280,0.5425601789533620,0.0,0,3.797921252673540,0.0,0.0,0.0,3.797921252673540,,True,5.947439821046640,[],5.94743982104664,10.347185970940700,0,[0],0,0.0,1.1302538501059000,1.1302538501059000,0.6401973661577650,-4.817185970940730,4.817185970940730,0.0,0.0,0.0,4.521015400423620,0.0,4.521015400423620,,False,5.94743982104664,[],5.94743982104664,10.347185970940700,4.484564337907550,"[4.39974614989409, 5.94743982104664]",0,0.0,0,0.0,0.8643160275940740,0.3428140290592680,0.0,10.34718597094070,21.380000000000000,0,0,0,21.380000000000000 -16,,False,3.978447805324400,[],3.978447805324400,8.795633776265130,1.1302538501059000,[0.0],0,0.0,1.6728140290592700,1.6728140290592700,0.7435302309502700,-2.305633776265140,2.305633776265140,0,0.0,85.58512577496180,0.0,0.0,85.58512577496180,,False,3.978447805324400,[],3.9784478053244,14.325633776265100,0,[14.32563377626513],0,0.0,0.0,0.0,0.6085414209532100,-8.795633776265130,8.795633776265130,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.9784478053244,[],3.9784478053244,9.925887626371040,4.39974614989409,"[5.94743982104664, 3.9784478053244]",0,0.0,14.32563377626510,14.32563377626510,0.9996278875527000,0.7641123736289580,0.0,0.0,1.5282247472579200,0,28.65126755253030,0.0,30.179492299788200 -17,,False,4.838244613602480,[],4.8382446136024800,13.633878389867600,0.0,[13.633878389867615],0,0.0,0.0,0.0,0.7013553675628280,-7.143878389867610,7.143878389867610,0,0.0,265.1807658318860,0.0,0.0,265.1807658318860,,False,4.8382446136024800,[],4.838244613602480,4.838244613602480,14.32563377626510,[4.838244613602479],0,0.0,13.633878389867600,4.83824461360248,0.6307459143361360,0.6917553863975160,0.0,0.0,2.7670215455900700,0,54.53551355947050,0.0,57.30253510506050,,False,4.838244613602480,[],4.838244613602480,8.81669241892688,5.94743982104664,"[3.9784478053244, 4.838244613602479]",0,0.0,4.838244613602480,4.838244613602480,0.9996489946859090,1.873307581073120,0.0,0.0,3.746615162146240,0,9.676489227204960,0.0,13.423104389351200 -18,,False,4.770549546168040,[],4.770549546168040,4.770549546168040,13.633878389867600,[4.770549546168042],0,0.0,11.914427936035700,4.770549546168040,0.7171735184251260,1.719450453831960,0.0,0,12.036153176823700,0.0,0.0,0.0,12.036153176823700,,True,4.770549546168040,[],4.770549546168040,4.770549546168050,4.838244613602480,[0],0,0.0,4.770549546168040,4.770549546168040,0.6503039984238510,0.7594504538319530,0.0,0.0,3.0378018153278100,0,19.08219818467220,0.0,22.12000000000000,,False,4.770549546168040,[],4.770549546168040,9.608794159770530,3.9784478053244,"[4.838244613602479, 4.770549546168044]",0,0.0,0,0.0,0.9467011198882160,1.081205840229480,0.0,4.770549546168040,11.703510772795000,0,0,0,11.703510772795000 -19,,False,5.389348913256120,[],5.389348913256120,5.389348913256120,4.770549546168040,[0.7594504538319526],0,0.0,5.389348913256120,5.389348913256120,0.7331414968068010,1.100651086743880,0.0,0,7.704557607207140,0.0,0.0,0.0,7.704557607207140,,False,5.389348913256120,[],5.389348913256130,10.159898459424200,0,[10.15989845942417],0,0.0,0.7594504538319530,0.7594504538319530,0.621544733030712,-4.629898459424170,4.629898459424170,0.0,0.0,0.0,3.0378018153278100,0.0,3.0378018153278100,,False,5.389348913256130,[],5.389348913256120,10.15989845942420,4.838244613602480,"[4.770549546168044, 5.389348913256123]",0,0.0,10.15989845942420,10.15989845942420,0.9996863538046320,0.5301015405758290,0.0,0.0,1.0602030811516600,0,20.31979691884830,0.0,21.380000000000000 -20,,False,7.77831304155244,[],7.7783130415524400,12.408211500976600,0.7594504538319530,[10.15989845942417],0,0.0,1.8601015405758300,1.8601015405758300,0.695920574844463,-5.918211500976610,5.918211500976610,0,0.0,219.68401091625200,0.0,0.0,219.68401091625200,,False,7.7783130415524400,[],7.7783130415524400,7.77831304155244,10.15989845942420,[5.300651086743873],0,0.0,10.15989845942420,5.5300000000000000,0.6282811148793340,-2.248313041552440,2.248313041552440,0.0,0.0,0.0,40.63959383769670,0.0,40.63959383769670,,False,7.7783130415524400,[],7.778313041552440,13.167661954808600,4.770549546168040,"[5.389348913256123, 7.778313041552441]",0,0.0,5.300651086743870,5.300651086743870,0.9757097770620160,-2.4776619548085700,2.4776619548085700,0.0,0.0,0.0,10.601302173487700,0.0,10.601302173487700 -21,,False,6.193639724282320,[],6.193639724282320,8.441952765834760,10.15989845942420,[5.300651086743873],0,0.0,10.15989845942420,4.241686958447560,0.6952937339357340,-1.9519527658347600,1.9519527658347600,0,0.0,72.45648666778620,0.0,0.0,72.45648666778620,,False,6.193639724282320,[],6.193639724282320,8.671301679090890,5.300651086743870,[5.389348913256123],0,0.0,5.300651086743870,3.0523380451914300,0.6206139383991140,-3.141301679090890,3.141301679090890,0.0,0.0,0.0,21.20260434697550,0.0,21.20260434697550,,False,6.193639724282320,[],6.19363972428232,13.971952765834800,5.389348913256120,"[7.778313041552441, 6.19363972428232]",0,0.0,5.389348913256120,2.9116869584475600,0.9470928867586570,-3.2819527658347600,3.2819527658347600,0.0,0.0,0.0,10.778697826512200,0.0,10.778697826512200 -22,,False,5.2186383160538600,[],5.218638316053860,8.359939995144750,5.300651086743870,[5.389348913256123],0,0.0,5.300651086743870,3.348698320909120,0.6928533082901340,-1.8699399951447500,1.8699399951447500,0,0.0,69.41217261977300,0.0,0.0,69.41217261977300,,False,5.218638316053860,[],5.218638316053870,8.500591081888630,5.389348913256120,[7.778313041552441],0,0.0,5.389348913256120,2.248047234165240,0.6119725444552930,-2.9705910818886300,2.9705910818886300,0.0,0.0,0.0,21.557395653024500,0.0,21.557395653024500,,False,5.218638316053870,[],5.218638316053860,11.412278040336200,7.778313041552440,"[6.19363972428232, 5.218638316053863]",0,0.0,7.778313041552440,4.49636027571768,0.9432011686820720,-0.7222780403361850,0.7222780403361850,0.0,0.0,0.0,15.556626083104900,0.0,15.556626083104900 -23,,False,5.881761038948610,[],5.881761038948610,8.852352120837240,5.389348913256120,[7.778313041552441],0,0.0,5.389348913256120,3.5194089181113800,0.6882420660497510,-2.362352120837240,2.362352120837240,0,0.0,87.69051072547820,0.0,0.0,87.69051072547820,,False,5.881761038948610,[],5.88176103894861,6.604039079284800,7.778313041552440,[6.19363972428232],0,0.0,7.778313041552440,4.807721959663820,0.6219970624127580,-1.0740390792848000,1.0740390792848000,0.0,0.0,0.0,31.113252166209800,0.0,31.113252166209800,,False,5.88176103894861,[],5.881761038948610,11.100399355002500,6.19363972428232,"[5.218638316053863, 5.881761038948608]",0,0.0,6.19363972428232,5.471361683946130,0.9425679421046250,-0.4103993550024750,0.4103993550024750,0.0,0.0,0.0,12.38727944856460,0.0,12.38727944856460 -24,,False,3.9909146571348900,[],3.9909146571348900,5.064953736419690,7.778313041552440,[5.064953736419688],0,0.0,6.353266777972130,3.9909146571348900,0.6982340319731020,1.425046263580310,0.0,0,9.9753238450622,0.0,0.0,0.0,9.9753238450622,,True,3.9909146571348900,[],3.9909146571348900,4.401314012137370,6.19363972428232,[0],0,0.0,5.064953736419690,3.9909146571348900,0.6341122070810600,1.1286859878626300,0.0,0.0,4.5147439514505300,0,20.25981494567880,0.0,24.77455889712930,,False,3.9909146571348900,[],3.990914657134900,9.872675696083510,5.218638316053860,"[5.881761038948608, 3.990914657134895]",0,0.0,0,0.0,0.9123582642349500,0.8173243039164950,0.0,4.401314012137370,10.437276632107700,0,0,0,10.437276632107700 -25,,False,3.4167057864631100,[],3.4167057864631100,3.416705786463110,5.064953736419690,[1.1286859878626316],0,0.0,3.4167057864631100,3.4167057864631100,0.7062930620663400,3.0732942135368900,0.0,0,21.513059494758200,0.0,0.0,0.0,21.513059494758200,,True,3.4167057864631100,[],3.4167057864631100,7.818019798600480,0,[0],0,0.0,1.1286859878626300,1.1286859878626300,0.6259996870083330,-2.288019798600480,2.288019798600480,0.0,0.0,0.0,4.5147439514505300,0.0,4.5147439514505300,,False,3.4167057864631100,[],3.4167057864631100,7.407620443598010,5.881761038948610,"[3.990914657134895, 3.4167057864631127]",0,0.0,0,0.0,0.8879926183824400,3.28237955640199,0.0,7.818019798600480,22.200798710004900,0,0,0,22.200798710004900 -26,,False,3.6533219026386500,[],3.6533219026386500,5.941341701239130,1.1286859878626300,[0.0],0,0.0,3.6533219026386500,3.6533219026386500,0.7144472227101940,0.5486582987608670,0.0,0,3.8406080913260700,0.0,0.0,0.0,3.8406080913260700,,False,3.6533219026386500,[],3.6533219026386500,11.471341701239100,0,[11.471341701239135],0,0.0,0.0,0.0,0.608620111140018,-5.941341701239140,5.941341701239140,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.6533219026386500,[],3.6533219026386600,7.07002768910177,3.990914657134900,"[3.4167057864631127, 3.6533219026386554]",0,0.0,11.471341701239100,11.471341701239100,0.9505142301643070,3.6199723108982300,0.0,0.0,7.239944621796460,0,22.94268340247830,0.0,30.182628024274700 -27,,False,4.119408733952890,[],4.119408733952890,10.060750435192000,0.0,[10.060750435192027],0,0.0,0.5486582987608670,0.5486582987608670,0.6968033329165890,-3.570750435192030,3.570750435192030,0,0.0,132.54625615432800,0.0,0.0,132.54625615432800,,False,4.119408733952890,[],4.119408733952890,4.119408733952890,11.471341701239100,[4.119408733952893],0,0.0,10.060750435192000,4.119408733952890,0.6205003025121860,1.4105912660471100,8.88178419700125E-16,0.0,5.642365064188430,0,40.24300174076810,0.0,45.88536680495650,,False,4.119408733952890,[],4.119408733952890,7.772730636591550,3.4167057864631100,"[3.6533219026386554, 4.119408733952891]",0,0.0,4.119408733952890,4.119408733952890,0.9520163523544880,2.917269363408450,0.0,0.0,5.834538726816900,0,8.238817467905790,0.0,14.073356194722700 -28,,False,5.582122794713040,[],5.5821227947130400,5.5821227947130400,10.060750435192000,[5.53],0,0.0,9.152873229905070,5.582122794713040,0.7087819775155560,0.9078772052869620,0.0,0,6.355140437008730,0.0,0.0,0.0,6.355140437008730,,False,5.5821227947130400,[],5.5821227947130400,5.5821227947130400,4.119408733952890,[5.5821227947130385],0,0.0,5.53,5.530000000000000,0.6351246123520420,-0.05212279471303830,0.052122794713039200,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.5821227947130400,[],5.582122794713040,9.701531528665930,3.6533219026386600,"[4.119408733952891, 5.582122794713037]",0,0.0,5.5821227947130400,5.5821227947130400,0.9539120824996660,0.9884684713340680,0.0,0.0,1.9769369426681400,0,11.164245589426100,0.0,13.141182532094200 -29,,False,5.887748459593360,[],5.887748459593360,5.939871254306400,5.53,[5.5821227947130385],0,0.0,5.887748459593360,5.887748459593360,0.720431840712657,0.5501287456936050,0.0,0,3.850901219855230,0.0,0.0,0.0,3.850901219855230,,False,5.887748459593360,[],5.887748459593360,5.887748459593360,5.5821227947130400,[5.107877205286959],0,0.0,5.5821227947130400,5.530000000000000,0.6472903605250230,-0.3577484595933570,0.357748459593358,0.0,0.0,0.0,22.328491178852200,0.0,22.328491178852200,,False,5.887748459593360,[],5.887748459593360,11.469871254306400,4.119408733952890,"[5.582122794713037, 5.887748459593357]",0,0.0,5.107877205286960,5.107877205286960,0.9504569956611020,-0.7798712543063980,0.7798712543063980,0.0,0.0,0.0,10.215754410573900,0.0,10.215754410573900 -30,,False,4.792834109895430,[],4.792834109895430,5.150582569488780,5.5821227947130400,[5.107877205286959],0,0.0,4.792834109895430,4.792834109895430,0.729248746553818,1.339417430511220,0.0,0,9.375922013578520,0.0,0.0,0.0,9.375922013578520,,False,4.792834109895430,[],4.792834109895430,5.572705364201830,5.107877205286960,[5.572705364201824],0,0.0,5.107877205286960,4.750128745693600,0.6581329644434590,-0.042705364201824000,0.042705364201824900,0.0,0.0,0.0,20.431508821147800,0.0,20.431508821147800,,False,4.792834109895430,[],4.792834109895430,10.680582569488800,5.582122794713040,"[5.887748459593357, 4.792834109895426]",0,0.0,5.572705364201820,4.792834109895430,0.9520194625938810,0.009417430511212470,0.0,0.0,0.01883486102242490,0,11.145410728403600,0.0,11.164245589426100 -31,,False,4.37652260501504,[],4.37652260501504,4.419227969216860,5.107877205286960,[4.419227969216865],0,0.0,4.37652260501504,4.37652260501504,0.736827635728371,2.070772030783140,0.0,0,14.495404215482000,0.0,0.0,0.0,14.495404215482000,,False,4.37652260501504,[],4.376522605015040,4.376522605015040,5.572705364201820,[4.376522605015039],0,0.0,4.419227969216870,4.37652260501504,0.6677025318672010,1.15347739498496,0.0,0.0,4.61390957993984,0,17.67691187686750,0.0,22.2908214568073,,False,4.376522605015040,[],4.376522605015040,9.169356714910470,5.887748459593360,"[4.792834109895426, 4.376522605015038]",0,0.0,4.376522605015040,4.376522605015040,0.9533625373568160,1.5206432850895300,0.0,0.0,3.041286570179060,0,8.753045210030080,0.0,11.79433178020910 -32,,False,3.491846710452520,[],3.491846710452520,3.491846710452520,4.419227969216870,[3.491846710452517],0,0.0,3.491846710452520,3.491846710452520,0.7425768523333160,2.998153289547480,0.0,0,20.987073026832400,0.0,0.0,0.0,20.987073026832400,,False,3.491846710452520,[],3.491846710452520,3.491846710452520,4.376522605015040,[3.491846710452518],0,0.0,3.491846710452520,3.491846710452520,0.6749618431815090,2.0381532895474800,0.0,0.0,8.15261315818993,0,13.967386841810100,0.0,22.120000000000000,,False,3.491846710452520,[],3.4918467104525200,7.868369315467560,4.792834109895430,"[4.376522605015038, 3.4918467104525197]",0,0.0,3.491846710452520,3.491846710452520,0.9543813710606620,2.8216306845324400,0.0,0.0,5.643261369064880,0,6.983693420905040,0.0,12.626954789969900 -33,,False,6.09964697578482,[],6.09964697578482,6.099646975784820,3.491846710452520,[5.53],0,0.0,6.09964697578482,6.09964697578482,0.7520392429670150,0.39035302421518100,0.0,0,2.732471169506270,0.0,0.0,0.0,2.732471169506270,,True,6.09964697578482,[],6.09964697578482,6.099646975784820,3.491846710452520,[0],0,0.0,5.53,5.53,0.6834767879474380,-0.5696469757848200,0.5696469757848200,0.0,0.0,0.0,22.12,0.0,22.12,,False,6.09964697578482,[],6.099646975784820,9.591493686237340,4.376522605015040,"[3.4918467104525197, 6.099646975784818]",0,0.0,0,0.0,0.9193001072801610,1.0985063137626600,0.0,6.09964697578482,14.396306579095000,0,0,0,14.396306579095000 -34,,False,6.179716344700700,[],6.179716344700700,6.749363320485520,5.53,[0.0],0,0.0,5.920353024215180,5.920353024215180,0.7594350422060430,-0.25936332048551900,0.25936332048551900,0,0.0,9.627566456422480,0.0,0.0,9.627566456422480,,True,6.179716344700700,[],6.179716344700700,12.279363320485500,0,[0],0,0.0,0.0,0.0,0.6589375335419660,-6.7493633204855200,6.7493633204855200,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.179716344700700,[],6.179716344700700,12.279363320485500,3.4918467104525200,"[6.099646975784818, 6.179716344700703]",0,0.0,0,0.0,0.8862939546128940,-1.5893633204855200,1.5893633204855200,10.690000000000000,21.380000000000000,0.0,0,0,21.380000000000000 -35,,False,4.101792060544320,[],4.101792060544320,10.851155381029800,0.0,[0.0],0,0.0,0.0,0.0,0.7417581855543650,-4.361155381029840,4.361155381029840,0,0.0,161.88608774382800,0.0,0.0,161.88608774382800,,False,4.101792060544320,[],4.101792060544320,16.381155381029800,0,[16.381155381029842],0,0.0,0.0,0.0,0.6435998895362380,-10.851155381029800,10.851155381029800,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.101792060544320,[],4.10179206054432,10.281508405245000,6.099646975784820,"[6.179716344700703, 4.10179206054432]",0,0.0,16.381155381029800,14.791792060544300,0.949602857575756,0.4084915947549710,8.88178419700125E-16,0.0,0.8169831895099420,0,32.762310762059700,0.0,33.579293951569600 -36,,False,3.962170123484520,[],3.962170123484520,14.81332550451440,0.0,[14.813325504514363],0,0.0,0.0,0.0,0.7254472186648720,-8.32332550451436,8.32332550451436,0,0.0,308.961842727573,0.0,0.0,308.961842727573,,False,3.962170123484520,[],3.962170123484520,3.9621701234845200,16.381155381029800,[3.962170123484519],0,0.0,14.813325504514400,3.962170123484520,0.6514369859301810,1.5678298765154800,0.0,0.0,6.271319506061910,0,59.253302018057500,0.0,65.52462152411940,,False,3.962170123484520,[],3.96217012348452,8.063962184028840,6.179716344700700,"[4.10179206054432, 3.96217012348452]",0,0.0,3.962170123484520,3.962170123484520,0.9507110706530310,2.6260378159711600,0.0,0.0,5.252075631942310,0,7.924340246969040,0.0,13.17641587891140 -37,,False,4.924196254971820,[],4.924196254971820,4.924196254971810,14.813325504514400,[4.924196254971815],0,0.0,13.247521759486200,4.924196254971820,0.7327508022412240,1.5658037450281900,0.0,0,10.960626215197300,0.0,0.0,0.0,10.960626215197300,,False,4.924196254971820,[],4.924196254971810,4.924196254971820,3.962170123484520,[4.924196254971814],0,0.0,4.924196254971820,4.924196254971820,0.6607093709794390,0.605803745028183,0.0,0.0,2.423214980112730,0,19.69678501988730,0.0,22.12000000000000,,False,4.924196254971810,[],4.924196254971810,8.886366378456340,4.10179206054432,"[3.96217012348452, 4.924196254971814]",0,0.0,4.924196254971810,4.924196254971810,0.9520222422722870,1.8036336215436600,0.0,0.0,3.6072672430873200,0,9.848392509943630,0.0,13.455659753031000 -38,,False,6.495434252883470,[],6.495434252883470,6.49543425288347,4.924196254971820,[5.529999999999997],0,0.0,6.490000000000000,6.490000000000000,0.7417822964375150,-0.005434252883469880,0.005434252883469880,0,0.0,0.20171946703440200,0.0,0.0,0.20171946703440200,,False,6.495434252883470,[],6.495434252883470,6.495434252883480,4.924196254971810,[5.765803745028182],0,0.0,5.530000000000000,5.530000000000000,0.6671727504053450,-0.965434252883477,0.965434252883477,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,6.495434252883470,[],6.495434252883470,11.419630507855300,3.96217012348452,"[4.924196254971814, 6.495434252883473]",0,0.0,5.765803745028180,5.765803745028180,0.9498406836279730,-0.7296305078552910,0.7296305078552910,0.0,0.0,0.0,11.531607490056400,0.0,11.531607490056400 -39,,False,5.33818125199332,[],5.33818125199332,6.303615504876790,5.530000000000000,[5.765803745028182],0,0.0,5.34361550487679,5.33818125199332,0.7487813904216580,0.18638449512320700,0.0,0,1.3046914658624500,0.0,0.0,0.0,1.3046914658624500,,False,5.33818125199332,[],5.338181251993320,6.067811759848610,5.765803745028180,[4.924196254971814],0,0.0,5.765803745028180,4.800369492144710,0.67346334772752,-0.5378117598486150,0.5378117598486150,0.0,0.0,0.0,23.06321498011270,0.0,23.06321498011270,,False,5.338181251993320,[],5.338181251993320,11.833615504876800,4.924196254971810,"[6.495434252883473, 5.338181251993317]",0,0.0,4.924196254971810,4.194565747116520,0.9453933962290750,-1.143615504876800,1.143615504876800,0.0,0.0,0.0,9.848392509943630,0.0,9.848392509943630 -40,,False,4.6013616099848000,[],4.601361609984800,5.139173369833410,5.765803745028180,[4.924196254971814],0,0.0,4.6013616099848000,4.6013616099848000,0.7545168799912200,1.3508266301665900,0.0,0,9.455786411166130,0.0,0.0,0.0,9.455786411166130,,False,4.601361609984800,[],4.6013616099848,5.744977114861600,4.924196254971810,[5.744977114861596],0,0.0,4.924196254971810,4.386384495123200,0.6798517423728260,-0.21497711486160000,0.21497711486160000,0.0,0.0,0.0,19.696785019887300,0.0,19.696785019887300,,False,4.6013616099848,[],4.601361609984800,9.939542861978120,6.495434252883470,"[5.338181251993317, 4.601361609984802]",0,0.0,5.744977114861600,4.6013616099848,0.9466401016657580,0.7504571380218770,0.0,0.0,1.500914276043750,0,11.489954229723200,0.0,12.990868505766900 -41,,False,4.939135912525250,[],4.939135912525260,5.15411302738685,4.924196254971810,[5.154113027386855],0,0.0,4.939135912525250,4.939135912525250,0.7603889357003970,1.3358869726131500,0.0,0,9.351208808292050,0.0,0.0,0.0,9.351208808292050,,False,4.939135912525260,[],4.939135912525260,4.939135912525260,5.744977114861600,[4.939135912525255],0,0.0,5.154113027386860,4.939135912525260,0.6875098184308260,0.5908640874747410,0.0,0.0,2.3634563498989600,0,20.61645210954740,0.0,22.979908459446400,,False,4.939135912525260,[],4.9391359125252600,9.54049752251006,5.338181251993320,"[4.601361609984802, 4.9391359125252565]",0,0.0,4.939135912525260,4.939135912525260,0.947916492057258,1.1495024774899400,0.0,0.0,2.2990049549798800,0,9.87827182505051,0.0,12.177276780030400 -42,,False,3.581249541408600,[],3.581249541408600,3.5812495414085900,5.154113027386860,[3.581249541408597],0,0.0,3.581249541408600,3.581249541408600,0.7644739269498500,2.9087504585914100,0.0,0,20.361253210139900,0.0,0.0,0.0,20.361253210139900,,True,3.581249541408600,[],3.581249541408600,3.581249541408600,4.939135912525260,[0],0,0.0,3.581249541408600,3.581249541408600,0.6928372838422480,1.9487504585914000,0.0,0.0,7.7950018343655900,0,14.324998165634400,0.0,22.120000000000000,,False,3.581249541408600,[],3.5812495414086000,8.520385453933860,4.601361609984800,"[4.9391359125252565, 3.5812495414085976]",0,0.0,0,0.0,0.9317560088734580,2.169614546066140,0.0,3.581249541408600,11.501728174949500,0,0,0,11.501728174949500 -43,,False,6.0424916173394200,[],6.0424916173394200,6.042491617339410,3.581249541408600,[1.9487504585913986],0,0.0,6.0424916173394200,6.0424916173394200,0.7710594232164330,0.447508382660585,0.0,0,3.132558678624100,0.0,0.0,0.0,3.132558678624100,,True,6.0424916173394200,[],6.04249161733942,9.623741158748020,0,[0],0,0.0,1.9487504585914000,1.9487504585914000,0.6824825760138530,-4.093741158748020,4.093741158748020,0.0,0.0,0.0,7.7950018343655900,0.0,7.7950018343655900,,False,6.04249161733942,[],6.04249161733942,9.623741158748020,4.9391359125252600,"[3.5812495414085976, 6.04249161733942]",0,0.0,0,0.0,0.9057033700367540,1.0662588412519800,0.0,9.623741158748020,21.380000000000000,0,0,0,21.380000000000000 -44,,False,4.465583546326500,[],4.465583546326500,8.559324705074510,1.9487504585914000,[0.0],0,0.0,2.3962588412519800,2.3962588412519800,0.7663127913577260,-2.069324705074510,2.069324705074510,0,0.0,76.81333305236590,0.0,0.0,76.81333305236590,,False,4.465583546326500,[],4.4655835463265000,14.08932470507450,0,[14.089324705074514],0,0.0,0.0,0.0,0.668665361334626,-8.55932470507452,8.55932470507452,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.4655835463265000,[],4.465583546326500,10.50807516366590,3.5812495414086000,"[6.04249161733942, 4.465583546326499]",0,0.0,14.089324705074500,14.089324705074500,0.9512434026016270,0.18192483633408100,0.0,0.0,0.36384967266816100,0,28.178649410149000,0.0,28.542499082817200 -45,,False,3.5049461291856600,[],3.5049461291856600,12.064270834260200,0.0,[12.064270834260181],0,0.0,0.0,0.0,0.7543263206822020,-5.574270834260180,5.574270834260180,0,0.0,206.91693336773800,0.0,0.0,206.91693336773800,,False,3.5049461291856600,[],3.5049461291856600,3.5049461291856700,14.089324705074500,[3.5049461291856634],0,0.0,12.064270834260200,3.5049461291856600,0.6738480138688620,2.0250538708143300,8.88178419700125E-16,0.0,8.100215483257330,0,48.257083337040700,0.0,56.357298820298100,,False,3.5049461291856600,[],3.5049461291856600,7.970529675512160,6.04249161733942,"[4.465583546326499, 3.5049461291856616]",0,0.0,3.5049461291856600,3.5049461291856600,0.952006040954457,2.719470324487840,0.0,0.0,5.438940648975670,0,7.009892258371330,0.0,12.448832907347 -46,,False,4.7878385782883700,[],4.787838578288380,4.787838578288370,12.064270834260200,[4.787838578288376],0,0.0,10.362109412548500,4.787838578288370,0.7594658129390810,1.702161421711630,8.88178419700125E-16,0,11.915129951981400,0.0,0.0,0.0,11.915129951981400,,False,4.787838578288380,[],4.787838578288380,4.787838578288380,3.5049461291856600,[4.787838578288375],0,0.0,4.787838578288380,4.787838578288380,0.6806711119392040,0.7421614217116200,0.0,0.0,2.968645686846480,0,19.151354313153500,0.0,22.120000000000000,,False,4.787838578288380,[],4.787838578288380,8.29278470747404,4.465583546326500,"[3.5049461291856616, 4.787838578288377]",0,0.0,4.787838578288380,4.787838578288380,0.953010074359975,2.397215292525960,0.0,0.0,4.794430585051920,0,9.57567715657675,0.0,14.370107741628700 -47,,False,4.573131205960280,[],4.5731312059602800,4.573131205960270,4.787838578288380,[4.5731312059602764],0,0.0,4.573131205960280,4.573131205960280,0.7641779738724700,1.9168687940397300,0.0,0,13.418081558278100,0.0,0.0,0.0,13.418081558278100,,False,4.5731312059602800,[],4.573131205960280,4.573131205960280,4.787838578288380,[4.573131205960276],0,0.0,4.5731312059602800,4.5731312059602800,0.6869268925814850,0.9568687940397190,0.0,0.0,3.827475176158870,0,18.292524823841100,0.0,22.12000000000000,,False,4.573131205960280,[],4.573131205960270,9.360969784248650,3.5049461291856600,"[4.787838578288377, 4.573131205960274]",0,0.0,4.573131205960280,4.573131205960280,0.9539306257982940,1.329030215751350,0.0,0.0,2.658060431502690,0,9.146262411920550,0.0,11.804322843423200 -48,,False,5.501448331524810,[],5.501448331524810,5.501448331524800,4.5731312059602800,[5.501448331524805],0,0.0,5.501448331524810,5.501448331524810,0.7696076598836430,0.9885516684752030,0.0,0,6.919861679326420,0.0,0.0,0.0,6.919861679326420,,False,5.501448331524810,[],5.501448331524810,5.50144833152481,4.573131205960280,[5.501448331524806],0,0.0,5.501448331524810,5.501448331524810,0.6941352466938590,0.028551668475189200,0.0,0.0,0.11420667390075700,0,22.00579332609920,0.0,22.120000000000000,,False,5.501448331524810,[],5.501448331524810,10.074579537485100,4.787838578288380,"[4.573131205960274, 5.501448331524806]",0,0.0,5.501448331524810,5.501448331524810,0.9549913504504990,0.6154204625149180,0.0,0.0,1.2308409250298400,0,11.002896663049600,0.0,12.233737588079400 -49,,False,6.158186652932030,[],6.158186652932030,6.158186652932020,5.501448331524810,[5.529999999999995],0,0.0,6.158186652932030,6.158186652932030,0.775396384660691,0.33181334706798000,0.0,0,2.3226934294758600,0.0,0.0,0.0,2.3226934294758600,,False,6.158186652932030,[],6.158186652932030,6.158186652932030,5.501448331524810,[5.188551668475192],0,0.0,5.530000000000000,5.530000000000000,0.6992572417667650,-0.6281866529320320,0.6281866529320320,0.0,0.0,0.0,22.12000000000000,0.0,22.12000000000000,,False,6.158186652932030,[],6.1581866529320300,11.659634984456800,4.573131205960270,"[5.501448331524806, 6.1581866529320255]",0,0.0,5.188551668475190,5.188551668475190,0.9521660880423830,-0.9696349844568350,0.9696349844568350,0.0,0.0,0.0,10.377103336950400,0.0,10.377103336950400 -50,,False,6.371862133549780,[],6.371862133549780,7.000048786481800,5.530000000000000,[5.188551668475192],0,0.0,5.861813347067980,5.861813347067980,0.7790592417812430,-0.5100487864818020,0.5100487864818020,0,0.0,18.93301095420450,0.0,0.0,18.93301095420450,,False,6.371862133549780,[],6.371862133549780,7.341497118006620,5.188551668475190,[5.501448331524806],0,0.0,5.188551668475190,4.5603650155431600,0.6996739704118700,-1.8114971180066200,1.8114971180066200,0.0,0.0,0.0,20.754206673900800,0.0,20.754206673900800,,False,6.371862133549780,[],6.371862133549780,12.530048786481800,5.501448331524810,"[6.1581866529320255, 6.371862133549775]",0,0.0,5.501448331524810,4.5318133470679700,0.9460609276406800,-1.8400487864818100,1.8400487864818100,0.0,0.0,0.0,11.002896663049600,0.0,11.002896663049600 -51,,False,5.175553293954830,[],5.175553293954830,6.987050411961440,5.188551668475190,[5.501448331524806],0,0.0,5.188551668475190,4.67850288199339,0.7815780586219270,-0.4970504119614430,0.4970504119614430,0,0.0,18.450511292008700,0.0,0.0,18.450511292008700,,False,5.175553293954830,[],5.1755532939548300,7.0156020804366400,5.501448331524810,[6.1581866529320255],0,0.0,5.501448331524810,3.6899512135181900,0.699941855817155,-1.4856020804366400,1.4856020804366400,0.0,0.0,0.0,22.005793326099200,0.0,22.005793326099200,,False,5.1755532939548300,[],5.175553293954830,11.547415427504600,6.1581866529320300,"[6.371862133549775, 5.175553293954833]",0,0.0,6.1581866529320300,4.318137866450220,0.9438078067239730,-0.8574154275046150,0.8574154275046150,0.0,0.0,0.0,12.316373305864100,0.0,12.316373305864100 -52,,False,4.743369817307450,[],4.743369817307450,6.228971897744080,5.501448331524810,[6.1581866529320255],0,0.0,5.240420229268890,4.743369817307450,0.7855417330244320,0.261028102255918,0.0,0,1.827196715791430,0.0,0.0,0.0,1.827196715791430,,False,4.743369817307450,[],4.743369817307450,5.600785244812060,6.1581866529320300,[5.6007852448120605],0,0.0,6.1581866529320300,4.672584572495380,0.7051161662263670,-0.07078524481206290,0.07078524481206290,0.0,0.0,0.0,24.632746611728100,0.0,24.632746611728100,,False,4.743369817307450,[],4.7433698173074400,9.918923111262280,6.371862133549780,"[5.175553293954833, 4.7433698173074434]",0,0.0,5.6007852448120600,4.743369817307450,0.9448275191059050,0.7710768887377140,0.0,0.0,1.5421537774754300,0,11.201570489624100,0.0,12.74372426709960 -53,,False,4.632174275867240,[],4.632174275867240,4.702959520679300,6.1581866529320300,[4.702959520679302],0,0.0,4.632174275867240,4.632174275867240,0.7892760697146420,1.787040479320710,0.0,0,12.509283355244900,0.0,0.0,0.0,12.509283355244900,,False,4.632174275867240,[],4.632174275867240,4.632174275867240,5.6007852448120600,[4.632174275867238],0,0.0,4.702959520679300,4.632174275867240,0.7102509438935580,0.8978257241327580,0.0,0.0,3.591302896531030,0,18.81183808271720,0.0,22.403140979248200,,False,4.632174275867240,[],4.63217427586724,9.37554409317469,5.175553293954830,"[4.7433698173074434, 4.63217427586724]",0,0.0,4.632174275867240,4.632174275867240,0.9457882310551260,1.3144559068253100,0.0,0.0,2.6289118136506200,0,9.264348551734480,0.0,11.893260365385100 -54,,False,2.34482395243653,[],2.3448239524365300,2.3448239524365200,4.702959520679300,[2.3448239524365295],0,0.0,2.34482395243653,2.34482395243653,0.7911172596290380,4.145176047563480,0.0,0,29.016232332944300,0.0,0.0,0.0,29.016232332944300,,False,2.3448239524365300,[],2.3448239524365300,2.344823952436530,4.632174275867240,[2.3448239524365304],0,0.0,2.3448239524365300,2.3448239524365300,0.7127826119347080,3.185176047563470,0.0,0.0,12.740704190253900,0,9.379295809746120,0.0,22.120000000000000,,False,2.3448239524365300,[],2.3448239524365300,6.976998228303780,4.7433698173074400,"[4.63217427586724, 2.3448239524365295]",0,0.0,2.3448239524365300,2.3448239524365300,0.9462619037039220,3.713001771696220,0.0,0.0,7.426003543392440,0,4.689647904873060,0.0,12.115651448265500 -55,,False,5.345517943888770,[],5.345517943888770,5.345517943888760,2.3448239524365300,[5.345517943888766],0,0.0,5.345517943888770,5.345517943888770,0.795196705894779,1.144482056111240,0.0,0,8.011374392778690,0.0,0.0,0.0,8.011374392778690,,False,5.345517943888770,[],5.345517943888770,5.345517943888770,2.3448239524365300,[5.345517943888766],0,0.0,5.345517943888770,5.345517943888770,0.7183919212491970,0.18448205611123100,0.0,0.0,0.737928224444925,0,21.382071775555100,0.0,22.12000000000000,,False,5.345517943888770,[],5.345517943888770,7.690341896325310,4.63217427586724,"[2.3448239524365295, 5.345517943888768]",0,0.0,5.345517943888770,5.345517943888770,0.9473114000666830,2.9996581036747000,0.0,0.0,5.999316207349390,0,10.691035887777500,0.0,16.690352095126900 -56,,False,5.45293632653351,[],5.45293632653351,5.452936326533500,5.345517943888770,[5.45293632653351],0,0.0,5.45293632653351,5.45293632653351,0.7991971586795050,1.0370636734665000,0.0,0,7.259445714265480,0.0,0.0,0.0,7.259445714265480,,False,5.45293632653351,[],5.45293632653351,5.452936326533510,5.345517943888770,[5.344482056111226],0,0.0,5.45293632653351,5.45293632653351,0.7238926131582890,0.07706367346648780,0.0,0.0,0.30825469386595100,0,21.81174530613400,0.0,22.12000000000000,,False,5.45293632653351,[],5.452936326533510,10.798454270422300,2.3448239524365300,"[5.345517943888768, 5.452936326533508]",0,0.0,5.344482056111230,5.344482056111230,0.947952076526575,-0.10845427042228400,0.10845427042228400,0.0,0.0,0.0,10.688964112222500,0.0,10.688964112222500 -57,,False,4.833939091648940,[],4.833939091648940,4.833939091648930,5.45293632653351,[4.833939091648935],0,0.0,4.833939091648940,4.833939091648940,0.8026150402953830,1.6560609083510700,0.0,0,11.592426358457500,0.0,0.0,0.0,11.592426358457500,,False,4.833939091648940,[],4.833939091648930,4.942393362071220,5.344482056111230,[4.9423933620712175],0,0.0,4.833939091648940,4.833939091648940,0.7285922596139300,0.5876066379287790,0.0,0.0,2.350426551715120,0,19.33575636659570,0.0,21.686182918310900,,False,4.833939091648930,[],4.833939091648930,10.286875418182400,5.345517943888770,"[5.452936326533508, 4.833939091648934]",0,0.0,4.9423933620712200,4.833939091648930,0.9488379884968170,0.4031245818175510,0.0,0.0,0.8062491636351010,0,9.884786724142440,0.0,10.691035887777500 -58,,False,4.056943191532740,[],4.0569431915327400,4.05694319153273,4.833939091648940,[4.0569431915327385],0,0.0,4.056943191532740,4.056943191532740,0.8053950025777580,2.4330568084672700,0.0,0,17.031397659270900,0.0,0.0,0.0,17.031397659270900,,False,4.0569431915327400,[],4.0569431915327400,4.056943191532740,4.9423933620712200,[4.0569431915327385],0,0.0,4.0569431915327400,4.0569431915327400,0.7324147559305020,1.4730568084672600,0.0,0.0,5.892227233869030,0,16.227772766131000,0.0,22.120000000000000,,False,4.0569431915327400,[],4.05694319153274,8.890882283181680,5.452936326533510,"[4.833939091648934, 4.05694319153274]",0,0.0,4.0569431915327400,4.0569431915327400,0.9495585523253990,1.7991177168183200,0.0,0.0,3.5982354336366400,0,8.113886383065480,0.0,11.712121816702100 -59,,False,6.403958738659290,[],6.403958738659290,6.403958738659280,4.0569431915327400,[5.529999999999997],0,0.0,6.403958738659290,6.403958738659290,0.8096273279748890,0.0860412613407151,0.0,0,0.6022888293850060,0.0,0.0,0.0,0.6022888293850060,,False,6.403958738659290,[],6.403958738659290,6.403958738659300,4.0569431915327400,[6.403958738659293],0,0.0,5.530000000000000,5.530000000000000,0.735266252306686,-0.8739587386592970,0.8739587386592970,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,6.403958738659290,[],6.403958738659300,10.46090193019200,4.833939091648930,"[4.05694319153274, 6.403958738659295]",0,0.0,6.403958738659290,6.403958738659290,0.9506555674220780,0.22909806980796100,0.0,0.0,0.45819613961592200,0,12.807917477318600,0.0,13.266113616934500 -60,,False,4.98144919548836,[],4.981449195488360,5.855407934147650,5.530000000000000,[5.855407934147658],0,0.0,4.98144919548836,4.98144919548836,0.8127943507918060,0.6345920658523520,0.0,0,4.442144460966460,0.0,0.0,0.0,4.442144460966460,,False,4.981449195488360,[],4.98144919548836,4.981449195488370,6.403958738659290,[4.286041261340701],0,0.0,5.855407934147660,4.981449195488360,0.7396703393557040,0.5485508045116350,0.0,0.0,2.194203218046540,0,23.421631736590600,0.0,25.615834954637200,,False,4.98144919548836,[],4.981449195488360,11.38540793414770,4.05694319153274,"[6.403958738659295, 4.981449195488358]",0,0.0,4.286041261340700,4.286041261340700,0.9491540917673650,-0.6954079341476590,0.6954079341476590,0.0,0.0,0.0,8.572082522681400,0.0,8.572082522681400 -61,,False,3.326495378009780,[],3.326495378009780,3.326495378009770,5.855407934147660,[3.326495378009777],0,0.0,3.326495378009780,3.326495378009780,0.8148511824507280,3.163504621990230,0.0,0,22.14453235393160,0.0,0.0,0.0,22.14453235393160,,False,3.326495378009780,[],3.3264953780097800,4.021903312157440,4.286041261340700,[4.021903312157437],0,0.0,3.326495378009780,3.326495378009780,0.7425305857747330,1.508096687842560,0.0,0.0,6.032386751370240,0,13.305981512039100,0.0,19.338368263409300,,False,3.3264953780097800,[],3.326495378009780,8.30794457349814,6.403958738659300,"[4.981449195488358, 3.326495378009776]",0,0.0,4.021903312157440,3.3264953780097800,0.9497127366278270,2.382055426501860,0.0,0.0,4.764110853003720,0,8.043806624314870,0.0,12.80791747731860 -62,,False,5.1023476825496700,[],5.1023476825496700,5.102347682549660,3.326495378009780,[5.1023476825496665],0,0.0,5.1023476825496700,5.1023476825496700,0.8179196810422610,1.3876523174503400,0.0,0,9.713566222152410,0.0,0.0,0.0,9.713566222152410,,False,5.1023476825496700,[],5.1023476825496700,5.102347682549670,4.021903312157440,[5.1023476825496665],0,0.0,5.1023476825496700,5.1023476825496700,0.7467976642544690,0.4276523174503290,0.0,0.0,1.7106092698013200,0,20.409390730198700,0.0,22.120000000000000,,False,5.1023476825496700,[],5.102347682549670,8.428843060559450,4.981449195488360,"[3.326495378009776, 5.102347682549668]",0,0.0,5.1023476825496700,5.1023476825496700,0.9505461548417370,2.26115693944055,0.0,0.0,4.5223138788811,0,10.204695365099300,0.0,14.727009243980400 -63,,False,4.5673907194519900,[],4.5673907194519900,4.567390719451980,5.1023476825496700,[4.5673907194519865],0,0.0,4.5673907194519900,4.5673907194519900,0.8205814505339040,1.9226092805480200,0.0,0,13.458264963836200,0.0,0.0,0.0,13.458264963836200,,False,4.5673907194519900,[],4.5673907194519900,4.567390719451990,5.1023476825496700,[4.5673907194519865],0,0.0,4.5673907194519900,4.5673907194519900,0.7504991420218520,0.9626092805480090,0.0,0.0,3.8504371221920400,0,18.269562877807900,0.0,22.120000000000000,,False,4.5673907194519900,[],4.567390719451990,9.669738402001660,3.326495378009780,"[5.102347682549668, 4.567390719451985]",0,0.0,4.5673907194519900,4.5673907194519900,0.95126910357689,1.0202615979983400,0.0,0.0,2.0405231959966800,0,9.134781438903970,0.0,11.175304634900700 -64,,False,5.477754099433530,[],5.477754099433530,5.477754099433520,4.5673907194519900,[5.477754099433527],0,0.0,5.477754099433530,5.477754099433530,0.8236728910319020,1.0122459005664800,0.0,0,7.0857213039653800,0.0,0.0,0.0,7.0857213039653800,,True,5.477754099433530,[],5.477754099433530,5.477754099433530,4.5673907194519900,[0],0,0.0,5.477754099433530,5.477754099433530,0.7547981236986860,0.052245900566468600,0.0,0.0,0.20898360226587400,0,21.91101639773410,0.0,22.120000000000000,,False,5.477754099433530,[],5.477754099433530,10.045144818885500,5.102347682549670,"[4.567390719451985, 5.477754099433525]",0,0.0,0,0.0,0.9348784246864260,0.6448551811144810,0.0,5.477754099433530,12.245218561096000,0,0,0,12.245218561096000 -65,,False,4.7409713552611100,[],4.7409713552611100,4.740971355261100,5.477754099433530,[0.052245900566468606],0,0.0,4.7409713552611100,4.7409713552611100,0.8262637795058630,1.7490286447389000,0.0,0,12.243200513172300,0.0,0.0,0.0,12.243200513172300,,True,4.7409713552611100,[],4.7409713552611100,10.218725454694600,0,[0],0,0.0,0.052245900566468600,0.052245900566468600,0.7438693109788680,-4.688725454694640,4.688725454694640,0.0,0.0,0.0,0.20898360226587400,0.0,0.20898360226587400,,False,4.7409713552611100,[],4.740971355261110,10.218725454694600,4.567390719451990,"[5.477754099433525, 4.740971355261111]",0,0.0,0,0.0,0.921141650181076,0.47127454530535600,0.0,10.218725454694600,21.380000000000000,0,0,0,21.380000000000000 -66,,False,5.339820964186640,[],5.339820964186640,10.028546418881300,0.052245900566468600,[0.0],0,0.0,1.8012745453053700,1.8012745453053700,0.8183038055050890,-3.5385464188812700,3.5385464188812700,0,0.0,131.3508430688730,0.0,0.0,131.3508430688730,,True,5.339820964186640,[],5.339820964186640,15.558546418881300,0,[0],0,0.0,0.0,0.0,0.7317589513409680,-10.028546418881300,10.028546418881300,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.339820964186640,[],5.33982096418664,10.08079231944780,5.477754099433530,"[4.740971355261111, 5.33982096418664]",0,0.0,0,0.0,0.9061452570021950,0.6092076805522390,0.0,15.558546418881300,32.33550819886700,0,0,0,32.33550819886700 -67,,False,4.992619850055430,[],4.992619850055430,15.021166268936700,0.0,[0.0],0,0.0,0.0,0.0,0.806034615426208,-8.531166268936700,8.531166268936700,0,0.0,316.6768919029300,0.0,0.0,316.6768919029300,,True,4.992619850055430,[],4.992619850055430,20.55116626893670,0,[0],0,0.0,0.0,0.0,0.7207873664533930,-15.02116626893670,15.02116626893670,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.992619850055430,[],4.992619850055430,10.332440814242100,4.740971355261110,"[5.33982096418664, 4.992619850055428]",0,0.0,0,0.0,0.8925590212759980,0.3575591857579240,0.0,20.551166268936700,41.81745090938930,0,0,0,41.81745090938930 -68,,False,4.224663894043060,[],4.224663894043050,19.245830162979800,0.0,[0.0],0,0.0,0.0,0.0,0.7959364293210300,-12.755830162979800,12.755830162979800,0,0.0,473.49641564980900,0.0,0.0,473.49641564980900,,False,4.224663894043050,[],4.224663894043050,24.775830162979800,0,[24.77583016297976],0,0.0,0.0,0.0,0.7117571773902850,-19.245830162979800,19.245830162979800,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.224663894043050,[],4.224663894043050,9.217283744098490,5.33982096418664,"[4.992619850055428, 4.224663894043052]",0,0.0,24.77583016297980,24.77583016297980,0.9548494918818940,1.4727162559015100,0.0,0.0,2.9454325118030200,0,49.55166032595950,0.0,52.49709283776250 -69,,False,5.773140855889250,[],5.773140855889250,25.018971018869000,0.0,[24.77583016297976],0,0.0,0.0,0.0,0.7825391763850950,-18.528971018869000,18.528971018869000,0,0.0,687.7954042204180,0.0,0.0,687.7954042204180,,False,5.773140855889250,[],5.773140855889250,5.773140855889260,24.77583016297980,[5.773140855889248],0,0.0,24.77583016297980,5.529999999999990,0.7159000019963850,-0.24314085588925500,0.24314085588925500,0.0,0.0,0.0,99.10332065191900,0.0,99.10332065191900,,False,5.773140855889250,[],5.77314085588925,9.997804749932310,4.992619850055430,"[4.224663894043052, 5.77314085588925]",0,0.0,5.773140855889250,5.773140855889250,0.9556094681251730,0.6921952500676910,0.0,0.0,1.3843905001353800,0,11.546281711778500,0.0,12.930672211913900 -70,,False,6.405205305878190,[],6.40520530587819,6.648346161767440,24.77583016297980,[5.773140855889248],0,0.0,24.77583016297980,6.246859144110750,0.7860725783269320,-0.15834616176743800,0.15834616176743800,0,0.0,5.877809524807280,0.0,0.0,5.877809524807280,,False,6.40520530587819,[],6.405205305878190,6.405205305878200,5.773140855889250,[4.9168591441107425],0,0.0,5.773140855889250,5.529999999999990,0.718603324061035,-0.8752053058781970,0.8752053058781970,0.0,0.0,0.0,23.092563423557000,0.0,23.092563423557000,,False,6.405205305878190,[],6.405205305878190,12.178346161767400,4.224663894043050,"[5.77314085588925, 6.405205305878189]",0,0.0,4.9168591441107400,4.9168591441107400,0.9521634166342810,-1.4883461617674500,1.4883461617674500,0.0,0.0,0.0,9.833718288221490,0.0,9.833718288221490 -71,,False,6.392325753491900,[],6.392325753491900,7.267531059370090,5.773140855889250,[4.9168591441107425],0,0.0,5.773140855889250,5.6147946941218100,0.7877307911717970,-0.7775310593700930,0.7775310593700930,0,0.0,28.861952923817800,0.0,0.0,28.861952923817800,,False,6.392325753491900,[],6.392325753491900,7.880671915259360,4.9168591441107400,[5.77314085588925],0,0.0,4.9168591441107400,4.041653838232550,0.7170521148965800,-2.3506719152593600,2.3506719152593600,0.0,0.0,0.0,19.66743657644300,0.0,19.66743657644300,,False,6.392325753491900,[],6.3923257534919000,12.797531059370100,5.77314085588925,"[6.405205305878189, 6.3923257534919005]",0,0.0,5.77314085588925,4.284794694121800,0.9470992404336540,-2.107531059370100,2.107531059370100,0.0,0.0,0.0,11.5462817117785,0.0,11.5462817117785 -72,,False,4.5065675177966700,[],4.506567517796670,6.857239433056020,4.9168591441107400,[5.77314085588925],0,0.0,4.9168591441107400,4.13932808474065,0.7893666067989310,-0.3672394330560240,0.3672394330560240,0,0.0,13.631927755039600,0.0,0.0,13.631927755039600,,True,4.506567517796670,[],4.506567517796670,6.6140985771667800,5.77314085588925,[0],0,0.0,5.77314085588925,3.4224689406298900,0.7175823149982160,-1.0840985771667800,1.0840985771667800,0.0,0.0,0.0,23.092563423557,0.0,23.092563423557,,False,4.506567517796670,[],4.506567517796670,10.898893271288600,6.405205305878190,"[6.3923257534919005, 4.506567517796674]",0,0.0,0,0.0,0.9352527262219940,-0.20889327128858200,0.20889327128858200,6.405205305878190,12.810410611756400,0.0,0,0,12.810410611756400 -73,,False,5.923162608341950,[],5.923162608341950,7.007261185508730,5.77314085588925,[0.0],0,0.0,5.77314085588925,5.405901422833230,0.791360956192184,-0.5172611855087260,0.5172611855087260,0,0.0,19.200735206083900,0.0,0.0,19.200735206083900,,True,5.923162608341950,[],5.923162608341950,12.537261185508700,0,[0],0,0.0,0.0,0.0,0.705976040783371,-7.007261185508730,7.007261185508730,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.923162608341950,[],5.923162608341950,10.429730126138600,6.3923257534919000,"[4.506567517796674, 5.923162608341951]",0,0.0,0,0.0,0.9201258210937090,0.2602698738613660,0.0,12.537261185508700,25.59506211874020,0,0,0,25.59506211874020 -74,,False,6.706604953678460,[],6.706604953678460,13.71386613918720,0.0,[0.0],0,0.0,0.0,0.0,0.7771290422304360,-7.223866139187190,7.223866139187190,0,0.0,268.1499110866280,0.0,0.0,268.1499110866280,,True,6.706604953678460,[],6.70660495367846,19.243866139187200,0,[0],0,0.0,0.0,0.0,0.6932796976129550,-13.713866139187200,13.713866139187200,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.70660495367846,[],6.706604953678460,12.629767562020400,4.506567517796670,"[5.923162608341951, 6.706604953678462]",0,0.0,0,0.0,0.9035781870244230,-1.9397675620204200,1.9397675620204200,17.304098577166800,34.608197154333500,0.0,0,0,34.608197154333500 -75,,False,5.873589415635380,[],5.8735894156353800,19.58745555482260,0.0,[0.0],0,0.0,0.0,0.0,0.765078801631464,-13.097455554822600,13.097455554822600,0,0.0,486.1775501950140,0.0,0.0,486.1775501950140,,True,5.8735894156353800,[],5.873589415635380,25.11745555482260,0,[0],0,0.0,0.0,0.0,0.6825296333319430,-19.587455554822600,19.587455554822600,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.873589415635380,[],5.873589415635380,12.580194369313800,5.923162608341950,"[6.706604953678462, 5.873589415635379]",0,0.0,0,0.0,0.8895672133483190,-1.8901943693138500,1.8901943693138500,23.227261185508700,46.454522371017400,0.0,0,0,46.454522371017400 -76,,False,5.649086732629110,[],5.6490867326291000,25.236542287451700,0.0,[0.0],0,0.0,0.0,0.0,0.7538365212848060,-18.746542287451700,18.746542287451700,0,0.0,695.8716497102060,0.0,0.0,695.8716497102060,,True,5.6490867326291000,[],5.649086732629110,30.766542287451700,0,[0],0,0.0,0.0,0.0,0.6725003533852800,-25.236542287451700,25.236542287451700,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.649086732629110,[],5.649086732629110,11.522676148264500,6.706604953678460,"[5.873589415635379, 5.649086732629105]",0,0.0,0,0.0,0.876495665713838,-0.8326761482644920,0.8326761482644920,29.933866139187200,59.86773227837440,0.0,0,0,59.86773227837440 -77,,False,3.7771264633246900,[],3.777126463324700,29.013668750776400,0.0,[0.0],0,0.0,0.0,0.0,0.7465021550704220,-22.523668750776400,22.523668750776400,0,0.0,836.0785840288190,0.0,0.0,836.0785840288190,,True,3.777126463324700,[],3.777126463324690,34.54366875077640,0,[0],0,0.0,0.0,0.0,0.6659573381137140,-29.01366875077640,29.01366875077640,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.777126463324690,[],3.777126463324700,9.426213195953810,5.873589415635380,"[5.649086732629105, 3.777126463324696]",0,0.0,0,0.0,0.8679679013827740,1.2637868040461900,0.0,34.54366875077640,71.6149111096451,0,0,0,71.6149111096451 -78,,False,5.620548215961740,[],5.620548215961730,34.6342169667381,0.0,[0.0],0,0.0,0.0,0.0,0.7358486850729920,-28.1442169667381,28.1442169667381,0,0.0,1044.7133338053200,0.0,0.0,1044.7133338053200,,False,5.620548215961730,[],5.620548215961740,40.1642169667381,0,[40.164216966738095],0,0.0,0.0,0.0,0.65645333806097,-34.63421696673810,34.63421696673810,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.620548215961740,[],5.620548215961740,9.397674679286440,5.649086732629110,"[3.777126463324696, 5.620548215961736]",0,0.0,40.164216966738100,40.164216966738100,0.9575622957783270,1.2923253207135600,2.66453525910038E-15,0.0,2.5846506414271200,0,80.32843393347620,0.0,82.91308457490330 -79,,False,4.839062623136940,[],4.839062623136940,39.473279589875000,0.0,[39.47327958987504],0,0.0,0.0,0.0,0.7269171216959930,-32.98327958987500,32.98327958987500,0,0.0,1224.3393383761600,0.0,0.0,1224.3393383761600,,False,4.839062623136940,[],4.839062623136940,4.839062623136950,40.164216966738100,[4.839062623136944],0,0.0,39.47327958987500,4.8390626231369300,0.6606232290267470,0.6909373768630520,2.66453525910038E-15,0.0,2.763749507452210,0,157.89311835950000,0.0,160.65686786695200,,False,4.839062623136940,[],4.83906262313694,10.459610839098700,3.777126463324700,"[5.620548215961736, 4.83906262313694]",0,0.0,4.839062623136940,4.839062623136940,0.9580773949454780,0.2303891609013170,0.0,0.0,0.4607783218026340,0,9.678125246273890,0.0,10.138903568076500 -80,,False,4.643254974231810,[],4.643254974231810,4.643254974231800,39.47327958987500,[4.643254974231814],0,0.0,37.62653456410690,4.643254974231810,0.7300610011763420,1.8467450257682000,0.0,0,12.92721518037740,0.0,0.0,0.0,12.92721518037740,,False,4.643254974231810,[],4.643254974231810,4.643254974231820,4.839062623136940,[4.643254974231813],0,0.0,4.643254974231810,4.643254974231810,0.6645303200644440,0.8867450257681840,0.0,0.0,3.5469801030727400,0,18.573019896927300,0.0,22.120000000000000,,False,4.643254974231810,[],4.643254974231810,9.482317597368760,5.620548215961740,"[4.83906262313694, 4.643254974231811]",0,0.0,4.643254974231810,4.643254974231810,0.9585600309079090,1.2076824026312400,0.0,0.0,2.415364805262480,0,9.286509948463630,0.0,11.701874753726100 -81,,False,5.556121798533970,[],5.556121798533970,5.556121798533960,4.643254974231810,[5.529999999999998],0,0.0,5.556121798533970,5.556121798533970,0.7337291276677650,0.9338782014660450,0.0,0,6.537147410262310,0.0,0.0,0.0,6.537147410262310,,False,5.556121798533970,[],5.556121798533970,5.5561217985339700,4.643254974231810,[5.556121798533969],0,0.0,5.530000000000000,5.530000000000000,0.6690250382490560,-0.026121798533970300,0.026121798533970300,0.0,0.0,0.0,22.12000000000000,0.0,22.12000000000000,,False,5.556121798533970,[],5.556121798533970,10.19937677276580,4.83906262313694,"[4.643254974231811, 5.556121798533971]",0,0.0,5.556121798533970,5.556121798533970,0.9591231472011940,0.49062322723421000,0.0,0.0,0.9812464544684210,0,11.112243597067900,0.0,12.093490051536400 -82,,False,6.363886524417110,[],6.363886524417100,6.390008322951060,5.530000000000000,[5.556121798533969],0,0.0,6.363886524417110,6.363886524417110,0.7378099301935710,0.09999167704893710,0.0,0,0.6999417393425600,0.0,0.0,0.0,0.6999417393425600,,False,6.363886524417100,[],6.3638865244171000,6.363886524417110,5.556121798533970,[5.133878201466022],0,0.0,5.556121798533970,5.5300000000000000,0.6720892822726850,-0.8338865244171060,0.8338865244171060,0.0,0.0,0.0,22.224487194135900,0.0,22.224487194135900,,False,6.3638865244171000,[],6.363886524417100,11.92000832295110,4.643254974231810,"[5.556121798533971, 6.363886524417102]",0,0.0,5.133878201466020,5.133878201466020,0.9567874625175410,-1.2300083229510800,1.2300083229510800,0.0,0.0,0.0,10.267756402932000,0.0,10.267756402932000 -83,,False,7.539162716269330,[],7.539162716269330,8.373049240686430,5.556121798533970,[5.133878201466022],0,0.0,5.656113475582910,5.656113475582910,0.7380314266284010,-1.883049240686430,1.883049240686430,0,0.0,69.89878781428020,0.0,0.0,69.89878781428020,,False,7.539162716269330,[],7.539162716269330,8.769171039220420,5.133878201466020,[5.556121798533971],0,0.0,5.133878201466020,4.299991677048920,0.670275104686181,-3.239171039220420,3.239171039220420,0.0,0.0,0.0,20.535512805864100,0.0,20.535512805864100,,False,7.539162716269330,[],7.539162716269340,13.903049240686400,5.556121798533970,"[6.363886524417102, 7.539162716269335]",0,0.0,5.556121798533970,4.326113475582890,0.9499582370431080,-3.213049240686440,3.213049240686440,0.0,0.0,0.0,11.112243597067900,0.0,11.112243597067900 -84,,False,3.559958552316200,[],3.559958552316200,6.799129591536610,5.133878201466020,[5.556121798533971],0,0.0,5.133878201466020,3.250828960779600,0.7394937972763820,-0.30912959153660700,0.30912959153660700,0,0.0,11.47489043783890,0.0,0.0,11.47489043783890,,True,3.559958552316200,[],3.559958552316200,6.773007793002650,5.556121798533970,[0],0,0.0,5.556121798533970,2.3169507593135500,0.6701127911129880,-1.2430077930026500,1.2430077930026500,0.0,0.0,0.0,22.224487194135900,0.0,22.224487194135900,,False,3.559958552316200,[],3.5599585523162,11.099121268585500,6.363886524417100,"[7.539162716269335, 3.5599585523162]",0,0.0,0,0.0,0.9420260494449530,-0.4091212685855440,0.4091212685855440,6.363886524417100,12.727773048834200,0.0,0,0,12.727773048834200 -85,,False,6.19072725611364,[],6.19072725611364,7.433735049116280,5.556121798533970,[0.0],0,0.0,5.556121798533970,5.246992206997360,0.7410404786006420,-0.9437350491162770,0.9437350491162770,0,0.0,35.031445023196200,0.0,0.0,35.031445023196200,,True,6.19072725611364,[],6.190727256113640,12.96373504911630,0,[0],0,0.0,0.0,0.0,0.6605216071270120,-7.433735049116290,7.433735049116290,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.190727256113640,[],6.1907272561136400,9.75068580842985,7.539162716269340,"[3.5599585523162, 6.1907272561136395]",0,0.0,0,0.0,0.9285430279601630,0.9393141915701500,0.0,12.963735049116300,27.806098481372900,0,0,0,27.806098481372900 -86,,False,5.617640845511150,[],5.617640845511140,13.051375894627400,0.0,[0.0],0,0.0,0.0,0.0,0.7315393692436130,-6.561375894627420,6.561375894627420,0,0.0,243.5582732085700,0.0,0.0,243.5582732085700,,False,5.617640845511140,[],5.6176408455111400,18.581375894627400,0,[17.46300779300264],0,0.0,0.0,0.0,0.652052855144872,-13.051375894627400,13.051375894627400,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.6176408455111400,[],5.6176408455111400,11.808368101624800,3.5599585523162,"[6.1907272561136395, 5.6176408455111435]",0,0.0,17.46300779300260,17.46300779300260,0.9564942348035460,-1.1183681016247900,1.1183681016247900,0.0,0.0,0.0,34.92601558600530,0.0,34.92601558600530 -87,,False,6.21707079698011,[],6.217070796980110,19.268446691607500,0.0,[17.46300779300264],0,0.0,0.0,0.0,0.7213044867244050,-12.778446691607500,12.778446691607500,0,0.0,474.3359411924720,0.0,0.0,474.3359411924720,,True,6.217070796980110,[],6.217070796980110,7.335438898604910,17.46300779300260,[0],0,0.0,17.46300779300260,4.411631898375210,0.6528579871142760,-1.805438898604900,1.805438898604900,0.0,0.0,0.0,69.85203117201060,0.0,69.85203117201060,,False,6.217070796980110,[],6.217070796980110,11.834711642491300,6.1907272561136400,"[5.6176408455111435, 6.217070796980108]",0,0.0,0,0.0,0.9431120348357770,-1.144711642491260,1.1447116424912600,6.1907272561136400,12.381454512227300,0.0,0,0,12.381454512227300 -88,,False,5.226288269498880,[],5.226288269498870,7.031727168103770,17.46300779300260,[0.0],0,0.0,17.46300779300260,4.684561101395110,0.7233392553285320,-0.5417271681037670,0.5417271681037670,0,0.0,20.10891248001180,0.0,0.0,20.10891248001180,,True,5.226288269498870,[],5.2262882694988700,12.561727168103800,0,[0],0,0.0,0.0,0.0,0.6452688326049060,-7.031727168103780,7.031727168103780,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.2262882694988700,[],5.22628826949887,11.44335906647900,5.6176408455111400,"[6.217070796980108, 5.22628826949887]",0,0.0,0,0.0,0.9321488191084920,-0.7533590664789910,0.7533590664789890,11.808368101624800,23.616736203249600,0.0,0,0,23.616736203249600 -89,,False,5.847401432576640,[],5.847401432576640,12.879128600680400,0.0,[0.0],0,0.0,0.0,0.0,0.7140522812527100,-6.389128600680410,6.389128600680410,0,0.0,237.16445365725700,0.0,0.0,237.16445365725700,,True,5.847401432576640,[],5.847401432576640,18.40912860068040,0,[0],0,0.0,0.0,0.0,0.6369842069936280,-12.879128600680400,12.879128600680400,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.847401432576640,[],5.847401432576640,11.073689702075500,6.217070796980110,"[5.22628826949887, 5.847401432576639]",0,0.0,0,0.0,0.9201809328724040,-0.38368970207552200,0.3836897020755200,18.02543889860490,36.05087779720980,0.0,0,0,36.05087779720980 -90,,False,5.174833011991470,[],5.174833011991470,18.053961612671900,0.0,[0.0],0,0.0,0.0,0.0,0.7060301662051300,-11.563961612671900,11.563961612671900,0,0.0,429.2542550623800,0.0,0.0,429.2542550623800,,True,5.174833011991470,[],5.1748330119914700,23.58396161267190,0,[0],0,0.0,0.0,0.0,0.6298279234466730,-18.053961612671900,18.053961612671900,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.1748330119914700,[],5.1748330119914700,11.022234444568100,5.22628826949887,"[5.847401432576639, 5.1748330119914705]",0,0.0,0,0.0,0.9098430381525080,-0.33223444456812200,0.3322344445681210,23.25172716810380,46.50345433620750,0.0,0,0,46.50345433620750 -91,,False,3.783145107640760,[],3.7831451076407600,21.83710672031260,0.0,[0.0],0,0.0,0.0,0.0,0.7002785965029300,-15.34710672031260,15.34710672031260,0,0.0,569.6846014580050,0.0,0.0,569.6846014580050,,False,3.7831451076407600,[],3.783145107640760,27.367106720312700,0,[27.36710672031264],0,0.0,0.0,0.0,0.6246971239773440,-21.83710672031270,21.83710672031270,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.783145107640760,[],3.7831451076407600,8.957978119632240,5.847401432576640,"[5.1748330119914705, 3.7831451076407596]",0,0.0,27.36710672031260,27.03487227574450,0.960646076989893,1.7320218803677500,2.22044604925031E-15,0.0,3.4640437607355100,0,54.73421344062530,0.0,58.19825720136080 -92,,False,5.734501064880050,[],5.734501064880050,27.571607785192700,0.0,[27.36710672031264],0,0.0,0.0,0.0,0.6917368499712790,-21.081607785192700,21.081607785192700,0,0.0,782.5492809863530,0.0,0.0,782.5492809863530,,False,5.734501064880050,[],5.734501064880050,5.734501064880060,27.36710672031260,[5.734501064880048],0,0.0,27.36710672031260,5.5299999999999900,0.6288399470323760,-0.2045010648800560,0.2045010648800560,0.0,0.0,0.0,109.46842688125100,0.0,109.46842688125100,,False,5.734501064880050,[],5.734501064880050,9.51764617252082,5.1748330119914700,"[3.7831451076407596, 5.734501064880045]",0,0.0,5.734501064880050,5.734501064880050,0.9611261019928810,1.1723538274791800,0.0,0.0,2.344707654958360,0,11.469002129760100,0.0,13.813709784718500 -93,,False,4.0455027380385800,[],4.045502738038580,4.250003802918630,27.36710672031260,[4.250003802918637],0,0.0,25.127110523231300,4.045502738038580,0.6943668343492310,2.239996197081370,8.88178419700125E-16,0,15.679973379569600,0.0,0.0,0.0,15.679973379569600,,False,4.045502738038580,[],4.04550273803858,4.045502738038590,5.734501064880050,[4.04550273803858],0,0.0,4.250003802918640,4.045502738038580,0.6320065439510600,1.484497261961410,0.0,0.0,5.937989047845640,0,17.000015211674500,0.0,22.93800425952020,,False,4.04550273803858,[],4.045502738038580,9.780003802918640,3.7831451076407600,"[5.734501064880045, 4.045502738038579]",0,0.0,4.04550273803858,4.04550273803858,0.9614577593591900,0.9099961970813600,0.0,0.0,1.8199923941627200,0,8.09100547607716,0.0,9.91099787023988 -94,,False,5.7699773599307900,[],5.769977359930790,5.769977359930780,4.250003802918640,[5.529999999999991],0,0.0,5.769977359930790,5.7699773599307900,0.6980411873342870,0.7200226400692170,0.0,0,5.040158480484520,0.0,0.0,0.0,5.040158480484520,,False,5.769977359930790,[],5.769977359930790,5.769977359930800,4.04550273803858,[5.769977359930793],0,0.0,5.529999999999990,5.529999999999990,0.635930591141147,-0.23997735993080100,0.23997735993080100,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,5.769977359930790,[],5.769977359930790,9.815480097969390,5.734501064880050,"[4.045502738038579, 5.769977359930794]",0,0.0,5.769977359930790,5.769977359930790,0.9619211180939920,0.8745199020306120,0.0,0.0,1.7490398040612200,0,11.539954719861600,0.0,13.28899452392280 -95,,False,6.268389522403900,[],6.268389522403900,6.508366882334690,5.529999999999990,[5.769977359930793],0,0.0,6.250022640069210,6.250022640069210,0.7018963239160030,-0.018366882334693600,0.018366882334693600,0,0.0,0.6817786722638280,0.0,0.0,0.6817786722638280,,False,6.268389522403900,[],6.268389522403900,6.268389522403910,5.769977359930790,[4.920022640069191],0,0.0,5.769977359930790,5.529999999999990,0.6391055993022160,-0.7383895224039120,0.7383895224039120,0.0,0.0,0.0,23.07990943972320,0.0,23.07990943972320,,False,6.268389522403900,[],6.268389522403900,12.038366882334700,4.045502738038580,"[5.769977359930794, 6.268389522403902]",0,0.0,4.920022640069190,4.920022640069190,0.9596388527598760,-1.3483668823347100,1.3483668823347100,0.0,0.0,0.0,9.840045280138380,0.0,9.840045280138380 -96,,False,4.132358910020630,[],4.132358910020630,4.870748432424530,5.769977359930790,[4.870748432424537],0,0.0,4.150725792355320,4.132358910020630,0.7044085617850980,1.619251567575470,0.0,0,11.334760973028300,0.0,0.0,0.0,11.334760973028300,,False,4.132358910020630,[],4.132358910020630,5.480725792355350,4.920022640069190,[5.480725792355338],0,0.0,4.870748432424540,4.132358910020630,0.642146999502601,0.049274207644654000,0.0,0.0,0.19709683057861600,0,19.482993729698100,0.0,19.680090560276800,,False,4.132358910020630,[],4.132358910020620,10.400748432424500,5.769977359930790,"[6.268389522403902, 4.132358910020623]",0,0.0,5.480725792355340,4.132358910020630,0.9599789921498650,0.2892515675754560,0.0,0.0,0.5785031351509120,0,10.961451584710700,0.0,11.539954719861600 -97,,False,5.145861852428310,[],5.145861852428310,5.145861852428300,4.870748432424540,[5.145861852428309],0,0.0,5.145861852428310,5.145861852428310,0.7074783717861140,1.3441381475717000,0.0,0,9.408967033001910,0.0,0.0,0.0,9.408967033001910,,False,5.145861852428310,[],5.145861852428310,5.145861852428320,5.480725792355340,[5.145861852428309],0,0.0,5.145861852428310,5.145861852428310,0.6458634153989980,0.38413814757168300,0.0,0.0,1.5365525902867300,0,20.583447409713200,0.0,22.12000000000000,,False,5.145861852428310,[],5.145861852428310,9.278220762448950,6.268389522403900,"[4.132358910020623, 5.145861852428311]",0,0.0,5.145861852428310,5.145861852428310,0.9603946228964490,1.4117792375510500,0.0,0.0,2.8235584751021000,0,10.291723704856600,0.0,13.115282179958700 -98,,False,5.878673548190900,[],5.878673548190900,5.878673548190880,5.145861852428310,[5.529999999999992],0,0.0,5.878673548190900,5.878673548190900,0.7109082333402820,0.6113264518091160,0.0,0,4.279285162663810,0.0,0.0,0.0,4.279285162663810,,False,5.878673548190900,[],5.878673548190900,5.878673548190910,5.145861852428310,[5.5441381475716724],0,0.0,5.529999999999990,5.529999999999990,0.6493202841365270,-0.348673548190904,0.348673548190904,0.0,0.0,0.0,22.12000000000000,0.0,22.12000000000000,,False,5.878673548190900,[],5.878673548190900,11.024535400619200,4.132358910020620,"[5.145861852428311, 5.878673548190895]",0,0.0,5.5441381475716700,5.5441381475716700,0.9601917632165090,-0.3345354006192250,0.3345354006192250,0.0,0.0,0.0,11.088276295143300,0.0,11.088276295143300 -99,,False,4.76040549180619,[],4.760405491806190,5.1090790399970800,5.529999999999990,[5.109079039997095],0,0.0,4.76040549180619,4.76040549180619,0.7136272688118220,1.3809209600029200,0.0,0,9.666446720020420,0.0,0.0,0.0,9.666446720020420,,False,4.760405491806190,[],4.76040549180619,5.094940892425420,5.5441381475716700,[5.094940892425415],0,0.0,5.109079039997100,4.760405491806190,0.6526185814128540,0.43505910757457800,0.0,0.0,1.7402364302983100,0,20.43631615998840,0.0,22.17655259028670,,False,4.76040549180619,[],4.760405491806190,10.639079039997100,5.145861852428310,"[5.878673548190895, 4.760405491806192]",0,0.0,5.094940892425420,4.76040549180619,0.9605661772274100,0.050920960002896400,0.0,0.0,0.10184192000579300,0,10.18988178485080,0.0,10.291723704856600 \ No newline at end of file +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +0,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,2.6018801180469207,0,0,18.213160826328444,0.0,0.0,0.0,18.213160826328444,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,1.6418801180469207,0,0,6.567520472187683,0,15.552479527812318,0.0,22.12,,False,3.8881198819530796,[],3.888119881953079,3.888119881953079,0,"[0, 3.888119881953079]",0,0.0,3.8881198819530796,3.8881198819530796,1.0,6.80188011804692,0,0,13.60376023609384,0,7.776239763906159,0.0,21.38 +1,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,1.1710978153106169,0,0,8.197684707174318,0.0,0.0,0.0,8.197684707174318,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,0.2110978153106169,0,0,0.8443912612424676,0,21.275608738757533,0.0,22.12,,False,5.318902184689383,[],5.318902184689383,9.207022066642462,0,"[3.888119881953079, 5.318902184689383]",0,0.0,5.318902184689383,5.318902184689383,1.0,1.482977933357537,0,0,2.965955866715074,0,10.637804369378767,0.0,13.60376023609384 +2,,False,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[5.279041292200137],0,0.0,5.279041292200137,5.279041292200137,1.0,1.210958707799863,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[0],0,0.0,5.279041292200137,5.279041292200137,1.0,0.25095870779986296,0,0,1.0038348311994518,0,21.11616516880055,0.0,22.12,,False,5.279041292200137,[],5.279041292200137,10.59794347688952,3.888119881953079,"[5.318902184689383, 5.279041292200137]",0,0.0,0,0.0,0.6355779233163648,0.09205652311047885,0,5.279041292200137,10.742195630621232,0,0.0,0.0,10.742195630621232 +3,,False,6.010515284806527,[],6.010515284806527,6.010515284806527,5.279041292200137,[0.25095870779986296],0,0.0,6.010515284806527,6.010515284806527,1.0,0.4794847151934736,0,0,3.356393006354315,0.0,0.0,0.0,3.356393006354315,,False,6.010515284806527,[],6.010515284806527,11.289556577006664,0,[10.69],0,0.0,0.25095870779986296,0.25095870779986296,0.7189991228711108,-5.759556577006664,5.759556577006664,0,0.0,0.0,1.0038348311994518,0.0,1.0038348311994518,,False,6.010515284806527,[],6.010515284806527,11.289556577006666,5.318902184689383,"[5.279041292200137, 6.010515284806527]",0,0.0,10.69,10.69,0.9707484557578864,-0.5995565770066644,0.5995565770066644,0.0,0.0,0.0,21.38,0.0,21.38 +4,,False,4.419121865976485,[],4.419121865976485,10.178678442983148,0.25095870779986296,[10.178678442983148],0,0.0,0.7304434229933365,0.7304434229933365,0.8519536530165743,-3.6886784429831483,3.6886784429831483,0,0.0,136.92374380353445,0.0,0.0,136.92374380353445,,True,4.419121865976485,[],4.419121865976485,5.01867844298315,10.69,[0],0,0.0,10.178678442983148,4.419121865976485,0.7688382642590527,0.511321557016851,0.0,0,2.045286228067404,0,40.714713771932594,0.0,42.76,,False,4.419121865976485,[],4.419121865976483,10.429637150783012,5.279041292200137,"[6.010515284806527, 4.419121865976483]",0,0.0,0,0.0,0.7985736567573407,0.26036284921698805,0.0,5.018678442983149,10.558082584400275,0,0.0,0.0,10.558082584400275 +5,,False,4.474830192821853,[],4.474830192821853,4.474830192821852,10.178678442983148,[0.511321557016851],0,0.0,8.163508635805002,4.4748301928218535,0.8744943233476224,2.0151698071781476,0.0,0,14.106188650247034,0.0,0.0,0.0,14.106188650247034,,True,4.474830192821853,[],4.474830192821852,9.493508635805002,0,[0],0,0.0,0.511321557016851,0.511321557016851,0.6691769430348536,-3.9635086358050016,3.9635086358050016,0,0.0,0.0,2.045286228067404,0.0,2.045286228067404,,False,4.474830192821852,[],4.47483019282185,8.893952058798336,6.010515284806527,"[4.419121865976483, 4.47483019282185]",0,0.0,0,0.0,0.6769875055364537,1.796047941201663,0.0,9.493508635805,22.579113154013328,0,0.0,0.0,22.579113154013328 +6,,False,2.3874509873063987,[],2.3874509873063996,6.3509596231114,0.511321557016851,[0.0],0,0.0,2.3874509873063987,2.3874509873063987,0.8839234511809011,0.13904037688859994,0.0,0,0.9732826382201996,0.0,0.0,0.0,0.9732826382201996,,True,2.3874509873063996,[],2.3874509873063996,11.880959623111401,0,[0],0,0.0,0.0,0.0,0.6189022852882176,-6.350959623111401,6.350959623111401,0.0,0.0,0.0,0.0,0.0,0.0,,False,2.3874509873063996,[],2.3874509873064014,6.862281180128254,4.419121865976483,"[4.47483019282185, 2.3874509873064014]",0,0.0,0,0.0,0.6261260473020487,3.8277188198717464,0.0,11.8809596231114,31.417356885966292,0,0.0,0.0,31.417356885966292 +7,,False,5.950369682396903,[],5.950369682396903,12.301329305508304,0.0,[0.0],0,0.0,0.13904037688859994,0.13904037688859994,0.7481997648191993,-5.811329305508303,5.811329305508303,0,0.0,215.7165438204682,0.0,0.0,215.7165438204682,,True,5.950369682396903,[],5.950369682396903,17.831329305508305,0,[0],0,0.0,0.0,0.0,0.5212914101556361,-12.301329305508304,12.301329305508304,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.950369682396903,[],5.950369682396901,8.337820669703305,4.47483019282185,"[2.3874509873064014, 5.950369682396901]",0,0.0,0,0.0,0.5273758683590261,2.3521793302966936,0.0,17.8313293055083,40.36701727160999,0,0.0,0.0,40.36701727160999 +8,,False,4.571953935823766,[],4.571953935823765,16.873283241332068,0.0,[0.0],0,0.0,0.0,0.0,0.6673319121017706,-10.38328324133207,10.38328324133207,0,0.0,385.4274739182464,0.0,0.0,385.4274739182464,,False,4.571953935823765,[],4.571953935823764,22.40328324133207,0,[22.403283241332066],0,0.0,0.0,0.0,0.46494854697722604,-16.873283241332068,16.873283241332068,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.571953935823764,[],4.571953935823766,10.52232361822067,2.3874509873064014,"[5.950369682396901, 4.571953935823766]",0,0.0,22.403283241332066,22.403283241332066,0.9999999999999998,0.16767638177933097,0.0,0.0,0.33535276355866195,0,44.80656648266413,0.0,45.14191924622279 +9,,False,4.257593162880828,[],4.25759316288083,21.1308764042129,0.0,[21.1308764042129],0,0.0,0.0,0.0,0.6063062240949275,-14.640876404212896,14.640876404212896,0,0.0,543.4693321243827,0.0,0.0,543.4693321243827,,False,4.25759316288083,[],4.257593162880829,4.257593162880834,22.403283241332066,[4.257593162880829],0,0.0,21.1308764042129,4.257593162880831,0.5138775468461793,1.272406837119168,0.0,0.0,5.089627348476672,0,84.5235056168516,0.0,89.61313296532826,,False,4.257593162880829,[],4.257593162880827,8.829547098704595,5.950369682396901,"[4.571953935823766, 4.257593162880827]",0,0.0,4.257593162880829,4.257593162880829,0.9999999999999999,1.8604529012954032,0.0,0.0,3.7209058025908064,0,8.515186325761658,0.0,12.236092128352464 +10,,False,4.3705250390757495,[],4.370525039075748,4.370525039075748,21.1308764042129,[4.370525039075748],0,0.0,19.011401443288648,4.370525039075751,0.6400918468716834,2.1194749609242525,0.0,0,14.836324726469767,0.0,0.0,0.0,14.836324726469767,,False,4.370525039075748,[],4.370525039075746,4.370525039075751,4.257593162880829,[4.370525039075746],0,0.0,4.370525039075748,4.370525039075748,0.5555951223598097,1.159474960924249,0.0,0.0,4.637899843696996,0,17.48210015630299,0.0,22.119999999999987,,False,4.370525039075746,[],4.370525039075748,8.628118201956577,4.571953935823766,"[4.257593162880827, 4.370525039075748]",0,0.0,4.370525039075746,4.370525039075746,0.9999999999999999,2.061881798043423,0.0,0.0,4.123763596086846,0,8.741050078151492,0.0,12.864813674238338 +11,,False,5.597720466912608,[],5.597720466912608,5.597720466912609,4.370525039075748,[5.529999999999995],0,0.0,5.597720466912608,5.597720466912608,0.6757331465117299,0.8922795330873923,0.0,0,6.245956731611746,0.0,0.0,0.0,6.245956731611746,,False,5.597720466912608,[],5.597720466912608,5.597720466912614,4.370525039075746,[5.597720466912608],0,0.0,5.529999999999995,5.529999999999995,0.5984059996282294,-0.06772046691261302,0.06772046691261302,0.0,0.0,0.0,22.11999999999998,0.0,22.11999999999998,,False,5.597720466912608,[],5.597720466912608,9.968245505988357,4.257593162880827,"[4.370525039075748, 5.597720466912608]",0,0.0,5.597720466912608,5.597720466912608,0.9999999999999999,0.721754494011642,0.0,0.0,1.443508988023284,0,11.195440933825216,0.0,12.6389499218485 +12,,False,5.122219165222679,[],5.1222191652226785,5.1899396321352915,5.529999999999995,[5.1899396321352915],0,0.0,5.122219165222679,5.122219165222679,0.7026757254696891,1.3000603678647078,0.0,0,9.100422575052955,0.0,0.0,0.0,9.100422575052955,,False,5.1222191652226785,[],5.122219165222678,5.122219165222684,5.597720466912608,[5.09227953308739],0,0.0,5.1899396321352915,5.1222191652226785,0.6317735114403812,0.4077808347773164,0.0,0.0,1.6311233391092657,0,20.759758528541166,0.0,22.39088186765043,,False,5.122219165222678,[],5.122219165222679,10.719939632135288,4.370525039075748,"[5.597720466912608, 5.122219165222679]",0,0.0,5.09227953308739,5.09227953308739,0.9995143483036801,-0.02993963213528783,0.02993963213528783,0.0,0.0,0.0,10.18455906617478,0.0,10.18455906617478 +13,,False,4.484564337907547,[],4.484564337907548,4.484564337907547,5.1899396321352915,[4.484564337907548],0,0.0,4.484564337907547,4.484564337907547,0.7228376915153724,2.0054356620924523,0.0,0,14.038049634647166,0.0,0.0,0.0,14.038049634647166,,False,4.484564337907548,[],4.484564337907548,4.514503970042841,5.09227953308739,[4.514503970042836],0,0.0,4.484564337907548,4.484564337907548,0.6567434536732794,1.0154960299571583,0.0,0.0,4.061984119828633,0,17.93825735163019,0.0,22.000241471458825,,False,4.484564337907548,[],4.484564337907546,9.606783503130227,5.597720466912608,"[5.122219165222679, 4.484564337907546]",0,0.0,4.514503970042836,4.484564337907548,0.9995472810099878,1.0832164968697722,0.0,0.0,2.1664329937395443,0,9.029007940085672,0.0,11.195440933825216 +14,,False,4.399746149894089,[],4.3997461498940895,4.399746149894089,4.484564337907548,[4.3997461498940895],0,0.0,4.399746149894089,4.399746149894089,0.7401267539724435,2.0902538501059116,0.0,0,14.631776950741381,0.0,0.0,0.0,14.631776950741381,,True,4.3997461498940895,[],4.39974614989409,4.399746149894095,4.514503970042836,[0],0,0.0,4.3997461498940895,4.3997461498940895,0.6781553978178071,1.1302538501059045,0.0,0.0,4.521015400423618,0,17.598984599576358,0.0,22.119999999999976,,False,4.39974614989409,[],4.39974614989409,8.884310487801638,5.122219165222679,"[4.484564337907546, 4.39974614989409]",0,0.0,0,0.0,0.9371966841172804,1.8056895121983612,0.0,4.39974614989409,12.410871324184903,0,0.0,0.0,12.410871324184903 +15,,False,5.947439821046639,[],5.947439821046639,5.947439821046639,4.3997461498940895,[1.1302538501059045],0,0.0,5.947439821046639,5.947439821046639,0.7603356739401277,0.5425601789533623,0.0,0,3.797921252673536,0.0,0.0,0.0,3.797921252673536,,True,5.947439821046639,[],5.94743982104664,10.347185970940735,0,[0],0,0.0,1.1302538501059045,1.1302538501059045,0.6401973661577647,-4.817185970940734,4.817185970940734,0.0,0.0,0.0,4.521015400423618,0.0,4.521015400423618,,False,5.94743982104664,[],5.94743982104664,10.347185970940732,4.484564337907546,"[4.39974614989409, 5.94743982104664]",0,0.0,0,0.0,0.8643160275940738,0.3428140290592676,0.0,10.34718597094073,21.379999999999995,0,0.0,0.0,21.379999999999995 +16,,False,3.978447805324402,[],3.978447805324401,8.795633776265134,1.1302538501059045,[0.0],0,0.0,1.6728140290592668,1.6728140290592668,0.7435302309502702,-2.305633776265135,2.305633776265135,0,0.0,85.58512577496181,0.0,0.0,85.58512577496181,,False,3.978447805324401,[],3.9784478053244,14.325633776265136,0,[14.32563377626513],0,0.0,0.0,0.0,0.6085414209532098,-8.795633776265134,8.795633776265134,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.9784478053244,[],3.9784478053244,9.925887626371042,4.39974614989409,"[5.94743982104664, 3.9784478053244]",0,0.0,14.32563377626513,14.32563377626513,0.9996278875527004,0.7641123736289579,0.0,0.0,1.5282247472579158,0,28.65126755253026,0.0,30.179492299788176 +17,,False,4.838244613602479,[],4.8382446136024795,13.633878389867615,0.0,[13.633878389867615],0,0.0,0.0,0.0,0.7013553675628278,-7.143878389867614,7.143878389867614,0,0.0,265.1807658318858,0.0,0.0,265.1807658318858,,False,4.8382446136024795,[],4.838244613602479,4.838244613602482,14.32563377626513,[4.838244613602479],0,0.0,13.633878389867615,4.83824461360248,0.6307459143361357,0.6917553863975163,0.0,0.0,2.7670215455900653,0,54.53551355947046,0.0,57.30253510506053,,False,4.838244613602479,[],4.838244613602479,8.81669241892688,5.94743982104664,"[3.9784478053244, 4.838244613602479]",0,0.0,4.838244613602479,4.838244613602479,0.9996489946859094,1.873307581073119,0.0,0.0,3.746615162146238,0,9.676489227204957,0.0,13.423104389351195 +18,,False,4.770549546168043,[],4.770549546168042,4.770549546168041,13.633878389867615,[4.770549546168042],0,0.0,11.914427936035658,4.770549546168044,0.7171735184251261,1.719450453831958,0.0,0,12.036153176823706,0.0,0.0,0.0,12.036153176823706,,True,4.770549546168042,[],4.770549546168044,4.770549546168047,4.838244613602479,[0],0,0.0,4.770549546168042,4.770549546168042,0.6503039984238509,0.7594504538319526,0.0,0.0,3.0378018153278106,0,19.08219818467217,0.0,22.11999999999998,,False,4.770549546168044,[],4.770549546168044,9.608794159770525,3.9784478053244,"[4.838244613602479, 4.770549546168044]",0,0.0,0,0.0,0.9467011198882163,1.081205840229475,0.0,4.770549546168044,11.703510772795038,0,0.0,0.0,11.703510772795038 +19,,False,5.389348913256123,[],5.389348913256124,5.389348913256124,4.770549546168042,[0.7594504538319526],0,0.0,5.389348913256123,5.389348913256123,0.7331414968068005,1.100651086743877,0.0,0,7.704557607207139,0.0,0.0,0.0,7.704557607207139,,False,5.389348913256124,[],5.389348913256125,10.159898459424172,0,[10.15989845942417],0,0.0,0.7594504538319526,0.7594504538319526,0.621544733030712,-4.629898459424171,4.629898459424171,0.0,0.0,0.0,3.0378018153278106,0.0,3.0378018153278106,,False,5.389348913256125,[],5.389348913256123,10.15989845942417,4.838244613602479,"[4.770549546168044, 5.389348913256123]",0,0.0,10.15989845942417,10.15989845942417,0.9996863538046318,0.5301015405758287,0.0,0.0,1.0602030811516574,0,20.31979691884834,0.0,21.379999999999995 +20,,False,7.77831304155244,[],7.7783130415524395,12.408211500976611,0.7594504538319526,[10.15989845942417],0,0.0,1.8601015405758297,1.8601015405758297,0.695920574844463,-5.918211500976611,5.918211500976611,0,0.0,219.68401091625176,0.0,0.0,219.68401091625176,,False,7.7783130415524395,[],7.7783130415524395,7.77831304155244,10.15989845942417,[5.300651086743873],0,0.0,10.15989845942417,5.5299999999999985,0.6282811148793342,-2.248313041552441,2.248313041552441,0.0,0.0,0.0,40.63959383769668,0.0,40.63959383769668,,False,7.7783130415524395,[],7.778313041552441,13.167661954808565,4.770549546168044,"[5.389348913256123, 7.778313041552441]",0,0.0,5.300651086743873,5.300651086743873,0.9757097770620159,-2.4776619548085668,2.4776619548085668,0.0,0.0,0.0,10.601302173487746,0.0,10.601302173487746 +21,,False,6.193639724282317,[],6.193639724282317,8.441952765834756,10.15989845942417,[5.300651086743873],0,0.0,10.15989845942417,4.241686958447559,0.6952937339357339,-1.9519527658347577,1.9519527658347577,0,0.0,72.45648666778621,0.0,0.0,72.45648666778621,,False,6.193639724282317,[],6.193639724282318,8.671301679090885,5.300651086743873,[5.389348913256123],0,0.0,5.300651086743873,3.0523380451914317,0.6206139383991144,-3.141301679090885,3.141301679090885,0.0,0.0,0.0,21.20260434697549,0.0,21.20260434697549,,False,6.193639724282318,[],6.19363972428232,13.971952765834763,5.389348913256123,"[7.778313041552441, 6.19363972428232]",0,0.0,5.389348913256123,2.9116869584475564,0.9470928867586568,-3.2819527658347614,3.2819527658347614,0.0,0.0,0.0,10.778697826512246,0.0,10.778697826512246 +22,,False,5.2186383160538625,[],5.218638316053864,8.359939995144748,5.300651086743873,[5.389348913256123],0,0.0,5.300651086743873,3.348698320909115,0.6928533082901339,-1.8699399951447475,1.8699399951447475,0,0.0,69.41217261977302,0.0,0.0,69.41217261977302,,False,5.218638316053864,[],5.218638316053865,8.500591081888627,5.389348913256123,[7.778313041552441],0,0.0,5.389348913256123,2.248047234165238,0.6119725444552928,-2.9705910818886263,2.9705910818886263,0.0,0.0,0.0,21.557395653024493,0.0,21.557395653024493,,False,5.218638316053865,[],5.218638316053863,11.412278040336187,7.778313041552441,"[6.19363972428232, 5.218638316053863]",0,0.0,7.778313041552441,4.49636027571768,0.9432011686820723,-0.7222780403361853,0.7222780403361853,0.0,0.0,0.0,15.556626083104883,0.0,15.556626083104883 +23,,False,5.881761038948611,[],5.881761038948611,8.852352120837235,5.389348913256123,[7.778313041552441],0,0.0,5.389348913256123,3.5194089181113757,0.6882420660497514,-2.362352120837235,2.362352120837235,0,0.0,87.69051072547815,0.0,0.0,87.69051072547815,,False,5.881761038948611,[],5.88176103894861,6.604039079284795,7.778313041552441,[6.19363972428232],0,0.0,7.778313041552441,4.807721959663815,0.6219970624127582,-1.0740390792847956,1.0740390792847956,0.0,0.0,0.0,31.113252166209765,0.0,31.113252166209765,,False,5.88176103894861,[],5.881761038948608,11.100399355002473,6.19363972428232,"[5.218638316053863, 5.881761038948608]",0,0.0,6.19363972428232,5.471361683946134,0.9425679421046247,-0.4103993550024754,0.4103993550024754,0.0,0.0,0.0,12.38727944856464,0.0,12.38727944856464 +24,,False,3.9909146571348924,[],3.9909146571348924,5.064953736419686,7.778313041552441,[5.064953736419688],0,0.0,6.353266777972127,3.9909146571348924,0.6982340319731021,1.425046263580314,0.0,0,9.9753238450622,0.0,0.0,0.0,9.9753238450622,,True,3.9909146571348924,[],3.9909146571348932,4.401314012137369,6.19363972428232,[0],0,0.0,5.064953736419688,3.9909146571348924,0.6341122070810602,1.1286859878626316,0.0,0.0,4.5147439514505265,0,20.25981494567875,0.0,24.77455889712928,,False,3.9909146571348932,[],3.990914657134895,9.872675696083505,5.218638316053863,"[5.881761038948608, 3.990914657134895]",0,0.0,0,0.0,0.9123582642349503,0.8173243039164948,0.0,4.401314012137369,10.437276632107727,0,0.0,0.0,10.437276632107727 +25,,False,3.4167057864631127,[],3.4167057864631127,3.416705786463111,5.064953736419688,[1.1286859878626316],0,0.0,3.4167057864631127,3.4167057864631127,0.7062930620663396,3.0732942135368893,0.0,0,21.513059494758224,0.0,0.0,0.0,21.513059494758224,,True,3.4167057864631127,[],3.4167057864631127,7.818019798600481,0,[0],0,0.0,1.1286859878626316,1.1286859878626316,0.6259996870083333,-2.288019798600481,2.288019798600481,0.0,0.0,0.0,4.5147439514505265,0.0,4.5147439514505265,,False,3.4167057864631127,[],3.4167057864631127,7.407620443598009,5.881761038948608,"[3.990914657134895, 3.4167057864631127]",0,0.0,0,0.0,0.8879926183824397,3.28237955640199,0.0,7.818019798600481,22.200798710004943,0,0.0,0.0,22.200798710004943 +26,,False,3.6533219026386536,[],3.6533219026386536,5.941341701239133,1.1286859878626316,[0.0],0,0.0,3.6533219026386536,3.6533219026386536,0.7144472227101941,0.5486582987608672,0.0,0,3.8406080913260707,0.0,0.0,0.0,3.8406080913260707,,False,3.6533219026386536,[],3.6533219026386536,11.471341701239135,0,[11.471341701239135],0,0.0,0.0,0.0,0.608620111140018,-5.941341701239135,5.941341701239135,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.6533219026386536,[],3.6533219026386554,7.07002768910177,3.990914657134895,"[3.4167057864631127, 3.6533219026386554]",0,0.0,11.471341701239135,11.471341701239135,0.9505142301643068,3.6199723108982313,0.0,0.0,7.239944621796463,0,22.94268340247827,0.0,30.182628024274734 +27,,False,4.119408733952893,[],4.119408733952893,10.060750435192027,0.0,[10.060750435192027],0,0.0,0.5486582987608672,0.5486582987608672,0.6968033329165892,-3.570750435192026,3.570750435192026,0,0.0,132.54625615432798,0.0,0.0,132.54625615432798,,False,4.119408733952893,[],4.119408733952893,4.119408733952893,11.471341701239135,[4.119408733952893],0,0.0,10.060750435192027,4.119408733952892,0.6205003025121855,1.4105912660471072,8.881784197001252e-16,0.0,5.642365064188429,0,40.24300174076811,0.0,45.88536680495653,,False,4.119408733952893,[],4.119408733952891,7.772730636591549,3.4167057864631127,"[3.6533219026386554, 4.119408733952891]",0,0.0,4.119408733952893,4.119408733952893,0.9520163523544876,2.917269363408451,0.0,0.0,5.834538726816902,0,8.238817467905786,0.0,14.073356194722688 +28,,False,5.582122794713039,[],5.5821227947130385,5.5821227947130385,10.060750435192027,[5.53],0,0.0,9.152873229905065,5.582122794713039,0.7087819775155557,0.9078772052869617,0.0,0,6.355140437008732,0.0,0.0,0.0,6.355140437008732,,False,5.5821227947130385,[],5.5821227947130385,5.5821227947130385,4.119408733952893,[5.5821227947130385],0,0.0,5.53,5.529999999999999,0.6351246123520422,-0.05212279471303827,0.052122794713039156,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.5821227947130385,[],5.582122794713037,9.701531528665932,3.6533219026386554,"[4.119408733952891, 5.582122794713037]",0,0.0,5.5821227947130385,5.5821227947130385,0.9539120824996659,0.9884684713340679,0.0,0.0,1.9769369426681358,0,11.164245589426077,0.0,13.141182532094213 +29,,False,5.887748459593357,[],5.887748459593357,5.939871254306396,5.53,[5.5821227947130385],0,0.0,5.887748459593357,5.887748459593357,0.720431840712657,0.5501287456936046,0.0,0,3.850901219855232,0.0,0.0,0.0,3.850901219855232,,False,5.887748459593357,[],5.887748459593357,5.887748459593357,5.5821227947130385,[5.107877205286959],0,0.0,5.5821227947130385,5.529999999999999,0.6472903605250234,-0.3577484595933571,0.357748459593358,0.0,0.0,0.0,22.328491178852154,0.0,22.328491178852154,,False,5.887748459593357,[],5.887748459593357,11.469871254306398,4.119408733952891,"[5.582122794713037, 5.887748459593357]",0,0.0,5.107877205286959,5.107877205286959,0.9504569956611024,-0.7798712543063981,0.7798712543063981,0.0,0.0,0.0,10.215754410573918,0.0,10.215754410573918 +30,,False,4.792834109895426,[],4.792834109895426,5.150582569488783,5.5821227947130385,[5.107877205286959],0,0.0,4.792834109895426,4.792834109895426,0.729248746553818,1.339417430511217,0.0,0,9.375922013578519,0.0,0.0,0.0,9.375922013578519,,False,4.792834109895426,[],4.792834109895426,5.572705364201825,5.107877205286959,[5.572705364201824],0,0.0,5.107877205286959,4.750128745693601,0.6581329644434589,-0.042705364201824025,0.042705364201824914,0.0,0.0,0.0,20.431508821147837,0.0,20.431508821147837,,False,4.792834109895426,[],4.792834109895426,10.680582569488788,5.582122794713037,"[5.887748459593357, 4.792834109895426]",0,0.0,5.572705364201824,4.792834109895426,0.9520194625938811,0.009417430511212466,0.0,0.0,0.01883486102242493,0,11.145410728403649,0.0,11.164245589426073 +31,,False,4.37652260501504,[],4.37652260501504,4.419227969216864,5.107877205286959,[4.419227969216865],0,0.0,4.37652260501504,4.37652260501504,0.736827635728371,2.070772030783136,0.0,0,14.495404215481951,0.0,0.0,0.0,14.495404215481951,,False,4.37652260501504,[],4.376522605015039,4.376522605015039,5.572705364201824,[4.376522605015039],0,0.0,4.419227969216865,4.37652260501504,0.6677025318672014,1.15347739498496,0.0,0.0,4.61390957993984,0,17.67691187686746,0.0,22.2908214568073,,False,4.376522605015039,[],4.376522605015038,9.169356714910467,5.887748459593357,"[4.792834109895426, 4.376522605015038]",0,0.0,4.376522605015039,4.376522605015039,0.9533625373568158,1.5206432850895304,0.0,0.0,3.041286570179061,0,8.753045210030079,0.0,11.79433178020914 +32,,False,3.491846710452517,[],3.491846710452517,3.491846710452516,4.419227969216865,[3.491846710452517],0,0.0,3.491846710452517,3.491846710452517,0.7425768523333158,2.998153289547484,0.0,0,20.987073026832388,0.0,0.0,0.0,20.987073026832388,,False,3.491846710452517,[],3.491846710452518,3.491846710452518,4.376522605015039,[3.491846710452518],0,0.0,3.491846710452517,3.491846710452517,0.6749618431815094,2.0381532895474823,0.0,0.0,8.15261315818993,0,13.967386841810068,0.0,22.119999999999997,,False,3.491846710452518,[],3.4918467104525197,7.868369315467562,4.792834109895426,"[4.376522605015038, 3.4918467104525197]",0,0.0,3.491846710452518,3.491846710452518,0.9543813710606615,2.8216306845324386,0.0,0.0,5.643261369064877,0,6.983693420905036,0.0,12.626954789969913 +33,,False,6.09964697578482,[],6.09964697578482,6.099646975784818,3.491846710452517,[5.53],0,0.0,6.09964697578482,6.09964697578482,0.7520392429670154,0.39035302421518114,0.0,0,2.732471169506268,0.0,0.0,0.0,2.732471169506268,,True,6.09964697578482,[],6.09964697578482,6.099646975784821,3.491846710452518,[0],0,0.0,5.53,5.53,0.6834767879474384,-0.5696469757848197,0.5696469757848197,0.0,0.0,0.0,22.12,0.0,22.12,,False,6.09964697578482,[],6.099646975784818,9.591493686237342,4.376522605015038,"[3.4918467104525197, 6.099646975784818]",0,0.0,0,0.0,0.9193001072801608,1.0985063137626563,0.0,6.09964697578482,14.396306579094952,0,0.0,0.0,14.396306579094952 +34,,False,6.179716344700701,[],6.179716344700702,6.749363320485519,5.53,[0.0],0,0.0,5.920353024215181,5.920353024215181,0.7594350422060426,-0.25936332048551947,0.25936332048551947,0,0.0,9.627566456422482,0.0,0.0,9.627566456422482,,True,6.179716344700702,[],6.179716344700701,12.279363320485523,0,[0],0,0.0,0.0,0.0,0.6589375335419657,-6.7493633204855215,6.7493633204855215,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.179716344700701,[],6.179716344700703,12.279363320485526,3.4918467104525197,"[6.099646975784818, 6.179716344700703]",0,0.0,0,0.0,0.8862939546128941,-1.5893633204855249,1.5893633204855249,10.689999999999996,21.379999999999992,0.0,0.0,0.0,21.379999999999992 +35,,False,4.101792060544322,[],4.101792060544323,10.851155381029841,0.0,[0.0],0,0.0,0.0,0.0,0.7417581855543648,-4.361155381029842,4.361155381029842,0,0.0,161.88608774382772,0.0,0.0,161.88608774382772,,False,4.101792060544323,[],4.101792060544322,16.381155381029846,0,[16.381155381029842],0,0.0,0.0,0.0,0.6435998895362375,-10.851155381029844,10.851155381029844,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.101792060544322,[],4.10179206054432,10.281508405245027,6.099646975784818,"[6.179716344700703, 4.10179206054432]",0,0.0,16.381155381029842,14.791792060544317,0.949602857575756,0.4084915947549712,8.881784197001252e-16,0.0,0.8169831895099424,0,32.762310762059684,0.0,33.579293951569625 +36,,False,3.962170123484518,[],3.962170123484519,14.81332550451436,0.0,[14.813325504514363],0,0.0,0.0,0.0,0.7254472186648718,-8.32332550451436,8.32332550451436,0,0.0,308.961842727573,0.0,0.0,308.961842727573,,False,3.962170123484519,[],3.962170123484518,3.9621701234845226,16.381155381029842,[3.962170123484519],0,0.0,14.813325504514363,3.962170123484519,0.6514369859301807,1.5678298765154786,0.0,0.0,6.271319506061914,0,59.253302018057454,0.0,65.52462152411937,,False,3.962170123484518,[],3.96217012348452,8.063962184028844,6.179716344700703,"[4.10179206054432, 3.96217012348452]",0,0.0,3.962170123484519,3.962170123484518,0.9507110706530307,2.6260378159711557,0.0,0.0,5.252075631942311,0,7.924340246969038,0.0,13.17641587891135 +37,,False,4.924196254971815,[],4.924196254971815,4.924196254971811,14.813325504514363,[4.924196254971815],0,0.0,13.247521759486174,4.924196254971815,0.7327508022412237,1.5658037450281892,0.0,0,10.960626215197324,0.0,0.0,0.0,10.960626215197324,,False,4.924196254971815,[],4.924196254971814,4.924196254971818,3.962170123484519,[4.924196254971814],0,0.0,4.924196254971815,4.924196254971815,0.6607093709794387,0.605803745028183,0.0,0.0,2.423214980112732,0,19.69678501988726,0.0,22.11999999999999,,False,4.924196254971814,[],4.924196254971814,8.886366378456337,4.10179206054432,"[3.96217012348452, 4.924196254971814]",0,0.0,4.924196254971814,4.924196254971814,0.9520222422722869,1.8036336215436624,0.0,0.0,3.6072672430873247,0,9.848392509943627,0.0,13.455659753030952 +38,,False,6.495434252883474,[],6.495434252883474,6.49543425288347,4.924196254971815,[5.529999999999997],0,0.0,6.490000000000004,6.490000000000004,0.7417822964375154,-0.005434252883469881,0.005434252883469881,0,0.0,0.20171946703440197,0.0,0.0,0.20171946703440197,,False,6.495434252883474,[],6.495434252883473,6.495434252883478,4.924196254971814,[5.765803745028182],0,0.0,5.529999999999997,5.529999999999997,0.6671727504053446,-0.965434252883477,0.965434252883477,0.0,0.0,0.0,22.119999999999987,0.0,22.119999999999987,,False,6.495434252883473,[],6.495434252883473,11.419630507855292,3.96217012348452,"[4.924196254971814, 6.495434252883473]",0,0.0,5.765803745028182,5.765803745028182,0.9498406836279732,-0.7296305078552905,0.7296305078552905,0.0,0.0,0.0,11.531607490056365,0.0,11.531607490056365 +39,,False,5.33818125199332,[],5.33818125199332,6.303615504876793,5.529999999999997,[5.765803745028182],0,0.0,5.34361550487679,5.33818125199332,0.7487813904216578,0.18638449512320676,0.0,0,1.3046914658624473,0.0,0.0,0.0,1.3046914658624473,,False,5.33818125199332,[],5.338181251993319,6.067811759848614,5.765803745028182,[4.924196254971814],0,0.0,5.765803745028182,4.800369492144705,0.67346334772752,-0.5378117598486147,0.5378117598486147,0.0,0.0,0.0,23.06321498011273,0.0,23.06321498011273,,False,5.338181251993319,[],5.338181251993317,11.833615504876793,4.924196254971814,"[6.495434252883473, 5.338181251993317]",0,0.0,4.924196254971814,4.194565747116523,0.9453933962290746,-1.143615504876796,1.143615504876796,0.0,0.0,0.0,9.848392509943627,0.0,9.848392509943627 +40,,False,4.6013616099847985,[],4.601361609984799,5.139173369833409,5.765803745028182,[4.924196254971814],0,0.0,4.6013616099847985,4.6013616099847985,0.7545168799912201,1.3508266301665905,0.0,0,9.455786411166134,0.0,0.0,0.0,9.455786411166134,,False,4.601361609984799,[],4.6013616099848,5.744977114861601,4.924196254971814,[5.744977114861596],0,0.0,4.924196254971814,4.386384495123199,0.6798517423728256,-0.21497711486160043,0.21497711486160043,0.0,0.0,0.0,19.696785019887255,0.0,19.696785019887255,,False,4.6013616099848,[],4.601361609984802,9.939542861978122,6.495434252883473,"[5.338181251993317, 4.601361609984802]",0,0.0,5.744977114861596,4.6013616099848,0.9466401016657581,0.7504571380218765,0.0,0.0,1.500914276043753,0,11.489954229723192,0.0,12.990868505766946 +41,,False,4.939135912525254,[],4.939135912525255,5.15411302738685,4.924196254971814,[5.154113027386855],0,0.0,4.939135912525254,4.939135912525254,0.7603889357003966,1.3358869726131504,0.0,0,9.351208808292053,0.0,0.0,0.0,9.351208808292053,,False,4.939135912525255,[],4.939135912525255,4.939135912525259,5.744977114861596,[4.939135912525255],0,0.0,5.154113027386855,4.939135912525255,0.6875098184308264,0.5908640874747411,0.0,0.0,2.3634563498989642,0,20.61645210954742,0.0,22.979908459446385,,False,4.939135912525255,[],4.9391359125252565,9.54049752251006,5.338181251993317,"[4.601361609984802, 4.9391359125252565]",0,0.0,4.939135912525255,4.939135912525255,0.947916492057258,1.1495024774899392,0.0,0.0,2.2990049549798783,0,9.87827182505051,0.0,12.177276780030388 +42,,False,3.581249541408597,[],3.581249541408597,3.5812495414085914,5.154113027386855,[3.581249541408597],0,0.0,3.581249541408597,3.581249541408597,0.7644739269498496,2.9087504585914083,0.0,0,20.361253210139857,0.0,0.0,0.0,20.361253210139857,,True,3.581249541408597,[],3.581249541408597,3.581249541408602,4.939135912525255,[0],0,0.0,3.581249541408597,3.581249541408597,0.6928372838422481,1.9487504585913986,0.0,0.0,7.7950018343655945,0,14.324998165634389,0.0,22.119999999999983,,False,3.581249541408597,[],3.5812495414085976,8.520385453933855,4.601361609984802,"[4.9391359125252565, 3.5812495414085976]",0,0.0,0,0.0,0.9317560088734581,2.169614546066144,0.0,3.581249541408597,11.501728174949482,0,0.0,0.0,11.501728174949482 +43,,False,6.0424916173394205,[],6.0424916173394205,6.042491617339413,3.581249541408597,[1.9487504585913986],0,0.0,6.0424916173394205,6.0424916173394205,0.7710594232164331,0.447508382660585,0.0,0,3.132558678624095,0.0,0.0,0.0,3.132558678624095,,True,6.0424916173394205,[],6.04249161733942,9.623741158748022,0,[0],0,0.0,1.9487504585913986,1.9487504585913986,0.6824825760138533,-4.093741158748022,4.093741158748022,0.0,0.0,0.0,7.7950018343655945,0.0,7.7950018343655945,,False,6.04249161733942,[],6.04249161733942,9.623741158748018,4.9391359125252565,"[3.5812495414085976, 6.04249161733942]",0,0.0,0,0.0,0.9057033700367536,1.0662588412519804,0.0,9.623741158748016,21.379999999999995,0,0.0,0.0,21.379999999999995 +44,,False,4.465583546326495,[],4.465583546326497,8.559324705074513,1.9487504585913986,[0.0],0,0.0,2.3962588412519836,2.3962588412519836,0.7663127913577256,-2.069324705074511,2.069324705074511,0,0.0,76.81333305236585,0.0,0.0,76.81333305236585,,False,4.465583546326497,[],4.4655835463264975,14.08932470507452,0,[14.089324705074514],0,0.0,0.0,0.0,0.668665361334626,-8.55932470507452,8.55932470507452,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.4655835463264975,[],4.465583546326499,10.50807516366592,3.5812495414085976,"[6.04249161733942, 4.465583546326499]",0,0.0,14.089324705074514,14.089324705074514,0.9512434026016265,0.18192483633408063,0.0,0.0,0.36384967266816126,0,28.178649410149028,0.0,28.542499082817187 +45,,False,3.5049461291856643,[],3.5049461291856625,12.064270834260174,0.0,[12.064270834260181],0,0.0,0.0,0.0,0.7543263206822017,-5.574270834260176,5.574270834260176,0,0.0,206.91693336773773,0.0,0.0,206.91693336773773,,False,3.5049461291856625,[],3.5049461291856634,3.5049461291856687,14.089324705074514,[3.5049461291856634],0,0.0,12.064270834260181,3.5049461291856616,0.6738480138688622,2.0250538708143315,8.881784197001252e-16,0.0,8.100215483257326,0,48.257083337040726,0.0,56.357298820298055,,False,3.5049461291856634,[],3.5049461291856616,7.970529675512162,6.04249161733942,"[4.465583546326499, 3.5049461291856616]",0,0.0,3.5049461291856634,3.5049461291856634,0.952006040954457,2.719470324487837,0.0,0.0,5.438940648975674,0,7.009892258371327,0.0,12.448832907347 +46,,False,4.7878385782883734,[],4.787838578288375,4.787838578288369,12.064270834260181,[4.787838578288376],0,0.0,10.362109412548548,4.787838578288373,0.7594658129390814,1.702161421711632,8.881784197001252e-16,0,11.915129951981424,0.0,0.0,0.0,11.915129951981424,,False,4.787838578288375,[],4.787838578288375,4.787838578288381,3.5049461291856634,[4.787838578288375],0,0.0,4.787838578288376,4.787838578288375,0.6806711119392036,0.7421614217116197,0.0,0.0,2.968645686846479,0,19.151354313153504,0.0,22.119999999999983,,False,4.787838578288375,[],4.787838578288377,8.29278470747404,4.465583546326499,"[3.5049461291856616, 4.787838578288377]",0,0.0,4.787838578288375,4.787838578288375,0.953010074359975,2.397215292525961,0.0,0.0,4.794430585051922,0,9.57567715657675,0.0,14.370107741628672 +47,,False,4.573131205960277,[],4.5731312059602764,4.573131205960269,4.787838578288376,[4.5731312059602764],0,0.0,4.573131205960278,4.573131205960277,0.7641779738724703,1.9168687940397309,0.0,0,13.418081558278116,0.0,0.0,0.0,13.418081558278116,,False,4.5731312059602764,[],4.573131205960276,4.573131205960281,4.787838578288375,[4.573131205960276],0,0.0,4.5731312059602764,4.5731312059602764,0.6869268925814851,0.9568687940397185,0.0,0.0,3.827475176158874,0,18.292524823841106,0.0,22.11999999999998,,False,4.573131205960276,[],4.573131205960274,9.360969784248653,3.5049461291856616,"[4.787838578288377, 4.573131205960274]",0,0.0,4.573131205960276,4.573131205960276,0.9539306257982938,1.329030215751347,0.0,0.0,2.658060431502694,0,9.146262411920551,0.0,11.804322843423245 +48,,False,5.501448331524805,[],5.501448331524805,5.501448331524799,4.5731312059602764,[5.501448331524805],0,0.0,5.501448331524805,5.501448331524805,0.7696076598836434,0.9885516684752025,0.0,0,6.919861679326417,0.0,0.0,0.0,6.919861679326417,,False,5.501448331524805,[],5.501448331524806,5.50144833152481,4.573131205960276,[5.501448331524806],0,0.0,5.501448331524805,5.501448331524805,0.6941352466938593,0.028551668475189196,0.0,0.0,0.11420667390075678,0,22.00579332609922,0.0,22.119999999999976,,False,5.501448331524806,[],5.501448331524806,10.074579537485082,4.787838578288377,"[4.573131205960274, 5.501448331524806]",0,0.0,5.501448331524806,5.501448331524806,0.9549913504504992,0.6154204625149182,0.0,0.0,1.2308409250298364,0,11.002896663049611,0.0,12.233737588079448 +49,,False,6.158186652932027,[],6.158186652932026,6.158186652932021,5.501448331524805,[5.529999999999995],0,0.0,6.158186652932027,6.158186652932027,0.775396384660691,0.33181334706798005,0.0,0,2.3226934294758603,0.0,0.0,0.0,2.3226934294758603,,False,6.158186652932026,[],6.158186652932027,6.158186652932031,5.501448331524806,[5.188551668475192],0,0.0,5.529999999999995,5.529999999999995,0.6992572417667651,-0.6281866529320315,0.6281866529320315,0.0,0.0,0.0,22.11999999999998,0.0,22.11999999999998,,False,6.158186652932027,[],6.1581866529320255,11.659634984456837,4.573131205960274,"[5.501448331524806, 6.1581866529320255]",0,0.0,5.188551668475192,5.188551668475192,0.9521660880423828,-0.9696349844568353,0.9696349844568353,0.0,0.0,0.0,10.377103336950384,0.0,10.377103336950384 +50,,False,6.371862133549777,[],6.371862133549776,7.000048786481801,5.529999999999995,[5.188551668475192],0,0.0,5.861813347067975,5.861813347067975,0.7790592417812431,-0.5100487864818017,0.5100487864818017,0,0.0,18.93301095420448,0.0,0.0,18.93301095420448,,False,6.371862133549776,[],6.371862133549777,7.341497118006615,5.188551668475192,[5.501448331524806],0,0.0,5.188551668475192,4.5603650155431605,0.6996739704118697,-1.8114971180066153,1.8114971180066153,0.0,0.0,0.0,20.754206673900768,0.0,20.754206673900768,,False,6.371862133549777,[],6.371862133549775,12.530048786481807,5.501448331524806,"[6.1581866529320255, 6.371862133549775]",0,0.0,5.501448331524806,4.5318133470679705,0.9460609276406804,-1.8400487864818063,1.8400487864818063,0.0,0.0,0.0,11.002896663049611,0.0,11.002896663049611 +51,,False,5.175553293954833,[],5.175553293954834,6.987050411961443,5.188551668475192,[5.501448331524806],0,0.0,5.188551668475192,4.67850288199339,0.7815780586219269,-0.4970504119614425,0.4970504119614425,0,0.0,18.450511292008745,0.0,0.0,18.450511292008745,,False,5.175553293954834,[],5.1755532939548345,7.0156020804366435,5.501448331524806,[6.1581866529320255],0,0.0,5.501448331524806,3.6899512135181904,0.699941855817155,-1.4856020804366432,1.4856020804366432,0.0,0.0,0.0,22.005793326099223,0.0,22.005793326099223,,False,5.1755532939548345,[],5.175553293954833,11.547415427504616,6.1581866529320255,"[6.371862133549775, 5.175553293954833]",0,0.0,6.1581866529320255,4.318137866450219,0.9438078067239726,-0.8574154275046153,0.8574154275046153,0.0,0.0,0.0,12.316373305864051,0.0,12.316373305864051 +52,,False,4.743369817307445,[],4.743369817307445,6.228971897744081,5.501448331524806,[6.1581866529320255],0,0.0,5.240420229268888,4.743369817307445,0.7855417330244323,0.261028102255918,0.0,0,1.827196715791426,0.0,0.0,0.0,1.827196715791426,,False,4.743369817307445,[],4.743369817307445,5.600785244812064,6.1581866529320255,[5.6007852448120605],0,0.0,6.1581866529320255,4.672584572495382,0.7051161662263669,-0.07078524481206294,0.07078524481206294,0.0,0.0,0.0,24.632746611728102,0.0,24.632746611728102,,False,4.743369817307445,[],4.7433698173074434,9.918923111262284,6.371862133549775,"[5.175553293954833, 4.7433698173074434]",0,0.0,5.6007852448120605,4.743369817307445,0.9448275191059045,0.7710768887377144,0.0,0.0,1.5421537774754288,0,11.201570489624121,0.0,12.74372426709955 +53,,False,4.632174275867238,[],4.632174275867239,4.702959520679295,6.1581866529320255,[4.702959520679302],0,0.0,4.632174275867238,4.632174275867238,0.7892760697146419,1.787040479320705,0.0,0,12.509283355244936,0.0,0.0,0.0,12.509283355244936,,False,4.632174275867239,[],4.632174275867238,4.632174275867241,5.6007852448120605,[4.632174275867238],0,0.0,4.702959520679302,4.632174275867239,0.7102509438935575,0.8978257241327583,0.0,0.0,3.591302896531033,0,18.81183808271721,0.0,22.403140979248242,,False,4.632174275867238,[],4.63217427586724,9.37554409317469,5.175553293954833,"[4.7433698173074434, 4.63217427586724]",0,0.0,4.632174275867238,4.632174275867238,0.9457882310551258,1.3144559068253088,0.0,0.0,2.6289118136506175,0,9.264348551734477,0.0,11.893260365385094 +54,,False,2.34482395243653,[],2.3448239524365295,2.3448239524365224,4.702959520679302,[2.3448239524365295],0,0.0,2.34482395243653,2.34482395243653,0.7911172596290382,4.145176047563478,0.0,0,29.016232332944345,0.0,0.0,0.0,29.016232332944345,,False,2.3448239524365295,[],2.3448239524365304,2.344823952436533,4.632174275867238,[2.3448239524365304],0,0.0,2.3448239524365295,2.3448239524365295,0.7127826119347079,3.185176047563467,0.0,0.0,12.740704190253869,0,9.379295809746118,0.0,22.119999999999987,,False,2.3448239524365304,[],2.3448239524365295,6.976998228303777,4.7433698173074434,"[4.63217427586724, 2.3448239524365295]",0,0.0,2.3448239524365304,2.3448239524365304,0.9462619037039215,3.713001771696222,0.0,0.0,7.426003543392444,0,4.689647904873061,0.0,12.115651448265504 +55,,False,5.345517943888766,[],5.345517943888766,5.345517943888759,2.3448239524365295,[5.345517943888766],0,0.0,5.345517943888766,5.345517943888766,0.795196705894779,1.144482056111241,0.0,0,8.011374392778688,0.0,0.0,0.0,8.011374392778688,,False,5.345517943888766,[],5.345517943888766,5.345517943888769,2.3448239524365304,[5.345517943888766],0,0.0,5.345517943888766,5.345517943888766,0.7183919212491966,0.18448205611123125,0.0,0.0,0.737928224444925,0,21.382071775555065,0.0,22.11999999999999,,False,5.345517943888766,[],5.345517943888768,7.690341896325305,4.63217427586724,"[2.3448239524365295, 5.345517943888768]",0,0.0,5.345517943888766,5.345517943888766,0.9473114000666834,2.9996581036746965,0.0,0.0,5.999316207349393,0,10.691035887777533,0.0,16.690352095126926 +56,,False,5.45293632653351,[],5.45293632653351,5.452936326533503,5.345517943888766,[5.45293632653351],0,0.0,5.45293632653351,5.45293632653351,0.7991971586795049,1.0370636734664975,0.0,0,7.259445714265483,0.0,0.0,0.0,7.259445714265483,,False,5.45293632653351,[],5.45293632653351,5.452936326533513,5.345517943888766,[5.344482056111226],0,0.0,5.45293632653351,5.45293632653351,0.7238926131582885,0.07706367346648779,0.0,0.0,0.30825469386595117,0,21.81174530613404,0.0,22.11999999999999,,False,5.45293632653351,[],5.452936326533508,10.798454270422283,2.3448239524365295,"[5.345517943888768, 5.452936326533508]",0,0.0,5.344482056111226,5.344482056111226,0.947952076526575,-0.10845427042228373,0.10845427042228373,0.0,0.0,0.0,10.688964112222452,0.0,10.688964112222452 +57,,False,4.833939091648935,[],4.833939091648935,4.833939091648927,5.45293632653351,[4.833939091648935],0,0.0,4.833939091648935,4.833939091648935,0.8026150402953833,1.6560609083510727,0.0,0,11.592426358457509,0.0,0.0,0.0,11.592426358457509,,False,4.833939091648935,[],4.833939091648934,4.942393362071221,5.344482056111226,[4.9423933620712175],0,0.0,4.833939091648935,4.833939091648935,0.7285922596139295,0.5876066379287792,0.0,0.0,2.350426551715117,0,19.33575636659574,0.0,21.686182918310855,,False,4.833939091648934,[],4.833939091648934,10.286875418182447,5.345517943888768,"[5.452936326533508, 4.833939091648934]",0,0.0,4.9423933620712175,4.833939091648934,0.9488379884968171,0.4031245818175506,0.0,0.0,0.8062491636351012,0,9.884786724142435,0.0,10.691035887777536 +58,,False,4.056943191532738,[],4.0569431915327385,4.05694319153273,4.833939091648935,[4.0569431915327385],0,0.0,4.056943191532738,4.056943191532738,0.8053950025777579,2.4330568084672697,0.0,0,17.031397659270887,0.0,0.0,0.0,17.031397659270887,,False,4.0569431915327385,[],4.0569431915327385,4.056943191532743,4.9423933620712175,[4.0569431915327385],0,0.0,4.0569431915327385,4.0569431915327385,0.7324147559305023,1.4730568084672582,0.0,0.0,5.892227233869033,0,16.227772766130954,0.0,22.119999999999987,,False,4.0569431915327385,[],4.05694319153274,8.890882283181679,5.452936326533508,"[4.833939091648934, 4.05694319153274]",0,0.0,4.0569431915327385,4.0569431915327385,0.9495585523253991,1.7991177168183201,0.0,0.0,3.5982354336366402,0,8.113886383065477,0.0,11.712121816702117 +59,,False,6.403958738659293,[],6.403958738659294,6.403958738659284,4.0569431915327385,[5.529999999999997],0,0.0,6.403958738659293,6.403958738659293,0.8096273279748885,0.0860412613407151,0.0,0,0.6022888293850057,0.0,0.0,0.0,0.6022888293850057,,False,6.403958738659294,[],6.403958738659293,6.403958738659298,4.0569431915327385,[6.403958738659293],0,0.0,5.529999999999997,5.529999999999997,0.735266252306686,-0.8739587386592973,0.8739587386592973,0.0,0.0,0.0,22.119999999999987,0.0,22.119999999999987,,False,6.403958738659293,[],6.403958738659295,10.46090193019204,4.833939091648934,"[4.05694319153274, 6.403958738659295]",0,0.0,6.403958738659293,6.403958738659293,0.9506555674220775,0.22909806980796077,0.0,0.0,0.45819613961592154,0,12.807917477318586,0.0,13.266113616934508 +60,,False,4.98144919548836,[],4.981449195488361,5.855407934147649,5.529999999999997,[5.855407934147658],0,0.0,4.98144919548836,4.98144919548836,0.8127943507918058,0.6345920658523516,0.0,0,4.442144460966461,0.0,0.0,0.0,4.442144460966461,,False,4.981449195488361,[],4.98144919548836,4.981449195488365,6.403958738659293,[4.286041261340701],0,0.0,5.855407934147658,4.981449195488361,0.7396703393557041,0.5485508045116347,0.0,0.0,2.194203218046539,0,23.421631736590633,0.0,25.615834954637172,,False,4.98144919548836,[],4.981449195488358,11.38540793414766,4.05694319153274,"[6.403958738659295, 4.981449195488358]",0,0.0,4.286041261340701,4.286041261340701,0.9491540917673652,-0.6954079341476591,0.6954079341476591,0.0,0.0,0.0,8.572082522681402,0.0,8.572082522681402 +61,,False,3.326495378009777,[],3.326495378009777,3.326495378009767,5.855407934147658,[3.326495378009777],0,0.0,3.326495378009777,3.326495378009777,0.8148511824507279,3.163504621990233,0.0,0,22.14453235393163,0.0,0.0,0.0,22.14453235393163,,False,3.326495378009777,[],3.3264953780097777,4.021903312157441,4.286041261340701,[4.021903312157437],0,0.0,3.326495378009777,3.326495378009777,0.7425305857747326,1.508096687842559,0.0,0.0,6.032386751370236,0,13.305981512039107,0.0,19.338368263409343,,False,3.3264953780097777,[],3.326495378009776,8.30794457349814,6.403958738659295,"[4.981449195488358, 3.326495378009776]",0,0.0,4.021903312157437,3.3264953780097777,0.9497127366278267,2.382055426501858,0.0,0.0,4.764110853003716,0,8.043806624314874,0.0,12.80791747731859 +62,,False,5.1023476825496665,[],5.1023476825496665,5.102347682549657,3.326495378009777,[5.1023476825496665],0,0.0,5.1023476825496665,5.1023476825496665,0.8179196810422609,1.3876523174503435,0.0,0,9.713566222152405,0.0,0.0,0.0,9.713566222152405,,False,5.1023476825496665,[],5.1023476825496665,5.102347682549671,4.021903312157437,[5.1023476825496665],0,0.0,5.1023476825496665,5.1023476825496665,0.7467976642544687,0.4276523174503293,0.0,0.0,1.7106092698013171,0,20.409390730198666,0.0,22.119999999999983,,False,5.1023476825496665,[],5.102347682549668,8.428843060559451,4.981449195488358,"[3.326495378009776, 5.102347682549668]",0,0.0,5.1023476825496665,5.1023476825496665,0.9505461548417373,2.26115693944055,0.0,0.0,4.5223138788811,0,10.204695365099333,0.0,14.727009243980433 +63,,False,4.5673907194519865,[],4.5673907194519865,4.567390719451977,5.1023476825496665,[4.5673907194519865],0,0.0,4.5673907194519865,4.5673907194519865,0.8205814505339039,1.9226092805480235,0.0,0,13.458264963836164,0.0,0.0,0.0,13.458264963836164,,False,4.5673907194519865,[],4.5673907194519865,4.567390719451991,5.1023476825496665,[4.5673907194519865],0,0.0,4.5673907194519865,4.5673907194519865,0.7504991420218522,0.9626092805480093,0.0,0.0,3.8504371221920373,0,18.269562877807946,0.0,22.119999999999983,,False,4.5673907194519865,[],4.567390719451985,9.669738402001661,3.326495378009776,"[5.102347682549668, 4.567390719451985]",0,0.0,4.5673907194519865,4.5673907194519865,0.95126910357689,1.0202615979983394,0.0,0.0,2.0405231959966788,0,9.134781438903973,0.0,11.175304634900652 +64,,False,5.477754099433527,[],5.477754099433527,5.477754099433517,4.5673907194519865,[5.477754099433527],0,0.0,5.477754099433527,5.477754099433527,0.8236728910319016,1.0122459005664828,0.0,0,7.0857213039653795,0.0,0.0,0.0,7.0857213039653795,,True,5.477754099433527,[],5.477754099433527,5.477754099433532,4.5673907194519865,[0],0,0.0,5.477754099433527,5.477754099433527,0.7547981236986859,0.052245900566468606,0.0,0.0,0.20898360226587442,0,21.91101639773411,0.0,22.119999999999983,,False,5.477754099433527,[],5.477754099433525,10.045144818885518,5.102347682549668,"[4.567390719451985, 5.477754099433525]",0,0.0,0,0.0,0.9348784246864258,0.6448551811144805,0.0,5.477754099433527,12.245218561096015,0,0.0,0.0,12.245218561096015 +65,,False,4.7409713552611095,[],4.7409713552611095,4.740971355261101,5.477754099433527,[0.052245900566468606],0,0.0,4.7409713552611095,4.7409713552611095,0.8262637795058627,1.7490286447389005,0.0,0,12.243200513172305,0.0,0.0,0.0,12.243200513172305,,True,4.7409713552611095,[],4.7409713552611095,10.218725454694642,0,[0],0,0.0,0.052245900566468606,0.052245900566468606,0.7438693109788683,-4.688725454694641,4.688725454694641,0.0,0.0,0.0,0.20898360226587442,0.0,0.20898360226587442,,False,4.7409713552611095,[],4.740971355261111,10.218725454694646,4.567390719451985,"[5.477754099433525, 4.740971355261111]",0,0.0,0,0.0,0.921141650181076,0.47127454530535573,0.0,10.218725454694637,21.379999999999985,0,0.0,0.0,21.379999999999985 +66,,False,5.339820964186644,[],5.339820964186643,10.028546418881275,0.052245900566468606,[0.0],0,0.0,1.8012745453053691,1.8012745453053691,0.8183038055050889,-3.5385464188812747,3.5385464188812747,0,0.0,131.3508430688729,0.0,0.0,131.3508430688729,,True,5.339820964186643,[],5.339820964186642,15.558546418881285,0,[0],0,0.0,0.0,0.0,0.7317589513409677,-10.028546418881284,10.028546418881284,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.339820964186642,[],5.33982096418664,10.08079231944776,5.477754099433525,"[4.740971355261111, 5.33982096418664]",0,0.0,0,0.0,0.9061452570021954,0.6092076805522391,0.0,15.558546418881278,32.33550819886703,0,0.0,0.0,32.33550819886703 +67,,False,4.992619850055427,[],4.992619850055427,15.021166268936703,0.0,[0.0],0,0.0,0.0,0.0,0.806034615426208,-8.531166268936701,8.531166268936701,0,0.0,316.6768919029303,0.0,0.0,316.6768919029303,,True,4.992619850055427,[],4.992619850055426,20.55116626893671,0,[0],0,0.0,0.0,0.0,0.7207873664533926,-15.02116626893671,15.02116626893671,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.992619850055426,[],4.992619850055428,10.332440814242076,4.740971355261111,"[5.33982096418664, 4.992619850055428]",0,0.0,0,0.0,0.8925590212759984,0.3575591857579239,0.0,20.551166268936704,41.81745090938926,0,0.0,0.0,41.81745090938926 +68,,False,4.224663894043056,[],4.224663894043054,19.245830162979757,0.0,[0.0],0,0.0,0.0,0.0,0.7959364293210298,-12.755830162979757,12.755830162979757,0,0.0,473.49641564980857,0.0,0.0,473.49641564980857,,False,4.224663894043054,[],4.224663894043053,24.775830162979766,0,[24.77583016297976],0,0.0,0.0,0.0,0.7117571773902853,-19.245830162979765,19.245830162979765,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.224663894043053,[],4.224663894043052,9.217283744098488,5.33982096418664,"[4.992619850055428, 4.224663894043052]",0,0.0,24.77583016297976,24.77583016297976,0.9548494918818939,1.4727162559015108,0.0,0.0,2.9454325118030216,0,49.55166032595952,0.0,52.49709283776254 +69,,False,5.773140855889249,[],5.773140855889249,25.018971018869006,0.0,[24.77583016297976],0,0.0,0.0,0.0,0.7825391763850954,-18.528971018869008,18.528971018869008,0,0.0,687.7954042204175,0.0,0.0,687.7954042204175,,False,5.773140855889249,[],5.773140855889248,5.773140855889256,24.77583016297976,[5.773140855889248],0,0.0,24.77583016297976,5.529999999999994,0.7159000019963846,-0.24314085588925494,0.24314085588925494,0.0,0.0,0.0,99.10332065191903,0.0,99.10332065191903,,False,5.773140855889248,[],5.77314085588925,9.997804749932309,4.992619850055428,"[4.224663894043052, 5.77314085588925]",0,0.0,5.773140855889248,5.773140855889248,0.9556094681251728,0.6921952500676909,0.0,0.0,1.3843905001353818,0,11.546281711778496,0.0,12.930672211913878 +70,,False,6.405205305878188,[],6.40520530587819,6.648346161767439,24.77583016297976,[5.773140855889248],0,0.0,24.77583016297976,6.246859144110751,0.7860725783269321,-0.15834616176743754,0.15834616176743754,0,0.0,5.877809524807281,0.0,0.0,5.877809524807281,,False,6.40520530587819,[],6.405205305878189,6.405205305878197,5.773140855889248,[4.9168591441107425],0,0.0,5.773140855889248,5.529999999999993,0.718603324061035,-0.8752053058781968,0.8752053058781968,0.0,0.0,0.0,23.092563423556992,0.0,23.092563423556992,,False,6.405205305878189,[],6.405205305878189,12.178346161767447,4.224663894043052,"[5.77314085588925, 6.405205305878189]",0,0.0,4.9168591441107425,4.9168591441107425,0.9521634166342813,-1.4883461617674465,1.4883461617674465,0.0,0.0,0.0,9.833718288221485,0.0,9.833718288221485 +71,,False,6.392325753491903,[],6.392325753491902,7.267531059370094,5.773140855889248,[4.9168591441107425],0,0.0,5.773140855889248,5.6147946941218105,0.7877307911717968,-0.7775310593700926,0.7775310593700926,0,0.0,28.861952923817835,0.0,0.0,28.861952923817835,,False,6.392325753491902,[],6.392325753491902,7.880671915259357,4.9168591441107425,[5.77314085588925],0,0.0,4.9168591441107425,4.041653838232546,0.7170521148965795,-2.3506719152593565,2.3506719152593565,0.0,0.0,0.0,19.66743657644297,0.0,19.66743657644297,,False,6.392325753491902,[],6.3923257534919005,12.797531059370097,5.77314085588925,"[6.405205305878189, 6.3923257534919005]",0,0.0,5.77314085588925,4.284794694121803,0.9470992404336535,-2.107531059370099,2.107531059370099,0.0,0.0,0.0,11.5462817117785,0.0,11.5462817117785 +72,,False,4.5065675177966735,[],4.506567517796673,6.857239433056024,4.9168591441107425,[5.77314085588925],0,0.0,4.9168591441107425,4.13932808474065,0.7893666067989313,-0.3672394330560236,0.3672394330560236,0,0.0,13.631927755039595,0.0,0.0,13.631927755039595,,True,4.506567517796673,[],4.506567517796673,6.6140985771667795,5.77314085588925,[0],0,0.0,5.77314085588925,3.4224689406298934,0.7175823149982156,-1.0840985771667793,1.0840985771667793,0.0,0.0,0.0,23.092563423557,0.0,23.092563423557,,False,4.506567517796673,[],4.506567517796674,10.898893271288584,6.405205305878189,"[6.3923257534919005, 4.506567517796674]",0,0.0,0,0.0,0.9352527262219944,-0.20889327128858248,0.20889327128858248,6.405205305878189,12.810410611756378,0.0,0.0,0.0,12.810410611756378 +73,,False,5.923162608341952,[],5.923162608341952,7.007261185508727,5.77314085588925,[0.0],0,0.0,5.77314085588925,5.405901422833226,0.791360956192184,-0.5172611855087261,0.5172611855087261,0,0.0,19.200735206083912,0.0,0.0,19.200735206083912,,True,5.923162608341952,[],5.923162608341952,12.537261185508733,0,[0],0,0.0,0.0,0.0,0.705976040783371,-7.007261185508732,7.007261185508732,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.923162608341952,[],5.923162608341951,10.429730126138633,6.3923257534919005,"[4.506567517796674, 5.923162608341951]",0,0.0,0,0.0,0.9201258210937091,0.2602698738613656,0.0,12.537261185508724,25.59506211874018,0,0.0,0.0,25.59506211874018 +74,,False,6.706604953678462,[],6.706604953678461,13.71386613918719,0.0,[0.0],0,0.0,0.0,0.0,0.7771290422304361,-7.223866139187188,7.223866139187188,0,0.0,268.1499110866284,0.0,0.0,268.1499110866284,,True,6.706604953678461,[],6.70660495367846,19.243866139187194,0,[0],0,0.0,0.0,0.0,0.6932796976129552,-13.713866139187193,13.713866139187193,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.70660495367846,[],6.706604953678462,12.629767562020419,4.506567517796674,"[5.923162608341951, 6.706604953678462]",0,0.0,0,0.0,0.9035781870244234,-1.9397675620204202,1.9397675620204202,17.304098577166762,34.608197154333524,0.0,0.0,0.0,34.608197154333524 +75,,False,5.873589415635379,[],5.8735894156353785,19.58745555482257,0.0,[0.0],0,0.0,0.0,0.0,0.765078801631464,-13.097455554822567,13.097455554822567,0,0.0,486.1775501950136,0.0,0.0,486.1775501950136,,True,5.8735894156353785,[],5.873589415635378,25.11745555482257,0,[0],0,0.0,0.0,0.0,0.6825296333319428,-19.587455554822572,19.587455554822572,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.873589415635378,[],5.873589415635379,12.580194369313848,5.923162608341951,"[6.706604953678462, 5.873589415635379]",0,0.0,0,0.0,0.8895672133483185,-1.8901943693138472,1.8901943693138472,23.227261185508713,46.454522371017426,0.0,0.0,0.0,46.454522371017426 +76,,False,5.649086732629106,[],5.6490867326291045,25.236542287451673,0.0,[0.0],0,0.0,0.0,0.0,0.7538365212848063,-18.746542287451675,18.746542287451675,0,0.0,695.8716497102062,0.0,0.0,695.8716497102062,,True,5.6490867326291045,[],5.649086732629107,30.766542287451678,0,[0],0,0.0,0.0,0.0,0.6725003533852801,-25.236542287451677,25.236542287451677,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.649086732629107,[],5.649086732629105,11.522676148264491,6.706604953678462,"[5.873589415635379, 5.649086732629105]",0,0.0,0,0.0,0.876495665713838,-0.8326761482644924,0.8326761482644924,29.933866139187174,59.86773227837435,0.0,0.0,0.0,59.86773227837435 +77,,False,3.7771264633246933,[],3.777126463324695,29.013668750776368,0.0,[0.0],0,0.0,0.0,0.0,0.7465021550704215,-22.523668750776366,22.523668750776366,0,0.0,836.0785840288187,0.0,0.0,836.0785840288187,,True,3.777126463324695,[],3.777126463324694,34.54366875077637,0,[0],0,0.0,0.0,0.0,0.6659573381137139,-29.01366875077637,29.01366875077637,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.777126463324694,[],3.777126463324696,9.426213195953807,5.873589415635379,"[5.649086732629105, 3.777126463324696]",0,0.0,0,0.0,0.8679679013827736,1.2637868040461928,0.0,34.54366875077636,71.6149111096451,0,0.0,0.0,71.6149111096451 +78,,False,5.620548215961735,[],5.620548215961733,34.6342169667381,0.0,[0.0],0,0.0,0.0,0.0,0.7358486850729916,-28.1442169667381,28.1442169667381,0,0.0,1044.7133338053181,0.0,0.0,1044.7133338053181,,False,5.620548215961733,[],5.620548215961736,40.1642169667381,0,[40.164216966738095],0,0.0,0.0,0.0,0.65645333806097,-34.63421696673811,34.63421696673811,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.620548215961736,[],5.620548215961736,9.397674679286439,5.649086732629105,"[3.777126463324696, 5.620548215961736]",0,0.0,40.164216966738095,40.164216966738095,0.9575622957783274,1.2923253207135623,2.6645352591003757e-15,0.0,2.5846506414271246,0,80.32843393347619,0.0,82.91308457490331 +79,,False,4.839062623136937,[],4.839062623136935,39.473279589875034,0.0,[39.47327958987504],0,0.0,0.0,0.0,0.7269171216959929,-32.98327958987504,32.98327958987504,0,0.0,1224.3393383761613,0.0,0.0,1224.3393383761613,,False,4.839062623136935,[],4.839062623136941,4.839062623136947,40.164216966738095,[4.839062623136944],0,0.0,39.47327958987504,4.8390626231369325,0.6606232290267471,0.6909373768630518,2.6645352591003757e-15,0.0,2.763749507452207,0,157.89311835950016,0.0,160.65686786695238,,False,4.839062623136941,[],4.83906262313694,10.459610839098683,3.777126463324696,"[5.620548215961736, 4.83906262313694]",0,0.0,4.839062623136944,4.839062623136941,0.9580773949454784,0.2303891609013169,0.0,0.0,0.4607783218026338,0,9.678125246273888,0.0,10.138903568076522 +80,,False,4.643254974231806,[],4.643254974231811,4.643254974231802,39.47327958987504,[4.643254974231814],0,0.0,37.62653456410685,4.643254974231809,0.7300610011763422,1.8467450257681959,0.0,0,12.92721518037737,0.0,0.0,0.0,12.92721518037737,,False,4.643254974231811,[],4.643254974231813,4.643254974231815,4.839062623136944,[4.643254974231813],0,0.0,4.643254974231814,4.643254974231811,0.6645303200644438,0.8867450257681844,0.0,0.0,3.5469801030727375,0,18.573019896927256,0.0,22.119999999999994,,False,4.643254974231813,[],4.643254974231811,9.482317597368759,5.620548215961736,"[4.83906262313694, 4.643254974231811]",0,0.0,4.643254974231813,4.643254974231813,0.9585600309079094,1.2076824026312396,0.0,0.0,2.415364805262479,0,9.286509948463626,0.0,11.701874753726106 +81,,False,5.556121798533965,[],5.556121798533968,5.556121798533956,4.643254974231814,[5.529999999999998],0,0.0,5.556121798533965,5.556121798533965,0.7337291276677645,0.9338782014660447,0.0,0,6.537147410262313,0.0,0.0,0.0,6.537147410262313,,False,5.556121798533968,[],5.556121798533969,5.5561217985339715,4.643254974231813,[5.556121798533969],0,0.0,5.529999999999998,5.529999999999998,0.6690250382490556,-0.026121798533970342,0.026121798533970342,0.0,0.0,0.0,22.11999999999999,0.0,22.11999999999999,,False,5.556121798533969,[],5.556121798533971,10.19937677276579,4.83906262313694,"[4.643254974231811, 5.556121798533971]",0,0.0,5.556121798533969,5.556121798533969,0.9591231472011936,0.49062322723421037,0.0,0.0,0.9812464544684207,0,11.112243597067938,0.0,12.093490051536358 +82,,False,6.363886524417105,[],6.363886524417104,6.390008322951063,5.529999999999998,[5.556121798533969],0,0.0,6.363886524417105,6.363886524417105,0.7378099301935712,0.09999167704893708,0.0,0,0.6999417393425595,0.0,0.0,0.0,0.6999417393425595,,False,6.363886524417104,[],6.3638865244171035,6.363886524417106,5.556121798533969,[5.133878201466022],0,0.0,5.556121798533969,5.5299999999999985,0.6720892822726854,-0.8338865244171059,0.8338865244171059,0.0,0.0,0.0,22.224487194135875,0.0,22.224487194135875,,False,6.3638865244171035,[],6.363886524417102,11.92000832295108,4.643254974231811,"[5.556121798533971, 6.363886524417102]",0,0.0,5.133878201466022,5.133878201466022,0.9567874625175407,-1.2300083229510816,1.2300083229510816,0.0,0.0,0.0,10.267756402932044,0.0,10.267756402932044 +83,,False,7.539162716269333,[],7.539162716269333,8.373049240686427,5.556121798533969,[5.133878201466022],0,0.0,5.656113475582906,5.656113475582906,0.7380314266284014,-1.883049240686427,1.883049240686427,0,0.0,69.89878781428017,0.0,0.0,69.89878781428017,,False,7.539162716269333,[],7.539162716269333,8.769171039220417,5.133878201466022,[5.556121798533971],0,0.0,5.133878201466022,4.299991677048916,0.670275104686181,-3.239171039220417,3.239171039220417,0.0,0.0,0.0,20.535512805864087,0.0,20.535512805864087,,False,7.539162716269333,[],7.539162716269335,13.903049240686444,5.556121798533971,"[6.363886524417102, 7.539162716269335]",0,0.0,5.556121798533971,4.326113475582889,0.9499582370431079,-3.213049240686444,3.213049240686444,0.0,0.0,0.0,11.112243597067941,0.0,11.112243597067941 +84,,False,3.559958552316202,[],3.559958552316202,6.799129591536607,5.133878201466022,[5.556121798533971],0,0.0,5.133878201466022,3.250828960779595,0.7394937972763821,-0.30912959153660724,0.30912959153660724,0,0.0,11.47489043783886,0.0,0.0,11.47489043783886,,True,3.559958552316202,[],3.559958552316202,6.773007793002648,5.556121798533971,[0],0,0.0,5.556121798533971,2.3169507593135537,0.6701127911129882,-1.2430077930026484,1.2430077930026484,0.0,0.0,0.0,22.224487194135882,0.0,22.224487194135882,,False,3.559958552316202,[],3.5599585523162,11.099121268585545,6.363886524417102,"[7.539162716269335, 3.5599585523162]",0,0.0,0,0.0,0.9420260494449534,-0.4091212685855443,0.4091212685855443,6.363886524417102,12.727773048834203,0.0,0.0,0.0,12.727773048834203 +85,,False,6.19072725611364,[],6.19072725611364,7.433735049116278,5.556121798533971,[0.0],0,0.0,5.556121798533971,5.246992206997364,0.7410404786006421,-0.9437350491162766,0.9437350491162766,0,0.0,35.031445023196184,0.0,0.0,35.031445023196184,,True,6.19072725611364,[],6.190727256113641,12.96373504911629,0,[0],0,0.0,0.0,0.0,0.6605216071270115,-7.433735049116288,7.433735049116288,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.190727256113641,[],6.1907272561136395,9.75068580842985,7.539162716269335,"[3.5599585523162, 6.1907272561136395]",0,0.0,0,0.0,0.9285430279601629,0.9393141915701495,0.0,12.963735049116288,27.806098481372874,0,0.0,0.0,27.806098481372874 +86,,False,5.617640845511145,[],5.617640845511144,13.051375894627423,0.0,[0.0],0,0.0,0.0,0.0,0.7315393692436125,-6.561375894627422,6.561375894627422,0,0.0,243.5582732085699,0.0,0.0,243.5582732085699,,False,5.617640845511144,[],5.6176408455111435,18.581375894627435,0,[17.46300779300264],0,0.0,0.0,0.0,0.652052855144872,-13.051375894627434,13.051375894627434,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.6176408455111435,[],5.6176408455111435,11.808368101624794,3.5599585523162,"[6.1907272561136395, 5.6176408455111435]",0,0.0,17.46300779300264,17.46300779300264,0.9564942348035462,-1.1183681016247942,1.1183681016247924,0.0,0.0,0.0,34.92601558600528,0.0,34.92601558600528 +87,,False,6.21707079698011,[],6.217070796980109,19.268446691607533,0.0,[17.46300779300264],0,0.0,0.0,0.0,0.7213044867244045,-12.778446691607531,12.778446691607531,0,0.0,474.3359411924715,0.0,0.0,474.3359411924715,,True,6.217070796980109,[],6.217070796980108,7.335438898604906,17.46300779300264,[0],0,0.0,17.46300779300264,4.411631898375205,0.6528579871142758,-1.805438898604904,1.805438898604904,0.0,0.0,0.0,69.85203117201056,0.0,69.85203117201056,,False,6.217070796980108,[],6.217070796980108,11.834711642491264,6.1907272561136395,"[5.6176408455111435, 6.217070796980108]",0,0.0,0,0.0,0.9431120348357767,-1.144711642491263,1.1447116424912611,6.1907272561136395,12.381454512227279,0.0,0.0,0.0,12.381454512227279 +88,,False,5.226288269498875,[],5.226288269498873,7.031727168103767,17.46300779300264,[0.0],0,0.0,17.46300779300264,4.684561101395108,0.7233392553285322,-0.5417271681037672,0.5417271681037672,0,0.0,20.10891248001184,0.0,0.0,20.10891248001184,,True,5.226288269498873,[],5.2262882694988715,12.561727168103777,0,[0],0,0.0,0.0,0.0,0.6452688326049063,-7.031727168103777,7.031727168103777,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.2262882694988715,[],5.22628826949887,11.44335906647899,5.6176408455111435,"[6.217070796980108, 5.22628826949887]",0,0.0,0,0.0,0.9321488191084922,-0.7533590664789909,0.7533590664789891,11.808368101624783,23.616736203249566,0.0,0.0,0.0,23.616736203249566 +89,,False,5.847401432576639,[],5.847401432576639,12.879128600680406,0.0,[0.0],0,0.0,0.0,0.0,0.7140522812527101,-6.389128600680406,6.389128600680406,0,0.0,237.16445365725667,0.0,0.0,237.16445365725667,,True,5.847401432576639,[],5.847401432576639,18.40912860068042,0,[0],0,0.0,0.0,0.0,0.6369842069936281,-12.879128600680417,12.879128600680417,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.847401432576639,[],5.847401432576639,11.073689702075521,6.217070796980108,"[5.22628826949887, 5.847401432576639]",0,0.0,0,0.0,0.9201809328724039,-0.38368970207552167,0.3836897020755199,18.02543889860489,36.05087779720978,0.0,0.0,0.0,36.05087779720978 +90,,False,5.174833011991471,[],5.174833011991471,18.053961612671877,0.0,[0.0],0,0.0,0.0,0.0,0.7060301662051296,-11.563961612671878,11.563961612671878,0,0.0,429.2542550623801,0.0,0.0,429.2542550623801,,True,5.174833011991471,[],5.1748330119914705,23.58396161267189,0,[0],0,0.0,0.0,0.0,0.6298279234466727,-18.053961612671888,18.053961612671888,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.1748330119914705,[],5.1748330119914705,11.022234444568124,5.22628826949887,"[5.847401432576639, 5.1748330119914705]",0,0.0,0,0.0,0.9098430381525076,-0.33223444456812246,0.3322344445681207,23.25172716810376,46.50345433620752,0.0,0.0,0.0,46.50345433620752 +91,,False,3.783145107640761,[],3.7831451076407627,21.83710672031264,0.0,[0.0],0,0.0,0.0,0.0,0.7002785965029296,-15.34710672031264,15.34710672031264,0,0.0,569.6846014580052,0.0,0.0,569.6846014580052,,False,3.7831451076407627,[],3.783145107640762,27.367106720312652,0,[27.36710672031264],0,0.0,0.0,0.0,0.6246971239773438,-21.83710672031265,21.83710672031265,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.783145107640762,[],3.7831451076407596,8.957978119632244,5.847401432576639,"[5.1748330119914705, 3.7831451076407596]",0,0.0,27.36710672031264,27.03487227574452,0.960646076989893,1.7320218803677547,2.220446049250313e-15,0.0,3.4640437607355095,0,54.73421344062528,0.0,58.19825720136079 +92,,False,5.734501064880046,[],5.734501064880046,27.571607785192686,0.0,[27.36710672031264],0,0.0,0.0,0.0,0.6917368499712785,-21.081607785192688,21.081607785192688,0,0.0,782.5492809863525,0.0,0.0,782.5492809863525,,False,5.734501064880046,[],5.734501064880045,5.734501064880057,27.36710672031264,[5.734501064880048],0,0.0,27.36710672031264,5.5299999999999905,0.6288399470323761,-0.2045010648800556,0.2045010648800556,0.0,0.0,0.0,109.46842688125056,0.0,109.46842688125056,,False,5.734501064880045,[],5.734501064880045,9.51764617252082,5.1748330119914705,"[3.7831451076407596, 5.734501064880045]",0,0.0,5.734501064880048,5.734501064880046,0.9611261019928805,1.1723538274791805,0.0,0.0,2.344707654958361,0,11.469002129760096,0.0,13.813709784718457 +93,,False,4.0455027380385795,[],4.045502738038581,4.250003802918627,27.36710672031264,[4.250003802918637],0,0.0,25.127110523231266,4.045502738038579,0.6943668343492309,2.239996197081374,8.881784197001252e-16,0,15.679973379569617,0.0,0.0,0.0,15.679973379569617,,False,4.045502738038581,[],4.04550273803858,4.045502738038589,5.734501064880048,[4.04550273803858],0,0.0,4.250003802918637,4.045502738038581,0.6320065439510603,1.484497261961411,0.0,0.0,5.937989047845644,0,17.000015211674548,0.0,22.93800425952019,,False,4.04550273803858,[],4.045502738038579,9.780003802918639,3.7831451076407596,"[5.734501064880045, 4.045502738038579]",0,0.0,4.04550273803858,4.04550273803858,0.9614577593591902,0.9099961970813597,0.0,0.0,1.8199923941627194,0,8.09100547607716,0.0,9.91099787023988 +94,,False,5.7699773599307935,[],5.769977359930793,5.769977359930782,4.250003802918637,[5.529999999999991],0,0.0,5.769977359930794,5.7699773599307935,0.6980411873342873,0.7200226400692173,0.0,0,5.040158480484521,0.0,0.0,0.0,5.040158480484521,,False,5.769977359930793,[],5.769977359930793,5.769977359930801,4.04550273803858,[5.769977359930793],0,0.0,5.529999999999991,5.529999999999991,0.635930591141147,-0.23997735993080127,0.23997735993080127,0.0,0.0,0.0,22.119999999999965,0.0,22.119999999999965,,False,5.769977359930793,[],5.769977359930794,9.815480097969388,5.734501064880045,"[4.045502738038579, 5.769977359930794]",0,0.0,5.769977359930793,5.769977359930793,0.9619211180939917,0.8745199020306123,0.0,0.0,1.7490398040612245,0,11.539954719861585,0.0,13.28899452392281 +95,,False,6.268389522403902,[],6.268389522403903,6.508366882334694,5.529999999999991,[5.769977359930793],0,0.0,6.250022640069209,6.250022640069209,0.7018963239160025,-0.018366882334693635,0.018366882334693635,0,0.0,0.6817786722638277,0.0,0.0,0.6817786722638277,,False,6.268389522403903,[],6.268389522403904,6.268389522403912,5.769977359930793,[4.920022640069191],0,0.0,5.769977359930793,5.529999999999991,0.6391055993022162,-0.7383895224039119,0.7383895224039119,0.0,0.0,0.0,23.07990943972317,0.0,23.07990943972317,,False,6.268389522403904,[],6.268389522403902,12.038366882334714,4.045502738038579,"[5.769977359930794, 6.268389522403902]",0,0.0,4.920022640069191,4.920022640069191,0.9596388527598761,-1.3483668823347132,1.3483668823347132,0.0,0.0,0.0,9.840045280138382,0.0,9.840045280138382 +96,,False,4.132358910020625,[],4.132358910020625,4.870748432424526,5.769977359930793,[4.870748432424537],0,0.0,4.150725792355319,4.132358910020625,0.7044085617850976,1.619251567575474,0.0,0,11.334760973028317,0.0,0.0,0.0,11.334760973028317,,False,4.132358910020625,[],4.132358910020625,5.480725792355346,4.920022640069191,[5.480725792355338],0,0.0,4.870748432424537,4.132358910020625,0.642146999502601,0.049274207644653956,0.0,0.0,0.19709683057861582,0,19.482993729698148,0.0,19.680090560276764,,False,4.132358910020625,[],4.132358910020623,10.400748432424543,5.769977359930794,"[6.268389522403902, 4.132358910020623]",0,0.0,5.480725792355338,4.132358910020625,0.9599789921498654,0.2892515675754561,0.0,0.0,0.5785031351509122,0,10.961451584710677,0.0,11.539954719861589 +97,,False,5.145861852428309,[],5.145861852428309,5.145861852428298,4.870748432424537,[5.145861852428309],0,0.0,5.145861852428309,5.145861852428309,0.7074783717861141,1.3441381475717016,0.0,0,9.408967033001911,0.0,0.0,0.0,9.408967033001911,,False,5.145861852428309,[],5.145861852428309,5.145861852428316,5.480725792355338,[5.145861852428309],0,0.0,5.145861852428309,5.145861852428309,0.6458634153989979,0.38413814757168296,0.0,0.0,1.5365525902867319,0,20.583447409713237,0.0,22.11999999999997,,False,5.145861852428309,[],5.145861852428311,9.278220762448951,6.268389522403902,"[4.132358910020623, 5.145861852428311]",0,0.0,5.145861852428309,5.145861852428309,0.9603946228964494,1.4117792375510492,0.0,0.0,2.8235584751020983,0,10.291723704856619,0.0,13.115282179958717 +98,,False,5.878673548190895,[],5.878673548190896,5.878673548190884,5.145861852428309,[5.529999999999992],0,0.0,5.878673548190895,5.878673548190895,0.7109082333402823,0.6113264518091155,0.0,0,4.279285162663808,0.0,0.0,0.0,4.279285162663808,,False,5.878673548190896,[],5.878673548190897,5.878673548190905,5.145861852428309,[5.5441381475716724],0,0.0,5.529999999999992,5.529999999999992,0.6493202841365274,-0.348673548190904,0.348673548190904,0.0,0.0,0.0,22.11999999999997,0.0,22.11999999999997,,False,5.878673548190897,[],5.878673548190895,11.024535400619222,4.132358910020623,"[5.145861852428311, 5.878673548190895]",0,0.0,5.5441381475716724,5.5441381475716724,0.9601917632165086,-0.3345354006192247,0.3345354006192247,0.0,0.0,0.0,11.088276295143345,0.0,11.088276295143345 +99,,False,4.76040549180619,[],4.760405491806191,5.1090790399970825,5.529999999999992,[5.109079039997095],0,0.0,4.76040549180619,4.76040549180619,0.7136272688118215,1.3809209600029178,0.0,0,9.666446720020424,0.0,0.0,0.0,9.666446720020424,,False,4.760405491806191,[],4.76040549180619,5.094940892425424,5.5441381475716724,[5.094940892425415],0,0.0,5.109079039997095,4.760405491806191,0.6526185814128537,0.43505910757457755,0.0,0.0,1.7402364302983102,0,20.43631615998838,0.0,22.17655259028669,,False,4.76040549180619,[],4.760405491806192,10.639079039997103,5.145861852428311,"[5.878673548190895, 4.760405491806192]",0,0.0,5.094940892425415,4.76040549180619,0.9605661772274103,0.050920960002896365,0.0,0.0,0.10184192000579273,0,10.18988178485083,0.0,10.291723704856622 diff --git a/tests/additional_files/test_sim_disruption_example_6_1_TP.csv b/tests/additional_files/test_sim_disruption_example_6_1_TP.csv index 1fb9bfd..192035a 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_TP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_TP.csv @@ -1,101 +1,101 @@ -t,i=1 pr=-1,DISR,IO:EXT|-1,IOPL:EXT|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:EXT|-1,DMFS:-2,FR:-2,IL:-1,BO:EXT|-1,ODI:EXT|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:3|-3,OO:3|-3,IS:3|-3,ISPL:3|-3,IDI:3|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC,i=3 pr=-3,DISR,IO:2|-3,IOPL:2|-3,OQ:EXT|-4,OO:EXT|-4,IS:EXT|-4,ISPL:EXT|-4,IDI:EXT|-4,RM:-4,OS:2|-3,DMFS:-4,FR:-4,IL:-3,BO:2|-3,ODI:2|-3,HC,SC,ITHC,REV,TC -0,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,2.6018801180469200,0,0,18.213160826328400,0.0,0.0,0.0,18.213160826328400,,False,3.8881198819530800,[],3.8881198819530800,3.8881198819530800,0,[3.8881198819530796],0,0,3.8881198819530800,3.8881198819530800,1.0,1.6418801180469200,0,0,6.567520472187680,0,15.552479527812300,0.0,22.12,,False,3.8881198819530800,[],3.888119881953080,3.888119881953080,0,"[0, 3.888119881953079]",0,0,3.8881198819530800,3.8881198819530800,1.0,6.80188011804692,0,0,13.60376023609380,0,7.776239763906160,0.0,21.38 -1,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,1.1710978153106200,0,0,8.197684707174320,0.0,0.0,0.0,8.197684707174320,,False,5.318902184689380,[],5.318902184689380,5.318902184689380,3.8881198819530800,[5.318902184689383],0,0.0,5.318902184689380,5.318902184689380,1.0,0.2110978153106170,0,0,0.8443912612424680,0,21.275608738757500,0.0,22.12,,False,5.318902184689380,[],5.318902184689380,9.207022066642460,0,"[3.888119881953079, 5.318902184689383]",0,0,5.318902184689380,5.318902184689380,1.0,1.482977933357540,0,0,2.965955866715070,0,10.637804369378800,0.0,13.60376023609380 -2,,False,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[5.279041292200137],0,0.0,5.279041292200140,5.279041292200140,1.0,1.210958707799860,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200140,[],5.279041292200140,5.279041292200140,5.318902184689380,[5.279041292200137],0,0.0,5.279041292200140,5.279041292200140,1.0,0.25095870779986300,0,0,1.0038348311994500,0,21.11616516880060,0.0,22.12,,False,5.279041292200140,[],5.279041292200140,10.59794347688950,3.888119881953080,"[5.318902184689383, 5.279041292200137]",0,0.0,5.279041292200140,5.279041292200140,1.0,0.09205652311047890,0,0,0.1841130462209580,0,10.558082584400300,0.0,10.742195630621200 -3,,False,6.010515284806530,[],6.010515284806530,6.010515284806530,5.279041292200140,[0.25095870779986296],0,0.0,6.010515284806530,6.010515284806530,1.0,0.4794847151934740,0,0,3.356393006354320,0.0,0.0,0.0,3.356393006354320,,False,6.010515284806530,[],6.010515284806530,11.289556577006700,0,[10.69],0,0.0,0.25095870779986300,0.25095870779986300,0.7189991228711110,-5.759556577006660,5.759556577006660,0,0.0,0.0,1.0038348311994500,0.0,1.0038348311994500,,False,6.010515284806530,[],6.010515284806530,11.289556577006700,5.318902184689380,"[5.279041292200137, 6.010515284806527]",0,0.0,5.410958707799860,5.410958707799860,0.9707484557578860,-0.5995565770066640,0.5995565770066640,0,0,0.0,21.38,0.0,21.38 -4,,False,4.419121865976490,[],4.419121865976490,10.178678442983100,0.25095870779986300,[10.178678442983148],0,0.0,0.7304434229933370,0.7304434229933370,0.8519536530165740,-3.6886784429831500,3.6886784429831500,0,0.0,136.92374380353400,0.0,0.0,136.92374380353400,,True,4.419121865976490,[],4.419121865976490,5.01867844298315,10.69,[5.018678442983149],0,0.0,10.178678442983100,4.419121865976490,0.7688382642590530,0.511321557016851,0.0,0,2.045286228067400,0,40.714713771932600,0.0,42.76,,False,4.419121865976490,[],4.419121865976480,10.429637150783000,5.279041292200140,"[6.010515284806527, 4.419121865976483]",0,0.0,5.018678442983150,4.419121865976490,0.9759365956106660,0.26036284921698800,0.0,0,0.5207256984339760,0,10.037356885966300,0.0,10.558082584400300 -5,,False,4.474830192821850,[],4.474830192821850,4.474830192821850,10.178678442983100,[0.511321557016851],0,0.0,8.163508635805000,4.4748301928218500,0.8744943233476220,2.0151698071781500,0.0,0,14.106188650247000,0.0,0.0,0.0,14.106188650247000,,True,4.474830192821850,[],4.474830192821850,9.493508635805000,0,[9.493508635805],0,0.0,0.511321557016851,0.511321557016851,0.6691769430348540,-3.9635086358050000,3.9635086358050000,0,0.0,0.0,2.045286228067400,0.0,2.045286228067400,,False,4.474830192821850,[],4.47483019282185,8.893952058798340,6.010515284806530,"[4.419121865976483, 4.47483019282185]",0,0.0,4.474830192821850,4.474830192821850,0.9796003487287580,1.796047941201660,0.0,0,3.592095882403330,0,18.98701727161,0.0,22.579113154013300 -6,,False,2.3874509873064000,[],2.3874509873064000,6.3509596231114,0.511321557016851,[0.0],0,0.0,2.3874509873064000,2.3874509873064000,0.8839234511809010,0.13904037688860000,0.0,0,0.9732826382202000,0.0,0.0,0.0,0.9732826382202000,,True,2.3874509873064000,[],2.3874509873064000,11.880959623111400,0,[11.8809596231114],0,0.0,0.0,0.0,0.6189022852882180,-6.350959623111400,6.350959623111400,0.0,0.0,0.0,0.0,0.0,0.0,,False,2.3874509873064000,[],2.3874509873064000,6.862281180128250,4.419121865976480,"[4.47483019282185, 2.3874509873064014]",0,0.0,2.3874509873064000,2.3874509873064000,0.9811329560555450,3.8277188198717500,0.0,0,7.655437639743490,0,23.7619192462228,0.0,31.417356885966300 -7,,False,5.950369682396900,[],5.950369682396900,12.301329305508300,0.0,[0.0],0,0.0,0.13904037688860000,0.13904037688860000,0.7481997648191990,-5.811329305508300,5.811329305508300,0,0.0,215.7165438204680,0.0,0.0,215.7165438204680,,True,5.950369682396900,[],5.950369682396900,17.831329305508300,0,[17.8313293055083],0,0.0,0.0,0.0,0.5212914101556360,-12.301329305508300,12.301329305508300,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.950369682396900,[],5.950369682396900,8.337820669703310,4.47483019282185,"[2.3874509873064014, 5.950369682396901]",0,0.0,5.950369682396900,5.950369682396900,0.9841085932673640,2.3521793302966900,0.0,0,4.704358660593390,0,35.6626586110166,0.0,40.36701727161000 -8,,False,4.571953935823770,[],4.571953935823770,16.873283241332100,0.0,[0.0],0,0.0,0.0,0.0,0.6673319121017710,-10.38328324133210,10.38328324133210,0,0.0,385.4274739182460,0.0,0.0,385.4274739182460,,False,4.571953935823770,[],4.571953935823760,22.40328324133210,0,[22.403283241332066],0,0.0,0.0,0.0,0.46494854697722600,-16.873283241332100,16.873283241332100,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.571953935823760,[],4.571953935823770,10.52232361822070,2.3874509873064000,"[5.950369682396901, 4.571953935823766]",0,0.0,4.571953935823760,4.571953935823760,0.9858261879520370,0.16767638177933100,0.0,0,0.33535276355866200,0,44.80656648266410,0.0,45.14191924622280 -9,,False,4.257593162880830,[],4.25759316288083,21.1308764042129,0.0,[21.1308764042129],0,0.0,0.0,0.0,0.6063062240949280,-14.640876404212900,14.640876404212900,0,0.0,543.4693321243830,0.0,0.0,543.4693321243830,,False,4.25759316288083,[],4.257593162880830,4.257593162880830,22.403283241332100,[4.257593162880829],0,0.0,21.1308764042129,4.257593162880830,0.5138775468461790,1.272406837119170,0.0,0.0,5.089627348476670,0,84.5235056168516,0.0,89.61313296532830,,False,4.257593162880830,[],4.257593162880830,8.829547098704600,5.950369682396900,"[4.571953935823766, 4.257593162880827]",0,0.0,4.257593162880830,4.257593162880830,0.9871223445065510,1.8604529012954000,0.0,0,3.7209058025908100,0,8.515186325761660,0.0,12.236092128352500 -10,,False,4.3705250390757500,[],4.370525039075750,4.370525039075750,21.1308764042129,[4.370525039075748],0,0.0,19.011401443288600,4.370525039075750,0.6400918468716830,2.1194749609242500,0.0,0,14.836324726469800,0.0,0.0,0.0,14.836324726469800,,False,4.370525039075750,[],4.370525039075750,4.370525039075750,4.257593162880830,[4.370525039075746],0,0.0,4.370525039075750,4.370525039075750,0.5555951223598100,1.159474960924250,0.0,0.0,4.637899843697000,0,17.48210015630300,0.0,22.120000000000000,,False,4.370525039075750,[],4.370525039075750,8.628118201956580,4.571953935823770,"[4.257593162880827, 4.370525039075748]",0,0.0,4.370525039075750,4.370525039075750,0.9882274663991960,2.061881798043420,0.0,0,4.123763596086850,0,8.741050078151490,0.0,12.864813674238300 -11,,False,5.597720466912610,[],5.597720466912610,5.597720466912610,4.370525039075750,[5.529999999999995],0,0.0,5.597720466912610,5.597720466912610,0.6757331465117300,0.8922795330873920,0.0,0,6.245956731611750,0.0,0.0,0.0,6.245956731611750,,False,5.597720466912610,[],5.597720466912610,5.597720466912610,4.370525039075750,[5.597720466912608],0,0.0,5.530000000000000,5.530000000000000,0.5984059996282290,-0.06772046691261300,0.06772046691261300,0.0,0.0,0.0,22.12000000000000,0.0,22.12000000000000,,False,5.597720466912610,[],5.597720466912610,9.968245505988360,4.257593162880830,"[4.370525039075748, 5.597720466912608]",0,0.0,5.597720466912610,5.597720466912610,0.9893932871619140,0.721754494011642,0.0,0,1.443508988023280,0,11.195440933825200,0.0,12.6389499218485 -12,,False,5.122219165222680,[],5.1222191652226800,5.1899396321352900,5.530000000000000,[5.1899396321352915],0,0.0,5.122219165222680,5.122219165222680,0.7026757254696890,1.3000603678647100,0.0,0,9.100422575052960,0.0,0.0,0.0,9.100422575052960,,False,5.1222191652226800,[],5.122219165222680,5.122219165222680,5.597720466912610,[5.09227953308739],0,0.0,5.1899396321352900,5.1222191652226800,0.6317735114403810,0.4077808347773160,0.0,0.0,1.6311233391092700,0,20.759758528541200,0.0,22.39088186765040,,False,5.122219165222680,[],5.122219165222680,10.719939632135300,4.370525039075750,"[5.597720466912608, 5.122219165222679]",0,0.0,5.09227953308739,5.09227953308739,0.9897889225754250,-0.02993963213528780,0.02993963213528780,0,0,0.0,10.18455906617480,0.0,10.18455906617480 -13,,False,4.484564337907550,[],4.484564337907550,4.484564337907550,5.1899396321352900,[4.484564337907548],0,0.0,4.484564337907550,4.484564337907550,0.7228376915153720,2.0054356620924500,0.0,0,14.038049634647200,0.0,0.0,0.0,14.038049634647200,,False,4.484564337907550,[],4.484564337907550,4.514503970042840,5.09227953308739,[4.514503970042836],0,0.0,4.484564337907550,4.484564337907550,0.6567434536732790,1.0154960299571600,0.0,0.0,4.061984119828630,0,17.93825735163020,0.0,22.000241471458800,,False,4.484564337907550,[],4.484564337907550,9.606783503130230,5.597720466912610,"[5.122219165222679, 4.484564337907546]",0,0.0,4.514503970042840,4.484564337907550,0.9904813497129310,1.0832164968697700,0.0,0,2.1664329937395400,0,9.029007940085670,0.0,11.195440933825200 -14,,False,4.399746149894090,[],4.3997461498940900,4.399746149894090,4.484564337907550,[4.3997461498940895],0,0.0,4.399746149894090,4.399746149894090,0.7401267539724440,2.0902538501059100,0.0,0,14.631776950741400,0.0,0.0,0.0,14.631776950741400,,True,4.3997461498940900,[],4.39974614989409,4.399746149894100,4.514503970042840,[4.39974614989409],0,0.0,4.3997461498940900,4.3997461498940900,0.6781553978178070,1.1302538501059000,0.0,0.0,4.521015400423620,0,17.598984599576400,0.0,22.120000000000000,,False,4.39974614989409,[],4.39974614989409,8.884310487801640,5.122219165222680,"[4.484564337907546, 4.39974614989409]",0,0.0,4.39974614989409,4.39974614989409,0.9910751120474270,1.8056895121983600,0.0,0,3.6113790243967200,0,8.79949229978818,0.0,12.410871324184900 -15,,False,5.947439821046640,[],5.947439821046640,5.947439821046640,4.3997461498940900,[1.1302538501059045],0,0.0,5.947439821046640,5.947439821046640,0.7603356739401280,0.5425601789533620,0.0,0,3.797921252673540,0.0,0.0,0.0,3.797921252673540,,True,5.947439821046640,[],5.94743982104664,10.347185970940700,0,[10.34718597094073],0,0.0,1.1302538501059000,1.1302538501059000,0.6401973661577650,-4.817185970940730,4.817185970940730,0.0,0.0,0.0,4.521015400423620,0.0,4.521015400423620,,False,5.94743982104664,[],5.94743982104664,10.347185970940700,4.484564337907550,"[4.39974614989409, 5.94743982104664]",0,0.0,5.94743982104664,5.94743982104664,0.9917691517345100,0.3428140290592680,0.0,0,0.6856280581185350,0,20.69437194188150,0.0,21.380000000000000 -16,,False,3.978447805324400,[],3.978447805324400,8.795633776265130,1.1302538501059000,[0.0],0,0.0,1.6728140290592700,1.6728140290592700,0.7435302309502700,-2.305633776265140,2.305633776265140,0,0.0,85.58512577496180,0.0,0.0,85.58512577496180,,False,3.978447805324400,[],3.9784478053244,14.325633776265100,0,[14.32563377626513],0,0.0,0.0,0.0,0.6085414209532100,-8.795633776265130,8.795633776265130,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.9784478053244,[],3.9784478053244,9.925887626371040,4.39974614989409,"[5.94743982104664, 3.9784478053244]",0,0.0,3.9784478053244,3.9784478053244,0.9921761438520240,0.7641123736289580,0.0,0,1.5282247472579200,0,28.65126755253030,0.0,30.179492299788200 -17,,False,4.838244613602480,[],4.8382446136024800,13.633878389867600,0.0,[13.633878389867615],0,0.0,0.0,0.0,0.7013553675628280,-7.143878389867610,7.143878389867610,0,0.0,265.1807658318860,0.0,0.0,265.1807658318860,,False,4.8382446136024800,[],4.838244613602480,4.838244613602480,14.32563377626510,[4.838244613602479],0,0.0,13.633878389867600,4.83824461360248,0.6307459143361360,0.6917553863975160,0.0,0.0,2.7670215455900700,0,54.53551355947050,0.0,57.30253510506050,,False,4.838244613602480,[],4.838244613602480,8.81669241892688,5.94743982104664,"[3.9784478053244, 4.838244613602479]",0,0.0,4.838244613602480,4.838244613602480,0.9926199322152520,1.873307581073120,0.0,0,3.746615162146240,0,9.676489227204960,0.0,13.423104389351200 -18,,False,4.770549546168040,[],4.770549546168040,4.770549546168040,13.633878389867600,[4.770549546168042],0,0.0,11.914427936035700,4.770549546168040,0.7171735184251260,1.719450453831960,0.0,0,12.036153176823700,0.0,0.0,0.0,12.036153176823700,,True,4.770549546168040,[],4.770549546168040,4.770549546168050,4.838244613602480,[4.770549546168044],0,0.0,4.770549546168040,4.770549546168040,0.6503039984238510,0.7594504538319530,0.0,0.0,3.0378018153278100,0,19.08219818467220,0.0,22.12000000000000,,False,4.770549546168040,[],4.770549546168040,9.608794159770530,3.9784478053244,"[4.838244613602479, 4.770549546168044]",0,0.0,4.770549546168040,4.770549546168040,0.9930108283269300,1.081205840229480,0.0,0,2.16241168045895,0,9.541099092336090,0.0,11.703510772795000 -19,,False,5.389348913256120,[],5.389348913256120,5.389348913256120,4.770549546168040,[0.7594504538319526],0,0.0,5.389348913256120,5.389348913256120,0.7331414968068010,1.100651086743880,0.0,0,7.704557607207140,0.0,0.0,0.0,7.704557607207140,,False,5.389348913256120,[],5.389348913256130,10.159898459424200,0,[10.15989845942417],0,0.0,0.7594504538319530,0.7594504538319530,0.621544733030712,-4.629898459424170,4.629898459424170,0.0,0.0,0.0,3.0378018153278100,0.0,3.0378018153278100,,False,5.389348913256130,[],5.389348913256120,10.15989845942420,4.838244613602480,"[4.770549546168044, 5.389348913256123]",0,0.0,5.389348913256130,5.389348913256130,0.9934054269570150,0.5301015405758290,0.0,0,1.0602030811516600,0,20.31979691884830,0.0,21.380000000000000 -20,,False,7.77831304155244,[],7.7783130415524400,12.408211500976600,0.7594504538319530,[10.15989845942417],0,0.0,1.8601015405758300,1.8601015405758300,0.695920574844463,-5.918211500976610,5.918211500976610,0,0.0,219.68401091625200,0.0,0.0,219.68401091625200,,False,7.7783130415524400,[],7.7783130415524400,7.77831304155244,10.15989845942420,[5.300651086743873],0,0.0,10.15989845942420,5.5300000000000000,0.6282811148793340,-2.248313041552440,2.248313041552440,0.0,0.0,0.0,40.63959383769670,0.0,40.63959383769670,,False,7.7783130415524400,[],7.778313041552440,13.167661954808600,4.770549546168040,"[5.389348913256123, 7.778313041552441]",0,0.0,5.300651086743870,5.300651086743870,0.9699020909466250,-2.4776619548085700,2.4776619548085700,0,0,0.0,10.601302173487700,0.0,10.601302173487700 -21,,False,6.193639724282320,[],6.193639724282320,8.441952765834760,10.15989845942420,[5.300651086743873],0,0.0,10.15989845942420,4.241686958447560,0.6952937339357340,-1.9519527658347600,1.9519527658347600,0,0.0,72.45648666778620,0.0,0.0,72.45648666778620,,False,6.193639724282320,[],6.193639724282320,8.671301679090890,5.300651086743870,[5.389348913256123],0,0.0,5.300651086743870,3.0523380451914300,0.6206139383991140,-3.141301679090890,3.141301679090890,0.0,0.0,0.0,21.20260434697550,0.0,21.20260434697550,,False,6.193639724282320,[],6.19363972428232,13.971952765834800,5.389348913256120,"[7.778313041552441, 6.19363972428232]",0,0.0,5.389348913256120,2.9116869584475600,0.9416139144956090,-3.2819527658347600,3.2819527658347600,0,0,0.0,10.778697826512200,0.0,10.778697826512200 -22,,False,5.2186383160538600,[],5.218638316053860,8.359939995144750,5.300651086743870,[5.389348913256123],0,0.0,5.300651086743870,3.348698320909120,0.6928533082901340,-1.8699399951447500,1.8699399951447500,0,0.0,69.41217261977300,0.0,0.0,69.41217261977300,,False,5.218638316053860,[],5.218638316053870,8.500591081888630,5.389348913256120,[7.778313041552441],0,0.0,5.389348913256120,2.248047234165240,0.6119725444552930,-2.9705910818886300,2.9705910818886300,0.0,0.0,0.0,21.557395653024500,0.0,21.557395653024500,,False,5.218638316053870,[],5.218638316053860,11.412278040336200,7.778313041552440,"[6.19363972428232, 5.218638316053863]",0,0.0,7.778313041552440,4.49636027571768,0.9379715941434280,-0.7222780403361850,0.7222780403361850,0,0,0.0,15.556626083104900,0.0,15.556626083104900 -23,,False,5.881761038948610,[],5.881761038948610,8.852352120837240,5.389348913256120,[7.778313041552441],0,0.0,5.389348913256120,3.5194089181113800,0.6882420660497510,-2.362352120837240,2.362352120837240,0,0.0,87.69051072547820,0.0,0.0,87.69051072547820,,False,5.881761038948610,[],5.88176103894861,6.604039079284800,7.778313041552440,[6.19363972428232],0,0.0,7.778313041552440,4.807721959663820,0.6219970624127580,-1.0740390792848000,1.0740390792848000,0.0,0.0,0.0,31.113252166209800,0.0,31.113252166209800,,False,5.88176103894861,[],5.881761038948610,11.100399355002500,6.19363972428232,"[5.218638316053863, 5.881761038948608]",0,0.0,6.19363972428232,5.471361683946130,0.937593568333974,-0.4103993550024750,0.4103993550024750,0,0,0.0,12.38727944856460,0.0,12.38727944856460 -24,,False,3.9909146571348900,[],3.9909146571348900,5.064953736419690,7.778313041552440,[5.064953736419688],0,0.0,6.353266777972130,3.9909146571348900,0.6982340319731020,1.425046263580310,0.0,0,9.9753238450622,0.0,0.0,0.0,9.9753238450622,,True,3.9909146571348900,[],3.9909146571348900,4.401314012137370,6.19363972428232,[4.401314012137369],0,0.0,5.064953736419690,3.9909146571348900,0.6341122070810600,1.1286859878626300,0.0,0.0,4.5147439514505300,0,20.25981494567880,0.0,24.77455889712930,,False,3.9909146571348900,[],3.990914657134900,9.872675696083510,5.218638316053860,"[5.881761038948608, 3.990914657134895]",0,0.0,4.401314012137370,3.9909146571348900,0.9395937193187580,0.8173243039164950,0.0,0,1.6346486078329900,0,8.802628024274740,0.0,10.437276632107700 -25,,False,3.4167057864631100,[],3.4167057864631100,3.416705786463110,5.064953736419690,[1.1286859878626316],0,0.0,3.4167057864631100,3.4167057864631100,0.7062930620663400,3.0732942135368900,0.0,0,21.513059494758200,0.0,0.0,0.0,21.513059494758200,,True,3.4167057864631100,[],3.4167057864631100,7.818019798600480,0,[7.818019798600481],0,0.0,1.1286859878626300,1.1286859878626300,0.6259996870083330,-2.288019798600480,2.288019798600480,0.0,0.0,0.0,4.5147439514505300,0.0,4.5147439514505300,,False,3.4167057864631100,[],3.4167057864631100,7.407620443598010,5.881761038948610,"[3.990914657134895, 3.4167057864631127]",0,0.0,3.4167057864631100,3.4167057864631100,0.9412069430928430,3.28237955640199,0.0,0,6.56475911280398,0,15.636039597201000,0.0,22.200798710004900 -26,,False,3.6533219026386500,[],3.6533219026386500,5.941341701239130,1.1286859878626300,[0.0],0,0.0,3.6533219026386500,3.6533219026386500,0.7144472227101940,0.5486582987608670,0.0,0,3.8406080913260700,0.0,0.0,0.0,3.8406080913260700,,False,3.6533219026386500,[],3.6533219026386500,11.471341701239100,0,[11.471341701239135],0,0.0,0.0,0.0,0.608620111140018,-5.941341701239140,5.941341701239140,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.6533219026386500,[],3.6533219026386600,7.07002768910177,3.990914657134900,"[3.4167057864631127, 3.6533219026386554]",0,0.0,3.6533219026386500,3.6533219026386500,0.9428392097125460,3.6199723108982300,0.0,0,7.239944621796460,0,22.94268340247830,0.0,30.182628024274700 -27,,False,4.119408733952890,[],4.119408733952890,10.060750435192000,0.0,[10.060750435192027],0,0.0,0.5486582987608670,0.5486582987608670,0.6968033329165890,-3.570750435192030,3.570750435192030,0,0.0,132.54625615432800,0.0,0.0,132.54625615432800,,False,4.119408733952890,[],4.119408733952890,4.119408733952890,11.471341701239100,[4.119408733952893],0,0.0,10.060750435192000,4.119408733952890,0.6205003025121860,1.4105912660471100,8.88178419700125E-16,0.0,5.642365064188430,0,40.24300174076810,0.0,45.88536680495650,,False,4.119408733952890,[],4.119408733952890,7.772730636591550,3.4167057864631100,"[3.6533219026386554, 4.119408733952891]",0,0.0,4.119408733952890,4.119408733952890,0.9445743043020440,2.917269363408450,0.0,0,5.834538726816900,0,8.238817467905790,0.0,14.073356194722700 -28,,False,5.582122794713040,[],5.5821227947130400,5.5821227947130400,10.060750435192000,[5.53],0,0.0,9.152873229905070,5.582122794713040,0.7087819775155560,0.9078772052869620,0.0,0,6.355140437008730,0.0,0.0,0.0,6.355140437008730,,False,5.5821227947130400,[],5.5821227947130400,5.5821227947130400,4.119408733952890,[5.5821227947130385],0,0.0,5.53,5.530000000000000,0.6351246123520420,-0.05212279471303830,0.052122794713039200,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.5821227947130400,[],5.582122794713040,9.701531528665930,3.6533219026386600,"[4.119408733952891, 5.582122794713037]",0,0.0,5.5821227947130400,5.5821227947130400,0.9467640536710020,0.9884684713340680,0.0,0,1.9769369426681400,0,11.164245589426100,0.0,13.141182532094200 -29,,False,5.887748459593360,[],5.887748459593360,5.939871254306400,5.53,[5.5821227947130385],0,0.0,5.887748459593360,5.887748459593360,0.720431840712657,0.5501287456936050,0.0,0,3.850901219855230,0.0,0.0,0.0,3.850901219855230,,False,5.887748459593360,[],5.887748459593360,5.887748459593360,5.5821227947130400,[5.107877205286959],0,0.0,5.5821227947130400,5.530000000000000,0.6472903605250230,-0.3577484595933570,0.357748459593358,0.0,0.0,0.0,22.328491178852200,0.0,22.328491178852200,,False,5.887748459593360,[],5.887748459593360,11.469871254306400,4.119408733952890,"[5.582122794713037, 5.887748459593357]",0,0.0,5.107877205286960,5.107877205286960,0.9435949160236060,-0.7798712543063980,0.7798712543063980,0,0,0.0,10.215754410573900,0.0,10.215754410573900 -30,,False,4.792834109895430,[],4.792834109895430,5.150582569488780,5.5821227947130400,[5.107877205286959],0,0.0,4.792834109895430,4.792834109895430,0.729248746553818,1.339417430511220,0.0,0,9.375922013578520,0.0,0.0,0.0,9.375922013578520,,False,4.792834109895430,[],4.792834109895430,5.572705364201830,5.107877205286960,[5.572705364201824],0,0.0,5.107877205286960,4.750128745693600,0.6581329644434590,-0.042705364201824000,0.042705364201824900,0.0,0.0,0.0,20.431508821147800,0.0,20.431508821147800,,False,4.792834109895430,[],4.792834109895430,10.680582569488800,5.582122794713040,"[5.887748459593357, 4.792834109895426]",0,0.0,5.572705364201820,4.792834109895430,0.9453737964070180,0.009417430511212470,0.0,0,0.01883486102242490,0,11.145410728403600,0.0,11.164245589426100 -31,,False,4.37652260501504,[],4.37652260501504,4.419227969216860,5.107877205286960,[4.419227969216865],0,0.0,4.37652260501504,4.37652260501504,0.736827635728371,2.070772030783140,0.0,0,14.495404215482000,0.0,0.0,0.0,14.495404215482000,,False,4.37652260501504,[],4.376522605015040,4.376522605015040,5.572705364201820,[4.376522605015039],0,0.0,4.419227969216870,4.37652260501504,0.6677025318672010,1.15347739498496,0.0,0.0,4.61390957993984,0,17.67691187686750,0.0,22.2908214568073,,False,4.376522605015040,[],4.376522605015040,9.169356714910470,5.887748459593360,"[4.792834109895426, 4.376522605015038]",0,0.0,4.376522605015040,4.376522605015040,0.9469028971509230,1.5206432850895300,0.0,0,3.041286570179060,0,8.753045210030080,0.0,11.79433178020910 -32,,False,3.491846710452520,[],3.491846710452520,3.491846710452520,4.419227969216870,[3.491846710452517],0,0.0,3.491846710452520,3.491846710452520,0.7425768523333160,2.998153289547480,0.0,0,20.987073026832400,0.0,0.0,0.0,20.987073026832400,,False,3.491846710452520,[],3.491846710452520,3.491846710452520,4.376522605015040,[3.491846710452518],0,0.0,3.491846710452520,3.491846710452520,0.6749618431815090,2.0381532895474800,0.0,0.0,8.15261315818993,0,13.967386841810100,0.0,22.120000000000000,,False,3.491846710452520,[],3.4918467104525200,7.868369315467560,4.792834109895430,"[4.376522605015038, 3.4918467104525197]",0,0.0,3.491846710452520,3.491846710452520,0.9480628470043930,2.8216306845324400,0.0,0,5.643261369064880,0,6.983693420905040,0.0,12.626954789969900 -33,,False,6.09964697578482,[],6.09964697578482,6.099646975784820,3.491846710452520,[5.53],0,0.0,6.09964697578482,6.09964697578482,0.7520392429670150,0.39035302421518100,0.0,0,2.732471169506270,0.0,0.0,0.0,2.732471169506270,,True,6.09964697578482,[],6.09964697578482,6.099646975784820,3.491846710452520,[6.09964697578482],0,0.0,5.53,5.53,0.6834767879474380,-0.5696469757848200,0.5696469757848200,0.0,0.0,0.0,22.12,0.0,22.12,,False,6.09964697578482,[],6.099646975784820,9.591493686237340,4.376522605015040,"[3.4918467104525197, 6.099646975784818]",0,0.0,6.09964697578482,6.09964697578482,0.9499719590423010,1.0985063137626600,0.0,0,2.1970126275253100,0,12.19929395156960,0.0,14.396306579095000 -34,,False,6.179716344700700,[],6.179716344700700,6.749363320485520,5.53,[0.0],0,0.0,5.920353024215180,5.920353024215180,0.7594350422060430,-0.25936332048551900,0.25936332048551900,0,0.0,9.627566456422480,0.0,0.0,9.627566456422480,,True,6.179716344700700,[],6.179716344700700,12.279363320485500,0,[10.689999999999996],0,0.0,0.0,0.0,0.6589375335419660,-6.7493633204855200,6.7493633204855200,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.179716344700700,[],6.179716344700700,12.279363320485500,3.4918467104525200,"[6.099646975784818, 6.179716344700703]",0,0.0,4.590353024215180,4.590353024215180,0.9425340937912580,-1.5893633204855200,1.5893633204855200,0,0,0.0,21.380000000000000,0.0,21.380000000000000 -35,,False,4.101792060544320,[],4.101792060544320,10.851155381029800,0.0,[0.0],0,0.0,0.0,0.0,0.7417581855543650,-4.361155381029840,4.361155381029840,0,0.0,161.88608774382800,0.0,0.0,161.88608774382800,,False,4.101792060544320,[],4.101792060544320,16.381155381029800,0,[16.381155381029842],0,0.0,0.0,0.0,0.6435998895362380,-10.851155381029800,10.851155381029800,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.101792060544320,[],4.10179206054432,10.281508405245000,6.099646975784820,"[6.179716344700703, 4.10179206054432]",0,0.0,5.691155381029850,4.101792060544320,0.9438716888849210,0.4084915947549710,0.0,0,0.8169831895099420,0,32.762310762059700,0.0,33.579293951569600 -36,,False,3.962170123484520,[],3.962170123484520,14.81332550451440,0.0,[14.813325504514363],0,0.0,0.0,0.0,0.7254472186648720,-8.32332550451436,8.32332550451436,0,0.0,308.961842727573,0.0,0.0,308.961842727573,,False,3.962170123484520,[],3.962170123484520,3.9621701234845200,16.381155381029800,[3.962170123484518],0,0.0,14.813325504514400,3.962170123484520,0.6514369859301810,1.5678298765154800,0.0,0.0,6.271319506061910,0,59.253302018057500,0.0,65.52462152411940,,False,3.962170123484520,[],3.96217012348452,8.063962184028840,6.179716344700700,"[4.10179206054432, 3.96217012348452]",0,0.0,3.962170123484520,3.962170123484520,0.9451059280776800,2.6260378159711600,0.0,0,5.252075631942310,0,7.924340246969040,0.0,13.176415878911300 -37,,False,4.924196254971820,[],4.924196254971820,4.924196254971810,14.813325504514400,[4.924196254971815],0,0.0,13.247521759486200,4.924196254971820,0.7327508022412240,1.5658037450281900,0.0,0,10.960626215197300,0.0,0.0,0.0,10.960626215197300,,False,4.924196254971820,[],4.924196254971810,4.924196254971820,3.962170123484520,[4.924196254971814],0,0.0,4.924196254971820,4.924196254971820,0.6607093709794390,0.6058037450281820,0.0,0.0,2.4232149801127300,0,19.69678501988730,0.0,22.120000000000000,,False,4.924196254971810,[],4.924196254971810,8.886366378456340,4.10179206054432,"[3.96217012348452, 4.924196254971814]",0,0.0,4.924196254971810,4.924196254971810,0.9465662062805860,1.8036336215436600,0.0,0,3.6072672430873200,0,9.848392509943630,0.0,13.455659753031000 -38,,False,6.495434252883470,[],6.495434252883470,6.49543425288347,4.924196254971820,[5.529999999999996],0,0.0,6.490000000000000,6.490000000000000,0.7417822964375150,-0.005434252883469880,0.005434252883469880,0,0.0,0.20171946703440200,0.0,0.0,0.20171946703440200,,False,6.495434252883470,[],6.495434252883470,6.495434252883480,4.924196254971810,[5.765803745028182],0,0.0,5.530000000000000,5.530000000000000,0.6671727504053450,-0.9654342528834780,0.9654342528834780,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,6.495434252883470,[],6.495434252883470,11.419630507855300,3.96217012348452,"[4.924196254971814, 6.495434252883473]",0,0.0,5.765803745028180,5.765803745028180,0.9445696094688700,-0.7296305078552910,0.7296305078552910,0,0,0.0,11.531607490056400,0.0,11.531607490056400 -39,,False,5.33818125199332,[],5.33818125199332,6.3036155048767900,5.530000000000000,[5.765803745028182],0,0.0,5.34361550487679,5.33818125199332,0.7487813904216580,0.18638449512320600,0.0,0,1.3046914658624400,0.0,0.0,0.0,1.3046914658624400,,False,5.33818125199332,[],5.33818125199332,6.067811759848620,5.765803745028180,[4.924196254971814],0,0.0,5.765803745028180,4.800369492144700,0.67346334772752,-0.5378117598486160,0.5378117598486160,0.0,0.0,0.0,23.06321498011270,0.0,23.06321498011270,,False,5.33818125199332,[],5.338181251993320,11.833615504876800,4.924196254971810,"[6.495434252883473, 5.338181251993318]",0,0.0,4.924196254971810,4.194565747116520,0.9402651966402580,-1.1436155048768000,1.1436155048768000,0,0,0.0,9.848392509943630,0.0,9.848392509943630 -40,,False,4.6013616099848000,[],4.601361609984800,5.1391733698334100,5.765803745028180,[4.924196254971814],0,0.0,4.6013616099848000,4.6013616099848000,0.7545168799912200,1.3508266301665900,0.0,0,9.455786411166130,0.0,0.0,0.0,9.455786411166130,,False,4.601361609984800,[],4.601361609984800,5.7449771148616000,4.924196254971810,[5.744977114861596],0,0.0,4.924196254971810,4.386384495123200,0.6798517423728260,-0.21497711486160100,0.21497711486160100,0.0,0.0,0.0,19.696785019887300,0.0,19.696785019887300,,False,4.601361609984800,[],4.601361609984800,9.939542861978120,6.495434252883470,"[5.338181251993318, 4.601361609984799]",0,0.0,5.744977114861600,4.601361609984800,0.9416289823175400,0.7504571380218770,0.0,0,1.500914276043750,0,11.489954229723200,0.0,12.990868505766900 -41,,False,4.939135912525250,[],4.939135912525250,5.15411302738685,4.924196254971810,[5.154113027386855],0,0.0,4.939135912525250,4.939135912525250,0.7603889357003970,1.3358869726131500,0.0,0,9.351208808292050,0.0,0.0,0.0,9.351208808292050,,False,4.939135912525250,[],4.939135912525250,4.939135912525260,5.744977114861600,[4.939135912525253],0,0.0,5.154113027386860,4.939135912525250,0.6875098184308260,0.5908640874747410,0.0,0.0,2.3634563498989600,0,20.61645210954740,0.0,22.979908459446400,,False,4.939135912525250,[],4.939135912525260,9.540497522510060,5.338181251993320,"[4.601361609984799, 4.939135912525255]",0,0.0,4.939135912525250,4.939135912525250,0.9430252407145350,1.1495024774899400,0.0,0,2.2990049549798800,0,9.878271825050510,0.0,12.17727678003040 -42,,False,3.581249541408600,[],3.581249541408600,3.581249541408590,5.154113027386860,[3.581249541408598],0,0.0,3.581249541408600,3.581249541408600,0.7644739269498500,2.9087504585914100,0.0,0,20.361253210139900,0.0,0.0,0.0,20.361253210139900,,True,3.581249541408600,[],3.581249541408600,3.581249541408600,4.939135912525250,[3.581249541408598],0,0.0,3.581249541408600,3.581249541408600,0.6928372838422480,1.948750458591400,0.0,0.0,7.795001834365580,0,14.324998165634400,0.0,22.120000000000000,,False,3.581249541408600,[],3.581249541408600,8.520385453933860,4.601361609984800,"[4.939135912525255, 3.581249541408596]",0,0.0,3.581249541408600,3.581249541408600,0.9439965706228640,2.169614546066140,0.0,0,4.339229092132290,0,7.162499082817200,0.0,11.501728174949500 -43,,False,6.0424916173394200,[],6.0424916173394200,6.042491617339420,3.581249541408600,[1.948750458591396],0,0.0,6.0424916173394200,6.0424916173394200,0.7710594232164330,0.447508382660585,0.0,0,3.132558678624100,0.0,0.0,0.0,3.132558678624100,,True,6.0424916173394200,[],6.042491617339420,9.623741158748030,0,[9.62374115874802],0,0.0,1.948750458591400,1.948750458591400,0.6824825760138530,-4.093741158748020,4.093741158748020,0.0,0.0,0.0,7.795001834365580,0.0,7.795001834365580,,False,6.042491617339420,[],6.042491617339420,9.623741158748020,4.939135912525260,"[3.581249541408596, 6.042491617339423]",0,0.0,6.042491617339420,6.042491617339420,0.9455624710359380,1.066258841251980,0.0,0,2.132517682503950,0,19.24748231749600,0.0,21.380000000000000 -44,,False,4.465583546326500,[],4.465583546326490,8.559324705074510,1.948750458591400,[0.0],0,0.0,2.396258841251980,2.396258841251980,0.7663127913577260,-2.069324705074510,2.069324705074510,0,0.0,76.81333305236600,0.0,0.0,76.81333305236600,,False,4.465583546326490,[],4.465583546326490,14.089324705074500,0,[14.089324705074512],0,0.0,0.0,0.0,0.668665361334626,-8.559324705074520,8.559324705074520,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.465583546326490,[],4.465583546326490,10.50807516366590,3.581249541408600,"[6.042491617339423, 4.465583546326494]",0,0.0,4.465583546326490,4.465583546326490,0.946664587120273,0.18192483633408100,0.0,0,0.36384967266816100,0,28.178649410149000,0.0,28.542499082817200 -45,,False,3.5049461291856600,[],3.5049461291856600,12.064270834260200,0.0,[12.064270834260181],0,0.0,0.0,0.0,0.7543263206822020,-5.574270834260180,5.574270834260180,0,0.0,206.91693336773800,0.0,0.0,206.91693336773800,,False,3.5049461291856600,[],3.5049461291856600,3.504946129185670,14.089324705074500,[3.5049461291856634],0,0.0,12.064270834260200,3.504946129185670,0.6738480138688620,2.0250538708143300,0.0,0.0,8.100215483257330,0,48.257083337040700,0.0,56.357298820298100,,False,3.5049461291856600,[],3.5049461291856600,7.970529675512160,6.042491617339420,"[4.465583546326494, 3.5049461291856616]",0,0.0,3.5049461291856600,3.5049461291856600,0.9474988461456470,2.7194703244878400,0.0,0,5.438940648975680,0,7.009892258371330,0.0,12.448832907347000 -46,,False,4.7878385782883700,[],4.7878385782883700,4.787838578288370,12.064270834260200,[4.7878385782883734],0,0.0,10.362109412548600,4.787838578288370,0.7594658129390820,1.7021614217116300,0.0,0,11.915129951981400,0.0,0.0,0.0,11.915129951981400,,False,4.7878385782883700,[],4.787838578288380,4.787838578288380,3.5049461291856600,[4.787838578288375],0,0.0,4.7878385782883700,4.7878385782883700,0.6806711119392040,0.7421614217116220,0.0,0.0,2.968645686846490,0,19.151354313153500,0.0,22.12000000000000,,False,4.787838578288380,[],4.787838578288380,8.292784707474040,4.465583546326490,"[3.5049461291856616, 4.787838578288377]",0,0.0,4.787838578288380,4.787838578288380,0.9485971700461190,2.397215292525960,0.0,0,4.794430585051920,0,9.57567715657675,0.0,14.370107741628700 -47,,False,4.573131205960280,[],4.573131205960280,4.573131205960270,4.7878385782883700,[4.573131205960278],0,0.0,4.573131205960280,4.573131205960280,0.7641779738724710,1.9168687940397300,0.0,0,13.418081558278100,0.0,0.0,0.0,13.418081558278100,,False,4.573131205960280,[],4.573131205960280,4.573131205960280,4.787838578288380,[4.573131205960279],0,0.0,4.573131205960280,4.573131205960280,0.6869268925814850,0.9568687940397190,0.0,0.0,3.827475176158870,0,18.292524823841100,0.0,22.120000000000000,,False,4.573131205960280,[],4.573131205960280,9.360969784248660,3.5049461291856600,"[4.787838578288377, 4.573131205960277]",0,0.0,4.573131205960280,4.573131205960280,0.9496041720450200,1.3290302157513400,0.0,0,2.6580604315026800,0,9.146262411920560,0.0,11.804322843423200 -48,,False,5.501448331524810,[],5.501448331524810,5.5014483315248,4.573131205960280,[5.501448331524805],0,0.0,5.501448331524810,5.501448331524810,0.7696076598836440,0.9885516684752000,0.0,0,6.919861679326400,0.0,0.0,0.0,6.919861679326400,,False,5.501448331524810,[],5.501448331524810,5.501448331524810,4.573131205960280,[5.501448331524806],0,0.0,5.501448331524810,5.501448331524810,0.6941352466938590,0.02855166847519280,0.0,0.0,0.114206673900771,0,22.00579332609920,0.0,22.12000000000000,,False,5.501448331524810,[],5.5014483315248100,10.074579537485100,4.787838578288380,"[4.573131205960277, 5.5014483315248075]",0,0.0,5.501448331524810,5.501448331524810,0.9507645111641520,0.6154204625149130,0.0,0,1.2308409250298300,0,11.002896663049600,0.0,12.233737588079400 -49,,False,6.158186652932030,[],6.158186652932030,6.158186652932020,5.501448331524810,[5.5299999999999985],0,0.0,6.158186652932030,6.158186652932030,0.7753963846606910,0.3318133470679770,0.0,0,2.3226934294758400,0.0,0.0,0.0,2.3226934294758400,,False,6.158186652932030,[],6.158186652932030,6.158186652932030,5.501448331524810,[5.18855166847519],0,0.0,5.5300000000000000,5.5300000000000000,0.6992572417667650,-0.6281866529320290,0.6281866529320290,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,6.158186652932030,[],6.15818665293203,11.65963498445680,4.573131205960280,"[5.5014483315248075, 6.15818665293203]",0,0.0,5.18855166847519,5.18855166847519,0.9480454502438670,-0.9696349844568380,0.9696349844568380,0,0,0.0,10.37710333695040,0.0,10.37710333695040 -50,,False,6.371862133549780,[],6.371862133549780,7.000048786481800,5.5300000000000000,[5.18855166847519],0,0.0,5.861813347067980,5.861813347067980,0.7790592417812430,-0.5100487864818010,0.5100487864818010,0,0.0,18.933010954204400,0.0,0.0,18.933010954204400,,False,6.371862133549780,[],6.371862133549780,7.341497118006620,5.18855166847519,[5.5014483315248075],0,0.0,5.18855166847519,4.560365015543160,0.6996739704118700,-1.8114971180066200,1.8114971180066200,0.0,0.0,0.0,20.75420667390080,0.0,20.75420667390080,,False,6.371862133549780,[],6.371862133549780,12.530048786481800,5.5014483315248100,"[6.15818665293203, 6.371862133549775]",0,0.0,5.5014483315248100,4.53181334706797,0.9420447009271180,-1.8400487864818100,1.8400487864818100,0,0,0.0,11.002896663049600,0.0,11.002896663049600 -51,,False,5.175553293954830,[],5.175553293954830,6.987050411961440,5.18855166847519,[5.5014483315248075],0,0.0,5.18855166847519,4.678502881993390,0.781578058621927,-0.4970504119614430,0.4970504119614430,0,0.0,18.450511292008800,0.0,0.0,18.450511292008800,,False,5.175553293954830,[],5.175553293954830,7.015602080436640,5.5014483315248100,[6.15818665293203],0,0.0,5.5014483315248100,3.689951213518190,0.699941855817155,-1.4856020804366400,1.4856020804366400,0.0,0.0,0.0,22.00579332609920,0.0,22.00579332609920,,False,5.175553293954830,[],5.17555329395483,11.547415427504600,6.15818665293203,"[6.371862133549775, 5.17555329395483]",0,0.0,6.15818665293203,4.318137866450220,0.9398725722110830,-0.8574154275046090,0.8574154275046090,0,0,0.0,12.31637330586410,0.0,12.31637330586410 -52,,False,4.743369817307450,[],4.743369817307450,6.228971897744080,5.5014483315248100,[6.15818665293203],0,0.0,5.240420229268890,4.743369817307450,0.7855417330244320,0.2610281022559190,0.0,0,1.8271967157914300,0.0,0.0,0.0,1.8271967157914300,,False,4.743369817307450,[],4.743369817307450,5.600785244812060,6.15818665293203,[5.600785244812054],0,0.0,6.15818665293203,4.672584572495390,0.7051161662263670,-0.07078524481205670,0.07078524481205670,0.0,0.0,0.0,24.63274661172810,0.0,24.63274661172810,,False,4.743369817307450,[],4.743369817307450,9.918923111262280,6.371862133549780,"[5.17555329395483, 4.743369817307447]",0,0.0,5.600785244812050,4.743369817307450,0.9409636967790260,0.7710768887377210,0.0,0,1.5421537774754400,0,11.201570489624100,0.0,12.74372426709960 -53,,False,4.632174275867240,[],4.632174275867240,4.702959520679290,6.15818665293203,[4.702959520679295],0,0.0,4.632174275867240,4.632174275867240,0.789276069714642,1.7870404793207100,0.0,0,12.509283355245000,0.0,0.0,0.0,12.509283355245000,,False,4.632174275867240,[],4.632174275867240,4.63217427586724,5.600785244812050,[4.632174275867239],0,0.0,4.702959520679300,4.632174275867240,0.7102509438935580,0.8978257241327590,0.0,0.0,3.5913028965310400,0,18.81183808271720,0.0,22.403140979248200,,False,4.632174275867240,[],4.632174275867240,9.375544093174690,5.17555329395483,"[4.743369817307447, 4.632174275867241]",0,0.0,4.632174275867240,4.632174275867240,0.9419916890139790,1.3144559068253100,0.0,0,2.628911813650620,0,9.264348551734480,0.0,11.893260365385100 -54,,False,2.34482395243653,[],2.3448239524365300,2.344823952436530,4.702959520679300,[2.3448239524365295],0,0.0,2.34482395243653,2.34482395243653,0.7911172596290380,4.145176047563480,0.0,0,29.016232332944300,0.0,0.0,0.0,29.016232332944300,,False,2.3448239524365300,[],2.3448239524365300,2.3448239524365300,4.632174275867240,[2.3448239524365304],0,0.0,2.3448239524365300,2.3448239524365300,0.7127826119347080,3.185176047563470,0.0,0.0,12.740704190253900,0,9.379295809746120,0.0,22.120000000000000,,False,2.3448239524365300,[],2.3448239524365300,6.9769982283037700,4.743369817307450,"[4.632174275867241, 2.3448239524365295]",0,0.0,2.3448239524365300,2.3448239524365300,0.9424985337610090,3.713001771696230,0.0,0,7.426003543392460,0,4.689647904873060,0.0,12.115651448265500 -55,,False,5.345517943888770,[],5.3455179438887700,5.345517943888760,2.3448239524365300,[5.3455179438887654],0,0.0,5.345517943888770,5.345517943888770,0.7951967058947790,1.1444820561112400,0.0,0,8.011374392778670,0.0,0.0,0.0,8.011374392778670,,False,5.3455179438887700,[],5.3455179438887700,5.345517943888770,2.3448239524365300,[5.3455179438887654],0,0.0,5.3455179438887700,5.3455179438887700,0.7183919212491970,0.18448205611123400,0.0,0.0,0.7379282244449360,0,21.382071775555100,0.0,22.120000000000000,,False,5.3455179438887700,[],5.3455179438887700,7.690341896325300,4.632174275867240,"[2.3448239524365295, 5.3455179438887654]",0,0.0,5.3455179438887700,5.3455179438887700,0.9436215281324290,2.9996581036747000,0.0,0,5.999316207349410,0,10.691035887777500,0.0,16.69035209512690 -56,,False,5.45293632653351,[],5.45293632653351,5.452936326533510,5.3455179438887700,[5.45293632653351],0,0.0,5.45293632653351,5.45293632653351,0.799197158679505,1.0370636734664900,0.0,0,7.259445714265460,0.0,0.0,0.0,7.259445714265460,,False,5.45293632653351,[],5.45293632653351,5.452936326533510,5.3455179438887700,[5.344482056111234],0,0.0,5.45293632653351,5.45293632653351,0.7238926131582890,0.07706367346648960,0.0,0.0,0.3082546938659580,0,21.81174530613400,0.0,22.120000000000000,,False,5.45293632653351,[],5.45293632653351,10.798454270422300,2.3448239524365300,"[5.3455179438887654, 5.45293632653351]",0,0.0,5.344482056111230,5.344482056111230,0.9443342794020500,-0.10845427042227600,0.10845427042227600,0,0,0.0,10.688964112222500,0.0,10.688964112222500 -57,,False,4.833939091648940,[],4.833939091648940,4.83393909164893,5.45293632653351,[4.833939091648935],0,0.0,4.833939091648940,4.833939091648940,0.8026150402953830,1.65606090835107,0.0,0,11.592426358457500,0.0,0.0,0.0,11.592426358457500,,False,4.833939091648940,[],4.833939091648940,4.942393362071210,5.344482056111230,[4.94239336207121],0,0.0,4.833939091648940,4.833939091648940,0.7285922596139300,0.587606637928789,0.0,0.0,2.350426551715160,0,19.33575636659570,0.0,21.686182918310900,,False,4.833939091648940,[],4.833939091648940,10.286875418182400,5.3455179438887700,"[5.45293632653351, 4.833939091648936]",0,0.0,4.94239336207121,4.833939091648940,0.9452817701935910,0.40312458181755500,0.0,0,0.8062491636351100,0,9.88478672414242,0.0,10.691035887777500 -58,,False,4.056943191532740,[],4.056943191532740,4.056943191532730,4.833939091648940,[4.056943191532738],0,0.0,4.056943191532740,4.056943191532740,0.8053950025777580,2.433056808467270,0.0,0,17.03139765927090,0.0,0.0,0.0,17.03139765927090,,False,4.056943191532740,[],4.056943191532740,4.056943191532740,4.94239336207121,[4.056943191532738],0,0.0,4.056943191532740,4.056943191532740,0.7324147559305020,1.4730568084672600,0.0,0.0,5.892227233869050,0,16.22777276613100,0.0,22.120000000000000,,False,4.056943191532740,[],4.056943191532740,8.890882283181670,5.45293632653351,"[4.833939091648936, 4.056943191532736]",0,0.0,4.056943191532740,4.056943191532740,0.9460524196658090,1.7991177168183300,0.0,0,3.5982354336366500,0,8.113886383065480,0.0,11.71212181670210 -59,,False,6.403958738659290,[],6.403958738659290,6.403958738659290,4.056943191532740,[5.529999999999999],0,0.0,6.403958738659290,6.403958738659290,0.8096273279748890,0.08604126134071160,0.0,0,0.6022888293849810,0.0,0.0,0.0,0.6022888293849810,,False,6.403958738659290,[],6.403958738659290,6.403958738659290,4.056943191532740,[6.403958738659292],0,0.0,5.530000000000000,5.530000000000000,0.735266252306686,-0.8739587386592940,0.8739587386592940,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,6.403958738659290,[],6.403958738659290,10.46090193019200,4.833939091648940,"[4.056943191532736, 6.403958738659294]",0,0.0,6.403958738659290,6.403958738659290,0.947225687142937,0.22909806980797100,0.0,0,0.45819613961594300,0,12.807917477318600,0.0,13.266113616934500 -60,,False,4.98144919548836,[],4.98144919548836,5.8554079341476500,5.530000000000000,[5.855407934147654],0,0.0,4.98144919548836,4.98144919548836,0.8127943507918060,0.6345920658523510,0.0,0,4.442144460966460,0.0,0.0,0.0,4.442144460966460,,False,4.98144919548836,[],4.98144919548836,4.981449195488360,6.403958738659290,[4.286041261340707],0,0.0,5.855407934147650,4.98144919548836,0.7396703393557040,0.5485508045116380,0.0,0.0,2.194203218046550,0,23.421631736590600,0.0,25.61583495463720,,False,4.98144919548836,[],4.981449195488360,11.385407934147700,4.056943191532740,"[6.403958738659294, 4.981449195488358]",0,0.0,4.286041261340710,4.286041261340710,0.9457812706710780,-0.6954079341476530,0.6954079341476530,0,0,0.0,8.572082522681420,0.0,8.572082522681420 -61,,False,3.326495378009780,[],3.326495378009780,3.3264953780097700,5.855407934147650,[3.326495378009777],0,0.0,3.326495378009780,3.326495378009780,0.814851182450728,3.163504621990230,0.0,0,22.144532353931600,0.0,0.0,0.0,22.144532353931600,,False,3.326495378009780,[],3.326495378009780,4.0219033121574300,4.286041261340710,[4.02190331215743],0,0.0,3.326495378009780,3.326495378009780,0.7425305857747330,1.5080966878425700,0.0,0.0,6.032386751370280,0,13.305981512039100,0.0,19.338368263409400,,False,3.326495378009780,[],3.326495378009780,8.307944573498130,6.403958738659290,"[4.981449195488358, 3.326495378009775]",0,0.0,4.02190331215743,3.326495378009780,0.9463769727744170,2.3820554265018600,0.0,0,4.764110853003730,0,8.04380662431486,0.0,12.807917477318600 -62,,False,5.1023476825496700,[],5.102347682549670,5.102347682549660,3.326495378009780,[5.102347682549666],0,0.0,5.1023476825496700,5.1023476825496700,0.817919681042261,1.3876523174503400,0.0,0,9.713566222152370,0.0,0.0,0.0,9.713566222152370,,False,5.102347682549670,[],5.102347682549670,5.102347682549670,4.02190331215743,[5.102347682549666],0,0.0,5.102347682549670,5.102347682549670,0.7467976642544690,0.42765231745033300,0.0,0.0,1.7106092698013300,0,20.409390730198700,0.0,22.120000000000000,,False,5.102347682549670,[],5.102347682549670,8.42884306055944,4.981449195488360,"[3.326495378009775, 5.102347682549667]",0,0.0,5.102347682549670,5.102347682549670,0.9472656750934130,2.261156939440560,0.0,0,4.522313878881110,0,10.204695365099300,0.0,14.727009243980400 -63,,False,4.5673907194519900,[],4.5673907194519900,4.567390719451980,5.102347682549670,[4.5673907194519865],0,0.0,4.5673907194519900,4.5673907194519900,0.8205814505339040,1.9226092805480200,0.0,0,13.458264963836100,0.0,0.0,0.0,13.458264963836100,,False,4.5673907194519900,[],4.5673907194519900,4.567390719451990,5.102347682549670,[4.5673907194519865],0,0.0,4.5673907194519900,4.5673907194519900,0.7504991420218520,0.962609280548012,0.0,0.0,3.850437122192050,0,18.269562877807900,0.0,22.120000000000000,,False,4.5673907194519900,[],4.567390719451990,9.669738402001660,3.326495378009780,"[5.102347682549667, 4.567390719451988]",0,0.0,4.5673907194519900,4.5673907194519900,0.9480365800325200,1.0202615979983500,0.0,0,2.040523195996690,0,9.134781438903970,0.0,11.175304634900700 -64,,False,5.477754099433530,[],5.477754099433530,5.4777540994335200,4.5673907194519900,[5.477754099433527],0,0.0,5.477754099433530,5.477754099433530,0.8236728910319020,1.0122459005664800,0.0,0,7.085721303965340,0.0,0.0,0.0,7.085721303965340,,True,5.477754099433530,[],5.477754099433530,5.477754099433530,4.5673907194519900,[5.477754099433527],0,0.0,5.477754099433530,5.477754099433530,0.7547981236986860,0.05224590056647130,0.0,0.0,0.20898360226588500,0,21.91101639773410,0.0,22.120000000000000,,False,5.477754099433530,[],5.477754099433530,10.045144818885500,5.102347682549670,"[4.567390719451988, 5.477754099433525]",0,0.0,5.477754099433530,5.477754099433530,0.9489319268145560,0.6448551811144860,0.0,0,1.2897103622289700,0,10.955508198867100,0.0,12.245218561096000 -65,,False,4.7409713552611100,[],4.740971355261110,4.740971355261110,5.477754099433530,[0.05224590056647127],0,0.0,4.7409713552611100,4.7409713552611100,0.8262637795058630,1.7490286447388900,0.0,0,12.24320051317230,0.0,0.0,0.0,12.24320051317230,,True,4.740971355261110,[],4.7409713552611100,10.218725454694600,0,[10.218725454694637],0,0.0,0.05224590056647130,0.05224590056647130,0.7438693109788680,-4.688725454694640,4.688725454694640,0.0,0.0,0.0,0.20898360226588500,0.0,0.20898360226588500,,False,4.7409713552611100,[],4.740971355261110,10.218725454694600,4.567390719451990,"[5.477754099433525, 4.740971355261108]",0,0.0,4.7409713552611100,4.7409713552611100,0.9496823031065390,0.4712745453053650,0.0,0,0.9425490906107290,0,20.437450909389300,0.0,21.380000000000000 -66,,False,5.339820964186640,[],5.339820964186640,10.028546418881300,0.05224590056647130,[0.0],0,0.0,1.8012745453053700,1.8012745453053700,0.8183038055050890,-3.5385464188812800,3.5385464188812800,0,0.0,131.35084306887300,0.0,0.0,131.35084306887300,,True,5.339820964186640,[],5.339820964186640,15.558546418881300,0,[15.55854641888128],0,0.0,0.0,0.0,0.7317589513409680,-10.02854641888130,10.02854641888130,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.339820964186640,[],5.339820964186640,10.080792319447800,5.477754099433530,"[4.740971355261108, 5.339820964186643]",0,0.0,5.339820964186640,5.339820964186640,0.950501486525638,0.609207680552247,0.0,0,1.218415361104490,0,31.11709283776260,0.0,32.33550819886710 -67,,False,4.992619850055430,[],4.992619850055430,15.021166268936700,0.0,[0.0],0,0.0,0.0,0.0,0.806034615426208,-8.531166268936710,8.531166268936710,0,0.0,316.67689190293000,0.0,0.0,316.67689190293000,,True,4.992619850055430,[],4.992619850055430,20.55116626893670,0,[20.551166268936708],0,0.0,0.0,0.0,0.7207873664533930,-15.02116626893670,15.02116626893670,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.992619850055430,[],4.992619850055430,10.332440814242100,4.740971355261110,"[5.339820964186643, 4.992619850055428]",0,0.0,4.992619850055430,4.992619850055430,0.9512436395821840,0.35755918575792700,0.0,0,0.7151183715158530,0,41.102332537873400,0.0,41.817450909389300 -68,,False,4.224663894043060,[],4.224663894043050,19.24583016297980,0.0,[0.0],0,0.0,0.0,0.0,0.7959364293210300,-12.75583016297980,12.75583016297980,0,0.0,473.4964156498090,0.0,0.0,473.4964156498090,,False,4.224663894043050,[],4.224663894043050,24.775830162979800,0,[24.775830162979762],0,0.0,0.0,0.0,0.7117571773902850,-19.245830162979800,19.245830162979800,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.224663894043050,[],4.224663894043050,9.217283744098480,5.339820964186640,"[4.992619850055428, 4.224663894043053]",0,0.0,4.224663894043050,4.224663894043050,0.9518544704223090,1.4727162559015200,0.0,0,2.9454325118030300,0,49.551660325959500,0.0,52.49709283776260 -69,,False,5.773140855889250,[],5.773140855889250,25.01897101886900,0.0,[24.775830162979762],0,0.0,0.0,0.0,0.7825391763850950,-18.528971018869000,18.528971018869000,0,0.0,687.7954042204180,0.0,0.0,687.7954042204180,,False,5.773140855889250,[],5.773140855889250,5.7731408558892500,24.775830162979800,[5.773140855889248],0,0.0,24.775830162979800,5.530000000000000,0.7159000019963850,-0.24314085588925100,0.24314085588925100,0.0,0.0,0.0,99.10332065191910,0.0,99.10332065191910,,False,5.773140855889250,[],5.773140855889250,9.997804749932300,4.992619850055430,"[4.224663894043053, 5.773140855889246]",0,0.0,5.773140855889250,5.773140855889250,0.9526648590585430,0.6921952500676960,0.0,0,1.3843905001353900,0,11.546281711778500,0.0,12.930672211913900 -70,,False,6.405205305878190,[],6.405205305878190,6.648346161767440,24.775830162979800,[5.773140855889248],0,0.0,24.775830162979800,6.246859144110750,0.7860725783269320,-0.158346161767434,0.158346161767434,0,0.0,5.877809524807150,0.0,0.0,5.877809524807150,,False,6.405205305878190,[],6.4052053058781900,6.40520530587819,5.773140855889250,[4.91685914411075],0,0.0,5.773140855889250,5.530000000000000,0.718603324061035,-0.8752053058781900,0.8752053058781900,0.0,0.0,0.0,23.092563423557000,0.0,23.092563423557000,,False,6.4052053058781900,[],6.405205305878190,12.178346161767400,4.224663894043050,"[5.773140855889246, 6.405205305878187]",0,0.0,4.91685914411075,4.91685914411075,0.9492727897347430,-1.4883461617674400,1.4883461617674400,0,0,0.0,9.8337182882215,0.0,9.8337182882215 -71,,False,6.392325753491900,[],6.392325753491900,7.26753105937009,5.773140855889250,[4.91685914411075],0,0.0,5.773140855889250,5.614794694121810,0.7877307911717970,-0.777531059370089,0.777531059370089,0,0.0,28.861952923817700,0.0,0.0,28.861952923817700,,False,6.392325753491900,[],6.392325753491900,7.8806719152593400,4.91685914411075,[5.773140855889246],0,0.0,4.91685914411075,4.04165383823256,0.7170521148965800,-2.3506719152593400,2.3506719152593400,0.0,0.0,0.0,19.667436576443,0.0,19.667436576443,,False,6.392325753491900,[],6.3923257534919000,12.79753105937010,5.773140855889250,"[6.405205305878187, 6.3923257534919005]",0,0.0,5.773140855889250,4.2847946941218100,0.9442605493134870,-2.1075310593700900,2.1075310593700900,0,0,0.0,11.546281711778500,0.0,11.546281711778500 -72,,False,4.5065675177966700,[],4.506567517796670,6.857239433056010,4.91685914411075,[5.773140855889246],0,0.0,4.91685914411075,4.139328084740660,0.7893666067989310,-0.3672394330560130,0.3672394330560130,0,0.0,13.631927755039200,0.0,0.0,13.631927755039200,,True,4.506567517796670,[],4.506567517796670,6.614098577166770,5.773140855889250,[6.405205305878187],0,0.0,5.773140855889250,3.422468940629900,0.7175823149982160,-1.0840985771667700,1.0840985771667700,0.0,0.0,0.0,23.092563423557000,0.0,23.092563423557000,,False,4.506567517796670,[],4.506567517796670,10.898893271288600,6.405205305878190,"[6.3923257534919005, 4.506567517796674]",0,0.0,6.405205305878190,4.2976742465081000,0.9443779560267260,-0.20889327128857700,0.20889327128857700,0,0,0.0,12.810410611756400,0.0,12.810410611756400 -73,,False,5.923162608341950,[],5.923162608341950,7.00726118550872,5.773140855889250,[0.0],0,0.0,5.773140855889250,5.405901422833230,0.791360956192184,-0.517261185508719,0.517261185508719,0,0.0,19.20073520608370,0.0,0.0,19.20073520608370,,True,5.923162608341950,[],5.923162608341950,12.537261185508700,0,[12.537261185508717],0,0.0,0.0,0.0,0.705976040783371,-7.007261185508720,7.007261185508720,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.923162608341950,[],5.923162608341950,10.42973012613860,6.3923257534919000,"[4.506567517796674, 5.923162608341951]",0,0.0,6.13205587963053,5.923162608341950,0.9452775945507680,0.2602698738613710,0.0,0,0.5205397477227420,0,25.074522371017400,0.0,25.595062118740200 -74,,False,6.706604953678460,[],6.706604953678460,13.713866139187200,0.0,[0.0],0,0.0,0.0,0.0,0.7771290422304360,-7.223866139187180,7.223866139187180,0,0.0,268.14991108662800,0.0,0.0,268.14991108662800,,True,6.706604953678460,[],6.70660495367846,19.243866139187200,0,[17.304098577166762],0,0.0,0.0,0.0,0.6932796976129550,-13.713866139187200,13.713866139187200,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.70660495367846,[],6.706604953678460,12.629767562020400,4.506567517796670,"[5.923162608341951, 6.706604953678458]",0,0.0,4.766837391658050,4.766837391658050,0.9410601432291900,-1.939767562020420,1.939767562020420,0,0,0.0,34.608197154333500,0.0,34.608197154333500 -75,,False,5.873589415635380,[],5.8735894156353800,19.58745555482260,0.0,[0.0],0,0.0,0.0,0.0,0.765078801631464,-13.09745555482260,13.09745555482260,0,0.0,486.1775501950130,0.0,0.0,486.1775501950130,,True,5.8735894156353800,[],5.873589415635380,25.117455554822600,0,[23.227261185508713],0,0.0,0.0,0.0,0.6825296333319430,-19.58745555482260,19.58745555482260,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.873589415635380,[],5.873589415635380,12.58019436931380,5.923162608341950,"[6.706604953678458, 5.873589415635379]",0,0.0,5.923162608341950,3.9833950463215400,0.9369840140791680,-1.8901943693138400,1.8901943693138400,0,0,0.0,46.454522371017400,0.0,46.454522371017400 -76,,False,5.649086732629110,[],5.6490867326291000,25.236542287451700,0.0,[0.0],0,0.0,0.0,0.0,0.7538365212848060,-18.746542287451700,18.746542287451700,0,0.0,695.8716497102060,0.0,0.0,695.8716497102060,,True,5.6490867326291000,[],5.649086732629100,30.766542287451700,0,[29.93386613918717],0,0.0,0.0,0.0,0.6725003533852800,-25.236542287451700,25.236542287451700,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.649086732629100,[],5.649086732629110,11.522676148264500,6.706604953678460,"[5.873589415635379, 5.649086732629105]",0,0.0,6.706604953678460,4.8164105843646200,0.93574404995884,-0.8326761482644870,0.8326761482644870,0,0,0.0,59.86773227837430,0.0,59.86773227837430 -77,,False,3.7771264633246900,[],3.777126463324700,29.01366875077640,0.0,[0.0],0,0.0,0.0,0.0,0.7465021550704220,-22.52366875077640,22.52366875077640,0,0.0,836.0785840288180,0.0,0.0,836.0785840288180,,True,3.777126463324700,[],3.777126463324690,34.54366875077640,0,[34.54366875077635],0,0.0,0.0,0.0,0.6659573381137140,-29.01366875077640,29.01366875077640,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.777126463324690,[],3.7771264633246900,9.4262131959538,5.873589415635380,"[5.649086732629105, 3.7771264633246924]",0,0.0,4.609802611589180,3.777126463324690,0.936369220875542,1.2637868040462000,0.0,0,2.5275736080924000,0,69.0873375015527,0.0,71.61491110964510 -78,,False,5.620548215961740,[],5.620548215961730,34.634216966738100,0.0,[0.0],0,0.0,0.0,0.0,0.7358486850729920,-28.144216966738100,28.144216966738100,0,0.0,1044.713333805320,0.0,0.0,1044.713333805320,,False,5.620548215961730,[],5.620548215961730,40.164216966738100,0,[40.16421696673808],0,0.0,0.0,0.0,0.65645333806097,-34.634216966738100,34.634216966738100,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.620548215961730,[],5.620548215961730,9.397674679286430,5.649086732629110,"[3.7771264633246924, 5.620548215961734]",0,0.0,5.620548215961730,5.620548215961730,0.9372773074653950,1.2923253207135700,0.0,0,2.5846506414271400,0,80.32843393347620,0.0,82.91308457490330 -79,,False,4.839062623136940,[],4.839062623136940,39.47327958987500,0.0,[39.47327958987503],0,0.0,0.0,0.0,0.7269171216959930,-32.98327958987500,32.98327958987500,0,0.0,1224.339338376160,0.0,0.0,1224.339338376160,,False,4.839062623136940,[],4.839062623136930,4.839062623136950,40.16421696673810,[4.839062623136934],0,0.0,39.47327958987500,4.8390626231369300,0.6606232290267470,0.6909373768630520,2.66453525910038E-15,0.0,2.763749507452210,0,157.8931183595000,0.0,160.65686786695200,,False,4.839062623136930,[],4.839062623136930,10.45961083909870,3.7771264633246900,"[5.620548215961734, 4.839062623136934]",0,0.0,4.839062623136930,4.839062623136930,0.9380386211905030,0.23038916090132900,0.0,0,0.46077832180265900,0,9.678125246273870,0.0,10.138903568076500 -80,,False,4.643254974231810,[],4.643254974231810,4.643254974231810,39.47327958987500,[4.643254974231814],0,0.0,37.62653456410680,4.643254974231810,0.7300610011763420,1.8467450257681900,0.0,0,12.92721518037730,0.0,0.0,0.0,12.92721518037730,,False,4.643254974231810,[],4.643254974231810,4.643254974231830,4.839062623136930,[4.643254974231813],0,0.0,4.643254974231810,4.643254974231810,0.6645303200644440,0.8867450257681750,0.0,0.0,3.5469801030727000,0,18.573019896927300,0.0,22.120000000000000,,False,4.643254974231810,[],4.643254974231820,9.482317597368750,5.620548215961730,"[4.839062623136934, 4.643254974231815]",0,0.0,4.643254974231810,4.643254974231810,0.9387519544782690,1.2076824026312500,0.0,0,2.4153648052625000,0,9.286509948463630,0.0,11.701874753726100 -81,,False,5.556121798533970,[],5.556121798533970,5.5561217985339600,4.643254974231810,[5.529999999999988],0,0.0,5.556121798533970,5.556121798533970,0.7337291276677650,0.9338782014660380,0.0,0,6.537147410262260,0.0,0.0,0.0,6.537147410262260,,False,5.556121798533970,[],5.556121798533970,5.55612179853398,4.643254974231810,[5.556121798533969],0,0.0,5.529999999999990,5.529999999999990,0.6690250382490560,-0.026121798533980100,0.026121798533980100,0.0,0.0,0.0,22.12000000000000,0.0,22.12000000000000,,False,5.556121798533970,[],5.556121798533970,10.199376772765800,4.839062623136930,"[4.643254974231815, 5.556121798533967]",0,0.0,5.556121798533970,5.556121798533970,0.9395842372506920,0.4906232272342160,0.0,0,0.9812464544684310,0,11.112243597067900,0.0,12.093490051536400 -82,,False,6.363886524417110,[],6.363886524417100,6.39000832295108,5.529999999999990,[5.556121798533969],0,0.0,6.363886524417110,6.363886524417110,0.7378099301935710,0.0999916770489202,0.0,0,0.6999417393424410,0.0,0.0,0.0,0.6999417393424410,,False,6.363886524417100,[],6.363886524417100,6.363886524417120,5.556121798533970,[5.133878201466031],0,0.0,5.556121798533970,5.529999999999990,0.6720892822726850,-0.8338865244171160,0.8338865244171160,0.0,0.0,0.0,22.224487194135900,0.0,22.224487194135900,,False,6.363886524417100,[],6.363886524417100,11.92000832295110,4.643254974231820,"[5.556121798533967, 6.363886524417103]",0,0.0,5.133878201466030,5.133878201466030,0.9375480011412650,-1.2300083229510700,1.2300083229510700,0,0,0.0,10.267756402932100,0.0,10.267756402932100 -83,,False,7.539162716269330,[],7.539162716269330,8.373049240686450,5.556121798533970,[5.133878201466031],0,0.0,5.656113475582890,5.656113475582890,0.7380314266284010,-1.8830492406864400,1.8830492406864400,0,0.0,69.8987878142808,0.0,0.0,69.8987878142808,,False,7.539162716269330,[],7.539162716269330,8.769171039220420,5.133878201466030,[5.556121798533967],0,0.0,5.133878201466030,4.299991677048920,0.670275104686181,-3.239171039220420,3.239171039220420,0.0,0.0,0.0,20.535512805864100,0.0,20.535512805864100,,False,7.539162716269330,[],7.539162716269340,13.90304924068640,5.556121798533970,"[6.363886524417103, 7.539162716269337]",0,0.0,5.556121798533970,4.326113475582890,0.9310618602073310,-3.2130492406864400,3.2130492406864400,0,0,0.0,11.112243597067900,0.0,11.112243597067900 -84,,False,3.559958552316200,[],3.559958552316200,6.799129591536620,5.133878201466030,[5.556121798533967],0,0.0,5.133878201466030,3.250828960779590,0.7394937972763820,-0.30912959153661500,0.30912959153661500,0,0.0,11.474890437839200,0.0,0.0,11.474890437839200,,True,3.559958552316200,[],3.5599585523162000,6.773007793002650,5.556121798533970,[6.363886524417103],0,0.0,5.556121798533970,2.316950759313550,0.6701127911129880,-1.243007793002650,1.243007793002650,0.0,0.0,0.0,22.224487194135900,0.0,22.224487194135900,,False,3.5599585523162000,[],3.559958552316200,11.099121268585500,6.363886524417100,"[7.539162716269337, 3.559958552316198]",0,0.0,6.363886524417100,3.150837283730660,0.9306778845102690,-0.4091212685855380,0.4091212685855380,0,0,0.0,12.727773048834200,0.0,12.727773048834200 -85,,False,6.19072725611364,[],6.19072725611364,7.433735049116290,5.556121798533970,[0.0],0,0.0,5.556121798533970,5.246992206997350,0.741040478600642,-0.943735049116289,0.943735049116289,0,0.0,35.031445023196600,0.0,0.0,35.031445023196600,,True,6.19072725611364,[],6.190727256113640,12.963735049116300,0,[12.963735049116282],0,0.0,0.0,0.0,0.6605216071270120,-7.433735049116290,7.433735049116290,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.190727256113640,[],6.190727256113640,9.750685808429840,7.539162716269340,"[3.559958552316198, 6.190727256113643]",0,0.0,6.59984852469918,6.190727256113640,0.9316700774258150,0.9393141915701580,0.0,0,1.8786283831403200,0,25.927470098232600,0.0,27.80609848137290 -86,,False,5.617640845511150,[],5.617640845511150,13.051375894627400,0.0,[0.0],0,0.0,0.0,0.0,0.7315393692436120,-6.561375894627430,6.561375894627430,0,0.0,243.55827320857000,0.0,0.0,243.55827320857000,,False,5.617640845511150,[],5.617640845511150,18.58137589462740,0,[17.46300779300264],0,0.0,0.0,0.0,0.652052855144872,-13.051375894627400,13.051375894627400,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.617640845511150,[],5.6176408455111400,11.808368101624800,3.559958552316200,"[6.190727256113643, 5.6176408455111435]",0,0.0,4.4992727438863600,4.4992727438863600,0.9299936715822920,-1.1183681016247900,1.1183681016247900,0,0,0.0,34.92601558600530,0.0,34.92601558600530 -87,,False,6.21707079698011,[],6.217070796980110,19.268446691607500,0.0,[17.46300779300264],0,0.0,0.0,0.0,0.7213044867244040,-12.778446691607500,12.778446691607500,0,0.0,474.33594119247200,0.0,0.0,474.33594119247200,,True,6.217070796980110,[],6.21707079698011,7.3354388986049100,17.46300779300260,[6.190727256113643],0,0.0,17.46300779300260,4.411631898375200,0.6528579871142760,-1.8054388986049100,1.8054388986049100,0.0,0.0,0.0,69.85203117201060,0.0,69.85203117201060,,False,6.21707079698011,[],6.21707079698011,11.834711642491300,6.190727256113640,"[5.6176408455111435, 6.21707079698011]",0,0.0,6.190727256113640,5.072359154488850,0.9283970651442710,-1.1447116424912600,1.1447116424912600,0,0,0.0,12.381454512227300,0.0,12.381454512227300 -88,,False,5.226288269498880,[],5.226288269498880,7.031727168103780,17.46300779300260,[0.0],0,0.0,17.46300779300260,4.684561101395090,0.723339255328532,-0.5417271681037810,0.5417271681037810,0,0.0,20.108912480012400,0.0,0.0,20.108912480012400,,True,5.226288269498880,[],5.226288269498880,12.561727168103800,0,[11.808368101624787],0,0.0,0.0,0.0,0.6452688326049060,-7.031727168103790,7.031727168103790,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.226288269498880,[],5.226288269498880,11.443359066479000,5.6176408455111400,"[6.21707079698011, 5.226288269498879]",0,0.0,5.6176408455111400,4.472929203019890,0.9275537641300590,-0.7533590664789890,0.7533590664789890,0,0,0.0,23.616736203249600,0.0,23.616736203249600 -89,,False,5.847401432576640,[],5.847401432576640,12.87912860068040,0.0,[0.0],0,0.0,0.0,0.0,0.71405228125271,-6.38912860068042,6.38912860068042,0,0.0,237.16445365725700,0.0,0.0,237.16445365725700,,True,5.847401432576640,[],5.847401432576640,18.409128600680400,0,[18.025438898604897],0,0.0,0.0,0.0,0.6369842069936280,-12.879128600680400,12.879128600680400,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.847401432576640,[],5.847401432576640,11.07368970207550,6.21707079698011,"[5.226288269498879, 5.847401432576641]",0,0.0,6.21707079698011,5.463711730501120,0.9276414432175050,-0.3836897020755180,0.3836897020755180,0,0,0.0,36.05087779720980,0.0,36.05087779720980 -90,,False,5.174833011991470,[],5.174833011991470,18.05396161267190,0.0,[0.0],0,0.0,0.0,0.0,0.7060301662051300,-11.563961612671900,11.563961612671900,0,0.0,429.25425506238100,0.0,0.0,429.25425506238100,,True,5.174833011991470,[],5.1748330119914700,23.583961612671900,0,[23.251727168103777],0,0.0,0.0,0.0,0.6298279234466730,-18.053961612671900,18.053961612671900,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.1748330119914700,[],5.174833011991470,11.022234444568100,5.226288269498880,"[5.847401432576641, 5.174833011991469]",0,0.0,5.226288269498880,4.8425985674233600,0.9277330795368400,-0.33223444456811,0.33223444456811,0,0,0.0,46.503454336207600,0.0,46.503454336207600 -91,,False,3.783145107640760,[],3.7831451076407600,21.837106720312700,0.0,[0.0],0,0.0,0.0,0.0,0.7002785965029300,-15.347106720312700,15.347106720312700,0,0.0,569.6846014580060,0.0,0.0,569.6846014580060,,False,3.7831451076407600,[],3.783145107640760,27.36710672031270,0,[27.36710672031265],0,0.0,0.0,0.0,0.6246971239773440,-21.837106720312700,21.837106720312700,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.783145107640760,[],3.783145107640760,8.95797811963223,5.847401432576640,"[5.174833011991469, 3.783145107640763]",0,0.0,4.115379552208870,3.7831451076407600,0.9283217912521500,1.732021880367770,4.44089209850063E-16,0,3.464043760735540,0,54.7342134406253,0.0,58.19825720136080 -92,,False,5.734501064880050,[],5.734501064880050,27.5716077851927,0.0,[27.36710672031265],0,0.0,0.0,0.0,0.6917368499712780,-21.081607785192700,21.081607785192700,0,0.0,782.5492809863530,0.0,0.0,782.5492809863530,,False,5.734501064880050,[],5.734501064880050,5.734501064880060,27.36710672031270,[5.734501064880046],0,0.0,27.36710672031270,5.5299999999999900,0.6288399470323760,-0.2045010648800560,0.2045010648800560,0.0,0.0,0.0,109.4684268812510,0.0,109.4684268812510,,False,5.734501064880050,[],5.734501064880050,9.517646172520810,5.174833011991470,"[3.783145107640763, 5.734501064880045]",0,0.0,5.734501064880050,5.734501064880050,0.9291960962702160,1.172353827479190,0.0,0,2.344707654958390,0,11.469002129760100,0.0,13.813709784718500 -93,,False,4.0455027380385800,[],4.045502738038580,4.250003802918630,27.36710672031270,[4.250003802918637],0,0.0,25.12711052323130,4.045502738038580,0.6943668343492310,2.239996197081370,8.88178419700125E-16,0,15.679973379569600,0.0,0.0,0.0,15.679973379569600,,False,4.045502738038580,[],4.04550273803858,4.045502738038590,5.734501064880050,[4.04550273803858],0,0.0,4.250003802918640,4.045502738038580,0.6320065439510600,1.4844972619614100,0.0,0.0,5.937989047845640,0,17.000015211674500,0.0,22.938004259520200,,False,4.04550273803858,[],4.045502738038580,9.780003802918620,3.783145107640760,"[5.734501064880045, 4.045502738038579]",0,0.0,4.04550273803858,4.04550273803858,0.929800168345292,0.9099961970813760,0.0,0,1.8199923941627500,0,8.09100547607716,0.0,9.910997870239910 -94,,False,5.7699773599307900,[],5.769977359930790,5.769977359930790,4.250003802918640,[5.52999999999999],0,0.0,5.769977359930790,5.7699773599307900,0.6980411873342870,0.7200226400692100,0.0,0,5.040158480484470,0.0,0.0,0.0,5.040158480484470,,False,5.769977359930790,[],5.769977359930790,5.769977359930800,4.04550273803858,[5.769977359930793],0,0.0,5.52999999999999,5.52999999999999,0.635930591141147,-0.23997735993080300,0.23997735993080300,0.0,0.0,0.0,22.12000000000000,0.0,22.12000000000000,,False,5.769977359930790,[],5.769977359930790,9.81548009796937,5.734501064880050,"[4.045502738038579, 5.769977359930794]",0,0.0,5.769977359930790,5.769977359930790,0.9306441178572560,0.8745199020306280,0.0,0,1.7490398040612600,0,11.539954719861600,0.0,13.288994523922800 -95,,False,6.268389522403900,[],6.268389522403900,6.508366882334700,5.52999999999999,[5.769977359930793],0,0.0,6.2500226400692,6.2500226400692,0.7018963239160020,-0.018366882334702500,0.018366882334702500,0,0.0,0.6817786722641570,0.0,0.0,0.6817786722641570,,False,6.268389522403900,[],6.268389522403900,6.268389522403910,5.769977359930790,[4.920022640069207],0,0.0,5.769977359930790,5.52999999999999,0.6391055993022160,-0.7383895224039140,0.7383895224039140,0.0,0.0,0.0,23.07990943972320,0.0,23.07990943972320,,False,6.268389522403900,[],6.268389522403900,12.038366882334700,4.045502738038580,"[5.769977359930794, 6.268389522403904]",0,0.0,4.920022640069210,4.920022640069210,0.9287650816933810,-1.3483668823347000,1.3483668823347000,0,0,0.0,9.840045280138410,0.0,9.840045280138410 -96,,False,4.132358910020630,[],4.132358910020630,4.870748432424540,5.769977359930790,[4.870748432424539],0,0.0,4.150725792355330,4.132358910020630,0.7044085617850970,1.619251567575470,0.0,0,11.334760973028300,0.0,0.0,0.0,11.334760973028300,,False,4.132358910020630,[],4.132358910020630,5.480725792355330,4.920022640069210,[5.4807257923553205],0,0.0,4.870748432424540,4.132358910020630,0.642146999502601,0.049274207644668200,0.0,0.0,0.19709683057867300,0,19.482993729698200,0.0,19.680090560276800,,False,4.132358910020630,[],4.132358910020620,10.400748432424500,5.769977359930790,"[6.268389522403904, 4.132358910020623]",0,0.0,5.4807257923553200,4.132358910020630,0.9293654065928340,0.2892515675754740,0.0,0,0.5785031351509480,0,10.961451584710600,0.0,11.539954719861600 -97,,False,5.145861852428310,[],5.145861852428310,5.145861852428310,4.870748432424540,[5.145861852428309],0,0.0,5.145861852428310,5.145861852428310,0.7074783717861140,1.3441381475716900,0.0,0,9.408967033001860,0.0,0.0,0.0,9.408967033001860,,False,5.145861852428310,[],5.145861852428310,5.14586185242832,5.4807257923553200,[5.145861852428309],0,0.0,5.145861852428310,5.145861852428310,0.6458634153989980,0.3841381475716790,0.0,0.0,1.5365525902867200,0,20.583447409713200,0.0,22.120000000000000,,False,5.145861852428310,[],5.145861852428310,9.278220762448930,6.268389522403900,"[4.132358910020623, 5.145861852428311]",0,0.0,5.145861852428310,5.145861852428310,0.9300989690483930,1.4117792375510700,0.0,0,2.8235584751021400,0,10.291723704856600,0.0,13.115282179958800 -98,,False,5.878673548190900,[],5.8786735481908900,5.878673548190890,5.145861852428310,[5.529999999999989],0,0.0,5.878673548190900,5.878673548190900,0.710908233340282,0.6113264518091080,0.0,0,4.279285162663760,0.0,0.0,0.0,4.279285162663760,,False,5.8786735481908900,[],5.878673548190900,5.878673548190910,5.145861852428310,[5.544138147571692],0,0.0,5.529999999999990,5.529999999999990,0.6493202841365270,-0.3486735481909060,0.3486735481909060,0.0,0.0,0.0,22.120000000000000,0.0,22.120000000000000,,False,5.878673548190900,[],5.878673548190890,11.0245354006192,4.132358910020620,"[5.145861852428311, 5.878673548190894]",0,0.0,5.544138147571690,5.544138147571690,0.9302513306183340,-0.3345354006192030,0.3345354006192030,0,0,0.0,11.088276295143400,0.0,11.088276295143400 -99,,False,4.76040549180619,[],4.760405491806190,5.109079039997090,5.529999999999990,[5.109079039997097],0,0.0,4.76040549180619,4.76040549180619,0.7136272688118210,1.380920960002910,0.0,0,9.66644672002035,0.0,0.0,0.0,9.66644672002035,,False,4.760405491806190,[],4.760405491806190,5.094940892425400,5.544138147571690,[5.094940892425395],0,0.0,5.109079039997100,4.760405491806190,0.6526185814128540,0.4350591075745950,0.0,0.0,1.7402364302983800,0,20.436316159988400,0.0,22.176552590286800,,False,4.760405491806190,[],4.7604054918061900,10.639079039997100,5.145861852428310,"[5.878673548190894, 4.7604054918061935]",0,0.0,5.094940892425400,4.760405491806190,0.930907347592919,0.050920960002915900,0.0,0,0.10184192000583200,0,10.18988178485080,0.0,10.291723704856600 \ No newline at end of file +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +0,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,2.6018801180469207,0,0,18.213160826328444,0.0,0.0,0.0,18.213160826328444,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,1.6418801180469207,0,0,6.567520472187683,0,15.552479527812318,0.0,22.12,,False,3.8881198819530796,[],3.888119881953079,3.888119881953079,0,"[0, 3.888119881953079]",0,0.0,3.8881198819530796,3.8881198819530796,1.0,6.80188011804692,0,0,13.60376023609384,0,7.776239763906159,0.0,21.38 +1,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,1.1710978153106169,0,0,8.197684707174318,0.0,0.0,0.0,8.197684707174318,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,0.2110978153106169,0,0,0.8443912612424676,0,21.275608738757533,0.0,22.12,,False,5.318902184689383,[],5.318902184689383,9.207022066642462,0,"[3.888119881953079, 5.318902184689383]",0,0.0,5.318902184689383,5.318902184689383,1.0,1.482977933357537,0,0,2.965955866715074,0,10.637804369378767,0.0,13.60376023609384 +2,,False,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[5.279041292200137],0,0.0,5.279041292200137,5.279041292200137,1.0,1.210958707799863,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[5.279041292200137],0,0.0,5.279041292200137,5.279041292200137,1.0,0.25095870779986296,0,0,1.0038348311994518,0,21.11616516880055,0.0,22.12,,False,5.279041292200137,[],5.279041292200137,10.59794347688952,3.888119881953079,"[5.318902184689383, 5.279041292200137]",0,0.0,5.279041292200137,5.279041292200137,1.0,0.09205652311047885,0,0,0.1841130462209577,0,10.558082584400275,0.0,10.742195630621232 +3,,False,6.010515284806527,[],6.010515284806527,6.010515284806527,5.279041292200137,[0.25095870779986296],0,0.0,6.010515284806527,6.010515284806527,1.0,0.4794847151934736,0,0,3.356393006354315,0.0,0.0,0.0,3.356393006354315,,False,6.010515284806527,[],6.010515284806527,11.289556577006664,0,[10.69],0,0.0,0.25095870779986296,0.25095870779986296,0.7189991228711108,-5.759556577006664,5.759556577006664,0,0.0,0.0,1.0038348311994518,0.0,1.0038348311994518,,False,6.010515284806527,[],6.010515284806527,11.289556577006666,5.318902184689383,"[5.279041292200137, 6.010515284806527]",0,0.0,5.410958707799862,5.410958707799862,0.9707484557578864,-0.5995565770066644,0.5995565770066644,0,0.0,0.0,21.38,0.0,21.38 +4,,False,4.419121865976485,[],4.419121865976485,10.178678442983148,0.25095870779986296,[10.178678442983148],0,0.0,0.7304434229933365,0.7304434229933365,0.8519536530165743,-3.6886784429831483,3.6886784429831483,0,0.0,136.92374380353445,0.0,0.0,136.92374380353445,,True,4.419121865976485,[],4.419121865976485,5.01867844298315,10.69,[5.018678442983149],0,0.0,10.178678442983148,4.419121865976485,0.7688382642590527,0.511321557016851,0.0,0,2.045286228067404,0,40.714713771932594,0.0,42.76,,False,4.419121865976485,[],4.419121865976483,10.429637150783012,5.279041292200137,"[6.010515284806527, 4.419121865976483]",0,0.0,5.018678442983149,4.419121865976485,0.9759365956106657,0.26036284921698805,0.0,0,0.5207256984339761,0,10.037356885966298,0.0,10.558082584400275 +5,,False,4.474830192821853,[],4.474830192821853,4.474830192821852,10.178678442983148,[0.511321557016851],0,0.0,8.163508635805002,4.4748301928218535,0.8744943233476224,2.0151698071781476,0.0,0,14.106188650247034,0.0,0.0,0.0,14.106188650247034,,True,4.474830192821853,[],4.474830192821852,9.493508635805002,0,[9.493508635805],0,0.0,0.511321557016851,0.511321557016851,0.6691769430348536,-3.9635086358050016,3.9635086358050016,0,0.0,0.0,2.045286228067404,0.0,2.045286228067404,,False,4.474830192821852,[],4.47483019282185,8.893952058798336,6.010515284806527,"[4.419121865976483, 4.47483019282185]",0,0.0,4.474830192821852,4.474830192821852,0.9796003487287579,1.796047941201663,0.0,0,3.592095882403326,0,18.98701727161,0.0,22.579113154013328 +6,,False,2.3874509873063987,[],2.3874509873063996,6.3509596231114,0.511321557016851,[0.0],0,0.0,2.3874509873063987,2.3874509873063987,0.8839234511809011,0.13904037688859994,0.0,0,0.9732826382201996,0.0,0.0,0.0,0.9732826382201996,,True,2.3874509873063996,[],2.3874509873063996,11.880959623111401,0,[11.8809596231114],0,0.0,0.0,0.0,0.6189022852882176,-6.350959623111401,6.350959623111401,0.0,0.0,0.0,0.0,0.0,0.0,,False,2.3874509873063996,[],2.3874509873064014,6.862281180128254,4.419121865976483,"[4.47483019282185, 2.3874509873064014]",0,0.0,2.3874509873063996,2.3874509873063996,0.9811329560555452,3.8277188198717464,0.0,0,7.655437639743493,0,23.7619192462228,0.0,31.417356885966292 +7,,False,5.950369682396903,[],5.950369682396903,12.301329305508304,0.0,[0.0],0,0.0,0.13904037688859994,0.13904037688859994,0.7481997648191993,-5.811329305508303,5.811329305508303,0,0.0,215.7165438204682,0.0,0.0,215.7165438204682,,True,5.950369682396903,[],5.950369682396903,17.831329305508305,0,[17.8313293055083],0,0.0,0.0,0.0,0.5212914101556361,-12.301329305508304,12.301329305508304,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.950369682396903,[],5.950369682396901,8.337820669703305,4.47483019282185,"[2.3874509873064014, 5.950369682396901]",0,0.0,5.950369682396903,5.950369682396903,0.9841085932673637,2.3521793302966936,0.0,0,4.704358660593387,0,35.6626586110166,0.0,40.36701727160999 +8,,False,4.571953935823766,[],4.571953935823765,16.873283241332068,0.0,[0.0],0,0.0,0.0,0.0,0.6673319121017706,-10.38328324133207,10.38328324133207,0,0.0,385.4274739182464,0.0,0.0,385.4274739182464,,False,4.571953935823765,[],4.571953935823764,22.40328324133207,0,[22.403283241332066],0,0.0,0.0,0.0,0.46494854697722604,-16.873283241332068,16.873283241332068,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.571953935823764,[],4.571953935823766,10.52232361822067,2.3874509873064014,"[5.950369682396901, 4.571953935823766]",0,0.0,4.571953935823764,4.571953935823764,0.9858261879520374,0.16767638177933097,0.0,0,0.33535276355866195,0,44.80656648266413,0.0,45.14191924622279 +9,,False,4.257593162880828,[],4.25759316288083,21.1308764042129,0.0,[21.1308764042129],0,0.0,0.0,0.0,0.6063062240949275,-14.640876404212896,14.640876404212896,0,0.0,543.4693321243827,0.0,0.0,543.4693321243827,,False,4.25759316288083,[],4.257593162880829,4.257593162880834,22.403283241332066,[4.257593162880829],0,0.0,21.1308764042129,4.257593162880831,0.5138775468461793,1.272406837119168,0.0,0.0,5.089627348476672,0,84.5235056168516,0.0,89.61313296532826,,False,4.257593162880829,[],4.257593162880827,8.829547098704595,5.950369682396901,"[4.571953935823766, 4.257593162880827]",0,0.0,4.257593162880829,4.257593162880829,0.9871223445065507,1.8604529012954032,0.0,0,3.7209058025908064,0,8.515186325761658,0.0,12.236092128352464 +10,,False,4.3705250390757495,[],4.370525039075748,4.370525039075748,21.1308764042129,[4.370525039075748],0,0.0,19.011401443288648,4.370525039075751,0.6400918468716834,2.1194749609242525,0.0,0,14.836324726469767,0.0,0.0,0.0,14.836324726469767,,False,4.370525039075748,[],4.370525039075746,4.370525039075751,4.257593162880829,[4.370525039075746],0,0.0,4.370525039075748,4.370525039075748,0.5555951223598097,1.159474960924249,0.0,0.0,4.637899843696996,0,17.48210015630299,0.0,22.119999999999987,,False,4.370525039075746,[],4.370525039075748,8.628118201956577,4.571953935823766,"[4.257593162880827, 4.370525039075748]",0,0.0,4.370525039075746,4.370525039075746,0.9882274663991955,2.061881798043423,0.0,0,4.123763596086846,0,8.741050078151492,0.0,12.864813674238338 +11,,False,5.597720466912608,[],5.597720466912608,5.597720466912609,4.370525039075748,[5.529999999999995],0,0.0,5.597720466912608,5.597720466912608,0.6757331465117299,0.8922795330873923,0.0,0,6.245956731611746,0.0,0.0,0.0,6.245956731611746,,False,5.597720466912608,[],5.597720466912608,5.597720466912614,4.370525039075746,[5.597720466912608],0,0.0,5.529999999999995,5.529999999999995,0.5984059996282294,-0.06772046691261302,0.06772046691261302,0.0,0.0,0.0,22.11999999999998,0.0,22.11999999999998,,False,5.597720466912608,[],5.597720466912608,9.968245505988357,4.257593162880827,"[4.370525039075748, 5.597720466912608]",0,0.0,5.597720466912608,5.597720466912608,0.9893932871619143,0.721754494011642,0.0,0,1.443508988023284,0,11.195440933825216,0.0,12.6389499218485 +12,,False,5.122219165222679,[],5.1222191652226785,5.1899396321352915,5.529999999999995,[5.1899396321352915],0,0.0,5.122219165222679,5.122219165222679,0.7026757254696891,1.3000603678647078,0.0,0,9.100422575052955,0.0,0.0,0.0,9.100422575052955,,False,5.1222191652226785,[],5.122219165222678,5.122219165222684,5.597720466912608,[5.09227953308739],0,0.0,5.1899396321352915,5.1222191652226785,0.6317735114403812,0.4077808347773164,0.0,0.0,1.6311233391092657,0,20.759758528541166,0.0,22.39088186765043,,False,5.122219165222678,[],5.122219165222679,10.719939632135288,4.370525039075748,"[5.597720466912608, 5.122219165222679]",0,0.0,5.09227953308739,5.09227953308739,0.9897889225754252,-0.02993963213528783,0.02993963213528783,0,0.0,0.0,10.18455906617478,0.0,10.18455906617478 +13,,False,4.484564337907547,[],4.484564337907548,4.484564337907547,5.1899396321352915,[4.484564337907548],0,0.0,4.484564337907547,4.484564337907547,0.7228376915153724,2.0054356620924523,0.0,0,14.038049634647166,0.0,0.0,0.0,14.038049634647166,,False,4.484564337907548,[],4.484564337907548,4.514503970042841,5.09227953308739,[4.514503970042836],0,0.0,4.484564337907548,4.484564337907548,0.6567434536732794,1.0154960299571583,0.0,0.0,4.061984119828633,0,17.93825735163019,0.0,22.000241471458825,,False,4.484564337907548,[],4.484564337907546,9.606783503130227,5.597720466912608,"[5.122219165222679, 4.484564337907546]",0,0.0,4.514503970042836,4.484564337907548,0.9904813497129313,1.0832164968697722,0.0,0,2.1664329937395443,0,9.029007940085672,0.0,11.195440933825216 +14,,False,4.399746149894089,[],4.3997461498940895,4.399746149894089,4.484564337907548,[4.3997461498940895],0,0.0,4.399746149894089,4.399746149894089,0.7401267539724435,2.0902538501059116,0.0,0,14.631776950741381,0.0,0.0,0.0,14.631776950741381,,True,4.3997461498940895,[],4.39974614989409,4.399746149894095,4.514503970042836,[4.39974614989409],0,0.0,4.3997461498940895,4.3997461498940895,0.6781553978178071,1.1302538501059045,0.0,0.0,4.521015400423618,0,17.598984599576358,0.0,22.119999999999976,,False,4.39974614989409,[],4.39974614989409,8.884310487801638,5.122219165222679,"[4.484564337907546, 4.39974614989409]",0,0.0,4.39974614989409,4.39974614989409,0.9910751120474274,1.8056895121983612,0.0,0,3.6113790243967223,0,8.79949229978818,0.0,12.410871324184903 +15,,False,5.947439821046639,[],5.947439821046639,5.947439821046639,4.3997461498940895,[1.1302538501059045],0,0.0,5.947439821046639,5.947439821046639,0.7603356739401277,0.5425601789533623,0.0,0,3.797921252673536,0.0,0.0,0.0,3.797921252673536,,True,5.947439821046639,[],5.94743982104664,10.347185970940735,0,[10.34718597094073],0,0.0,1.1302538501059045,1.1302538501059045,0.6401973661577647,-4.817185970940734,4.817185970940734,0.0,0.0,0.0,4.521015400423618,0.0,4.521015400423618,,False,5.94743982104664,[],5.94743982104664,10.347185970940732,4.484564337907546,"[4.39974614989409, 5.94743982104664]",0,0.0,5.94743982104664,5.94743982104664,0.9917691517345099,0.3428140290592676,0.0,0,0.6856280581185352,0,20.69437194188146,0.0,21.379999999999995 +16,,False,3.978447805324402,[],3.978447805324401,8.795633776265134,1.1302538501059045,[0.0],0,0.0,1.6728140290592668,1.6728140290592668,0.7435302309502702,-2.305633776265135,2.305633776265135,0,0.0,85.58512577496181,0.0,0.0,85.58512577496181,,False,3.978447805324401,[],3.9784478053244,14.325633776265136,0,[14.32563377626513],0,0.0,0.0,0.0,0.6085414209532098,-8.795633776265134,8.795633776265134,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.9784478053244,[],3.9784478053244,9.925887626371042,4.39974614989409,"[5.94743982104664, 3.9784478053244]",0,0.0,3.9784478053244,3.9784478053244,0.9921761438520239,0.7641123736289579,0.0,0,1.5282247472579158,0,28.65126755253026,0.0,30.179492299788176 +17,,False,4.838244613602479,[],4.8382446136024795,13.633878389867615,0.0,[13.633878389867615],0,0.0,0.0,0.0,0.7013553675628278,-7.143878389867614,7.143878389867614,0,0.0,265.1807658318858,0.0,0.0,265.1807658318858,,False,4.8382446136024795,[],4.838244613602479,4.838244613602482,14.32563377626513,[4.838244613602479],0,0.0,13.633878389867615,4.83824461360248,0.6307459143361357,0.6917553863975163,0.0,0.0,2.7670215455900653,0,54.53551355947046,0.0,57.30253510506053,,False,4.838244613602479,[],4.838244613602479,8.81669241892688,5.94743982104664,"[3.9784478053244, 4.838244613602479]",0,0.0,4.838244613602479,4.838244613602479,0.9926199322152519,1.873307581073119,0.0,0,3.746615162146238,0,9.676489227204957,0.0,13.423104389351195 +18,,False,4.770549546168043,[],4.770549546168042,4.770549546168041,13.633878389867615,[4.770549546168042],0,0.0,11.914427936035658,4.770549546168044,0.7171735184251261,1.719450453831958,0.0,0,12.036153176823706,0.0,0.0,0.0,12.036153176823706,,True,4.770549546168042,[],4.770549546168044,4.770549546168047,4.838244613602479,[4.770549546168044],0,0.0,4.770549546168042,4.770549546168042,0.6503039984238509,0.7594504538319526,0.0,0.0,3.0378018153278106,0,19.08219818467217,0.0,22.11999999999998,,False,4.770549546168044,[],4.770549546168044,9.608794159770525,3.9784478053244,"[4.838244613602479, 4.770549546168044]",0,0.0,4.770549546168044,4.770549546168044,0.9930108283269297,1.081205840229475,0.0,0,2.16241168045895,0,9.541099092336088,0.0,11.703510772795038 +19,,False,5.389348913256123,[],5.389348913256124,5.389348913256124,4.770549546168042,[0.7594504538319526],0,0.0,5.389348913256123,5.389348913256123,0.7331414968068005,1.100651086743877,0.0,0,7.704557607207139,0.0,0.0,0.0,7.704557607207139,,False,5.389348913256124,[],5.389348913256125,10.159898459424172,0,[10.15989845942417],0,0.0,0.7594504538319526,0.7594504538319526,0.621544733030712,-4.629898459424171,4.629898459424171,0.0,0.0,0.0,3.0378018153278106,0.0,3.0378018153278106,,False,5.389348913256125,[],5.389348913256123,10.15989845942417,4.838244613602479,"[4.770549546168044, 5.389348913256123]",0,0.0,5.389348913256125,5.389348913256125,0.9934054269570153,0.5301015405758287,0.0,0,1.0602030811516574,0,20.31979691884834,0.0,21.379999999999995 +20,,False,7.77831304155244,[],7.7783130415524395,12.408211500976611,0.7594504538319526,[10.15989845942417],0,0.0,1.8601015405758297,1.8601015405758297,0.695920574844463,-5.918211500976611,5.918211500976611,0,0.0,219.68401091625176,0.0,0.0,219.68401091625176,,False,7.7783130415524395,[],7.7783130415524395,7.77831304155244,10.15989845942417,[5.300651086743873],0,0.0,10.15989845942417,5.5299999999999985,0.6282811148793342,-2.248313041552441,2.248313041552441,0.0,0.0,0.0,40.63959383769668,0.0,40.63959383769668,,False,7.7783130415524395,[],7.778313041552441,13.167661954808565,4.770549546168044,"[5.389348913256123, 7.778313041552441]",0,0.0,5.300651086743873,5.300651086743873,0.9699020909466247,-2.4776619548085668,2.4776619548085668,0,0.0,0.0,10.601302173487746,0.0,10.601302173487746 +21,,False,6.193639724282317,[],6.193639724282317,8.441952765834756,10.15989845942417,[5.300651086743873],0,0.0,10.15989845942417,4.241686958447559,0.6952937339357339,-1.9519527658347577,1.9519527658347577,0,0.0,72.45648666778621,0.0,0.0,72.45648666778621,,False,6.193639724282317,[],6.193639724282318,8.671301679090885,5.300651086743873,[5.389348913256123],0,0.0,5.300651086743873,3.0523380451914317,0.6206139383991144,-3.141301679090885,3.141301679090885,0.0,0.0,0.0,21.20260434697549,0.0,21.20260434697549,,False,6.193639724282318,[],6.19363972428232,13.971952765834763,5.389348913256123,"[7.778313041552441, 6.19363972428232]",0,0.0,5.389348913256123,2.9116869584475564,0.9416139144956086,-3.2819527658347614,3.2819527658347614,0,0.0,0.0,10.778697826512246,0.0,10.778697826512246 +22,,False,5.2186383160538625,[],5.218638316053864,8.359939995144748,5.300651086743873,[5.389348913256123],0,0.0,5.300651086743873,3.348698320909115,0.6928533082901339,-1.8699399951447475,1.8699399951447475,0,0.0,69.41217261977302,0.0,0.0,69.41217261977302,,False,5.218638316053864,[],5.218638316053865,8.500591081888627,5.389348913256123,[7.778313041552441],0,0.0,5.389348913256123,2.248047234165238,0.6119725444552928,-2.9705910818886263,2.9705910818886263,0.0,0.0,0.0,21.557395653024493,0.0,21.557395653024493,,False,5.218638316053865,[],5.218638316053863,11.412278040336187,7.778313041552441,"[6.19363972428232, 5.218638316053863]",0,0.0,7.778313041552441,4.49636027571768,0.9379715941434275,-0.7222780403361853,0.7222780403361853,0,0.0,0.0,15.556626083104883,0.0,15.556626083104883 +23,,False,5.881761038948611,[],5.881761038948611,8.852352120837235,5.389348913256123,[7.778313041552441],0,0.0,5.389348913256123,3.5194089181113757,0.6882420660497514,-2.362352120837235,2.362352120837235,0,0.0,87.69051072547815,0.0,0.0,87.69051072547815,,False,5.881761038948611,[],5.88176103894861,6.604039079284795,7.778313041552441,[6.19363972428232],0,0.0,7.778313041552441,4.807721959663815,0.6219970624127582,-1.0740390792847956,1.0740390792847956,0.0,0.0,0.0,31.113252166209765,0.0,31.113252166209765,,False,5.88176103894861,[],5.881761038948608,11.100399355002473,6.19363972428232,"[5.218638316053863, 5.881761038948608]",0,0.0,6.19363972428232,5.471361683946134,0.937593568333974,-0.4103993550024754,0.4103993550024754,0,0.0,0.0,12.38727944856464,0.0,12.38727944856464 +24,,False,3.9909146571348924,[],3.9909146571348924,5.064953736419686,7.778313041552441,[5.064953736419688],0,0.0,6.353266777972127,3.9909146571348924,0.6982340319731021,1.425046263580314,0.0,0,9.9753238450622,0.0,0.0,0.0,9.9753238450622,,True,3.9909146571348924,[],3.9909146571348932,4.401314012137369,6.19363972428232,[4.401314012137369],0,0.0,5.064953736419688,3.9909146571348924,0.6341122070810602,1.1286859878626316,0.0,0.0,4.5147439514505265,0,20.25981494567875,0.0,24.77455889712928,,False,3.9909146571348932,[],3.990914657134895,9.872675696083505,5.218638316053863,"[5.881761038948608, 3.990914657134895]",0,0.0,4.401314012137369,3.9909146571348932,0.9395937193187581,0.8173243039164948,0.0,0,1.6346486078329896,0,8.802628024274737,0.0,10.437276632107727 +25,,False,3.4167057864631127,[],3.4167057864631127,3.416705786463111,5.064953736419688,[1.1286859878626316],0,0.0,3.4167057864631127,3.4167057864631127,0.7062930620663396,3.0732942135368893,0.0,0,21.513059494758224,0.0,0.0,0.0,21.513059494758224,,True,3.4167057864631127,[],3.4167057864631127,7.818019798600481,0,[7.818019798600481],0,0.0,1.1286859878626316,1.1286859878626316,0.6259996870083333,-2.288019798600481,2.288019798600481,0.0,0.0,0.0,4.5147439514505265,0.0,4.5147439514505265,,False,3.4167057864631127,[],3.4167057864631127,7.407620443598009,5.881761038948608,"[3.990914657134895, 3.4167057864631127]",0,0.0,3.4167057864631127,3.4167057864631127,0.9412069430928428,3.28237955640199,0.0,0,6.56475911280398,0,15.636039597200963,0.0,22.200798710004943 +26,,False,3.6533219026386536,[],3.6533219026386536,5.941341701239133,1.1286859878626316,[0.0],0,0.0,3.6533219026386536,3.6533219026386536,0.7144472227101941,0.5486582987608672,0.0,0,3.8406080913260707,0.0,0.0,0.0,3.8406080913260707,,False,3.6533219026386536,[],3.6533219026386536,11.471341701239135,0,[11.471341701239135],0,0.0,0.0,0.0,0.608620111140018,-5.941341701239135,5.941341701239135,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.6533219026386536,[],3.6533219026386554,7.07002768910177,3.990914657134895,"[3.4167057864631127, 3.6533219026386554]",0,0.0,3.6533219026386536,3.6533219026386536,0.9428392097125455,3.6199723108982313,0.0,0,7.239944621796463,0,22.94268340247827,0.0,30.182628024274734 +27,,False,4.119408733952893,[],4.119408733952893,10.060750435192027,0.0,[10.060750435192027],0,0.0,0.5486582987608672,0.5486582987608672,0.6968033329165892,-3.570750435192026,3.570750435192026,0,0.0,132.54625615432798,0.0,0.0,132.54625615432798,,False,4.119408733952893,[],4.119408733952893,4.119408733952893,11.471341701239135,[4.119408733952893],0,0.0,10.060750435192027,4.119408733952892,0.6205003025121855,1.4105912660471072,8.881784197001252e-16,0.0,5.642365064188429,0,40.24300174076811,0.0,45.88536680495653,,False,4.119408733952893,[],4.119408733952891,7.772730636591549,3.4167057864631127,"[3.6533219026386554, 4.119408733952891]",0,0.0,4.119408733952893,4.119408733952893,0.9445743043020435,2.917269363408451,0.0,0,5.834538726816902,0,8.238817467905786,0.0,14.073356194722688 +28,,False,5.582122794713039,[],5.5821227947130385,5.5821227947130385,10.060750435192027,[5.53],0,0.0,9.152873229905065,5.582122794713039,0.7087819775155557,0.9078772052869617,0.0,0,6.355140437008732,0.0,0.0,0.0,6.355140437008732,,False,5.5821227947130385,[],5.5821227947130385,5.5821227947130385,4.119408733952893,[5.5821227947130385],0,0.0,5.53,5.529999999999999,0.6351246123520422,-0.05212279471303827,0.052122794713039156,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.5821227947130385,[],5.582122794713037,9.701531528665932,3.6533219026386554,"[4.119408733952891, 5.582122794713037]",0,0.0,5.5821227947130385,5.5821227947130385,0.9467640536710021,0.9884684713340679,0.0,0,1.9769369426681358,0,11.164245589426077,0.0,13.141182532094213 +29,,False,5.887748459593357,[],5.887748459593357,5.939871254306396,5.53,[5.5821227947130385],0,0.0,5.887748459593357,5.887748459593357,0.720431840712657,0.5501287456936046,0.0,0,3.850901219855232,0.0,0.0,0.0,3.850901219855232,,False,5.887748459593357,[],5.887748459593357,5.887748459593357,5.5821227947130385,[5.107877205286959],0,0.0,5.5821227947130385,5.529999999999999,0.6472903605250234,-0.3577484595933571,0.357748459593358,0.0,0.0,0.0,22.328491178852154,0.0,22.328491178852154,,False,5.887748459593357,[],5.887748459593357,11.469871254306398,4.119408733952891,"[5.582122794713037, 5.887748459593357]",0,0.0,5.107877205286959,5.107877205286959,0.9435949160236063,-0.7798712543063981,0.7798712543063981,0,0.0,0.0,10.215754410573918,0.0,10.215754410573918 +30,,False,4.792834109895426,[],4.792834109895426,5.150582569488783,5.5821227947130385,[5.107877205286959],0,0.0,4.792834109895426,4.792834109895426,0.729248746553818,1.339417430511217,0.0,0,9.375922013578519,0.0,0.0,0.0,9.375922013578519,,False,4.792834109895426,[],4.792834109895426,5.572705364201825,5.107877205286959,[5.572705364201824],0,0.0,5.107877205286959,4.750128745693601,0.6581329644434589,-0.042705364201824025,0.042705364201824914,0.0,0.0,0.0,20.431508821147837,0.0,20.431508821147837,,False,4.792834109895426,[],4.792834109895426,10.680582569488788,5.582122794713037,"[5.887748459593357, 4.792834109895426]",0,0.0,5.572705364201824,4.792834109895426,0.9453737964070176,0.009417430511212466,0.0,0,0.01883486102242493,0,11.145410728403649,0.0,11.164245589426073 +31,,False,4.37652260501504,[],4.37652260501504,4.419227969216864,5.107877205286959,[4.419227969216865],0,0.0,4.37652260501504,4.37652260501504,0.736827635728371,2.070772030783136,0.0,0,14.495404215481951,0.0,0.0,0.0,14.495404215481951,,False,4.37652260501504,[],4.376522605015039,4.376522605015039,5.572705364201824,[4.376522605015039],0,0.0,4.419227969216865,4.37652260501504,0.6677025318672014,1.15347739498496,0.0,0.0,4.61390957993984,0,17.67691187686746,0.0,22.2908214568073,,False,4.376522605015039,[],4.376522605015038,9.169356714910467,5.887748459593357,"[4.792834109895426, 4.376522605015038]",0,0.0,4.376522605015039,4.376522605015039,0.9469028971509227,1.5206432850895304,0.0,0,3.041286570179061,0,8.753045210030079,0.0,11.79433178020914 +32,,False,3.491846710452517,[],3.491846710452517,3.491846710452516,4.419227969216865,[3.491846710452517],0,0.0,3.491846710452517,3.491846710452517,0.7425768523333158,2.998153289547484,0.0,0,20.987073026832388,0.0,0.0,0.0,20.987073026832388,,False,3.491846710452517,[],3.491846710452518,3.491846710452518,4.376522605015039,[3.491846710452518],0,0.0,3.491846710452517,3.491846710452517,0.6749618431815094,2.0381532895474823,0.0,0.0,8.15261315818993,0,13.967386841810068,0.0,22.119999999999997,,False,3.491846710452518,[],3.4918467104525197,7.868369315467562,4.792834109895426,"[4.376522605015038, 3.4918467104525197]",0,0.0,3.491846710452518,3.491846710452518,0.9480628470043932,2.8216306845324386,0.0,0,5.643261369064877,0,6.983693420905036,0.0,12.626954789969913 +33,,False,6.09964697578482,[],6.09964697578482,6.099646975784818,3.491846710452517,[5.53],0,0.0,6.09964697578482,6.09964697578482,0.7520392429670154,0.39035302421518114,0.0,0,2.732471169506268,0.0,0.0,0.0,2.732471169506268,,True,6.09964697578482,[],6.09964697578482,6.099646975784821,3.491846710452518,[6.09964697578482],0,0.0,5.53,5.53,0.6834767879474384,-0.5696469757848197,0.5696469757848197,0.0,0.0,0.0,22.12,0.0,22.12,,False,6.09964697578482,[],6.099646975784818,9.591493686237342,4.376522605015038,"[3.4918467104525197, 6.099646975784818]",0,0.0,6.09964697578482,6.09964697578482,0.9499719590423013,1.0985063137626563,0.0,0,2.1970126275253126,0,12.19929395156964,0.0,14.396306579094952 +34,,False,6.179716344700701,[],6.179716344700702,6.749363320485519,5.53,[0.0],0,0.0,5.920353024215181,5.920353024215181,0.7594350422060426,-0.25936332048551947,0.25936332048551947,0,0.0,9.627566456422482,0.0,0.0,9.627566456422482,,True,6.179716344700702,[],6.179716344700701,12.279363320485523,0,[10.689999999999996],0,0.0,0.0,0.0,0.6589375335419657,-6.7493633204855215,6.7493633204855215,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.179716344700701,[],6.179716344700703,12.279363320485526,3.4918467104525197,"[6.099646975784818, 6.179716344700703]",0,0.0,4.590353024215176,4.590353024215176,0.9425340937912579,-1.5893633204855249,1.5893633204855249,0,0.0,0.0,21.379999999999992,0.0,21.379999999999992 +35,,False,4.101792060544322,[],4.101792060544323,10.851155381029841,0.0,[0.0],0,0.0,0.0,0.0,0.7417581855543648,-4.361155381029842,4.361155381029842,0,0.0,161.88608774382772,0.0,0.0,161.88608774382772,,False,4.101792060544323,[],4.101792060544322,16.381155381029846,0,[16.381155381029842],0,0.0,0.0,0.0,0.6435998895362375,-10.851155381029844,10.851155381029844,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.101792060544322,[],4.10179206054432,10.281508405245027,6.099646975784818,"[6.179716344700703, 4.10179206054432]",0,0.0,5.691155381029847,4.101792060544322,0.9438716888849211,0.4084915947549712,0.0,0,0.8169831895099424,0,32.762310762059684,0.0,33.579293951569625 +36,,False,3.962170123484518,[],3.962170123484519,14.81332550451436,0.0,[14.813325504514363],0,0.0,0.0,0.0,0.7254472186648718,-8.32332550451436,8.32332550451436,0,0.0,308.961842727573,0.0,0.0,308.961842727573,,False,3.962170123484519,[],3.962170123484518,3.9621701234845226,16.381155381029842,[3.962170123484518],0,0.0,14.813325504514363,3.962170123484519,0.6514369859301807,1.5678298765154786,0.0,0.0,6.271319506061914,0,59.253302018057454,0.0,65.52462152411937,,False,3.962170123484518,[],3.96217012348452,8.063962184028844,6.179716344700703,"[4.10179206054432, 3.96217012348452]",0,0.0,3.962170123484518,3.962170123484518,0.9451059280776803,2.6260378159711557,0.0,0,5.252075631942311,0,7.924340246969036,0.0,13.176415878911348 +37,,False,4.924196254971815,[],4.924196254971815,4.924196254971811,14.813325504514363,[4.924196254971815],0,0.0,13.247521759486174,4.924196254971815,0.7327508022412237,1.5658037450281892,0.0,0,10.960626215197324,0.0,0.0,0.0,10.960626215197324,,False,4.924196254971815,[],4.924196254971814,4.924196254971819,3.962170123484518,[4.924196254971814],0,0.0,4.924196254971815,4.924196254971815,0.6607093709794387,0.6058037450281821,0.0,0.0,2.4232149801127285,0,19.69678501988726,0.0,22.119999999999987,,False,4.924196254971814,[],4.924196254971814,8.886366378456337,4.10179206054432,"[3.96217012348452, 4.924196254971814]",0,0.0,4.924196254971814,4.924196254971814,0.9465662062805864,1.8036336215436624,0.0,0,3.6072672430873247,0,9.848392509943627,0.0,13.455659753030952 +38,,False,6.495434252883474,[],6.495434252883474,6.49543425288347,4.924196254971815,[5.529999999999996],0,0.0,6.490000000000004,6.490000000000004,0.7417822964375154,-0.005434252883469881,0.005434252883469881,0,0.0,0.20171946703440197,0.0,0.0,0.20171946703440197,,False,6.495434252883474,[],6.495434252883473,6.495434252883478,4.924196254971814,[5.765803745028182],0,0.0,5.529999999999996,5.529999999999996,0.6671727504053446,-0.9654342528834778,0.9654342528834778,0.0,0.0,0.0,22.119999999999983,0.0,22.119999999999983,,False,6.495434252883473,[],6.495434252883473,11.419630507855292,3.96217012348452,"[4.924196254971814, 6.495434252883473]",0,0.0,5.765803745028182,5.765803745028182,0.9445696094688696,-0.7296305078552905,0.7296305078552905,0,0.0,0.0,11.531607490056365,0.0,11.531607490056365 +39,,False,5.33818125199332,[],5.33818125199332,6.3036155048767935,5.529999999999996,[5.765803745028182],0,0.0,5.34361550487679,5.33818125199332,0.7487813904216578,0.18638449512320587,0.0,0,1.3046914658624411,0.0,0.0,0.0,1.3046914658624411,,False,5.33818125199332,[],5.33818125199332,6.067811759848616,5.765803745028182,[4.924196254971814],0,0.0,5.765803745028182,4.800369492144704,0.67346334772752,-0.5378117598486156,0.5378117598486156,0.0,0.0,0.0,23.06321498011273,0.0,23.06321498011273,,False,5.33818125199332,[],5.338181251993318,11.833615504876796,4.924196254971814,"[6.495434252883473, 5.338181251993318]",0,0.0,4.924196254971814,4.194565747116523,0.9402651966402579,-1.1436155048767969,1.1436155048767969,0,0.0,0.0,9.848392509943627,0.0,9.848392509943627 +40,,False,4.6013616099847985,[],4.601361609984799,5.1391733698334106,5.765803745028182,[4.924196254971814],0,0.0,4.6013616099847985,4.6013616099847985,0.7545168799912201,1.3508266301665897,0.0,0,9.455786411166127,0.0,0.0,0.0,9.455786411166127,,False,4.601361609984799,[],4.601361609984799,5.7449771148616025,4.924196254971814,[5.744977114861596],0,0.0,4.924196254971814,4.386384495123198,0.6798517423728256,-0.21497711486160131,0.21497711486160131,0.0,0.0,0.0,19.696785019887255,0.0,19.696785019887255,,False,4.601361609984799,[],4.601361609984799,9.939542861978122,6.495434252883473,"[5.338181251993318, 4.601361609984799]",0,0.0,5.744977114861596,4.601361609984799,0.9416289823175399,0.7504571380218765,0.0,0,1.500914276043753,0,11.489954229723192,0.0,12.990868505766946 +41,,False,4.939135912525254,[],4.939135912525254,5.15411302738685,4.924196254971814,[5.154113027386855],0,0.0,4.939135912525254,4.939135912525254,0.7603889357003966,1.3358869726131495,0.0,0,9.351208808292046,0.0,0.0,0.0,9.351208808292046,,False,4.939135912525254,[],4.939135912525253,4.939135912525259,5.744977114861596,[4.939135912525253],0,0.0,5.154113027386855,4.939135912525254,0.6875098184308264,0.5908640874747411,0.0,0.0,2.3634563498989642,0,20.61645210954742,0.0,22.979908459446385,,False,4.939135912525253,[],4.939135912525255,9.540497522510059,5.338181251993318,"[4.601361609984799, 4.939135912525255]",0,0.0,4.939135912525253,4.939135912525253,0.9430252407145346,1.1495024774899418,0.0,0,2.2990049549798837,0,9.878271825050506,0.0,12.17727678003039 +42,,False,3.581249541408597,[],3.581249541408598,3.581249541408593,5.154113027386855,[3.581249541408598],0,0.0,3.581249541408597,3.581249541408597,0.7644739269498496,2.9087504585914075,0.0,0,20.361253210139854,0.0,0.0,0.0,20.361253210139854,,True,3.581249541408598,[],3.581249541408598,3.581249541408604,4.939135912525253,[3.581249541408598],0,0.0,3.581249541408598,3.581249541408598,0.6928372838422481,1.948750458591396,0.0,0.0,7.795001834365584,0,14.324998165634392,0.0,22.119999999999976,,False,3.581249541408598,[],3.581249541408596,8.520385453933855,4.601361609984799,"[4.939135912525255, 3.581249541408596]",0,0.0,3.581249541408598,3.581249541408598,0.9439965706228639,2.169614546066143,0.0,0,4.339229092132286,0,7.162499082817196,0.0,11.501728174949482 +43,,False,6.0424916173394205,[],6.0424916173394205,6.042491617339417,3.581249541408598,[1.948750458591396],0,0.0,6.0424916173394205,6.0424916173394205,0.7710594232164331,0.447508382660585,0.0,0,3.132558678624095,0.0,0.0,0.0,3.132558678624095,,True,6.0424916173394205,[],6.042491617339421,9.623741158748025,0,[9.62374115874802],0,0.0,1.948750458591396,1.948750458591396,0.6824825760138533,-4.093741158748024,4.093741158748024,0.0,0.0,0.0,7.795001834365584,0.0,7.795001834365584,,False,6.042491617339421,[],6.042491617339423,9.623741158748022,4.939135912525255,"[3.581249541408596, 6.042491617339423]",0,0.0,6.042491617339421,6.042491617339421,0.9455624710359383,1.066258841251977,0.0,0,2.132517682503954,0,19.24748231749604,0.0,21.379999999999995 +44,,False,4.465583546326495,[],4.465583546326493,8.559324705074514,1.948750458591396,[0.0],0,0.0,2.396258841251981,2.396258841251981,0.7663127913577256,-2.069324705074514,2.069324705074514,0,0.0,76.81333305236595,0.0,0.0,76.81333305236595,,False,4.465583546326493,[],4.465583546326492,14.089324705074517,0,[14.089324705074512],0,0.0,0.0,0.0,0.668665361334626,-8.559324705074516,8.559324705074516,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.465583546326492,[],4.465583546326494,10.50807516366592,3.581249541408596,"[6.042491617339423, 4.465583546326494]",0,0.0,4.465583546326492,4.465583546326492,0.946664587120273,0.18192483633408063,0.0,0,0.36384967266816126,0,28.178649410149024,0.0,28.542499082817187 +45,,False,3.5049461291856643,[],3.5049461291856643,12.064270834260178,0.0,[12.064270834260181],0,0.0,0.0,0.0,0.7543263206822017,-5.574270834260178,5.574270834260178,0,0.0,206.91693336773778,0.0,0.0,206.91693336773778,,False,3.5049461291856643,[],3.5049461291856634,3.504946129185667,14.089324705074512,[3.5049461291856634],0,0.0,12.064270834260181,3.504946129185665,0.6738480138688622,2.0250538708143315,0.0,0.0,8.100215483257326,0,48.257083337040726,0.0,56.357298820298055,,False,3.5049461291856634,[],3.5049461291856616,7.970529675512158,6.042491617339423,"[4.465583546326494, 3.5049461291856616]",0,0.0,3.5049461291856634,3.5049461291856634,0.9474988461456472,2.7194703244878404,0.0,0,5.438940648975681,0,7.009892258371327,0.0,12.448832907347008 +46,,False,4.7878385782883734,[],4.7878385782883734,4.787838578288369,12.064270834260181,[4.7878385782883734],0,0.0,10.362109412548552,4.787838578288374,0.7594658129390816,1.7021614217116303,0.0,0,11.915129951981413,0.0,0.0,0.0,11.915129951981413,,False,4.7878385782883734,[],4.787838578288375,4.787838578288378,3.5049461291856634,[4.787838578288375],0,0.0,4.7878385782883734,4.7878385782883734,0.6806711119392036,0.7421614217116215,0.0,0.0,2.968645686846486,0,19.151354313153494,0.0,22.11999999999998,,False,4.787838578288375,[],4.787838578288377,8.292784707474041,4.465583546326494,"[3.5049461291856616, 4.787838578288377]",0,0.0,4.787838578288375,4.787838578288375,0.9485971700461194,2.397215292525959,0.0,0,4.794430585051918,0,9.57567715657675,0.0,14.370107741628669 +47,,False,4.573131205960277,[],4.573131205960278,4.573131205960274,4.7878385782883734,[4.573131205960278],0,0.0,4.573131205960277,4.573131205960277,0.7641779738724706,1.9168687940397264,0.0,0,13.418081558278086,0.0,0.0,0.0,13.418081558278086,,False,4.573131205960278,[],4.573131205960279,4.573131205960281,4.787838578288375,[4.573131205960279],0,0.0,4.573131205960278,4.573131205960278,0.6869268925814851,0.9568687940397185,0.0,0.0,3.827475176158874,0,18.292524823841113,0.0,22.119999999999987,,False,4.573131205960279,[],4.573131205960277,9.360969784248656,3.5049461291856616,"[4.787838578288377, 4.573131205960277]",0,0.0,4.573131205960279,4.573131205960279,0.9496041720450201,1.3290302157513416,0.0,0,2.6580604315026832,0,9.146262411920558,0.0,11.804322843423241 +48,,False,5.501448331524805,[],5.501448331524805,5.5014483315248,4.573131205960278,[5.501448331524805],0,0.0,5.501448331524805,5.501448331524805,0.7696076598836435,0.9885516684751998,0.0,0,6.919861679326399,0.0,0.0,0.0,6.919861679326399,,False,5.501448331524805,[],5.501448331524806,5.501448331524807,4.573131205960279,[5.501448331524806],0,0.0,5.501448331524805,5.501448331524805,0.6941352466938593,0.02855166847519275,0.0,0.0,0.114206673900771,0,22.00579332609922,0.0,22.11999999999999,,False,5.501448331524806,[],5.5014483315248075,10.074579537485086,4.787838578288377,"[4.573131205960277, 5.5014483315248075]",0,0.0,5.501448331524806,5.501448331524806,0.9507645111641517,0.6154204625149129,0.0,0,1.2308409250298258,0,11.002896663049611,0.0,12.233737588079437 +49,,False,6.158186652932027,[],6.158186652932027,6.158186652932023,5.501448331524805,[5.5299999999999985],0,0.0,6.158186652932027,6.158186652932027,0.7753963846606912,0.3318133470679774,0.0,0,2.3226934294758417,0.0,0.0,0.0,2.3226934294758417,,False,6.158186652932027,[],6.158186652932028,6.158186652932029,5.501448331524806,[5.18855166847519],0,0.0,5.5299999999999985,5.5299999999999985,0.6992572417667651,-0.6281866529320288,0.6281866529320288,0.0,0.0,0.0,22.119999999999994,0.0,22.119999999999994,,False,6.158186652932028,[],6.15818665293203,11.65963498445684,4.573131205960277,"[5.5014483315248075, 6.15818665293203]",0,0.0,5.18855166847519,5.18855166847519,0.9480454502438674,-0.9696349844568379,0.9696349844568379,0,0.0,0.0,10.37710333695038,0.0,10.37710333695038 +50,,False,6.371862133549777,[],6.371862133549777,7.000048786481801,5.5299999999999985,[5.18855166847519],0,0.0,5.861813347067976,5.861813347067976,0.7790592417812432,-0.5100487864818009,0.5100487864818009,0,0.0,18.933010954204445,0.0,0.0,18.933010954204445,,False,6.371862133549777,[],6.371862133549777,7.341497118006616,5.18855166847519,[5.5014483315248075],0,0.0,5.18855166847519,4.560365015543161,0.6996739704118697,-1.8114971180066153,1.8114971180066153,0.0,0.0,0.0,20.75420667390076,0.0,20.75420667390076,,False,6.371862133549777,[],6.371862133549775,12.530048786481808,5.5014483315248075,"[6.15818665293203, 6.371862133549775]",0,0.0,5.5014483315248075,4.53181334706797,0.9420447009271175,-1.8400487864818071,1.8400487864818071,0,0.0,0.0,11.002896663049615,0.0,11.002896663049615 +51,,False,5.175553293954833,[],5.175553293954833,6.987050411961443,5.18855166847519,[5.5014483315248075],0,0.0,5.18855166847519,4.678502881993389,0.781578058621927,-0.4970504119614434,0.4970504119614434,0,0.0,18.450511292008777,0.0,0.0,18.450511292008777,,False,5.175553293954833,[],5.175553293954832,7.015602080436642,5.5014483315248075,[6.15818665293203],0,0.0,5.5014483315248075,3.689951213518192,0.699941855817155,-1.4856020804366405,1.4856020804366405,0.0,0.0,0.0,22.00579332609923,0.0,22.00579332609923,,False,5.175553293954832,[],5.17555329395483,11.547415427504607,6.15818665293203,"[6.371862133549775, 5.17555329395483]",0,0.0,6.15818665293203,4.318137866450223,0.9398725722110829,-0.8574154275046091,0.8574154275046091,0,0.0,0.0,12.31637330586406,0.0,12.31637330586406 +52,,False,4.743369817307445,[],4.743369817307446,6.228971897744081,5.5014483315248075,[6.15818665293203],0,0.0,5.240420229268889,4.743369817307445,0.7855417330244324,0.2610281022559189,0.0,0,1.8271967157914322,0.0,0.0,0.0,1.8271967157914322,,False,4.743369817307446,[],4.743369817307445,5.600785244812056,6.15818665293203,[5.600785244812054],0,0.0,6.15818665293203,4.672584572495389,0.7051161662263669,-0.07078524481205672,0.07078524481205672,0.0,0.0,0.0,24.63274661172812,0.0,24.63274661172812,,False,4.743369817307445,[],4.743369817307447,9.918923111262277,6.371862133549775,"[5.17555329395483, 4.743369817307447]",0,0.0,5.600785244812054,4.743369817307445,0.9409636967790259,0.7710768887377206,0.0,0,1.5421537774754412,0,11.201570489624109,0.0,12.74372426709955 +53,,False,4.632174275867238,[],4.632174275867238,4.702959520679291,6.15818665293203,[4.702959520679295],0,0.0,4.632174275867238,4.632174275867238,0.789276069714642,1.7870404793207104,0.0,0,12.509283355244973,0.0,0.0,0.0,12.509283355244973,,False,4.632174275867238,[],4.632174275867239,4.63217427586724,5.600785244812054,[4.632174275867239],0,0.0,4.702959520679295,4.632174275867238,0.7102509438935575,0.8978257241327592,0.0,0.0,3.5913028965310367,0,18.81183808271718,0.0,22.403140979248217,,False,4.632174275867239,[],4.632174275867241,9.375544093174689,5.17555329395483,"[4.743369817307447, 4.632174275867241]",0,0.0,4.632174275867239,4.632174275867239,0.9419916890139792,1.3144559068253114,0.0,0,2.628911813650623,0,9.264348551734479,0.0,11.893260365385101 +54,,False,2.34482395243653,[],2.3448239524365295,2.344823952436525,4.702959520679295,[2.3448239524365295],0,0.0,2.34482395243653,2.34482395243653,0.7911172596290383,4.145176047563476,0.0,0,29.016232332944334,0.0,0.0,0.0,29.016232332944334,,False,2.3448239524365295,[],2.3448239524365304,2.3448239524365313,4.632174275867239,[2.3448239524365304],0,0.0,2.3448239524365295,2.3448239524365295,0.7127826119347079,3.185176047563469,0.0,0.0,12.740704190253876,0,9.379295809746118,0.0,22.119999999999994,,False,2.3448239524365304,[],2.3448239524365295,6.9769982283037715,4.743369817307447,"[4.632174275867241, 2.3448239524365295]",0,0.0,2.3448239524365304,2.3448239524365304,0.9424985337610092,3.713001771696228,0.0,0,7.426003543392456,0,4.689647904873061,0.0,12.115651448265517 +55,,False,5.345517943888766,[],5.3455179438887654,5.345517943888761,2.3448239524365295,[5.3455179438887654],0,0.0,5.345517943888766,5.345517943888766,0.7951967058947791,1.1444820561112392,0.0,0,8.011374392778674,0.0,0.0,0.0,8.011374392778674,,False,5.3455179438887654,[],5.3455179438887654,5.345517943888766,2.3448239524365304,[5.3455179438887654],0,0.0,5.3455179438887654,5.3455179438887654,0.7183919212491966,0.18448205611123392,0.0,0.0,0.7379282244449357,0,21.382071775555062,0.0,22.119999999999997,,False,5.3455179438887654,[],5.3455179438887654,7.690341896325295,4.632174275867241,"[2.3448239524365295, 5.3455179438887654]",0,0.0,5.3455179438887654,5.3455179438887654,0.9436215281324287,2.9996581036747045,0.0,0,5.999316207349409,0,10.691035887777531,0.0,16.69035209512694 +56,,False,5.45293632653351,[],5.45293632653351,5.452936326533505,5.3455179438887654,[5.45293632653351],0,0.0,5.45293632653351,5.45293632653351,0.799197158679505,1.0370636734664949,0.0,0,7.259445714265464,0.0,0.0,0.0,7.259445714265464,,False,5.45293632653351,[],5.45293632653351,5.452936326533511,5.3455179438887654,[5.344482056111234],0,0.0,5.45293632653351,5.45293632653351,0.7238926131582885,0.07706367346648957,0.0,0.0,0.3082546938659583,0,21.81174530613404,0.0,22.119999999999997,,False,5.45293632653351,[],5.45293632653351,10.798454270422274,2.3448239524365295,"[5.3455179438887654, 5.45293632653351]",0,0.0,5.344482056111234,5.344482056111234,0.9443342794020503,-0.10845427042227573,0.10845427042227573,0,0.0,0.0,10.688964112222468,0.0,10.688964112222468 +57,,False,4.833939091648935,[],4.833939091648935,4.83393909164893,5.45293632653351,[4.833939091648935],0,0.0,4.833939091648935,4.833939091648935,0.8026150402953834,1.65606090835107,0.0,0,11.592426358457491,0.0,0.0,0.0,11.592426358457491,,False,4.833939091648935,[],4.833939091648935,4.942393362071211,5.344482056111234,[4.94239336207121],0,0.0,4.833939091648935,4.833939091648935,0.7285922596139295,0.587606637928789,0.0,0.0,2.350426551715156,0,19.33575636659574,0.0,21.686182918310895,,False,4.833939091648935,[],4.833939091648936,10.286875418182445,5.3455179438887654,"[5.45293632653351, 4.833939091648936]",0,0.0,4.94239336207121,4.833939091648935,0.9452817701935908,0.40312458181755506,0.0,0,0.8062491636351101,0,9.88478672414242,0.0,10.691035887777531 +58,,False,4.056943191532738,[],4.056943191532738,4.056943191532733,4.833939091648935,[4.056943191532738],0,0.0,4.056943191532738,4.056943191532738,0.8053950025777579,2.433056808467267,0.0,0,17.03139765927087,0.0,0.0,0.0,17.03139765927087,,False,4.056943191532738,[],4.056943191532738,4.056943191532739,4.94239336207121,[4.056943191532738],0,0.0,4.056943191532738,4.056943191532738,0.7324147559305023,1.4730568084672617,0.0,0.0,5.892227233869047,0,16.22777276613095,0.0,22.119999999999997,,False,4.056943191532738,[],4.056943191532736,8.890882283181671,5.45293632653351,"[4.833939091648936, 4.056943191532736]",0,0.0,4.056943191532738,4.056943191532738,0.9460524196658088,1.7991177168183272,0.0,0,3.5982354336366544,0,8.113886383065475,0.0,11.71212181670213 +59,,False,6.403958738659293,[],6.403958738659293,6.403958738659289,4.056943191532738,[5.529999999999999],0,0.0,6.403958738659293,6.403958738659293,0.8096273279748885,0.08604126134071155,0.0,0,0.6022888293849809,0.0,0.0,0.0,0.6022888293849809,,False,6.403958738659293,[],6.403958738659292,6.403958738659294,4.056943191532738,[6.403958738659292],0,0.0,5.529999999999999,5.529999999999999,0.735266252306686,-0.8739587386592937,0.8739587386592937,0.0,0.0,0.0,22.119999999999997,0.0,22.119999999999997,,False,6.403958738659292,[],6.403958738659294,10.46090193019203,4.833939091648936,"[4.056943191532736, 6.403958738659294]",0,0.0,6.403958738659292,6.403958738659292,0.947225687142937,0.22909806980797143,0.0,0,0.45819613961594285,0,12.807917477318584,0.0,13.266113616934527 +60,,False,4.98144919548836,[],4.98144919548836,5.8554079341476495,5.529999999999999,[5.855407934147654],0,0.0,4.98144919548836,4.98144919548836,0.8127943507918058,0.6345920658523507,0.0,0,4.442144460966455,0.0,0.0,0.0,4.442144460966455,,False,4.98144919548836,[],4.98144919548836,4.981449195488362,6.403958738659292,[4.286041261340707],0,0.0,5.855407934147654,4.98144919548836,0.7396703393557041,0.5485508045116383,0.0,0.0,2.194203218046553,0,23.421631736590616,0.0,25.61583495463717,,False,4.98144919548836,[],4.981449195488358,11.385407934147654,4.056943191532736,"[6.403958738659294, 4.981449195488358]",0,0.0,4.286041261340707,4.286041261340707,0.9457812706710779,-0.6954079341476529,0.6954079341476529,0,0.0,0.0,8.572082522681415,0.0,8.572082522681415 +61,,False,3.326495378009777,[],3.326495378009777,3.3264953780097732,5.855407934147654,[3.326495378009777],0,0.0,3.326495378009777,3.326495378009777,0.814851182450728,3.163504621990228,0.0,0,22.144532353931595,0.0,0.0,0.0,22.144532353931595,,False,3.326495378009777,[],3.326495378009777,4.0219033121574315,4.286041261340707,[4.02190331215743],0,0.0,3.326495378009777,3.326495378009777,0.7425305857747326,1.5080966878425688,0.0,0.0,6.032386751370275,0,13.305981512039107,0.0,19.338368263409382,,False,3.326495378009777,[],3.326495378009775,8.307944573498133,6.403958738659294,"[4.981449195488358, 3.326495378009775]",0,0.0,4.02190331215743,3.326495378009777,0.9463769727744168,2.3820554265018643,0.0,0,4.764110853003729,0,8.04380662431486,0.0,12.807917477318588 +62,,False,5.1023476825496665,[],5.102347682549666,5.102347682549662,3.326495378009777,[5.102347682549666],0,0.0,5.1023476825496665,5.1023476825496665,0.817919681042261,1.3876523174503381,0.0,0,9.713566222152366,0.0,0.0,0.0,9.713566222152366,,False,5.102347682549666,[],5.102347682549666,5.102347682549667,4.02190331215743,[5.102347682549666],0,0.0,5.102347682549666,5.102347682549666,0.7467976642544687,0.42765231745033283,0.0,0.0,1.7106092698013313,0,20.409390730198663,0.0,22.119999999999994,,False,5.102347682549666,[],5.102347682549667,8.42884306055944,4.981449195488358,"[3.326495378009775, 5.102347682549667]",0,0.0,5.102347682549666,5.102347682549666,0.9472656750934131,2.261156939440557,0.0,0,4.522313878881114,0,10.204695365099331,0.0,14.727009243980445 +63,,False,4.5673907194519865,[],4.5673907194519865,4.567390719451983,5.102347682549666,[4.5673907194519865],0,0.0,4.5673907194519865,4.5673907194519865,0.8205814505339039,1.9226092805480173,0.0,0,13.458264963836122,0.0,0.0,0.0,13.458264963836122,,False,4.5673907194519865,[],4.5673907194519865,4.567390719451988,5.102347682549666,[4.5673907194519865],0,0.0,4.5673907194519865,4.5673907194519865,0.7504991420218522,0.962609280548012,0.0,0.0,3.850437122192048,0,18.269562877807946,0.0,22.119999999999994,,False,4.5673907194519865,[],4.567390719451988,9.669738402001656,3.326495378009775,"[5.102347682549667, 4.567390719451988]",0,0.0,4.5673907194519865,4.5673907194519865,0.9480365800325202,1.0202615979983456,0.0,0,2.040523195996691,0,9.134781438903973,0.0,11.175304634900664 +64,,False,5.477754099433527,[],5.477754099433527,5.4777540994335245,4.5673907194519865,[5.477754099433527],0,0.0,5.477754099433527,5.477754099433527,0.8236728910319016,1.0122459005664766,0.0,0,7.085721303965336,0.0,0.0,0.0,7.085721303965336,,True,5.477754099433527,[],5.477754099433527,5.477754099433528,4.5673907194519865,[5.477754099433527],0,0.0,5.477754099433527,5.477754099433527,0.7547981236986859,0.05224590056647127,0.0,0.0,0.20898360226588508,0,21.91101639773411,0.0,22.119999999999994,,False,5.477754099433527,[],5.477754099433525,10.045144818885515,5.102347682549667,"[4.567390719451988, 5.477754099433525]",0,0.0,5.477754099433527,5.477754099433527,0.9489319268145556,0.6448551811144858,0.0,0,1.2897103622289716,0,10.955508198867054,0.0,12.245218561096026 +65,,False,4.7409713552611095,[],4.740971355261109,4.740971355261106,5.477754099433527,[0.05224590056647127],0,0.0,4.7409713552611095,4.7409713552611095,0.8262637795058627,1.7490286447388943,0.0,0,12.24320051317226,0.0,0.0,0.0,12.24320051317226,,True,4.740971355261109,[],4.7409713552611095,10.218725454694638,0,[10.218725454694637],0,0.0,0.05224590056647127,0.05224590056647127,0.7438693109788683,-4.688725454694637,4.688725454694637,0.0,0.0,0.0,0.20898360226588508,0.0,0.20898360226588508,,False,4.7409713552611095,[],4.740971355261108,10.218725454694635,4.567390719451988,"[5.477754099433525, 4.740971355261108]",0,0.0,4.7409713552611095,4.7409713552611095,0.9496823031065387,0.4712745453053646,0.0,0,0.9425490906107292,0,20.437450909389273,0.0,21.380000000000003 +66,,False,5.339820964186644,[],5.339820964186644,10.028546418881277,0.05224590056647127,[0.0],0,0.0,1.8012745453053656,1.8012745453053656,0.8183038055050889,-3.5385464188812783,3.5385464188812783,0,0.0,131.35084306887305,0.0,0.0,131.35084306887305,,True,5.339820964186644,[],5.339820964186643,15.558546418881281,0,[15.55854641888128],0,0.0,0.0,0.0,0.7317589513409677,-10.02854641888128,10.02854641888128,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.339820964186643,[],5.339820964186643,10.080792319447752,5.477754099433525,"[4.740971355261108, 5.339820964186643]",0,0.0,5.339820964186643,5.339820964186643,0.950501486525638,0.609207680552247,0.0,0,1.218415361104494,0,31.11709283776256,0.0,32.33550819886705 +67,,False,4.992619850055427,[],4.992619850055429,15.021166268936707,0.0,[0.0],0,0.0,0.0,0.0,0.806034615426208,-8.531166268936705,8.531166268936705,0,0.0,316.67689190293044,0.0,0.0,316.67689190293044,,True,4.992619850055429,[],4.992619850055428,20.55116626893671,0,[20.551166268936708],0,0.0,0.0,0.0,0.7207873664533926,-15.02116626893671,15.02116626893671,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.992619850055428,[],4.992619850055428,10.332440814242073,4.740971355261108,"[5.339820964186643, 4.992619850055428]",0,0.0,4.992619850055428,4.992619850055428,0.9512436395821842,0.35755918575792656,0.0,0,0.7151183715158531,0,41.102332537873416,0.0,41.817450909389265 +68,,False,4.224663894043056,[],4.224663894043054,19.24583016297976,0.0,[0.0],0,0.0,0.0,0.0,0.7959364293210298,-12.75583016297976,12.75583016297976,0,0.0,473.4964156498087,0.0,0.0,473.4964156498087,,False,4.224663894043054,[],4.224663894043053,24.775830162979766,0,[24.775830162979762],0,0.0,0.0,0.0,0.7117571773902853,-19.245830162979765,19.245830162979765,0.0,0.0,0.0,0.0,0.0,0.0,,False,4.224663894043053,[],4.224663894043053,9.217283744098484,5.339820964186643,"[4.992619850055428, 4.224663894043053]",0,0.0,4.224663894043053,4.224663894043053,0.9518544704223088,1.4727162559015161,0.0,0,2.9454325118030322,0,49.551660325959524,0.0,52.49709283776256 +69,,False,5.773140855889249,[],5.773140855889249,25.01897101886901,0.0,[24.775830162979762],0,0.0,0.0,0.0,0.7825391763850954,-18.528971018869008,18.528971018869008,0,0.0,687.7954042204175,0.0,0.0,687.7954042204175,,False,5.773140855889249,[],5.773140855889248,5.7731408558892525,24.775830162979762,[5.773140855889248],0,0.0,24.775830162979762,5.529999999999998,0.7159000019963846,-0.24314085588925138,0.24314085588925138,0.0,0.0,0.0,99.10332065191905,0.0,99.10332065191905,,False,5.773140855889248,[],5.773140855889246,9.997804749932302,4.992619850055428,"[4.224663894043053, 5.773140855889246]",0,0.0,5.773140855889248,5.773140855889248,0.9526648590585433,0.6921952500676962,0.0,0,1.3843905001353924,0,11.546281711778496,0.0,12.930672211913889 +70,,False,6.405205305878188,[],6.405205305878186,6.648346161767435,24.775830162979762,[5.773140855889248],0,0.0,24.775830162979762,6.246859144110754,0.7860725783269321,-0.158346161767434,0.158346161767434,0,0.0,5.877809524807149,0.0,0.0,5.877809524807149,,False,6.405205305878186,[],6.4052053058781855,6.40520530587819,5.773140855889248,[4.91685914411075],0,0.0,5.773140855889248,5.529999999999997,0.718603324061035,-0.8752053058781897,0.8752053058781897,0.0,0.0,0.0,23.092563423556992,0.0,23.092563423556992,,False,6.4052053058781855,[],6.405205305878187,12.178346161767436,4.224663894043053,"[5.773140855889246, 6.405205305878187]",0,0.0,4.91685914411075,4.91685914411075,0.9492727897347434,-1.4883461617674358,1.4883461617674358,0,0.0,0.0,9.8337182882215,0.0,9.8337182882215 +71,,False,6.392325753491903,[],6.392325753491902,7.26753105937009,5.773140855889248,[4.91685914411075],0,0.0,5.773140855889248,5.614794694121814,0.7877307911717968,-0.777531059370089,0.777531059370089,0,0.0,28.861952923817704,0.0,0.0,28.861952923817704,,False,6.392325753491902,[],6.392325753491902,7.8806719152593425,4.91685914411075,[5.773140855889246],0,0.0,4.91685914411075,4.04165383823256,0.7170521148965795,-2.3506719152593423,2.3506719152593423,0.0,0.0,0.0,19.667436576443,0.0,19.667436576443,,False,6.392325753491902,[],6.3923257534919005,12.79753105937009,5.773140855889246,"[6.405205305878187, 6.3923257534919005]",0,0.0,5.773140855889246,4.2847946941218105,0.9442605493134869,-2.1075310593700918,2.1075310593700918,0,0.0,0.0,11.546281711778493,0.0,11.546281711778493 +72,,False,4.5065675177966735,[],4.506567517796673,6.857239433056013,4.91685914411075,[5.773140855889246],0,0.0,4.91685914411075,4.139328084740661,0.7893666067989313,-0.3672394330560129,0.3672394330560129,0,0.0,13.631927755039198,0.0,0.0,13.631927755039198,,True,4.506567517796673,[],4.506567517796673,6.614098577166769,5.773140855889246,[6.405205305878187],0,0.0,5.773140855889246,3.422468940629904,0.7175823149982156,-1.0840985771667686,1.0840985771667686,0.0,0.0,0.0,23.092563423556985,0.0,23.092563423556985,,False,4.506567517796673,[],4.506567517796674,10.898893271288578,6.405205305878187,"[6.3923257534919005, 4.506567517796674]",0,0.0,6.405205305878187,4.2976742465080955,0.9443779560267258,-0.20889327128857715,0.20889327128857715,0,0.0,0.0,12.810410611756375,0.0,12.810410611756375 +73,,False,5.923162608341952,[],5.923162608341952,7.00726118550872,5.773140855889246,[0.0],0,0.0,5.773140855889246,5.405901422833233,0.791360956192184,-0.517261185508719,0.517261185508719,0,0.0,19.20073520608365,0.0,0.0,19.20073520608365,,True,5.923162608341952,[],5.923162608341952,12.537261185508722,0,[12.537261185508717],0,0.0,0.0,0.0,0.705976040783371,-7.007261185508721,7.007261185508721,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.923162608341952,[],5.923162608341951,10.42973012613863,6.3923257534919005,"[4.506567517796674, 5.923162608341951]",0,0.0,6.13205587963053,5.923162608341952,0.9452775945507683,0.2602698738613709,0.0,0,0.5205397477227418,0,25.074522371017434,0.0,25.595062118740174 +74,,False,6.706604953678462,[],6.706604953678461,13.713866139187182,0.0,[0.0],0,0.0,0.0,0.0,0.7771290422304361,-7.223866139187181,7.223866139187181,0,0.0,268.14991108662815,0.0,0.0,268.14991108662815,,True,6.706604953678461,[],6.70660495367846,19.243866139187183,0,[17.304098577166762],0,0.0,0.0,0.0,0.6932796976129552,-13.713866139187182,13.713866139187182,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.70660495367846,[],6.706604953678458,12.629767562020412,4.506567517796674,"[5.923162608341951, 6.706604953678458]",0,0.0,4.766837391658045,4.766837391658045,0.9410601432291902,-1.939767562020415,1.939767562020415,0,0.0,0.0,34.608197154333524,0.0,34.608197154333524 +75,,False,5.873589415635379,[],5.8735894156353785,19.58745555482256,0.0,[0.0],0,0.0,0.0,0.0,0.765078801631464,-13.09745555482256,13.09745555482256,0,0.0,486.1775501950134,0.0,0.0,486.1775501950134,,True,5.8735894156353785,[],5.873589415635378,25.117455554822563,0,[23.227261185508713],0,0.0,0.0,0.0,0.6825296333319428,-19.58745555482256,19.58745555482256,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.873589415635378,[],5.873589415635379,12.58019436931384,5.923162608341951,"[6.706604953678458, 5.873589415635379]",0,0.0,5.923162608341951,3.9833950463215357,0.9369840140791675,-1.8901943693138419,1.8901943693138419,0,0.0,0.0,46.454522371017426,0.0,46.454522371017426 +76,,False,5.649086732629106,[],5.6490867326291045,25.236542287451666,0.0,[0.0],0,0.0,0.0,0.0,0.7538365212848063,-18.746542287451668,18.746542287451668,0,0.0,695.8716497102058,0.0,0.0,695.8716497102058,,True,5.6490867326291045,[],5.649086732629104,30.766542287451667,0,[29.93386613918717],0,0.0,0.0,0.0,0.6725003533852801,-25.236542287451666,25.236542287451666,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.649086732629104,[],5.649086732629105,11.522676148264487,6.706604953678458,"[5.873589415635379, 5.649086732629105]",0,0.0,6.706604953678458,4.8164105843646166,0.93574404995884,-0.8326761482644871,0.8326761482644871,0,0.0,0.0,59.86773227837434,0.0,59.86773227837434 +77,,False,3.7771264633246933,[],3.777126463324695,29.01366875077636,0.0,[0.0],0,0.0,0.0,0.0,0.7465021550704215,-22.52366875077636,22.52366875077636,0,0.0,836.0785840288183,0.0,0.0,836.0785840288183,,True,3.777126463324695,[],3.777126463324694,34.54366875077636,0,[34.54366875077635],0,0.0,0.0,0.0,0.6659573381137139,-29.01366875077636,29.01366875077636,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.777126463324694,[],3.7771264633246924,9.4262131959538,5.873589415635379,"[5.649086732629105, 3.7771264633246924]",0,0.0,4.609802611589181,3.777126463324694,0.936369220875542,1.2637868040461981,0.0,0,2.5275736080923963,0,69.0873375015527,0.0,71.61491110964509 +78,,False,5.620548215961735,[],5.620548215961733,34.634216966738094,0.0,[0.0],0,0.0,0.0,0.0,0.7358486850729916,-28.144216966738092,28.144216966738092,0,0.0,1044.713333805318,0.0,0.0,1044.713333805318,,False,5.620548215961733,[],5.620548215961732,40.164216966738095,0,[40.16421696673808],0,0.0,0.0,0.0,0.65645333806097,-34.634216966738094,34.634216966738094,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.620548215961732,[],5.620548215961734,9.397674679286428,5.649086732629105,"[3.7771264633246924, 5.620548215961734]",0,0.0,5.620548215961732,5.620548215961732,0.9372773074653946,1.2923253207135712,0.0,0,2.5846506414271424,0,80.32843393347616,0.0,82.91308457490331 +79,,False,4.839062623136937,[],4.839062623136935,39.47327958987503,0.0,[39.47327958987503],0,0.0,0.0,0.0,0.7269171216959929,-32.98327958987503,32.98327958987503,0,0.0,1224.339338376161,0.0,0.0,1224.339338376161,,False,4.839062623136935,[],4.839062623136934,4.839062623136947,40.16421696673808,[4.839062623136934],0,0.0,39.47327958987503,4.8390626231369325,0.6606232290267471,0.6909373768630518,2.6645352591003757e-15,0.0,2.763749507452207,0,157.8931183595001,0.0,160.65686786695233,,False,4.839062623136934,[],4.839062623136934,10.45961083909867,3.7771264633246924,"[5.620548215961734, 4.839062623136934]",0,0.0,4.839062623136934,4.839062623136934,0.9380386211905027,0.23038916090132933,0.0,0,0.46077832180265865,0,9.678125246273868,0.0,10.138903568076527 +80,,False,4.643254974231806,[],4.643254974231811,4.643254974231809,39.47327958987503,[4.643254974231814],0,0.0,37.62653456410684,4.643254974231809,0.7300610011763422,1.8467450257681888,0.0,0,12.92721518037732,0.0,0.0,0.0,12.92721518037732,,False,4.643254974231811,[],4.643254974231813,4.643254974231825,4.839062623136934,[4.643254974231813],0,0.0,4.643254974231814,4.643254974231811,0.6645303200644438,0.8867450257681746,0.0,0.0,3.5469801030726984,0,18.573019896927256,0.0,22.119999999999955,,False,4.643254974231813,[],4.643254974231815,9.482317597368752,5.620548215961734,"[4.839062623136934, 4.643254974231815]",0,0.0,4.643254974231813,4.643254974231813,0.9387519544782692,1.2076824026312503,0.0,0,2.4153648052625005,0,9.286509948463626,0.0,11.701874753726127 +81,,False,5.556121798533965,[],5.556121798533968,5.5561217985339635,4.643254974231814,[5.529999999999988],0,0.0,5.556121798533965,5.556121798533965,0.7337291276677645,0.9338782014660376,0.0,0,6.537147410262263,0.0,0.0,0.0,6.537147410262263,,False,5.556121798533968,[],5.556121798533969,5.55612179853398,4.643254974231813,[5.556121798533969],0,0.0,5.529999999999988,5.529999999999988,0.6690250382490556,-0.026121798533980112,0.026121798533980112,0.0,0.0,0.0,22.11999999999995,0.0,22.11999999999995,,False,5.556121798533969,[],5.556121798533967,10.199376772765785,4.839062623136934,"[4.643254974231815, 5.556121798533967]",0,0.0,5.556121798533969,5.556121798533969,0.9395842372506924,0.4906232272342157,0.0,0,0.9812464544684314,0,11.112243597067938,0.0,12.093490051536369 +82,,False,6.363886524417105,[],6.363886524417104,6.39000832295108,5.529999999999988,[5.556121798533969],0,0.0,6.363886524417105,6.363886524417105,0.7378099301935712,0.0999916770489202,0.0,0,0.6999417393424414,0.0,0.0,0.0,0.6999417393424414,,False,6.363886524417104,[],6.363886524417104,6.363886524417115,5.556121798533969,[5.133878201466031],0,0.0,5.556121798533969,5.529999999999989,0.6720892822726854,-0.8338865244171156,0.8338865244171156,0.0,0.0,0.0,22.224487194135875,0.0,22.224487194135875,,False,6.363886524417104,[],6.363886524417103,11.92000832295107,4.643254974231815,"[5.556121798533967, 6.363886524417103]",0,0.0,5.133878201466031,5.133878201466031,0.9375480011412645,-1.2300083229510737,1.2300083229510737,0,0.0,0.0,10.267756402932061,0.0,10.267756402932061 +83,,False,7.539162716269333,[],7.539162716269333,8.373049240686445,5.556121798533969,[5.133878201466031],0,0.0,5.656113475582889,5.656113475582889,0.7380314266284014,-1.8830492406864439,1.8830492406864439,0,0.0,69.8987878142808,0.0,0.0,69.8987878142808,,False,7.539162716269333,[],7.539162716269334,8.769171039220419,5.133878201466031,[5.556121798533967],0,0.0,5.133878201466031,4.299991677048915,0.670275104686181,-3.239171039220418,3.239171039220418,0.0,0.0,0.0,20.535512805864123,0.0,20.535512805864123,,False,7.539162716269334,[],7.539162716269337,13.90304924068644,5.556121798533967,"[6.363886524417103, 7.539162716269337]",0,0.0,5.556121798533967,4.326113475582893,0.9310618602073313,-3.2130492406864404,3.2130492406864404,0,0.0,0.0,11.112243597067934,0.0,11.112243597067934 +84,,False,3.559958552316202,[],3.559958552316201,6.799129591536616,5.133878201466031,[5.556121798533967],0,0.0,5.133878201466031,3.250828960779587,0.7394937972763821,-0.30912959153661523,0.30912959153661523,0,0.0,11.474890437839157,0.0,0.0,11.474890437839157,,True,3.559958552316201,[],3.5599585523162003,6.773007793002652,5.556121798533967,[6.363886524417103],0,0.0,5.556121798533967,2.316950759313549,0.6701127911129882,-1.243007793002652,1.243007793002652,0.0,0.0,0.0,22.224487194135868,0.0,22.224487194135868,,False,3.5599585523162003,[],3.559958552316198,11.099121268585536,6.363886524417103,"[7.539162716269337, 3.559958552316198]",0,0.0,6.363886524417103,3.150837283730662,0.9306778845102691,-0.4091212685855381,0.4091212685855381,0,0.0,0.0,12.727773048834205,0.0,12.727773048834205 +85,,False,6.19072725611364,[],6.19072725611364,7.433735049116288,5.556121798533967,[0.0],0,0.0,5.556121798533967,5.246992206997351,0.741040478600642,-0.943735049116289,0.943735049116289,0,0.0,35.031445023196646,0.0,0.0,35.031445023196646,,True,6.19072725611364,[],6.190727256113641,12.963735049116293,0,[12.963735049116282],0,0.0,0.0,0.0,0.6605216071270115,-7.433735049116292,7.433735049116292,0.0,0.0,0.0,0.0,0.0,0.0,,False,6.190727256113641,[],6.190727256113643,9.750685808429843,7.539162716269337,"[3.559958552316198, 6.190727256113643]",0,0.0,6.59984852469918,6.190727256113641,0.9316700774258152,0.9393141915701584,0.0,0,1.8786283831403168,0,25.927470098232565,0.0,27.80609848137288 +86,,False,5.617640845511145,[],5.617640845511146,13.051375894627434,0.0,[0.0],0,0.0,0.0,0.0,0.7315393692436124,-6.561375894627434,6.561375894627434,0,0.0,243.55827320857034,0.0,0.0,243.55827320857034,,False,5.617640845511146,[],5.617640845511145,18.58137589462744,0,[17.46300779300264],0,0.0,0.0,0.0,0.652052855144872,-13.051375894627437,13.051375894627437,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.617640845511145,[],5.6176408455111435,11.808368101624788,3.559958552316198,"[6.190727256113643, 5.6176408455111435]",0,0.0,4.4992727438863565,4.4992727438863565,0.9299936715822917,-1.1183681016247888,1.1183681016247888,0,0.0,0.0,34.92601558600528,0.0,34.92601558600528 +87,,False,6.21707079698011,[],6.217070796980111,19.268446691607544,0.0,[17.46300779300264],0,0.0,0.0,0.0,0.7213044867244044,-12.778446691607545,12.778446691607545,0,0.0,474.33594119247203,0.0,0.0,474.33594119247203,,True,6.217070796980111,[],6.21707079698011,7.3354388986049095,17.46300779300264,[6.190727256113643],0,0.0,17.46300779300264,4.411631898375202,0.6528579871142758,-1.8054388986049092,1.8054388986049092,0.0,0.0,0.0,69.85203117201056,0.0,69.85203117201056,,False,6.21707079698011,[],6.21707079698011,11.834711642491254,6.190727256113643,"[5.6176408455111435, 6.21707079698011]",0,0.0,6.190727256113643,5.072359154488854,0.9283970651442713,-1.1447116424912558,1.1447116424912558,0,0.0,0.0,12.381454512227286,0.0,12.381454512227286 +88,,False,5.226288269498875,[],5.226288269498877,7.031727168103782,17.46300779300264,[0.0],0,0.0,17.46300779300264,4.684561101395094,0.723339255328532,-0.5417271681037814,0.5417271681037814,0,0.0,20.108912480012364,0.0,0.0,20.108912480012364,,True,5.226288269498877,[],5.226288269498877,12.561727168103786,0,[11.808368101624787],0,0.0,0.0,0.0,0.6452688326049063,-7.031727168103786,7.031727168103786,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.226288269498877,[],5.226288269498879,11.443359066478987,5.6176408455111435,"[6.21707079698011, 5.226288269498879]",0,0.0,5.6176408455111435,4.472929203019888,0.9275537641300593,-0.7533590664789891,0.7533590664789891,0,0.0,0.0,23.616736203249573,0.0,23.616736203249573 +89,,False,5.847401432576639,[],5.847401432576639,12.87912860068042,0.0,[0.0],0,0.0,0.0,0.0,0.71405228125271,-6.38912860068042,6.38912860068042,0,0.0,237.16445365725718,0.0,0.0,237.16445365725718,,True,5.847401432576639,[],5.847401432576639,18.409128600680425,0,[18.025438898604897],0,0.0,0.0,0.0,0.6369842069936281,-12.879128600680424,12.879128600680424,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.847401432576639,[],5.847401432576641,11.07368970207552,6.21707079698011,"[5.226288269498879, 5.847401432576641]",0,0.0,6.21707079698011,5.463711730501121,0.9276414432175051,-0.3836897020755181,0.3836897020755181,0,0.0,0.0,36.05087779720979,0.0,36.05087779720979 +90,,False,5.174833011991471,[],5.174833011991471,18.05396161267189,0.0,[0.0],0,0.0,0.0,0.0,0.7060301662051295,-11.563961612671893,11.563961612671893,0,0.0,429.25425506238065,0.0,0.0,429.25425506238065,,True,5.174833011991471,[],5.1748330119914705,23.583961612671896,0,[23.251727168103777],0,0.0,0.0,0.0,0.6298279234466727,-18.053961612671895,18.053961612671895,0.0,0.0,0.0,0.0,0.0,0.0,,False,5.1748330119914705,[],5.174833011991469,11.022234444568108,5.226288269498879,"[5.847401432576641, 5.174833011991469]",0,0.0,5.226288269498879,4.8425985674233605,0.9277330795368395,-0.33223444456811,0.33223444456811,0,0.0,0.0,46.503454336207554,0.0,46.503454336207554 +91,,False,3.783145107640761,[],3.7831451076407627,21.837106720312654,0.0,[0.0],0,0.0,0.0,0.0,0.7002785965029295,-15.347106720312654,15.347106720312654,0,0.0,569.6846014580057,0.0,0.0,569.6846014580057,,False,3.7831451076407627,[],3.783145107640762,27.36710672031266,0,[27.36710672031265],0,0.0,0.0,0.0,0.6246971239773438,-21.837106720312658,21.837106720312658,0.0,0.0,0.0,0.0,0.0,0.0,,False,3.783145107640762,[],3.783145107640763,8.95797811963223,5.847401432576641,"[5.174833011991469, 3.783145107640763]",0,0.0,4.115379552208871,3.7831451076407614,0.9283217912521495,1.732021880367769,4.440892098500626e-16,0,3.464043760735538,0,54.7342134406253,0.0,58.19825720136083 +92,,False,5.734501064880046,[],5.734501064880046,27.5716077851927,0.0,[27.36710672031265],0,0.0,0.0,0.0,0.6917368499712784,-21.081607785192702,21.081607785192702,0,0.0,782.5492809863531,0.0,0.0,782.5492809863531,,False,5.734501064880046,[],5.734501064880045,5.734501064880057,27.36710672031265,[5.734501064880046],0,0.0,27.36710672031265,5.5299999999999905,0.6288399470323761,-0.2045010648800556,0.2045010648800556,0.0,0.0,0.0,109.4684268812506,0.0,109.4684268812506,,False,5.734501064880045,[],5.734501064880045,9.517646172520807,5.174833011991469,"[3.783145107640763, 5.734501064880045]",0,0.0,5.734501064880046,5.734501064880046,0.9291960962702157,1.172353827479193,0.0,0,2.344707654958386,0,11.469002129760092,0.0,13.813709784718478 +93,,False,4.0455027380385795,[],4.045502738038581,4.250003802918634,27.36710672031265,[4.250003802918637],0,0.0,25.12711052323128,4.045502738038579,0.6943668343492307,2.239996197081367,8.881784197001252e-16,0,15.679973379569567,0.0,0.0,0.0,15.679973379569567,,False,4.045502738038581,[],4.04550273803858,4.045502738038591,5.734501064880046,[4.04550273803858],0,0.0,4.250003802918637,4.045502738038581,0.6320065439510603,1.4844972619614092,0.0,0.0,5.937989047845637,0,17.000015211674548,0.0,22.938004259520184,,False,4.04550273803858,[],4.045502738038579,9.780003802918623,3.783145107640763,"[5.734501064880045, 4.045502738038579]",0,0.0,4.04550273803858,4.04550273803858,0.929800168345292,0.9099961970813757,0.0,0,1.8199923941627514,0,8.09100547607716,0.0,9.910997870239912 +94,,False,5.7699773599307935,[],5.769977359930793,5.769977359930789,4.250003802918637,[5.52999999999999],0,0.0,5.769977359930794,5.7699773599307935,0.6980411873342872,0.7200226400692102,0.0,0,5.040158480484472,0.0,0.0,0.0,5.040158480484472,,False,5.769977359930793,[],5.769977359930793,5.769977359930804,4.04550273803858,[5.769977359930793],0,0.0,5.52999999999999,5.52999999999999,0.635930591141147,-0.23997735993080305,0.23997735993080305,0.0,0.0,0.0,22.11999999999996,0.0,22.11999999999996,,False,5.769977359930793,[],5.769977359930794,9.81548009796937,5.734501064880045,"[4.045502738038579, 5.769977359930794]",0,0.0,5.769977359930793,5.769977359930793,0.9306441178572558,0.8745199020306282,0.0,0,1.7490398040612565,0,11.539954719861585,0.0,13.288994523922842 +95,,False,6.268389522403902,[],6.268389522403903,6.508366882334703,5.52999999999999,[5.769977359930793],0,0.0,6.2500226400692,6.2500226400692,0.7018963239160023,-0.018366882334702517,0.018366882334702517,0,0.0,0.6817786722641573,0.0,0.0,0.6817786722641573,,False,6.268389522403903,[],6.268389522403902,6.268389522403914,5.769977359930793,[4.920022640069207],0,0.0,5.769977359930793,5.52999999999999,0.6391055993022162,-0.7383895224039136,0.7383895224039136,0.0,0.0,0.0,23.07990943972317,0.0,23.07990943972317,,False,6.268389522403902,[],6.268389522403904,12.038366882334696,4.045502738038579,"[5.769977359930794, 6.268389522403904]",0,0.0,4.920022640069207,4.920022640069207,0.9287650816933806,-1.3483668823346955,1.3483668823346955,0,0.0,0.0,9.840045280138414,0.0,9.840045280138414 +96,,False,4.132358910020625,[],4.132358910020625,4.870748432424535,5.769977359930793,[4.870748432424539],0,0.0,4.150725792355328,4.132358910020625,0.7044085617850973,1.619251567575465,0.0,0,11.334760973028256,0.0,0.0,0.0,11.334760973028256,,False,4.132358910020625,[],4.132358910020625,5.480725792355332,4.920022640069207,[5.4807257923553205],0,0.0,4.870748432424539,4.132358910020625,0.642146999502601,0.049274207644668166,0.0,0.0,0.19709683057867267,0,19.482993729698155,0.0,19.680090560276827,,False,4.132358910020625,[],4.132358910020623,10.400748432424525,5.769977359930794,"[6.268389522403904, 4.132358910020623]",0,0.0,5.4807257923553205,4.132358910020625,0.9293654065928338,0.2892515675754739,0.0,0,0.5785031351509478,0,10.961451584710641,0.0,11.539954719861589 +97,,False,5.145861852428309,[],5.145861852428309,5.145861852428307,4.870748432424539,[5.145861852428309],0,0.0,5.145861852428309,5.145861852428309,0.7074783717861138,1.3441381475716945,0.0,0,9.408967033001861,0.0,0.0,0.0,9.408967033001861,,False,5.145861852428309,[],5.145861852428309,5.14586185242832,5.4807257923553205,[5.145861852428309],0,0.0,5.145861852428309,5.145861852428309,0.6458634153989979,0.3841381475716794,0.0,0.0,1.5365525902867176,0,20.583447409713237,0.0,22.119999999999955,,False,5.145861852428309,[],5.145861852428311,9.278220762448932,6.268389522403904,"[4.132358910020623, 5.145861852428311]",0,0.0,5.145861852428309,5.145861852428309,0.9300989690483926,1.4117792375510687,0.0,0,2.8235584751021374,0,10.291723704856619,0.0,13.115282179958756 +98,,False,5.878673548190895,[],5.8786735481908945,5.878673548190891,5.145861852428309,[5.529999999999989],0,0.0,5.878673548190895,5.878673548190895,0.710908233340282,0.6113264518091084,0.0,0,4.279285162663759,0.0,0.0,0.0,4.279285162663759,,False,5.8786735481908945,[],5.878673548190895,5.878673548190905,5.145861852428309,[5.544138147571692],0,0.0,5.529999999999989,5.529999999999989,0.6493202841365274,-0.3486735481909058,0.3486735481909058,0.0,0.0,0.0,22.119999999999955,0.0,22.119999999999955,,False,5.878673548190895,[],5.878673548190894,11.0245354006192,4.132358910020623,"[5.145861852428311, 5.878673548190894]",0,0.0,5.544138147571692,5.544138147571692,0.9302513306183344,-0.3345354006192034,0.3345354006192034,0,0.0,0.0,11.088276295143384,0.0,11.088276295143384 +99,,False,4.76040549180619,[],4.760405491806191,5.109079039997093,5.529999999999989,[5.109079039997097],0,0.0,4.76040549180619,4.76040549180619,0.7136272688118213,1.380920960002907,0.0,0,9.66644672002035,0.0,0.0,0.0,9.66644672002035,,False,4.760405491806191,[],4.760405491806192,5.094940892425404,5.544138147571692,[5.094940892425395],0,0.0,5.109079039997097,4.760405491806191,0.6526185814128537,0.4350591075745953,0.0,0.0,1.7402364302983813,0,20.436316159988387,0.0,22.176552590286768,,False,4.760405491806192,[],4.7604054918061935,10.639079039997082,5.145861852428311,"[5.878673548190894, 4.7604054918061935]",0,0.0,5.094940892425395,4.760405491806192,0.930907347592919,0.050920960002915905,0.0,0,0.10184192000583181,0,10.18988178485079,0.0,10.291723704856622 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.csv index 1020ceb..6cf800d 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.csv @@ -1,4 +1,4 @@ -t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IL:-1000,TC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IL:-1,TC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IL:-2,TC +t,i=1,IO:EXT|-2,OQ:2|-4,IL:-2,TC,i=2,IO:1|-4,OQ:3|-6,IL:-4,TC,i=3,IO:2|-6,OQ:EXT|-7,IL:-6,TC 0,,5.276265890021318,5.276265890021318,1.2137341099786818,8.496138769850774,,5.276265890021318,5.276265890021318,0.25373410997868184,22.12,,5.276265890021318,5.276265890021318,5.413734109978681,21.38 1,,3.1453719211934947,3.1453719211934947,3.3446280788065055,23.41239655164554,,3.1453719211934947,3.1453719211934947,2.3846280788065055,22.12,,3.1453719211934947,3.1453719211934947,2.2683621887851864,10.827468219957362 2,,5.623901111326356,5.623901111326356,0.866098888673644,6.062692220715508,,5.623901111326356,5.623901111326356,-0.09390111132635592,22.12,,5.623901111326356,5.623901111326356,1.9207269674801486,15.08925615761301 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.txt index c1605b0..ad82231 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list.txt @@ -1,13 +1,13 @@ -t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IL:-1000 TC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IL:-1 TC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IL:-2 TC ---- ---------------- -------------- --------- ---------- -------- ------------- --------- --------- ---------- ------- ------------- --------- ----------- --------- -------- -0 | 5.27627 5.27627 1.21373 8.49614 | 5.27627 5.27627 0.253734 22.12 | 5.27627 5.27627 5.41373 21.38 -1 | 3.14537 3.14537 3.34463 23.4124 | 3.14537 3.14537 2.38463 22.12 | 3.14537 3.14537 2.26836 10.8275 -2 | 5.6239 5.6239 0.866099 6.06269 | 5.6239 5.6239 -0.0939011 22.12 | 5.6239 5.6239 1.92073 15.0893 -3 | 6.14531 6.14531 0.250788 1.75551 | 6.14531 6.14531 -0.615311 22.4956 | 6.14531 6.14531 -1.07921 10.1322 -4 | 6.03719 6.03719 -0.162502 6.03207 | 6.03719 6.03719 -1.5864 20.2644 | 6.03719 6.03719 -1.4925 11.2478 +t | i=1 IO:EXT|-2 OQ:2|-4 IL:-2 TC | i=2 IO:1|-4 OQ:3|-6 IL:-4 TC | i=3 IO:2|-6 OQ:EXT|-7 IL:-6 TC +--- ------- ----------- --------- --------- -------- ------- --------- --------- ---------- ------- ------- --------- ----------- --------- -------- +0 | 5.27627 5.27627 1.21373 8.49614 | 5.27627 5.27627 0.253734 22.12 | 5.27627 5.27627 5.41373 21.38 +1 | 3.14537 3.14537 3.34463 23.4124 | 3.14537 3.14537 2.38463 22.12 | 3.14537 3.14537 2.26836 10.8275 +2 | 5.6239 5.6239 0.866099 6.06269 | 5.6239 5.6239 -0.0939011 22.12 | 5.6239 5.6239 1.92073 15.0893 +3 | 6.14531 6.14531 0.250788 1.75551 | 6.14531 6.14531 -0.615311 22.4956 | 6.14531 6.14531 -1.07921 10.1322 +4 | 6.03719 6.03719 -0.162502 6.03207 | 6.03719 6.03719 -1.5864 20.2644 | 6.03719 6.03719 -1.4925 11.2478 ... -95 | 6.13073 6.13073 -1.08737 40.3632 | 6.13073 6.13073 -0.600726 27.9066 | 6.13073 6.13073 -1.44433 9.37279 -96 | 5.56004 5.56004 0.329234 2.30464 | 5.56004 5.56004 -1.47437 18.7456 | 5.56004 5.56004 -1.00077 12.0072 -97 | 4.3816 4.3816 0.634028 4.4382 | 4.3816 4.3816 0.147631 24.0144 | 4.3816 4.3816 0.748358 12.2615 -98 | 4.7752 4.7752 1.7148 12.0036 | 4.7752 4.7752 0.754799 22.12 | 4.7752 4.7752 1.5332 12.6168 -99 | 7.2159 7.2159 -0.725901 26.9455 | 7.2159 7.2159 -1.6859 22.12 | 7.2159 7.2159 -1.3011 11.8296 \ No newline at end of file +95 | 6.13073 6.13073 -1.08737 40.3632 | 6.13073 6.13073 -0.600726 27.9066 | 6.13073 6.13073 -1.44433 9.37279 +96 | 5.56004 5.56004 0.329234 2.30464 | 5.56004 5.56004 -1.47437 18.7456 | 5.56004 5.56004 -1.00077 12.0072 +97 | 4.3816 4.3816 0.634028 4.4382 | 4.3816 4.3816 0.147631 24.0144 | 4.3816 4.3816 0.748358 12.2615 +98 | 4.7752 4.7752 1.7148 12.0036 | 4.7752 4.7752 0.754799 22.12 | 4.7752 4.7752 1.5332 12.6168 +99 | 7.2159 7.2159 -0.725901 26.9455 | 7.2159 7.2159 -1.6859 22.12 | 7.2159 7.2159 -1.3011 11.8296 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.csv index 6941633..0aa8272 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.csv @@ -1,4 +1,4 @@ -t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,OS:EXT|-1000,IL:-1000,HC,SC,TC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,OS:0|-1,IL:-1,HC,SC,TC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,OS:1|-2,IL:-2,HC,SC,TC +t,i=1,IO:EXT|-2,OQ:2|-4,IS:2|-4,OS:EXT|-2,IL:-2,HC,SC,TC,i=2,IO:1|-4,OQ:3|-6,IS:3|-6,OS:1|-4,IL:-4,HC,SC,TC,i=3,IO:2|-6,OQ:EXT|-7,IS:EXT|-7,OS:2|-6,IL:-6,HC,SC,TC 0,,5.276265890021318,5.276265890021318,0,5.276265890021318,1.2137341099786818,8.496138769850774,0.0,8.496138769850774,,5.276265890021318,5.276265890021318,0,5.276265890021318,0.25373410997868184,1.0149364399147274,0,22.12,,5.276265890021318,5.276265890021318,0,5.276265890021318,5.413734109978681,10.827468219957362,0,21.38 1,,3.1453719211934947,3.1453719211934947,5.276265890021318,3.1453719211934947,3.3446280788065055,23.41239655164554,0.0,23.41239655164554,,3.1453719211934947,3.1453719211934947,5.276265890021318,3.1453719211934947,2.3846280788065055,9.538512315226022,0,22.12,,3.1453719211934947,3.1453719211934947,0,3.1453719211934947,2.2683621887851864,4.536724377570373,0,10.827468219957362 2,,5.623901111326356,5.623901111326356,3.1453719211934947,5.623901111326356,0.866098888673644,6.062692220715508,0.0,6.062692220715508,,5.623901111326356,5.623901111326356,3.1453719211934947,5.53,-0.09390111132635592,0.0,0.0,22.12,,5.623901111326356,5.623901111326356,5.276265890021318,5.623901111326356,1.9207269674801486,3.841453934960297,0,15.08925615761301 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.txt index 710b704..ff0dd65 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_list_of_strings.txt @@ -1,13 +1,13 @@ -t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 OS:EXT|-1000 IL:-1000 HC SC TC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 OS:0|-1 IL:-1 HC SC TC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 OS:1|-2 IL:-2 HC SC TC ---- ---------------- -------------- --------- --------- -------------- ---------- -------- -------- -------- ------------- --------- --------- --------- --------- ---------- -------- ---- ------- ------------- --------- ----------- ----------- --------- --------- -------- ---- -------- -0 | 5.27627 5.27627 0 5.27627 1.21373 8.49614 0 8.49614 | 5.27627 5.27627 0 5.27627 0.253734 1.01494 0 22.12 | 5.27627 5.27627 0 5.27627 5.41373 10.8275 0 21.38 -1 | 3.14537 3.14537 5.27627 3.14537 3.34463 23.4124 0 23.4124 | 3.14537 3.14537 5.27627 3.14537 2.38463 9.53851 0 22.12 | 3.14537 3.14537 0 3.14537 2.26836 4.53672 0 10.8275 -2 | 5.6239 5.6239 3.14537 5.6239 0.866099 6.06269 0 6.06269 | 5.6239 5.6239 3.14537 5.53 -0.0939011 0 0 22.12 | 5.6239 5.6239 5.27627 5.6239 1.92073 3.84145 0 15.0893 -3 | 6.14531 6.14531 5.53 6.14531 0.250788 1.75551 0 1.75551 | 6.14531 6.14531 5.6239 5.6239 -0.615311 0 0 22.4956 | 6.14531 6.14531 3.14537 5.0661 -1.07921 0 0 10.1322 -4 | 6.03719 6.03719 5.6239 5.87469 -0.162502 0 6.03207 6.03207 | 6.03719 6.03719 5.0661 5.0661 -1.5864 0 0 20.2644 | 6.03719 6.03719 5.6239 5.6239 -1.4925 0 0 11.2478 +t | i=1 IO:EXT|-2 OQ:2|-4 IS:2|-4 OS:EXT|-2 IL:-2 HC SC TC | i=2 IO:1|-4 OQ:3|-6 IS:3|-6 OS:1|-4 IL:-4 HC SC TC | i=3 IO:2|-6 OQ:EXT|-7 IS:EXT|-7 OS:2|-6 IL:-6 HC SC TC +--- ------- ----------- --------- --------- ----------- --------- -------- -------- -------- ------- --------- --------- --------- --------- ---------- -------- ---- ------- ------- --------- ----------- ----------- --------- --------- -------- ---- -------- +0 | 5.27627 5.27627 0 5.27627 1.21373 8.49614 0 8.49614 | 5.27627 5.27627 0 5.27627 0.253734 1.01494 0 22.12 | 5.27627 5.27627 0 5.27627 5.41373 10.8275 0 21.38 +1 | 3.14537 3.14537 5.27627 3.14537 3.34463 23.4124 0 23.4124 | 3.14537 3.14537 5.27627 3.14537 2.38463 9.53851 0 22.12 | 3.14537 3.14537 0 3.14537 2.26836 4.53672 0 10.8275 +2 | 5.6239 5.6239 3.14537 5.6239 0.866099 6.06269 0 6.06269 | 5.6239 5.6239 3.14537 5.53 -0.0939011 0 0 22.12 | 5.6239 5.6239 5.27627 5.6239 1.92073 3.84145 0 15.0893 +3 | 6.14531 6.14531 5.53 6.14531 0.250788 1.75551 0 1.75551 | 6.14531 6.14531 5.6239 5.6239 -0.615311 0 0 22.4956 | 6.14531 6.14531 3.14537 5.0661 -1.07921 0 0 10.1322 +4 | 6.03719 6.03719 5.6239 5.87469 -0.162502 0 6.03207 6.03207 | 6.03719 6.03719 5.0661 5.0661 -1.5864 0 0 20.2644 | 6.03719 6.03719 5.6239 5.6239 -1.4925 0 0 11.2478 ... -95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 0 40.3632 40.3632 | 6.13073 6.13073 6.97664 6.97664 -0.600726 0 0 27.9066 | 6.13073 6.13073 3.79191 4.6864 -1.44433 0 0 9.37279 -96 | 5.56004 5.56004 6.97664 6.64741 0.329234 2.30464 0 2.30464 | 5.56004 5.56004 4.6864 4.6864 -1.47437 0 0 18.7456 | 5.56004 5.56004 6.0036 6.0036 -1.00077 0 0 12.0072 -97 | 4.3816 4.3816 4.6864 4.3816 0.634028 4.4382 0 4.4382 | 4.3816 4.3816 6.0036 5.85597 0.147631 0.590525 0 24.0144 | 4.3816 4.3816 6.13073 5.38237 0.748358 1.49672 0 12.2615 -98 | 4.7752 4.7752 5.85597 4.7752 1.7148 12.0036 0 12.0036 | 4.7752 4.7752 5.38237 4.7752 0.754799 3.01919 0 22.12 | 4.7752 4.7752 5.56004 4.7752 1.5332 3.06639 0 12.6168 -99 | 7.2159 7.2159 4.7752 6.49 -0.725901 0 26.9455 26.9455 | 7.2159 7.2159 4.7752 5.53 -1.6859 0 0 22.12 | 7.2159 7.2159 4.3816 5.9148 -1.3011 0 0 11.8296 \ No newline at end of file +95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 0 40.3632 40.3632 | 6.13073 6.13073 6.97664 6.97664 -0.600726 0 0 27.9066 | 6.13073 6.13073 3.79191 4.6864 -1.44433 0 0 9.37279 +96 | 5.56004 5.56004 6.97664 6.64741 0.329234 2.30464 0 2.30464 | 5.56004 5.56004 4.6864 4.6864 -1.47437 0 0 18.7456 | 5.56004 5.56004 6.0036 6.0036 -1.00077 0 0 12.0072 +97 | 4.3816 4.3816 4.6864 4.3816 0.634028 4.4382 0 4.4382 | 4.3816 4.3816 6.0036 5.85597 0.147631 0.590525 0 24.0144 | 4.3816 4.3816 6.13073 5.38237 0.748358 1.49672 0 12.2615 +98 | 4.7752 4.7752 5.85597 4.7752 1.7148 12.0036 0 12.0036 | 4.7752 4.7752 5.38237 4.7752 0.754799 3.01919 0 22.12 | 4.7752 4.7752 5.56004 4.7752 1.5332 3.06639 0 12.6168 +99 | 7.2159 7.2159 4.7752 6.49 -0.725901 0 26.9455 26.9455 | 7.2159 7.2159 4.7752 5.53 -1.6859 0 0 22.12 | 7.2159 7.2159 4.3816 5.9148 -1.3011 0 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.csv index 5534ada..f585fb1 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.csv @@ -1,4 +1,4 @@ -t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,IDI:1|-1,OS:EXT|-1000,IL:-1000,SC,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,IDI:2|-2,OS:0|-1,IL:-1,SC,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,IDI:EXT|-3,OS:1|-2,IL:-2,SC +t,i=1,IO:EXT|-2,OQ:2|-4,IS:2|-4,IDI:2|-4,OS:EXT|-2,IL:-2,SC,i=2,IO:1|-4,OQ:3|-6,IS:3|-6,IDI:3|-6,OS:1|-4,IL:-4,SC,i=3,IO:2|-6,OQ:EXT|-7,IS:EXT|-7,IDI:EXT|-7,OS:2|-6,IL:-6,SC 0,,5.276265890021318,5.276265890021318,0,0,5.276265890021318,1.2137341099786818,0.0,,5.276265890021318,5.276265890021318,0,0,5.276265890021318,0.25373410997868184,0,,5.276265890021318,5.276265890021318,0,0,5.276265890021318,5.413734109978681,0 1,,3.1453719211934947,3.1453719211934947,5.276265890021318,0,3.1453719211934947,3.3446280788065055,0.0,,3.1453719211934947,3.1453719211934947,5.276265890021318,0,3.1453719211934947,2.3846280788065055,0,,3.1453719211934947,3.1453719211934947,0,0,3.1453719211934947,2.2683621887851864,0 2,,5.623901111326356,5.623901111326356,3.1453719211934947,0,5.623901111326356,0.866098888673644,0.0,,5.623901111326356,5.623901111326356,3.1453719211934947,0,5.53,-0.09390111132635592,0.0,,5.623901111326356,5.623901111326356,5.276265890021318,0,5.623901111326356,1.9207269674801486,0 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.txt index d215f07..2b12937 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_mixed.txt @@ -1,13 +1,13 @@ -t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 IDI:1|-1 OS:EXT|-1000 IL:-1000 SC | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 IDI:2|-2 OS:0|-1 IL:-1 SC | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 IDI:EXT|-3 OS:1|-2 IL:-2 SC ---- ---------------- -------------- --------- --------- ---------- -------------- ---------- -------- ------------- --------- --------- --------- ---------- --------- ---------- ---- ------------- --------- ----------- ----------- ------------ --------- --------- ---- -0 | 5.27627 5.27627 0 0 5.27627 1.21373 0 | 5.27627 5.27627 0 0 5.27627 0.253734 0 | 5.27627 5.27627 0 0 5.27627 5.41373 0 -1 | 3.14537 3.14537 5.27627 0 3.14537 3.34463 0 | 3.14537 3.14537 5.27627 0 3.14537 2.38463 0 | 3.14537 3.14537 0 0 3.14537 2.26836 0 -2 | 5.6239 5.6239 3.14537 0 5.6239 0.866099 0 | 5.6239 5.6239 3.14537 0 5.53 -0.0939011 0 | 5.6239 5.6239 5.27627 0 5.6239 1.92073 0 -3 | 6.14531 6.14531 5.53 0 6.14531 0.250788 0 | 6.14531 6.14531 5.6239 0 5.6239 -0.615311 0 | 6.14531 6.14531 3.14537 0 5.0661 -1.07921 0 -4 | 6.03719 6.03719 5.6239 0 5.87469 -0.162502 6.03207 | 6.03719 6.03719 5.0661 0 5.0661 -1.5864 0 | 6.03719 6.03719 5.6239 0 5.6239 -1.4925 0 +t | i=1 IO:EXT|-2 OQ:2|-4 IS:2|-4 IDI:2|-4 OS:EXT|-2 IL:-2 SC | i=2 IO:1|-4 OQ:3|-6 IS:3|-6 IDI:3|-6 OS:1|-4 IL:-4 SC | i=3 IO:2|-6 OQ:EXT|-7 IS:EXT|-7 IDI:EXT|-7 OS:2|-6 IL:-6 SC +--- ------- ----------- --------- --------- ---------- ----------- --------- -------- ------- --------- --------- --------- ---------- --------- ---------- ---- ------- --------- ----------- ----------- ------------ --------- --------- ---- +0 | 5.27627 5.27627 0 0 5.27627 1.21373 0 | 5.27627 5.27627 0 0 5.27627 0.253734 0 | 5.27627 5.27627 0 0 5.27627 5.41373 0 +1 | 3.14537 3.14537 5.27627 0 3.14537 3.34463 0 | 3.14537 3.14537 5.27627 0 3.14537 2.38463 0 | 3.14537 3.14537 0 0 3.14537 2.26836 0 +2 | 5.6239 5.6239 3.14537 0 5.6239 0.866099 0 | 5.6239 5.6239 3.14537 0 5.53 -0.0939011 0 | 5.6239 5.6239 5.27627 0 5.6239 1.92073 0 +3 | 6.14531 6.14531 5.53 0 6.14531 0.250788 0 | 6.14531 6.14531 5.6239 0 5.6239 -0.615311 0 | 6.14531 6.14531 3.14537 0 5.0661 -1.07921 0 +4 | 6.03719 6.03719 5.6239 0 5.87469 -0.162502 6.03207 | 6.03719 6.03719 5.0661 0 5.0661 -1.5864 0 | 6.03719 6.03719 5.6239 0 5.6239 -1.4925 0 ... -95 | 6.13073 6.13073 5.46807 0 5.46807 -1.08737 40.3632 | 6.13073 6.13073 6.97664 0 6.97664 -0.600726 0 | 6.13073 6.13073 3.79191 0 4.6864 -1.44433 0 -96 | 5.56004 5.56004 6.97664 0 6.64741 0.329234 0 | 5.56004 5.56004 4.6864 0 4.6864 -1.47437 0 | 5.56004 5.56004 6.0036 0 6.0036 -1.00077 0 -97 | 4.3816 4.3816 4.6864 0 4.3816 0.634028 0 | 4.3816 4.3816 6.0036 0 5.85597 0.147631 0 | 4.3816 4.3816 6.13073 0 5.38237 0.748358 0 -98 | 4.7752 4.7752 5.85597 0 4.7752 1.7148 0 | 4.7752 4.7752 5.38237 0 4.7752 0.754799 0 | 4.7752 4.7752 5.56004 0 4.7752 1.5332 0 -99 | 7.2159 7.2159 4.7752 0 6.49 -0.725901 26.9455 | 7.2159 7.2159 4.7752 0 5.53 -1.6859 0 | 7.2159 7.2159 4.3816 0 5.9148 -1.3011 0 \ No newline at end of file +95 | 6.13073 6.13073 5.46807 0 5.46807 -1.08737 40.3632 | 6.13073 6.13073 6.97664 0 6.97664 -0.600726 0 | 6.13073 6.13073 3.79191 0 4.6864 -1.44433 0 +96 | 5.56004 5.56004 6.97664 0 6.64741 0.329234 0 | 5.56004 5.56004 4.6864 0 4.6864 -1.47437 0 | 5.56004 5.56004 6.0036 0 6.0036 -1.00077 0 +97 | 4.3816 4.3816 4.6864 0 4.3816 0.634028 0 | 4.3816 4.3816 6.0036 0 5.85597 0.147631 0 | 4.3816 4.3816 6.13073 0 5.38237 0.748358 0 +98 | 4.7752 4.7752 5.85597 0 4.7752 1.7148 0 | 4.7752 4.7752 5.38237 0 4.7752 0.754799 0 | 4.7752 4.7752 5.56004 0 4.7752 1.5332 0 +99 | 7.2159 7.2159 4.7752 0 6.49 -0.725901 26.9455 | 7.2159 7.2159 4.7752 0 5.53 -1.6859 0 | 7.2159 7.2159 4.3816 0 5.9148 -1.3011 0 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv index 90e932d..1403170 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv @@ -1,4 +1,4 @@ -t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,IDI:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,IDI:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,IDI:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC 0,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,1.0,1.2137341099786818,0,0,8.496138769850774,0.0,0.0,0.0,8.496138769850774,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,1.0,0.25373410997868184,0,0,1.0149364399147274,0,21.105063560085274,0.0,22.12,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,"[0, 5.276265890021318]",0,0.0,5.276265890021318,5.276265890021318,1.0,5.413734109978681,0,0,10.827468219957362,0,10.552531780042637,0.0,21.38 1,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,1.0,3.3446280788065055,0,0,23.41239655164554,0.0,0.0,0.0,23.41239655164554,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,1.0,2.3846280788065055,0,0,9.538512315226022,0,12.581487684773979,0.0,22.12,,False,3.1453719211934947,[],3.1453719211934947,8.421637811214813,0,"[5.276265890021318, 3.1453719211934947]",0,0.0,3.1453719211934947,3.1453719211934947,1.0,2.2683621887851864,0,0,4.536724377570373,0,6.2907438423869895,0.0,10.827468219957362 2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0,0.0,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0,0.0,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0,0.0,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt index 98abe2f..55a46a1 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt @@ -1,13 +1,13 @@ -t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 IDI:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 IDI:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 IDI:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC ---- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ---------- ------- -------------- --------- -------- ---------- -------------- --------------- -------- -------- ------ ----- -------- ------------- ------ --------- ----------- --------- --------- --------- -------------------- ---------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------------ ------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- -0 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 0 [0, 5.276265890021318] 0 0 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 -1 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 0 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 -2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 -3 | False 6.14531 [] 6.14531 6.23921 5.53 [5.623901111326356] 0 0 6.14531 6.14531 1 0.250788 0 0 1.75551 0 0 0 1.75551 | False 6.14531 [] 6.14531 6.14531 5.6239 [5.066098888673643] 0 0 5.6239 5.53 0.964875 -0.615311 0.615311 0 0 0 22.4956 0 22.4956 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326356, 6.145311289572087] 0 0 5.0661 5.0661 0.946549 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 -4 | False 6.03719 [] 6.03719 6.6525 5.6239 [5.066098888673643] 0 0 5.87469 5.87469 0.993804 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326356] 0 0 5.0661 4.45079 0.912475 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572087, 6.037190468227884] 0 0 5.6239 4.54469 0.901948 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 +t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OO:2|-4 IS:2|-4 ISPL:2|-4 IDI:2|-4 RM:-4 OS:EXT|-2 DMFS:-4 FR:-4 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OO:3|-6 IS:3|-6 ISPL:3|-6 IDI:3|-6 RM:-6 OS:1|-4 DMFS:-6 FR:-6 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 IDI:EXT|-7 RM:-7 OS:2|-6 DMFS:-7 FR:-7 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC +--- ------- ------ ----------- ------------- --------- --------- --------- -------------------- ---------- ------- ----------- --------- -------- --------- ----------- ------------ -------- -------- ------ ----- -------- ------- ------ --------- ----------- --------- --------- --------- -------------------- ---------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------------ ------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- +0 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 0 [0, 5.276265890021318] 0 0 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 +1 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 0 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 +2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 +3 | False 6.14531 [] 6.14531 6.23921 5.53 [5.623901111326356] 0 0 6.14531 6.14531 1 0.250788 0 0 1.75551 0 0 0 1.75551 | False 6.14531 [] 6.14531 6.14531 5.6239 [5.066098888673643] 0 0 5.6239 5.53 0.964875 -0.615311 0.615311 0 0 0 22.4956 0 22.4956 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326356, 6.145311289572087] 0 0 5.0661 5.0661 0.946549 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 +4 | False 6.03719 [] 6.03719 6.6525 5.6239 [5.066098888673643] 0 0 5.87469 5.87469 0.993804 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326356] 0 0 5.0661 4.45079 0.912475 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572087, 6.037190468227884] 0 0 5.6239 4.54469 0.901948 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 ... -95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 0 5.46807 5.04336 0.966536 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 0 6.97664 5.53 0.913965 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 0 4.6864 4.6864 0.926386 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 -96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 0 6.64741 5.56004 0.966912 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 0 4.6864 4.08567 0.911952 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 0 6.0036 4.55927 0.925191 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 -97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122083] 0 0 4.3816 4.3816 0.967203 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 0 5.85597 4.3816 0.912725 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 0 5.38237 4.3816 0.925847 0.748358 0 0 1.49672 0 10.7647 0 12.2615 -98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 0 4.7752 4.7752 0.967513 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 0 4.7752 4.7752 0.913552 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 0 4.7752 4.7752 0.92655 1.5332 0 0 3.06639 0 9.5504 0 12.6168 -99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.530000000000003] 0 0 6.49 6.49 0.966552 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 0 5.53 5.53 0.911474 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 0 5.9148 5.9148 0.925041 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file +95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 0 5.46807 5.04336 0.966536 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 0 6.97664 5.53 0.913965 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 0 4.6864 4.6864 0.926386 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 +96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 0 6.64741 5.56004 0.966912 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 0 4.6864 4.08567 0.911952 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 0 6.0036 4.55927 0.925191 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 +97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122083] 0 0 4.3816 4.3816 0.967203 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 0 5.85597 4.3816 0.912725 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 0 5.38237 4.3816 0.925847 0.748358 0 0 1.49672 0 10.7647 0 12.2615 +98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 0 4.7752 4.7752 0.967513 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 0 4.7752 4.7752 0.913552 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 0 4.7752 4.7752 0.92655 1.5332 0 0 3.06639 0 9.5504 0 12.6168 +99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.530000000000003] 0 0 6.49 6.49 0.966552 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 0 5.53 5.53 0.911474 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 0 5.9148 5.9148 0.925041 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.csv index e158e2c..18a34f3 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.csv @@ -1,4 +1,4 @@ -t,i=0 pr=-1000,IO:EXT|-1000,OQ:1|-1,IS:1|-1,OS:EXT|-1000,IL:-1000,i=1 pr=-1,IO:0|-1,OQ:2|-2,IS:2|-2,OS:0|-1,IL:-1,i=2 pr=-2,IO:1|-2,OQ:EXT|-3,IS:EXT|-3,OS:1|-2,IL:-2 +t,i=1,IO:EXT|-2,OQ:2|-4,IS:2|-4,OS:EXT|-2,IL:-2,i=2,IO:1|-4,OQ:3|-6,IS:3|-6,OS:1|-4,IL:-4,i=3,IO:2|-6,OQ:EXT|-7,IS:EXT|-7,OS:2|-6,IL:-6 0,,5.276265890021318,5.276265890021318,0,5.276265890021318,1.2137341099786818,,5.276265890021318,5.276265890021318,0,5.276265890021318,0.25373410997868184,,5.276265890021318,5.276265890021318,0,5.276265890021318,5.413734109978681 1,,3.1453719211934947,3.1453719211934947,5.276265890021318,3.1453719211934947,3.3446280788065055,,3.1453719211934947,3.1453719211934947,5.276265890021318,3.1453719211934947,2.3846280788065055,,3.1453719211934947,3.1453719211934947,0,3.1453719211934947,2.2683621887851864 2,,5.623901111326356,5.623901111326356,3.1453719211934947,5.623901111326356,0.866098888673644,,5.623901111326356,5.623901111326356,3.1453719211934947,5.53,-0.09390111132635592,,5.623901111326356,5.623901111326356,5.276265890021318,5.623901111326356,1.9207269674801486 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.txt index 79e714a..1e1b55f 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_string.txt @@ -1,13 +1,13 @@ -t | i=0 pr=-1000 IO:EXT|-1000 OQ:1|-1 IS:1|-1 OS:EXT|-1000 IL:-1000 | i=1 pr=-1 IO:0|-1 OQ:2|-2 IS:2|-2 OS:0|-1 IL:-1 | i=2 pr=-2 IO:1|-2 OQ:EXT|-3 IS:EXT|-3 OS:1|-2 IL:-2 ---- ---------------- -------------- --------- --------- -------------- ---------- ------------- --------- --------- --------- --------- ---------- ------------- --------- ----------- ----------- --------- --------- -0 | 5.27627 5.27627 0 5.27627 1.21373 | 5.27627 5.27627 0 5.27627 0.253734 | 5.27627 5.27627 0 5.27627 5.41373 -1 | 3.14537 3.14537 5.27627 3.14537 3.34463 | 3.14537 3.14537 5.27627 3.14537 2.38463 | 3.14537 3.14537 0 3.14537 2.26836 -2 | 5.6239 5.6239 3.14537 5.6239 0.866099 | 5.6239 5.6239 3.14537 5.53 -0.0939011 | 5.6239 5.6239 5.27627 5.6239 1.92073 -3 | 6.14531 6.14531 5.53 6.14531 0.250788 | 6.14531 6.14531 5.6239 5.6239 -0.615311 | 6.14531 6.14531 3.14537 5.0661 -1.07921 -4 | 6.03719 6.03719 5.6239 5.87469 -0.162502 | 6.03719 6.03719 5.0661 5.0661 -1.5864 | 6.03719 6.03719 5.6239 5.6239 -1.4925 +t | i=1 IO:EXT|-2 OQ:2|-4 IS:2|-4 OS:EXT|-2 IL:-2 | i=2 IO:1|-4 OQ:3|-6 IS:3|-6 OS:1|-4 IL:-4 | i=3 IO:2|-6 OQ:EXT|-7 IS:EXT|-7 OS:2|-6 IL:-6 +--- ------- ----------- --------- --------- ----------- --------- ------- --------- --------- --------- --------- ---------- ------- --------- ----------- ----------- --------- --------- +0 | 5.27627 5.27627 0 5.27627 1.21373 | 5.27627 5.27627 0 5.27627 0.253734 | 5.27627 5.27627 0 5.27627 5.41373 +1 | 3.14537 3.14537 5.27627 3.14537 3.34463 | 3.14537 3.14537 5.27627 3.14537 2.38463 | 3.14537 3.14537 0 3.14537 2.26836 +2 | 5.6239 5.6239 3.14537 5.6239 0.866099 | 5.6239 5.6239 3.14537 5.53 -0.0939011 | 5.6239 5.6239 5.27627 5.6239 1.92073 +3 | 6.14531 6.14531 5.53 6.14531 0.250788 | 6.14531 6.14531 5.6239 5.6239 -0.615311 | 6.14531 6.14531 3.14537 5.0661 -1.07921 +4 | 6.03719 6.03719 5.6239 5.87469 -0.162502 | 6.03719 6.03719 5.0661 5.0661 -1.5864 | 6.03719 6.03719 5.6239 5.6239 -1.4925 ... -95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 | 6.13073 6.13073 6.97664 6.97664 -0.600726 | 6.13073 6.13073 3.79191 4.6864 -1.44433 -96 | 5.56004 5.56004 6.97664 6.64741 0.329234 | 5.56004 5.56004 4.6864 4.6864 -1.47437 | 5.56004 5.56004 6.0036 6.0036 -1.00077 -97 | 4.3816 4.3816 4.6864 4.3816 0.634028 | 4.3816 4.3816 6.0036 5.85597 0.147631 | 4.3816 4.3816 6.13073 5.38237 0.748358 -98 | 4.7752 4.7752 5.85597 4.7752 1.7148 | 4.7752 4.7752 5.38237 4.7752 0.754799 | 4.7752 4.7752 5.56004 4.7752 1.5332 -99 | 7.2159 7.2159 4.7752 6.49 -0.725901 | 7.2159 7.2159 4.7752 5.53 -1.6859 | 7.2159 7.2159 4.3816 5.9148 -1.3011 \ No newline at end of file +95 | 6.13073 6.13073 5.46807 5.46807 -1.08737 | 6.13073 6.13073 6.97664 6.97664 -0.600726 | 6.13073 6.13073 3.79191 4.6864 -1.44433 +96 | 5.56004 5.56004 6.97664 6.64741 0.329234 | 5.56004 5.56004 4.6864 4.6864 -1.47437 | 5.56004 5.56004 6.0036 6.0036 -1.00077 +97 | 4.3816 4.3816 4.6864 4.3816 0.634028 | 4.3816 4.3816 6.0036 5.85597 0.147631 | 4.3816 4.3816 6.13073 5.38237 0.748358 +98 | 4.7752 4.7752 5.85597 4.7752 1.7148 | 4.7752 4.7752 5.38237 4.7752 0.754799 | 4.7752 4.7752 5.56004 4.7752 1.5332 +99 | 7.2159 7.2159 4.7752 6.49 -0.725901 | 7.2159 7.2159 4.7752 5.53 -1.6859 | 7.2159 7.2159 4.3816 5.9148 -1.3011 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv index 8e68229..9227da9 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv @@ -1,4 +1,4 @@ -t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC 0,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0.0,5.276265890021318,5.276265890021318,1.0,1.2137341099786818,0,0,8.496138769850774,0.0,0.0,0.0,8.496138769850774,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0.0,5.276265890021318,5.276265890021318,1.0,0.25373410997868184,0,0,1.0149364399147274,0,21.105063560085274,0.0,22.12,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,"[0, 5.276265890021318]",0.0,5.276265890021318,5.276265890021318,1.0,5.413734109978681,0,0,10.827468219957362,0,10.552531780042637,0.0,21.38 1,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0.0,3.1453719211934947,3.1453719211934947,1.0,3.3446280788065055,0,0,23.41239655164554,0.0,0.0,0.0,23.41239655164554,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0.0,3.1453719211934947,3.1453719211934947,1.0,2.3846280788065055,0,0,9.538512315226022,0,12.581487684773979,0.0,22.12,,False,3.1453719211934947,[],3.1453719211934947,8.421637811214813,0,"[5.276265890021318, 3.1453719211934947]",0.0,3.1453719211934947,3.1453719211934947,1.0,2.2683621887851864,0,0,4.536724377570373,0,6.2907438423869895,0.0,10.827468219957362 2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0.0,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0.0,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0.0,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt index 0ce37e8..414b375 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt @@ -1,13 +1,13 @@ -t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC ---- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ------- -------------- --------- -------- ---------- -------------- --------------- -------- -------- ------ ----- -------- ------------- ------ --------- ----------- --------- --------- --------- -------------------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- -0 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 0 [0, 5.276265890021318] 0 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 -1 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 -2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 -3 | False 6.14531 [] 6.14531 6.23921 5.53 [5.623901111326356] 0 6.14531 6.14531 1 0.250788 0 0 1.75551 0 0 0 1.75551 | False 6.14531 [] 6.14531 6.14531 5.6239 [5.066098888673643] 0 5.6239 5.53 0.964875 -0.615311 0.615311 0 0 0 22.4956 0 22.4956 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326356, 6.145311289572087] 0 5.0661 5.0661 0.946549 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 -4 | False 6.03719 [] 6.03719 6.6525 5.6239 [5.066098888673643] 0 5.87469 5.87469 0.993804 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326356] 0 5.0661 4.45079 0.912475 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572087, 6.037190468227884] 0 5.6239 4.54469 0.901948 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 +t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OO:2|-4 IS:2|-4 ISPL:2|-4 RM:-4 OS:EXT|-2 DMFS:-4 FR:-4 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OO:3|-6 IS:3|-6 ISPL:3|-6 RM:-6 OS:1|-4 DMFS:-6 FR:-6 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 RM:-7 OS:2|-6 DMFS:-7 FR:-7 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC +--- ------- ------ ----------- ------------- --------- --------- --------- -------------------- ------- ----------- --------- -------- --------- ----------- ------------ -------- -------- ------ ----- -------- ------- ------ --------- ----------- --------- --------- --------- -------------------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- +0 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 0 [0, 5.276265890021318] 0 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 +1 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 +2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 +3 | False 6.14531 [] 6.14531 6.23921 5.53 [5.623901111326356] 0 6.14531 6.14531 1 0.250788 0 0 1.75551 0 0 0 1.75551 | False 6.14531 [] 6.14531 6.14531 5.6239 [5.066098888673643] 0 5.6239 5.53 0.964875 -0.615311 0.615311 0 0 0 22.4956 0 22.4956 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326356, 6.145311289572087] 0 5.0661 5.0661 0.946549 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 +4 | False 6.03719 [] 6.03719 6.6525 5.6239 [5.066098888673643] 0 5.87469 5.87469 0.993804 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326356] 0 5.0661 4.45079 0.912475 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572087, 6.037190468227884] 0 5.6239 4.54469 0.901948 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 ... -95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 5.46807 5.04336 0.966536 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 6.97664 5.53 0.913965 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 4.6864 4.6864 0.926386 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 -96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 6.64741 5.56004 0.966912 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 4.6864 4.08567 0.911952 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 6.0036 4.55927 0.925191 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 -97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122083] 0 4.3816 4.3816 0.967203 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 5.85597 4.3816 0.912725 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 5.38237 4.3816 0.925847 0.748358 0 0 1.49672 0 10.7647 0 12.2615 -98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 4.7752 4.7752 0.967513 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 4.7752 4.7752 0.913552 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 4.7752 4.7752 0.92655 1.5332 0 0 3.06639 0 9.5504 0 12.6168 -99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.530000000000003] 0 6.49 6.49 0.966552 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 5.53 5.53 0.911474 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 5.9148 5.9148 0.925041 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file +95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 5.46807 5.04336 0.966536 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 6.97664 5.53 0.913965 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 4.6864 4.6864 0.926386 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 +96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 6.64741 5.56004 0.966912 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 4.6864 4.08567 0.911952 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 6.0036 4.55927 0.925191 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 +97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122083] 0 4.3816 4.3816 0.967203 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 5.85597 4.3816 0.912725 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 5.38237 4.3816 0.925847 0.748358 0 0 1.49672 0 10.7647 0 12.2615 +98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 4.7752 4.7752 0.967513 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 4.7752 4.7752 0.913552 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 4.7752 4.7752 0.92655 1.5332 0 0 3.06639 0 9.5504 0 12.6168 +99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.530000000000003] 0 6.49 6.49 0.966552 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 5.53 5.53 0.911474 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 5.9148 5.9148 0.925041 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv index 22aba41..23044c0 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv @@ -1,4 +1,4 @@ -t,i=0 pr=-1000,DISR,IO:EXT|-1000,IOPL:EXT|-1000,OQ:1|-1,OO:1|-1,IS:1|-1,ISPL:1|-1,RM:-1,OS:EXT|-1000,DMFS:-1,FR:-1,IL:-1000,BO:EXT|-1000,ODI:EXT|-1000,HC,SC,ITHC,REV,TC,i=1 pr=-1,DISR,IO:0|-1,IOPL:0|-1,OQ:2|-2,OO:2|-2,IS:2|-2,ISPL:2|-2,RM:-2,OS:0|-1,DMFS:-2,FR:-2,IL:-1,BO:0|-1,ODI:0|-1,HC,SC,ITHC,REV,TC,i=2 pr=-2,DISR,IO:1|-2,IOPL:1|-2,OQ:EXT|-3,OO:EXT|-3,IS:EXT|-3,ISPL:EXT|-3,RM:-3,OS:1|-2,DMFS:-3,FR:-3,IL:-2,BO:1|-2,ODI:1|-2,HC,SC,ITHC,REV,TC +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC 2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0.0,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0.0,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0.0,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 7,,False,4.637898661600952,[],4.637898661600952,6.23002976948168,6.145311289572087,[6.037190468227884],0.0,5.885341059053767,4.637898661600952,0.9204288008215301,0.25997023051832,0.0,0,1.8197916136282402,0.0,0.0,0.0,1.8197916136282402,,False,4.637898661600952,[],4.637898661600952,5.722839301253796,6.037190468227884,[5.722839301253794],0.0,6.037190468227884,4.445059360347156,0.8374863190034552,-0.19283930125379545,0.19283930125379545,0,0.0,0.0,24.148761872911535,0.0,24.148761872911535,,False,4.637898661600952,[],4.637898661600953,9.526200371472186,6.886638929781608,"[4.888301709871232, 4.637898661600953]",0.0,5.722839301253794,4.637898661600952,0.8618582871905256,1.1637996285278138,0.0,0,2.3275992570556276,0,11.445678602507588,0.0,13.773277859563215 43,,False,4.305821103558777,[],4.305821103558777,5.402292414882582,6.845413294824678,[3.8445867051753195],0.0,5.75770570970726,4.305821103558777,0.9602399216477591,1.0877075851174185,0.0,0,7.6139530958219295,0.0,0.0,0.0,7.6139530958219295,,False,4.305821103558777,[],4.305821103558777,7.087705709707268,3.8445867051753195,[7.0877057097072695],0.0,3.8445867051753195,2.748115393851509,0.9057915787473153,-1.5577057097072675,1.5577057097072675,0,0.0,0.0,15.378346820701278,0.0,15.378346820701278,,False,4.305821103558777,[],4.30582110355878,9.432548314804329,8.345157394902941,"[5.126727211245546, 4.30582110355878]",0.0,7.0877057097072695,4.305821103558777,0.917130372459522,1.2574516851956714,0.0,0,2.514903370391343,0,14.175411419414539,0.0,16.690314789805882 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt index de8777c..da18f8a 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt @@ -1,5 +1,5 @@ - t | i=0 pr=-1000 DISR IO:EXT|-1000 IOPL:EXT|-1000 OQ:1|-1 OO:1|-1 IS:1|-1 ISPL:1|-1 RM:-1 OS:EXT|-1000 DMFS:-1 FR:-1 IL:-1000 BO:EXT|-1000 ODI:EXT|-1000 HC SC ITHC REV TC | i=1 pr=-1 DISR IO:0|-1 IOPL:0|-1 OQ:2|-2 OO:2|-2 IS:2|-2 ISPL:2|-2 RM:-2 OS:0|-1 DMFS:-2 FR:-2 IL:-1 BO:0|-1 ODI:0|-1 HC SC ITHC REV TC | i=2 pr=-2 DISR IO:1|-2 IOPL:1|-2 OQ:EXT|-3 OO:EXT|-3 IS:EXT|-3 ISPL:EXT|-3 RM:-3 OS:1|-2 DMFS:-3 FR:-3 IL:-2 BO:1|-2 ODI:1|-2 HC SC ITHC REV TC ---- ---------------- ------ -------------- ---------------- --------- --------- --------- -------------------- ------- -------------- --------- -------- ---------- -------------- --------------- ------- ---- ------ ----- ------- ------------- ------ --------- ----------- --------- --------- --------- -------------------- ------- --------- --------- -------- ---------- --------- ---------- ---- ---- ------- ----- ------- ------------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------- --------- --------- -------- ------- --------- ---------- ------- ---- ------- ----- ------- - 2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 - 7 | False 4.6379 [] 4.6379 6.23003 6.14531 [6.037190468227884] 0 5.88534 4.6379 0.920429 0.25997 0 0 1.81979 0 0 0 1.81979 | False 4.6379 [] 4.6379 5.72284 6.03719 [5.722839301253794] 0 6.03719 4.44506 0.837486 -0.192839 0.192839 0 0 0 24.1488 0 24.1488 | False 4.6379 [] 4.6379 9.5262 6.88664 [4.888301709871232, 4.637898661600953] 0 5.72284 4.6379 0.861858 1.1638 0 0 2.3276 0 11.4457 0 13.7733 - 43 | False 4.30582 [] 4.30582 5.40229 6.84541 [3.8445867051753195] 0 5.75771 4.30582 0.96024 1.08771 0 0 7.61395 0 0 0 7.61395 | False 4.30582 [] 4.30582 7.08771 3.84459 [7.0877057097072695] 0 3.84459 2.74812 0.905792 -1.55771 1.55771 0 0 0 15.3783 0 15.3783 | False 4.30582 [] 4.30582 9.43255 8.34516 [5.126727211245546, 4.30582110355878] 0 7.08771 4.30582 0.91713 1.25745 0 0 2.5149 0 14.1754 0 16.6903 \ No newline at end of file + t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OO:2|-4 IS:2|-4 ISPL:2|-4 RM:-4 OS:EXT|-2 DMFS:-4 FR:-4 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OO:3|-6 IS:3|-6 ISPL:3|-6 RM:-6 OS:1|-4 DMFS:-6 FR:-6 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 RM:-7 OS:2|-6 DMFS:-7 FR:-7 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC +--- ------- ------ ----------- ------------- --------- --------- --------- -------------------- ------- ----------- --------- -------- -------- ----------- ------------ ------- ---- ------ ----- ------- ------- ------ --------- ----------- --------- --------- --------- -------------------- ------- --------- --------- -------- ---------- --------- ---------- ---- ---- ------- ----- ------- ------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------- --------- --------- -------- ------- --------- ---------- ------- ---- ------- ----- ------- + 2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 + 7 | False 4.6379 [] 4.6379 6.23003 6.14531 [6.037190468227884] 0 5.88534 4.6379 0.920429 0.25997 0 0 1.81979 0 0 0 1.81979 | False 4.6379 [] 4.6379 5.72284 6.03719 [5.722839301253794] 0 6.03719 4.44506 0.837486 -0.192839 0.192839 0 0 0 24.1488 0 24.1488 | False 4.6379 [] 4.6379 9.5262 6.88664 [4.888301709871232, 4.637898661600953] 0 5.72284 4.6379 0.861858 1.1638 0 0 2.3276 0 11.4457 0 13.7733 + 43 | False 4.30582 [] 4.30582 5.40229 6.84541 [3.8445867051753195] 0 5.75771 4.30582 0.96024 1.08771 0 0 7.61395 0 0 0 7.61395 | False 4.30582 [] 4.30582 7.08771 3.84459 [7.0877057097072695] 0 3.84459 2.74812 0.905792 -1.55771 1.55771 0 0 0 15.3783 0 15.3783 | False 4.30582 [] 4.30582 9.43255 8.34516 [5.126727211245546, 4.30582110355878] 0 7.08771 4.30582 0.91713 1.25745 0 0 2.5149 0 14.1754 0 16.6903 \ No newline at end of file diff --git a/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json b/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json index 0039636..03474e8 100644 --- a/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json +++ b/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json @@ -1,1766 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "missing_period", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "missing_nodes", - "description": "", - "data": { - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "missing_local_holding_cost_node_3", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "missing_demand_source_node_1", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "missing_recovery_probability_node_1", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-3": -3 - }, - "_dummy_product": -3, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-1": -1 - }, - "_dummy_product": -1, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2022-07-16 10:56:28.418452" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_period", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_nodes", "description": "", "data": {"_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.599466"} \ No newline at end of file diff --git a/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json b/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json index b93a4c4..2fdf1e7 100644 --- a/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json +++ b/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"index": 3, "name": null, "network": null, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 2, "name": null, "network": null, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"index": 1, "name": null, "network": null, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false}, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2022-07-16 10:56:28.408779"} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.552322"} \ No newline at end of file diff --git a/tests/settings.py b/tests/settings.py index 968f05d..4743b20 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -2,4 +2,4 @@ # Set to True to run all tests, even those that are normally skipped because # they are slow. -RUN_ALL_TESTS = False +RUN_ALL_TESTS = True diff --git a/tests/temp_ech.csv b/tests/temp_ech.csv deleted file mode 100644 index 240ce5c..0000000 --- a/tests/temp_ech.csv +++ /dev/null @@ -1,103 +0,0 @@ -t,|i=0,IL,OO,IS,IO,OQ,OS,DMFS,FR,EIL,BO,HC,SC,ITHC,TC,|i=1,IL,OO,IS,IO,OQ,OS,DMFS,FR,EIL,BO,HC,SC,ITHC,TC,|i=2,IL,OO,IS,IO,OQ,OS,DMFS,FR,EIL,BO,HC,SC,ITHC,TC -Avg,|,1.3353571549440975,5.166128558858139,4.860348313728585,4.860348313728585,4.860348313728585,4.860348313728585,4.788860248969993,0.9917288953085509,1.3238714411418613,0.07148806475859298,9.767516541303179,2.6536369638389714,0.0,12.421153505142149,|,0.4723343945552096,5.0940722296625855,4.860348313728585,4.860348313728585,4.860348313728585,4.860348313728585,4.5545680685990355,0.9576559977345573,0.435927770337418,0.3057802451295495,2.96683206186787,0.0,19.44139325491434,22.408225316782207,|,1.0812456577496994,9.672404515940313,4.860348313728585,4.860348313728585,4.8603483137285854,4.8603483137285854,4.626624397794584,0.9695710134249544,1.0175954840596875,0.2337239159340014,2.502638799987378,0.0,9.720696627457171,12.22333542744455 -"" -0,|,6.49,0.0,0.0,4.72928767693268,4.72928767693268,4.72928767693268,4.72928767693268,1.0,1.7607123230673203,0.0,12.324986261471242,0.0,0.0,12.324986261471242,|,5.53,0.0,0.0,4.72928767693268,4.72928767693268,4.72928767693268,4.72928767693268,1.0,0.8007123230673203,0.0,3.2028492922692813,0.0,18.91715070773072,22.12,|,10.69,0.0,0.0,4.72928767693268,4.729287676932678,4.72928767693268,4.72928767693268,1.0,5.96071232306732,0.0,11.92142464613464,0.0,9.45857535386536,21.38 -1,|,1.7607123230673203,4.72928767693268,4.72928767693268,5.10484805260974,5.10484805260974,5.10484805260974,5.10484805260974,1.0,1.38515194739026,0.0,9.696063631731821,0.0,0.0,9.696063631731821,|,0.8007123230673203,4.72928767693268,4.72928767693268,5.10484805260974,5.10484805260974,5.10484805260974,5.10484805260974,1.0,0.4251519473902601,0.0,1.7006077895610403,0.0,20.41939221043896,22.12,|,5.96071232306732,4.729287676932678,0.0,5.10484805260974,5.104848052609739,5.10484805260974,5.10484805260974,1.0,0.8558642704575794,0.0,1.7117285409151588,0.0,10.20969610521948,11.92142464613464 -2,|,1.38515194739026,5.104848052609741,5.10484805260974,5.250527815723572,5.250527815723571,5.250527815723572,5.250527815723572,1.0,1.239472184276428,0.0,8.676305289934996,0.0,0.0,8.676305289934996,|,0.4251519473902601,5.104848052609741,5.10484805260974,5.250527815723571,5.2505278157235695,5.250527815723571,5.250527815723571,1.0,0.27947218427642895,0.0,1.1178887371057158,0.0,21.002111262894285,22.12,|,0.8558642704575794,9.834135729542417,4.729287676932678,5.2505278157235695,5.250527815723572,5.2505278157235695,5.2505278157235695,1.0,0.33462413166668803,0.0,0.6692482633333761,0.0,10.501055631447139,11.170303894780515 -3,|,1.239472184276428,5.250527815723571,5.250527815723571,4.074800034721923,4.074800034721924,4.074800034721923,4.074800034721923,1.0,2.4151999652780765,0.0,16.906399756946534,0.0,0.0,16.906399756946534,|,0.27947218427642895,5.250527815723571,5.2505278157235695,4.074800034721924,4.074800034721924,4.074800034721924,4.074800034721924,1.0,1.4551999652780747,0.0,5.820799861112299,0.0,16.299200138887695,22.119999999999994,|,0.33462413166668803,10.355375868333311,5.104848052609739,4.074800034721924,4.074800034721928,4.074800034721924,4.074800034721924,1.0,1.3646721495545036,0.0,2.729344299109007,0.0,8.149600069443848,10.878944368552855 -4,|,2.4151999652780765,4.074800034721924,4.074800034721924,5.567143660285906,5.567143660285906,5.567143660285906,5.567143660285906,1.0,0.9228563397140945,0.0,6.459994377998662,0.0,0.0,6.459994377998662,|,1.4551999652780747,4.0748000347219255,4.074800034721924,5.567143660285906,5.567143660285906,5.5299999999999985,5.5299999999999985,0.9984978262514961,-0.03714366028590721,0.03714366028590721,0.0,0.0,22.119999999999994,22.119999999999994,|,1.3646721495545036,9.3253278504455,5.250527815723572,5.567143660285906,5.5671436602859,5.567143660285906,5.567143660285906,1.0,1.04805630499217,0.0,2.09611260998434,0.0,11.134287320571811,13.230399930556151 -5,|,0.9228563397140945,5.567143660285905,5.5299999999999985,3.959819783917062,3.959819783917063,3.959819783917062,3.959819783917062,1.0,2.493036555797031,0.0,17.45125589057922,0.0,0.0,17.45125589057922,|,-0.03714366028590721,5.567143660285908,5.567143660285906,3.959819783917063,3.9598197839170606,3.99696344420297,3.959819783917063,0.9987051834564624,1.5701802160829357,0.0,6.280720864331743,0.0,15.98785377681188,22.268574641143623,|,1.04805630499217,9.641943695007829,4.074800034721928,3.9598197839170606,3.9598197839170624,3.9598197839170606,3.9598197839170606,1.0,1.1630365557970377,0.0,2.3260731115940754,0.0,7.919639567834121,10.245712679428197 -6,|,2.493036555797031,3.9969634442029696,3.99696344420297,4.846324048542063,4.846324048542063,4.846324048542063,4.846324048542063,1.0,1.6436759514579382,0.0,11.505731660205567,0.0,0.0,11.505731660205567,|,1.5701802160829357,3.959819783917064,3.9598197839170606,4.846324048542063,4.846324048542061,4.846324048542063,4.846324048542063,0.9988923169409709,0.6836759514579329,0.0,2.7347038058317317,0.0,19.38529619416825,22.119999999999983,|,1.1630365557970377,9.526963444202963,5.5671436602859,4.846324048542061,4.8463240485420656,4.846324048542061,4.846324048542061,1.0,1.883856167540877,0.0,3.767712335081754,0.0,9.692648097084122,13.460360432165876 -7,|,1.6436759514579382,4.846324048542062,4.846324048542063,5.7898518103468195,5.7898518103468195,5.7898518103468195,5.7898518103468195,1.0,0.7001481896531816,0.0,4.901037327572271,0.0,0.0,4.901037327572271,|,0.6836759514579329,4.846324048542064,4.846324048542061,5.7898518103468195,5.789851810346821,5.529999999999994,5.529999999999994,0.992447207233056,-0.2598518103468255,0.2598518103468255,0.0,0.0,22.119999999999976,22.119999999999976,|,1.883856167540877,8.806143832459128,3.9598197839170624,5.789851810346821,5.789851810346821,5.789851810346821,5.789851810346821,1.0,0.053824141111117996,0.0,0.10764828222223599,0.0,11.579703620693643,11.687351902915879 -8,|,0.7001481896531816,5.789851810346819,5.529999999999994,3.773784153558146,3.773784153558146,3.773784153558146,3.773784153558146,1.0,2.45636403609503,0.0,17.194548252665207,0.0,0.0,17.194548252665207,|,-0.2598518103468255,5.789851810346824,5.789851810346821,3.773784153558146,3.7737841535581467,4.033635963904971,3.773784153558146,0.9931085761230924,1.75621584644185,0.0,7.0248633857674,0.0,16.134543855619885,23.159407241387285,|,0.053824141111117996,10.636175858888887,4.8463240485420656,3.7737841535581467,3.7737841535581467,3.7737841535581467,3.7737841535581467,1.0,1.1263640360950369,0.0,2.2527280721900738,0.0,7.547568307116293,9.800296379306367 -9,|,2.45636403609503,4.03363596390497,4.033635963904971,4.051993012286541,4.051993012286541,4.051993012286541,4.051993012286541,1.0,2.43800698771346,0.0,17.06604891399422,0.0,0.0,17.06604891399422,|,1.75621584644185,3.7737841535581502,3.7737841535581467,4.051993012286541,4.051993012286539,4.051993012286541,4.051993012286541,0.993700834040861,1.4780069877134556,0.0,5.9120279508538225,0.0,16.207972049146164,22.119999999999987,|,1.1263640360950369,9.563635963904968,5.789851810346821,4.051993012286539,4.0519930122865375,4.051993012286539,4.051993012286539,1.0,2.864222834155319,0.0,5.728445668310638,0.0,8.103986024573079,13.832431692883716 -10,|,2.43800698771346,4.05199301228654,4.051993012286541,4.430346058069936,4.430346058069936,4.430346058069936,4.430346058069936,1.0,2.0596539419300655,0.0,14.417577593510458,0.0,0.0,14.417577593510458,|,1.4780069877134556,4.051993012286543,4.051993012286539,4.430346058069936,4.430346058069936,4.430346058069936,4.430346058069936,0.9942418998480759,1.0996539419300593,0.0,4.398615767720237,0.0,17.721384232279743,22.11999999999998,|,2.864222834155319,7.825777165844684,3.7737841535581467,4.430346058069936,4.4303460580699365,4.430346058069936,4.430346058069936,1.0,2.20766092964353,0.0,4.41532185928706,0.0,8.860692116139871,13.276013975426931 -11,|,2.0596539419300655,4.430346058069935,4.430346058069936,4.022849785302228,4.022849785302228,4.022849785302228,4.022849785302228,1.0,2.4671502146977735,0.0,17.270051502884414,0.0,0.0,17.270051502884414,|,1.0996539419300593,4.430346058069938,4.430346058069936,4.022849785302228,4.022849785302228,4.022849785302228,4.022849785302228,0.9946585062407577,1.5071502146977673,0.0,6.028600858791069,0.0,16.09139914120891,22.11999999999998,|,2.20766092964353,8.482339070356474,4.0519930122865375,4.022849785302228,4.022849785302228,4.022849785302228,4.022849785302228,1.0,2.23680415662784,0.0,4.47360831325568,0.0,8.045699570604455,12.519307883860135 -12,|,2.4671502146977735,4.022849785302227,4.022849785302228,4.229368288816449,4.229368288816449,4.229368288816449,4.229368288816449,1.0,2.260631711183552,0.0,15.824421978284864,0.0,0.0,15.824421978284864,|,1.5071502146977673,4.02284978530223,4.022849785302228,4.229368288816449,4.229368288816449,4.229368288816449,4.229368288816449,0.9950360891893381,1.300631711183546,0.0,5.202526844734184,0.0,16.917473155265796,22.11999999999998,|,2.23680415662784,8.453195843372164,4.4303460580699365,4.229368288816449,4.229368288816449,4.229368288816449,4.229368288816449,1.0,2.4377819258813274,0.0,4.875563851762655,0.0,8.458736577632898,13.334300429395553 -13,|,2.260631711183552,4.229368288816449,4.229368288816449,4.966288708546514,4.9662887085465135,4.966288708546514,4.966288708546514,1.0,1.5237112914534867,0.0,10.665979040174406,0.0,0.0,10.665979040174406,|,1.300631711183546,4.2293682888164525,4.229368288816449,4.9662887085465135,4.9662887085465135,4.9662887085465135,4.9662887085465135,0.9954165408399696,0.5637112914534814,0.0,2.2548451658139257,0.0,19.865154834186054,22.11999999999998,|,2.4377819258813274,8.252218074118677,4.022849785302228,4.9662887085465135,4.966288708546514,4.9662887085465135,4.9662887085465135,1.0,1.4943430026370415,0.0,2.988686005274083,0.0,9.932577417093027,12.92126342236711 -14,|,1.5237112914534867,4.966288708546514,4.9662887085465135,3.9671407548338697,3.967140754833869,3.9671407548338697,3.9671407548338697,1.0,2.5228592451661305,0.0,17.660014716162912,0.0,0.0,17.660014716162912,|,0.5637112914534814,4.966288708546518,4.9662887085465135,3.967140754833869,3.967140754833869,3.967140754833869,3.967140754833869,0.9956809688666957,1.562859245166126,0.0,6.251436980664504,0.0,15.868563019335475,22.11999999999998,|,1.4943430026370415,9.195656997362963,4.229368288816449,3.967140754833869,3.9671407548338706,3.967140754833869,3.967140754833869,1.0,1.7565705366196216,0.0,3.513141073239243,0.0,7.934281509667738,11.447422582906981 -15,|,2.5228592451661305,3.9671407548338697,3.967140754833869,6.142427376683153,6.142427376683153,6.142427376683153,6.142427376683153,1.0,0.3475726233168466,0.0,2.433008363217926,0.0,0.0,2.433008363217926,|,1.562859245166126,3.9671407548338733,3.967140754833869,6.142427376683153,6.142427376683153,5.529999999999995,5.529999999999995,0.9878592753272324,-0.6124273766831578,0.6124273766831578,0.0,0.0,22.11999999999998,22.11999999999998,|,1.7565705366196216,8.933429463380385,4.966288708546514,6.142427376683153,6.142427376683152,6.142427376683153,6.142427376683153,1.0,0.5804318684829832,0.0,1.1608637369659665,0.0,12.284854753366306,13.445718490332272 -16,|,0.3475726233168466,6.142427376683154,5.529999999999995,4.390221992312528,4.390221992312528,4.390221992312528,4.390221992312528,1.0,1.4873506310043139,0.0,10.411454417030196,0.0,0.0,10.411454417030196,|,-0.6124273766831578,6.142427376683157,6.142427376683153,4.390221992312528,4.390221992312528,5.0026493689956855,4.390221992312528,0.9885314377166317,1.1397780076874673,0.0,4.559112030749869,0.0,20.010597475982742,24.56970950673261,|,0.5804318684829832,10.109568131517022,3.9671407548338706,4.390221992312528,4.390221992312526,4.390221992312528,4.390221992312528,1.0,0.15735063100432622,0.0,0.31470126200865245,0.0,8.780443984625055,9.095145246633708 -17,|,1.4873506310043139,5.002649368995686,5.0026493689956855,6.46941638687667,6.46941638687667,6.46941638687667,6.46941638687667,1.0,0.020583613123329236,0.0,0.14408529186330465,0.0,0.0,0.14408529186330465,|,1.1397780076874673,4.390221992312532,4.390221992312528,6.46941638687667,6.46941638687667,5.529999999999995,5.529999999999995,0.9784433253016135,-0.9394163868766752,0.9394163868766752,0.0,0.0,22.11999999999998,22.11999999999998,|,0.15735063100432622,10.532649368995678,6.142427376683152,6.46941638687667,6.469416386876674,6.299778007687478,6.299778007687478,0.9980220890551686,-0.169638379189192,0.169638379189192,0.0,0.0,12.599556015374956,12.599556015374956 -18,|,0.020583613123329236,6.469416386876672,5.529999999999995,6.4926788367383335,6.492678836738333,5.550583613123324,5.550583613123324,0.9897885949744951,-0.9420952236150093,0.9420952236150093,0.0,34.97057470058914,0.0,34.97057470058914,|,-0.9394163868766752,6.469416386876675,6.299778007687478,6.492678836738333,6.492678836738333,6.299778007687478,5.360361620810803,0.9676871348102571,-1.1323172159275297,1.1323172159275297,0.0,0.0,25.199112030749912,25.199112030749912,|,-0.169638379189192,10.8596383791892,4.390221992312526,6.492678836738333,6.492678836738332,4.390221992312526,4.220583613123334,0.9735339590334152,-2.2720952236149987,2.2720952236149987,0.0,0.0,8.780443984625052,8.780443984625052 -19,|,-0.9420952236150093,7.43209522361501,6.299778007687478,5.707125227889218,5.707125227889217,6.299778007687478,5.357682784072469,0.9868165030958518,-0.3494424438167494,0.3494424438167494,0.0,12.971303514477736,0.0,12.971303514477736,|,-1.1323172159275297,6.662317215927531,4.390221992312526,5.707125227889217,5.707125227889217,4.390221992312526,3.257904776384996,0.9445688973103803,-2.449220451504221,2.449220451504221,0.0,0.0,17.560887969250103,17.560887969250103,|,-2.2720952236149987,12.962095223615005,6.469416386876674,5.707125227889217,5.707125227889218,6.469416386876674,4.197321163261675,0.9596642932537904,-1.5098040646275424,1.5098040646275424,0.0,0.0,12.938832773753347,12.938832773753347 -20,|,-0.3494424438167494,6.83944244381675,4.390221992312526,3.1415097433483887,3.1415097433483887,3.490952187165138,3.1415097433483887,0.9872261263211889,0.8992698051473877,0.0,6.294888636031715,0.0,0.0,6.294888636031715,|,-2.449220451504221,7.979220451504222,6.469416386876674,3.1415097433483887,3.1415097433483883,5.590730194852609,3.1415097433483883,0.9462911920272371,0.8786861920240638,4.440892098500626e-16,3.5147447680962554,0.0,22.362920779410437,25.877665547506695,|,-1.5098040646275424,12.19980406462755,6.492678836738332,3.1415097433483883,3.1415097433483865,4.651313807975931,3.1415097433483883,0.960917560305299,1.841365028762401,0.0,3.682730057524802,0.0,9.302627615951861,12.985357673476663 -21,|,0.8992698051473877,5.590730194852613,5.590730194852609,3.6293762288718954,3.6293762288718954,3.6293762288718954,3.6293762288718954,0.9876687696677232,2.8606237711281013,0.0,20.02436639789671,0.0,0.0,20.02436639789671,|,0.8786861920240638,4.651313807975937,4.651313807975931,3.6293762288718954,3.629376228871898,3.629376228871896,3.6293762288718954,0.9481523225736327,1.9006237711280987,0.0,7.602495084512395,0.0,14.517504915487583,22.119999999999976,|,1.841365028762401,8.848634971237605,5.707125227889218,3.629376228871898,3.6293762288719016,3.629376228871898,3.629376228871898,0.9622718544162454,3.919114027779721,0.0,7.838228055559442,0.0,7.258752457743796,15.096980513303238 -22,|,2.8606237711281013,3.6293762288719,3.629376228871896,4.669893612079397,4.669893612079396,4.669893612079397,4.669893612079397,0.9881951118727554,1.8201063879205996,0.0,12.740744715444198,0.0,0.0,12.740744715444198,|,1.9006237711280987,3.6293762288719043,3.629376228871898,4.669893612079396,4.669893612079396,4.669893612079396,4.669893612079396,0.9503653718904527,0.8601063879206006,0.0,3.4404255516824023,0.0,18.679574448317585,22.119999999999987,|,3.919114027779721,6.770885972220288,3.1415097433483865,4.669893612079396,4.669893612079392,4.669893612079396,4.669893612079396,0.9638822302508734,2.3907301590487116,0.0,4.781460318097423,0.0,9.339787224158792,14.121247542256215 -23,|,1.8201063879205996,4.669893612079401,4.669893612079396,3.4847100541277953,3.4847100541277953,3.4847100541277953,3.4847100541277953,0.9885595018171209,3.0052899458722004,0.0,21.037029621105404,0.0,0.0,21.037029621105404,|,0.8601063879206006,4.669893612079402,4.669893612079396,3.4847100541277953,3.4847100541277953,3.4847100541277953,3.4847100541277953,0.9518974795377664,2.0452899458722014,0.0,8.181159783488805,0.0,13.938840216511181,22.119999999999987,|,2.3907301590487116,8.299269840951293,3.6293762288719016,3.4847100541277953,3.484710054127799,3.4847100541277953,3.4847100541277953,0.9649971033413784,2.535396333792818,0.0,5.070792667585636,0.0,6.969420108255591,12.040212775841226 -24,|,3.0052899458722004,3.4847100541277998,3.4847100541277953,6.200060185821551,6.200060185821551,6.200060185821551,6.200060185821551,0.9891551077386588,0.28993981417844505,0.0,2.0295786992491154,0.0,0.0,2.0295786992491154,|,2.0452899458722014,3.4847100541278015,3.4847100541277953,6.200060185821551,6.200060185821551,5.529999999999997,5.529999999999997,0.9487753360751775,-0.670060185821554,0.670060185821554,0.0,0.0,22.119999999999987,22.119999999999987,|,2.535396333792818,8.15460366620719,4.669893612079392,6.200060185821551,6.200060185821549,6.200060185821551,6.200060185821551,0.9668193957090353,1.0052297600506588,0.0,2.0104595201013176,0.0,12.400120371643101,14.410579891744419 -25,|,0.28993981417844505,6.200060185821556,5.529999999999997,3.177380856579159,3.177380856579158,3.177380856579159,3.177380856579159,0.9894369314550908,2.6425589575992827,0.0,18.497912703194977,0.0,0.0,18.497912703194977,|,-0.670060185821554,6.200060185821556,6.200060185821551,3.177380856579158,3.177380856579159,3.847441042400712,3.177380856579158,0.9501064996139557,2.3526191434208386,0.0,9.410476573683354,0.0,15.389764169602849,24.800240743286203,|,1.0052297600506588,9.684770239949348,3.484710054127799,3.177380856579159,3.177380856579159,3.177380856579159,3.177380856579159,0.9676816524276265,1.3125589575992986,0.0,2.6251179151985973,0.0,6.354761713158318,8.979879628356915 -26,|,2.6425589575992827,3.8474410424007184,3.847441042400712,5.269384541363552,5.269384541363551,5.269384541363552,5.269384541363552,0.9898733553152382,1.220615458636443,0.0,8.544308210455101,0.0,0.0,8.544308210455101,|,2.3526191434208386,3.1773808565791644,3.177380856579159,5.269384541363551,5.269384541363553,5.269384541363551,5.269384541363551,0.952167900043402,0.26061545863644664,0.0,1.0424618345457866,0.0,21.077538165454204,22.11999999999999,|,1.3125589575992986,9.377441042400708,6.200060185821549,5.269384541363553,5.269384541363554,5.269384541363553,5.269384541363553,0.9690169176435207,2.243234602057295,0.0,4.48646920411459,0.0,10.538769082727105,15.025238286841695 -27,|,1.220615458636443,5.269384541363557,5.269384541363551,4.5535756243528125,4.5535756243528125,4.5535756243528125,4.5535756243528125,0.9902224483375697,1.9364243756471815,0.0,13.55497062953027,0.0,0.0,13.55497062953027,|,0.26061545863644664,5.269384541363557,5.269384541363553,4.5535756243528125,4.553575624352814,4.5535756243528125,4.5535756243528125,0.953816802800248,0.9764243756471869,0.0,3.9056975025887475,0.0,18.21430249741125,22.119999999999997,|,2.243234602057295,8.446765397942713,3.177380856579159,4.553575624352814,4.553575624352813,4.553575624352814,4.553575624352814,0.9700849888751736,0.8670398342836396,0.0,1.7340796685672792,0.0,9.107151248705629,10.841230917272908 -28,|,1.9364243756471815,4.55357562435282,4.5535756243528125,6.114313600092155,6.114313600092154,6.114313600092155,6.114313600092155,0.9906550114922454,0.37568639990783925,0.0,2.6298047993548748,0.0,0.0,2.6298047993548748,|,0.9764243756471869,4.553575624352818,4.553575624352814,6.114313600092154,6.114313600092154,5.530000000000001,5.530000000000001,0.9516321359202266,-0.5843136000921527,0.5843136000921527,0.0,0.0,22.120000000000005,22.120000000000005,|,0.8670398342836396,9.822960165716367,5.269384541363554,6.114313600092154,6.114313600092153,6.114313600092154,6.114313600092154,0.9714084420289973,0.022110775555039375,0.0,0.04422155111007875,0.0,12.228627200184308,12.272848751294386 -29,|,0.37568639990783925,6.114313600092161,5.530000000000001,3.6191974018225004,3.6191974018225004,3.6191974018225004,3.6191974018225004,0.990893482877675,2.28648899808534,0.0,16.00542298659738,0.0,0.0,16.00542298659738,|,-0.5843136000921527,6.114313600092157,6.114313600092154,3.6191974018225004,3.619197401822502,4.203511001914653,3.6191974018225004,0.9528664179685989,1.9108025981775008,0.0,7.643210392710003,0.0,16.814044007658612,24.457254400368615,|,0.022110775555039375,10.667889224444966,4.553575624352813,3.619197401822502,3.619197401822504,3.619197401822502,3.619197401822502,0.9721380596668654,0.9564889980853506,0.0,1.9129779961707012,0.0,7.238394803645004,9.151372799815706 -30,|,2.28648899808534,4.203511001914659,4.203511001914653,6.015424517555433,6.0154245175554335,6.015424517555433,6.015424517555433,0.9912640129775301,0.4745754824445605,0.0,3.3220283771119234,0.0,0.0,3.3220283771119234,|,1.9108025981775008,3.6191974018225066,3.619197401822502,6.0154245175554335,6.0154245175554335,5.530000000000003,5.530000000000003,0.9515007892374601,-0.4854245175554306,0.4854245175554306,0.0,0.0,22.12000000000001,22.12000000000001,|,0.9564889980853506,9.733511001914657,6.114313600092153,6.0154245175554335,6.015424517555434,6.0154245175554335,6.0154245175554335,0.9732717189347413,1.05537808062207,0.0,2.11075616124414,0.0,12.030849035110867,14.141605196355007 -31,|,0.4745754824445605,6.015424517555441,5.530000000000003,5.224081283287703,5.224081283287702,5.224081283287703,5.224081283287703,0.9915621703697444,0.7804941991568608,0.0,5.463459394098026,0.0,0.0,5.463459394098026,|,-0.4854245175554306,6.015424517555438,6.0154245175554335,5.224081283287702,5.2240812832877,5.709505800843132,5.224081283287702,0.9531560570587397,0.3059187167123012,0.0,1.2236748668492048,0.0,22.83802320337253,24.061698070221734,|,1.05537808062207,9.634621919377938,3.619197401822504,5.2240812832877,5.2240812832876955,4.674575482444574,4.674575482444574,0.9705939370555099,-0.549505800843126,0.549505800843126,0.0,0.0,9.349150964889148,9.349150964889148 -32,|,0.7804941991568608,5.709505800843139,5.709505800843132,4.355448885729298,4.355448885729298,4.355448885729298,4.355448885729298,0.9917956247947756,2.134551114270695,0.0,14.941857799894866,0.0,0.0,14.941857799894866,|,0.3059187167123012,5.2240812832877035,4.674575482444574,4.355448885729298,4.3554488857293,4.355448885729298,4.355448885729298,0.9544521161455851,0.6250453134275773,0.0,2.500181253710309,0.0,17.42179554291719,19.9219767966275,|,-0.549505800843126,11.23950580084313,6.015424517555434,4.3554488857293,4.355448885729302,4.904954686572426,4.3554488857293,0.9714075319985176,1.1104698309830088,0.0,2.2209396619660176,0.0,9.809909373144851,12.030849035110869 -33,|,2.134551114270695,4.355448885729306,4.355448885729298,5.661531660367694,5.661531660367693,5.661531660367694,5.661531660367694,0.9920804464947681,0.8284683396322992,0.0,5.799278377426094,0.0,0.0,5.799278377426094,|,0.6250453134275773,4.904954686572429,4.904954686572426,5.661531660367693,5.661531660367693,5.530000000000003,5.530000000000003,0.9552268124587282,-0.13153166036769015,0.13153166036769015,0.0,0.0,22.12000000000001,22.12000000000001,|,1.1104698309830088,9.579530169016998,5.2240812832876955,5.661531660367693,5.661531660367693,5.661531660367693,5.661531660367693,0.972400143274752,0.6730194539030112,0.0,1.3460389078060224,0.0,11.323063320735386,12.669102228541409 -34,|,0.8284683396322992,5.661531660367701,5.530000000000003,6.292964845138368,6.292964845138368,6.292964845138368,6.292964845138368,0.9923746897030428,0.06550349449393433,0.0,0.45852446145754033,0.0,0.0,0.45852446145754033,|,-0.13153166036769015,5.661531660367697,5.661531660367693,6.292964845138368,6.292964845138368,5.661531660367693,5.530000000000003,0.9523857292070317,-0.7629648451383648,0.7629648451383648,0.0,0.0,22.646126641470772,22.646126641470772,|,0.6730194539030112,10.016980546096995,4.355448885729302,6.292964845138368,6.292964845138368,5.0284683396323135,5.0284683396323135,0.9659599309890717,-1.2644965055060542,1.2644965055060542,0.0,0.0,10.056936679264627,10.056936679264627 -35,|,0.06550349449393433,6.424496505506065,5.661531660367693,4.104687954691534,4.104687954691535,4.104687954691534,4.104687954691534,0.992555111412835,1.6223472001700934,0.0,11.356430401190654,0.0,0.0,11.356430401190654,|,-0.7629648451383648,6.292964845138371,5.0284683396323135,4.104687954691535,4.104687954691535,4.8676527998299,4.104687954691535,0.9535123257404746,0.1608155398024138,0.0,0.6432621592096552,0.0,19.4706111993196,20.113873358529254,|,-1.2644965055060542,11.95449650550606,5.661531660367693,4.104687954691535,4.104687954691535,5.369184460197589,4.104687954691535,0.9667653496819805,0.29234720017010396,0.0,0.5846944003402079,0.0,10.738368920395178,11.323063320735386 -36,|,1.6223472001700934,4.867652799829907,4.8676527998299,4.431689346880682,4.431689346880682,4.431689346880682,4.431689346880682,0.9927405600111431,2.058310653119311,0.0,14.408174571835179,0.0,0.0,14.408174571835179,|,0.1608155398024138,5.369184460197593,5.369184460197589,4.431689346880682,4.431689346880682,4.431689346880682,4.431689346880682,0.9546703113743892,1.098310653119321,0.0,4.393242612477284,0.0,17.726757387522728,22.12000000000001,|,0.29234720017010396,10.397652799829903,6.292964845138368,4.431689346880682,4.431689346880681,4.431689346880682,4.431689346880682,0.96759320885604,2.1536226984277898,0.0,4.3072453968555795,0.0,8.863378693761364,13.170624090616943 -37,|,2.058310653119311,4.43168934688069,4.431689346880682,2.8883816420774937,2.888381642077493,2.8883816420774937,2.8883816420774937,0.9928565337387961,3.6016183579224994,0.0,25.211328505457494,0.0,0.0,25.211328505457494,|,1.098310653119321,4.431689346880686,4.431689346880682,2.888381642077493,2.8883816420774924,2.888381642077493,2.888381642077493,0.9553944792125881,2.64161835792251,0.0,10.56647343169004,0.0,11.553526568309971,22.12000000000001,|,2.1536226984277898,8.536377301572216,4.104687954691535,2.8883816420774924,2.8883816420774906,2.8883816420774924,2.8883816420774924,0.968110925976921,3.3699290110418323,0.0,6.739858022083665,0.0,5.776763284154985,12.51662130623865 -38,|,3.6016183579224994,2.8883816420775004,2.888381642077493,4.181692281275389,4.181692281275389,4.181692281275389,4.181692281275389,0.9930180189144395,2.3083077187246035,0.0,16.158154031072225,0.0,0.0,16.158154031072225,|,2.64161835792251,2.888381642077497,2.8883816420774924,4.181692281275389,4.181692281275389,4.181692281275389,4.181692281275389,0.9564028314740298,1.3483077187246142,0.0,5.393230874898457,0.0,16.726769125101555,22.12000000000001,|,3.3699290110418323,7.320070988958172,4.431689346880681,4.181692281275389,4.181692281275389,4.181692281275389,4.181692281275389,0.9688318102831419,3.6199260766471246,0.0,7.239852153294249,0.0,8.363384562550777,15.603236715845027 -39,|,2.3083077187246035,4.181692281275396,4.181692281275389,4.037616387669554,4.037616387669555,4.037616387669554,4.037616387669554,0.9931671602006205,2.452383612330438,0.0,17.16668528631307,0.0,0.0,17.16668528631307,|,1.3483077187246142,4.181692281275393,4.181692281275389,4.037616387669555,4.037616387669555,4.037616387669555,4.037616387669555,0.9573341055219163,1.492383612330448,0.0,5.969534449321792,0.0,16.15046555067822,22.12000000000001,|,3.6199260766471246,7.070073923352879,2.8883816420774906,4.037616387669555,4.037616387669555,4.037616387669555,4.037616387669555,0.9694975903597912,2.4706913310550602,0.0,4.9413826621101204,0.0,8.07523277533911,13.01661543744923 -40,|,2.452383612330438,4.037616387669562,4.037616387669555,5.124501672999136,5.124501672999136,5.124501672999136,5.124501672999136,0.9933475158091363,1.3654983270008572,0.0,9.558488289006,0.0,0.0,9.558488289006,|,1.492383612330448,4.0376163876695585,4.037616387669555,5.124501672999136,5.124501672999136,5.124501672999136,5.124501672999136,0.9584602893030971,0.40549832700086696,0.0,1.6219933080034679,0.0,20.498006691996544,22.12000000000001,|,2.4706913310550602,8.219308668944944,4.181692281275389,5.124501672999136,5.124501672999138,5.124501672999136,5.124501672999136,0.9703027139706739,1.527881939331313,0.0,3.055763878662626,0.0,10.249003345998272,13.304767224660898 -41,|,1.3654983270008572,5.124501672999143,5.124501672999136,5.1085086947130725,5.1085086947130725,5.1085086947130725,5.1085086947130725,0.9935180749180552,1.3814913052869207,0.0,9.670439137008444,0.0,0.0,9.670439137008444,|,0.40549832700086696,5.1245016729991395,5.124501672999136,5.1085086947130725,5.1085086947130725,5.1085086947130725,5.1085086947130725,0.9595253013854926,0.42149130528693046,0.0,1.6859652211477218,0.0,20.43403477885229,22.12000000000001,|,1.527881939331313,9.162118060668693,4.037616387669555,5.1085086947130725,5.108508694713073,5.1085086947130725,5.1085086947130725,0.9710641051287964,0.45698963228779554,0.0,0.9139792645755911,0.0,10.217017389426145,11.130996654001736 -42,|,1.3814913052869207,5.108508694713079,5.1085086947130725,4.5606987369844205,4.560698736984421,4.5606987369844205,4.5606987369844205,0.9936631202582588,1.9293012630155726,0.0,13.505108841109008,0.0,0.0,13.505108841109008,|,0.42149130528693046,5.108508694713075,5.1085086947130725,4.560698736984421,4.560698736984421,4.560698736984421,4.560698736984421,0.960430999361936,0.9693012630155815,0.0,3.877205052062326,0.0,18.242794947937686,22.12000000000001,|,0.45698963228779554,10.233010367712211,5.124501672999138,4.560698736984421,4.5606987369844205,4.560698736984421,4.560698736984421,0.9717116005352732,1.0207925683025119,0.0,2.0415851366050237,0.0,9.121397473968843,11.162982610573867 -43,|,1.9293012630155726,4.5606987369844285,4.560698736984421,4.2864396267789875,4.286439626778987,4.2864396267789875,4.2864396267789875,0.9937936476111038,2.2035603732210065,0.0,15.424922612547046,0.0,0.0,15.424922612547046,|,0.9693012630155815,4.560698736984425,4.560698736984421,4.286439626778987,4.286439626778987,4.286439626778987,4.286439626778987,0.9612460435348574,1.2435603732210163,0.0,4.974241492884065,0.0,17.145758507115946,22.12000000000001,|,1.0207925683025119,9.669207431697494,5.108508694713073,4.286439626778987,4.286439626778986,4.286439626778987,4.286439626778987,0.9722942863441946,1.8428616362365986,0.0,3.685723272473197,0.0,8.572879253557973,12.25860252603117 -44,|,2.2035603732210065,4.286439626778994,4.286439626778987,5.934180959229707,5.934180959229707,5.934180959229707,5.934180959229707,0.993965721698748,0.5558190407702863,0.0,3.8907332853920042,0.0,0.0,3.8907332853920042,|,1.2435603732210163,4.28643962677899,4.286439626778987,5.934180959229707,5.934180959229707,5.530000000000003,5.530000000000003,0.9604321149969481,-0.4041809592297039,0.4041809592297039,0.0,0.0,22.12000000000001,22.12000000000001,|,1.8428616362365986,8.847138363763406,4.5606987369844205,5.934180959229707,5.934180959229707,5.934180959229707,5.934180959229707,0.9730624405032113,0.46937941399131233,0.0,0.9387588279826247,0.0,11.868361918459414,12.807120746442038 -45,|,0.5558190407702863,5.934180959229713,5.530000000000003,5.0586555323165925,5.058655532316593,5.0586555323165925,5.0586555323165925,0.9941050481666472,1.0271635084536967,0.0,7.190144559175877,0.0,0.0,7.190144559175877,|,-0.4041809592297039,5.9341809592297095,5.934180959229707,5.058655532316593,5.058655532316593,5.462836491546297,5.058655532316593,0.961345704557207,0.47134446768340954,0.0,1.8853778707336382,0.0,21.85134596618519,23.736723836918827,|,0.46937941399131233,10.220620586008692,4.286439626778986,5.058655532316593,5.0586555323165925,4.755819040770298,4.755819040770298,0.9723021729278022,-0.3028364915462953,0.3028364915462953,0.0,0.0,9.511638081540596,9.511638081540596 -46,|,1.0271635084536967,5.4628364915463035,5.462836491546297,6.609714279427906,6.609714279427906,6.489999999999994,6.489999999999994,0.9937472738407152,-0.11971427942791202,0.11971427942791202,0.0,4.443794052364094,0.0,4.443794052364094,|,0.47134446768340954,5.058655532316596,4.755819040770298,6.609714279427906,6.609714279427906,5.227163508453708,5.227163508453708,0.9563521395757525,-1.3825507709741984,1.3825507709741984,0.0,0.0,20.90865403381483,20.90865403381483,|,-0.3028364915462953,10.9928364915463,5.934180959229707,6.609714279427906,6.609714279427905,5.934180959229707,5.6313444676834115,0.9687785197515341,-0.9783698117444946,0.9783698117444946,0.0,0.0,11.868361918459414,11.868361918459414 -47,|,-0.11971427942791202,6.609714279427913,5.227163508453708,5.859906743830658,5.859906743830657,5.227163508453708,5.107449229025796,0.9906560160675076,-0.7524575148048624,0.7524575148048624,0.0,27.931222949556492,0.0,27.931222949556492,|,-1.3825507709741984,6.912550770974203,5.934180959229707,5.859906743830657,5.859906743830657,5.934180959229707,4.551630188255508,0.9518068980954123,-1.3082765555751488,1.3082765555751488,0.0,0.0,23.736723836918827,23.736723836918827,|,-0.9783698117444946,11.668369811744498,5.0586555323165925,5.859906743830657,5.859906743830656,5.0586555323165925,4.080285720572098,0.9618833139579115,-1.7796210232585592,1.7796210232585592,0.0,0.0,10.117311064633185,10.117311064633185 -48,|,-0.7524575148048624,7.242457514804863,5.934180959229707,4.0147969631261775,4.0147969631261775,4.76725447793104,4.0147969631261775,0.9908152602518561,1.1669264812986668,0.0,8.168485369090668,0.0,0.0,8.168485369090668,|,-1.3082765555751488,6.838276555575153,5.0586555323165925,4.0147969631261775,4.01479696312618,5.0586555323165925,3.7503789767414437,0.9515057965553939,-0.2644179863847338,0.2644179863847338,0.0,0.0,20.23462212926637,20.23462212926637,|,-1.7796210232585592,12.469621023258561,6.609714279427905,4.01479696312618,4.014796963126184,5.794417986384739,4.01479696312618,0.9625329148800331,0.8152962930431658,0.0,1.6305925860863315,0.0,11.588835972769479,13.21942855885581 -49,|,1.1669264812986668,5.323073518701333,5.0586555323165925,4.0416316792218865,4.0416316792218865,4.0416316792218865,4.0416316792218865,0.9909701789320121,2.183950334393373,0.0,15.28765234075361,0.0,0.0,15.28765234075361,|,-0.2644179863847338,5.79441798638474,5.794417986384739,4.0416316792218865,4.0416316792218865,4.30604966560662,4.0416316792218865,0.9523237465680089,1.488368320778119,0.0,5.953473283112476,0.0,17.22419866242648,23.177671945538957,|,0.8152962930431658,9.87470370695684,5.859906743830656,4.0416316792218865,4.041631679221883,4.0416316792218865,4.0416316792218865,0.9631648708782696,2.6335713576519355,0.0,5.267142715303871,0.0,8.083263358443773,13.350406073747644 -50,|,2.183950334393373,4.306049665606627,4.30604966560662,5.449108650870278,5.449108650870278,5.449108650870278,5.449108650870278,0.9911709583691704,1.0408913491297147,0.0,7.286239443908003,0.0,0.0,7.286239443908003,|,1.488368320778119,4.041631679221887,4.0416316792218865,5.449108650870278,5.449108650870278,5.449108650870278,5.449108650870278,0.9533838352738443,0.08089134912972717,0.0,0.3235653965189087,0.0,21.796434603481114,22.120000000000022,|,2.6335713576519355,8.056428642348067,4.014796963126184,5.449108650870278,5.449108650870279,5.449108650870278,5.449108650870278,0.9639839055454051,1.1992596699078408,0.0,2.3985193398156817,0.0,10.898217301740557,13.296736641556238 -51,|,1.0408913491297147,5.449108650870285,5.449108650870278,4.057537439958953,4.057537439958954,4.057537439958953,4.057537439958953,0.9913147584263747,2.4324625600410403,0.0,17.027237920287284,0.0,0.0,17.027237920287284,|,0.08089134912972717,5.449108650870279,5.449108650870278,4.057537439958954,4.057537439958954,4.057537439958954,4.057537439958954,0.954143080437086,1.472462560041052,0.0,5.889850240164208,0.0,16.230149759835815,22.120000000000022,|,1.1992596699078408,9.490740330092162,4.041631679221883,4.057537439958954,4.057537439958953,4.057537439958954,4.057537439958954,0.9645705056158773,1.18335390917077,0.0,2.36670781834154,0.0,8.115074879917907,10.481782698259448 -52,|,2.4324625600410403,4.057537439958961,4.057537439958954,5.158909447337027,5.1589094473370265,5.158909447337027,5.158909447337027,0.9914909646291137,1.3310905526629666,0.0,9.317633868640765,0.0,0.0,9.317633868640765,|,1.472462560041052,4.057537439958954,4.057537439958954,5.1589094473370265,5.1589094473370265,5.1589094473370265,5.1589094473370265,0.9550734257357162,0.3710905526629791,0.0,1.4843622106519163,0.0,20.635637789348106,22.120000000000022,|,1.18335390917077,9.506646090829232,5.449108650870279,5.1589094473370265,5.158909447337027,5.1589094473370265,5.1589094473370265,0.9652892992864354,1.473553112704023,0.0,2.947106225408046,0.0,10.317818894674053,13.264925120082099 -53,|,1.3310905526629666,5.158909447337034,5.1589094473370265,5.388075616902475,5.388075616902475,5.388075616902475,5.388075616902475,0.9916675233493132,1.1019243830975185,0.0,7.7134706816826295,0.0,0.0,7.7134706816826295,|,0.3710905526629791,5.1589094473370265,5.1589094473370265,5.388075616902475,5.388075616902475,5.388075616902475,5.388075616902475,0.9560056322796201,0.14192438309753097,0.0,0.5676975323901239,0.0,21.5523024676099,22.120000000000022,|,1.473553112704023,9.21644688729598,4.057537439958953,5.388075616902475,5.388075616902476,5.388075616902475,5.388075616902475,0.9660095309728829,0.14301493576050106,0.0,0.2860298715210021,0.0,10.77615123380495,11.062181105325951 -54,|,1.1019243830975185,5.388075616902481,5.388075616902475,5.437337763404014,5.437337763404015,5.437337763404014,5.437337763404014,0.9918384208339609,1.052662236595979,0.0,7.368635656171853,0.0,0.0,7.368635656171853,|,0.14192438309753097,5.388075616902474,5.388075616902475,5.437337763404015,5.437337763404017,5.437337763404015,5.437337763404015,0.9569079482532818,0.0926622365959906,0.0,0.3706489463839624,0.0,21.74935105361606,22.120000000000022,|,0.14301493576050106,10.546985064239504,5.158909447337027,5.437337763404017,5.437337763404013,5.3019243830975284,5.3019243830975284,0.9661958854506143,-0.1354133803064883,0.1354133803064883,0.0,0.0,10.603848766195057,10.603848766195057 -55,|,1.052662236595979,5.437337763404022,5.437337763404015,5.418229551174271,5.41822955117427,5.418229551174271,5.418229551174271,0.9920018841646039,1.0717704488257231,0.0,7.502393141780062,0.0,0.0,7.502393141780062,|,0.0926622365959906,5.437337763404015,5.3019243830975284,5.41822955117427,5.41822955117427,5.394586619693519,5.394586619693519,0.9576836171824606,-0.023642931480750917,0.023642931480750917,0.0,0.0,21.578346478774076,21.578346478774076,|,-0.1354133803064883,10.82541338030649,5.388075616902476,5.41822955117427,5.418229551174271,5.388075616902476,5.252662236595988,0.9662609107973575,-0.1655673145782819,0.1655673145782819,0.0,0.0,10.776151233804953,10.776151233804953 -56,|,1.0717704488257231,5.418229551174276,5.394586619693519,4.267815007053072,4.2678150070530725,4.267815007053072,4.267815007053072,0.9921261020448281,2.1985420614661706,0.0,15.389794430263194,0.0,0.0,15.389794430263194,|,-0.023642931480750917,5.553642931480756,5.388075616902476,4.2678150070530725,4.267815007053074,4.291457938533823,4.2678150070530725,0.9583408283907664,1.096617678368653,0.0,4.386470713474612,0.0,17.165831754135294,21.552302467609906,|,-0.1655673145782819,10.855567314578284,5.437337763404013,4.267815007053074,4.267815007053073,4.433382321631356,4.267815007053074,0.9667849089773913,1.003955441772657,0.0,2.007910883545314,0.0,8.866764643262712,10.874675526808026 -57,|,2.1985420614661706,4.291457938533829,4.291457938533823,3.571717033763198,3.571717033763199,3.571717033763198,3.571717033763198,0.992227131773817,2.918282966236796,0.0,20.427980763657573,0.0,0.0,20.427980763657573,|,1.096617678368653,4.433382321631353,4.433382321631356,3.571717033763199,3.5717170337632,3.571717033763199,3.571717033763199,0.9588753558689666,1.9582829662368102,0.0,7.833131864947241,0.0,14.286868135052796,22.120000000000037,|,1.003955441772657,9.686044558227344,5.418229551174271,3.5717170337632,3.5717170337631963,3.5717170337632,3.5717170337632,0.9672110907317729,2.850467959183728,0.0,5.700935918367456,0.0,7.1434340675264,12.844369985893856 -58,|,2.918282966236796,3.5717170337632043,3.571717033763199,2.9907826459947087,2.9907826459947087,2.9907826459947087,2.9907826459947087,0.9923097559863248,3.499217354005286,0.0,24.494521478037004,0.0,0.0,24.494521478037004,|,1.9582829662368102,3.5717170337631963,3.5717170337632,2.9907826459947087,2.990782645994706,2.9907826459947087,2.9907826459947087,0.95931250355205,2.5392173540053014,0.0,10.156869416021205,0.0,11.963130583978835,22.12000000000004,|,2.850467959183728,7.83953204081627,4.267815007053073,2.990782645994706,2.990782645994706,2.990782645994706,2.990782645994706,0.9675596310296967,4.1275003202420955,0.0,8.255000640484191,0.0,5.981565291989412,14.236565932473603 -59,|,3.499217354005286,2.990782645994714,2.9907826459947087,4.766560417147497,4.766560417147497,4.766560417147497,4.766560417147497,0.9924378681956918,1.7234395828524978,0.0,12.064077079967484,0.0,0.0,12.064077079967484,|,2.5392173540053014,2.9907826459947024,2.990782645994706,4.766560417147497,4.766560417147497,4.766560417147497,4.766560417147497,0.9599903188533966,0.7634395828525102,0.0,3.053758331410041,0.0,19.06624166858999,22.12000000000003,|,4.1275003202420955,6.562499679757902,3.5717170337631963,4.766560417147497,4.766560417147495,4.766560417147497,4.766560417147497,0.9681000569685972,2.9326569368577946,0.0,5.865313873715589,0.0,9.533120834294994,15.398434708010583 -60,|,1.7234395828524978,4.7665604171475024,4.766560417147497,6.8039523690390284,6.8039523690390284,6.489999999999995,6.489999999999995,0.9915417442920308,-0.31395236903903356,0.31395236903903356,0.0,11.653911938728925,0.0,11.653911938728925,|,0.7634395828525102,4.766560417147494,4.766560417147497,6.8039523690390284,6.8039523690390284,5.530000000000007,5.530000000000007,0.9565706128677746,-1.273952369039021,1.273952369039021,0.0,0.0,22.12000000000003,22.12000000000003,|,2.9326569368577946,7.757343063142201,2.990782645994706,6.8039523690390284,6.803952369039028,5.923439582852501,5.923439582852501,0.9658351093236907,-0.8805127861865278,0.8805127861865278,0.0,0.0,11.846879165705001,11.846879165705001 -61,|,-0.31395236903903356,6.803952369039033,5.530000000000007,3.051329339977242,3.0513293399772428,3.3652817090162754,3.051329339977242,0.9916289426252695,2.164718290983732,0.0,15.153028036886123,0.0,0.0,15.153028036886123,|,-1.273952369039021,6.803952369039026,5.923439582852501,3.0513293399772428,3.0513293399772436,4.325281709016264,3.0513293399772428,0.9570183375881255,1.5981578738362368,0.0,6.392631495344947,0.0,17.301126836065055,23.693758331410002,|,-0.8805127861865278,11.570512786186523,4.766560417147495,3.0513293399772436,3.051329339977247,3.9318421261637715,3.0513293399772436,0.9661873239675974,0.8347182909837239,0.0,1.6694365819674477,0.0,7.863684252327543,9.53312083429499 -62,|,2.164718290983732,4.325281709016267,4.325281709016264,6.367851011658045,6.367851011658046,6.367851011658045,6.367851011658045,0.9918052485741141,0.12214898834195065,0.0,0.8550429183936545,0.0,0.0,0.8550429183936545,|,1.5981578738362368,3.931842126163769,3.9318421261637715,6.367851011658046,6.367851011658044,5.530000000000008,5.530000000000008,0.9551524370402966,-0.8378510116580378,0.8378510116580378,0.0,0.0,22.120000000000033,22.120000000000033,|,0.8347182909837239,9.855281709016275,6.803952369039028,6.367851011658044,6.36785101165804,6.367851011658044,6.367851011658044,0.9668994652974211,1.2708196483647072,0.0,2.5416392967294144,0.0,12.735702023316088,15.277341320045503 -63,|,0.12214898834195065,6.36785101165805,5.530000000000008,3.141260578815811,3.141260578815811,3.141260578815811,3.141260578815811,0.9918895130738563,2.5108884095261477,0.0,17.576218866683035,0.0,0.0,17.576218866683035,|,-0.8378510116580378,6.367851011658041,6.367851011658044,3.141260578815811,3.1412605788158103,3.979111590473849,3.141260578815811,0.9556135928778642,2.3887394211841952,0.0,9.554957684736781,0.0,15.916446361895396,25.471404046632177,|,1.2708196483647072,9.419180351635287,3.051329339977247,3.1412605788158103,3.141260578815814,3.1412605788158103,3.1412605788158103,0.9672398294955478,1.180888409526144,0.0,2.361776819052288,0.0,6.282521157631621,8.644297976683909 -64,|,2.5108884095261477,3.9791115904738525,3.979111590473849,3.7660492723050285,3.7660492723050285,3.7660492723050285,3.7660492723050285,0.9919882811504278,2.723950727694968,0.0,19.067655093864776,0.0,0.0,19.067655093864776,|,2.3887394211841952,3.141260578815806,3.1412605788158103,3.7660492723050285,3.766049272305029,3.7660492723050285,3.7660492723050285,0.9561541227002157,1.763950727694977,0.0,7.055802910779908,0.0,15.064197089220114,22.120000000000022,|,1.180888409526144,9.509111590473854,6.36785101165804,3.766049272305029,3.766049272305029,3.766049272305029,3.766049272305029,0.9676387770628571,3.782690148879155,0.0,7.56538029775831,0.0,7.532098544610058,15.097478842368368 -65,|,2.723950727694968,3.7660492723050325,3.7660492723050285,4.492430236462758,4.492430236462758,4.492430236462758,4.492430236462758,0.9921029980125088,1.9975697635372383,0.0,13.982988344760667,0.0,0.0,13.982988344760667,|,1.763950727694977,3.7660492723050245,3.766049272305029,4.492430236462758,4.492430236462758,4.492430236462758,4.492430236462758,0.956781935726791,1.037569763537248,0.0,4.150279054148992,0.0,17.969720945851034,22.120000000000026,|,3.782690148879155,6.907309851120843,3.141260578815814,4.492430236462758,4.492430236462759,4.492430236462758,4.492430236462758,0.9681021455382313,2.4315204912322104,0.0,4.863040982464421,0.0,8.984860472925517,13.847901455389938 -66,|,1.9975697635372383,4.492430236462763,4.492430236462758,6.407171498157144,6.407171498157143,6.407171498157144,6.407171498157144,0.9922610388177904,0.08282850184285273,0.0,0.5797995128999691,0.0,0.0,0.5797995128999691,|,1.037569763537248,4.492430236462754,4.492430236462758,6.407171498157143,6.407171498157143,5.5300000000000065,5.5300000000000065,0.9549070088028708,-0.8771714981571366,0.8771714981571366,0.0,0.0,22.120000000000026,22.120000000000026,|,2.4315204912322104,8.258479508767788,3.766049272305029,6.407171498157143,6.40717149815714,6.197569763537239,6.197569763537239,0.9680858199402792,-0.20960173461990372,0.20960173461990372,0.0,0.0,12.395139527074479,12.395139527074479 -67,|,0.08282850184285273,6.407171498157148,5.5300000000000065,4.058902947289716,4.058902947289715,4.058902947289716,4.058902947289716,0.9923579247262907,1.5539255545531434,0.0,10.877478881872005,0.0,0.0,10.877478881872005,|,-0.8771714981571366,6.407171498157138,6.197569763537239,4.058902947289715,4.0589029472897185,4.9360744454468515,4.058902947289715,0.9554715387593168,1.2614953180903878,0.0,5.045981272361551,0.0,19.744297781787406,24.790279054148957,|,-0.20960173461990372,10.8996017346199,4.492430236462759,4.0589029472897185,4.058902947289724,4.268504681909622,4.0589029472897185,0.9684853612038065,0.22392555455313712,0.0,0.44785110910627424,0.0,8.537009363819244,8.984860472925519 -68,|,1.5539255545531434,4.936074445446858,4.9360744454468515,5.873504732822984,5.873504732822983,5.873504732822984,5.873504732822984,0.9924939064606292,0.6164952671770108,0.0,4.315466870239075,0.0,0.0,4.315466870239075,|,1.2614953180903878,4.268504681909618,4.268504681909622,5.873504732822983,5.873504732822983,5.53000000000001,5.53000000000001,0.955223220366361,-0.3435047328229732,0.3435047328229732,0.0,0.0,22.12000000000004,22.12000000000004,|,0.22392555455313712,10.466074445446864,6.40717149815714,5.873504732822983,5.873504732822976,5.873504732822983,5.873504732822983,0.9690461271066628,0.7575923198872943,0.0,1.5151846397745885,0.0,11.747009465645966,13.262194105420555 -69,|,0.6164952671770108,5.8735047328229895,5.53000000000001,6.135100193751177,6.135100193751177,6.135100193751177,6.135100193751177,0.9926308715013742,0.01139507342584345,0.0,0.07976551398090415,0.0,0.0,0.07976551398090415,|,-0.3435047328229732,5.87350473282298,5.873504732822983,6.135100193751177,6.135100193751177,5.873504732822983,5.53000000000001,0.954240565047717,-0.6051001937511673,0.6051001937511673,0.0,0.0,23.494018931291933,23.494018931291933,|,0.7575923198872943,9.9324076801127,4.058902947289724,6.135100193751177,6.135100193751182,4.816495267177018,4.816495267177018,0.9656891177400269,-1.3186049265741593,1.3186049265741593,0.0,0.0,9.632990534354036,9.632990534354036 -70,|,0.01139507342584345,6.478604926574157,5.873504732822983,6.165984400987113,6.165984400987113,5.884899806248827,5.884899806248827,0.9919426266016977,-0.28108459473828606,0.28108459473828606,0.0,10.433860156685178,0.0,10.433860156685178,|,-0.6051001937511673,6.135100193751175,4.816495267177018,6.165984400987113,6.165984400987111,4.816495267177018,4.211395073425851,0.9493559362125298,-1.954589327561262,1.954589327561262,0.0,0.0,19.265981068708072,19.265981068708072,|,-1.3186049265741593,12.008604926574158,5.873504732822976,6.165984400987111,6.16598440098711,5.873504732822976,4.554899806248817,0.9616015766755069,-1.6110845947382941,1.6110845947382941,0.0,0.0,11.747009465645952,11.747009465645952 -71,|,-0.28108459473828606,6.771084594738287,4.816495267177018,5.049214492333626,5.0492144923336255,4.816495267177018,4.535410672438732,0.9905808822245838,-0.5138038198948944,0.5138038198948944,0.0,19.07239779449848,0.0,19.07239779449848,|,-1.954589327561262,7.484589327561267,5.873504732822976,5.0492144923336255,5.0492144923336255,5.873504732822976,3.918915405261714,0.9468386847778735,-1.1302990870719114,1.1302990870719114,0.0,0.0,23.494018931291905,23.494018931291905,|,-1.6110845947382941,12.301084594738292,6.135100193751182,5.0492144923336255,5.0492144923336255,6.135100193751182,4.524015599012888,0.9606479735899649,-0.5251988933207379,0.5251988933207379,0.0,0.0,12.270200387502364,12.270200387502364 -72,|,-0.5138038198948944,7.003803819894895,5.873504732822976,5.510946742685257,5.510946742685257,5.873504732822976,5.359700912928082,0.9902994311845846,-0.15124582975717527,0.15124582975717527,0.0,5.614245200586345,0.0,5.614245200586345,|,-1.1302990870719114,6.660299087071916,6.135100193751182,5.510946742685257,5.510946742685259,6.135100193751182,5.00480110667927,0.9462346964370251,-0.5061456360059866,0.5061456360059866,0.0,0.0,24.540400775004727,24.540400775004727,|,-0.5251988933207379,11.215198893320736,6.16598440098711,5.510946742685259,5.51094674268526,6.036145636005997,5.510946742685259,0.9612624180405697,0.12983876498111346,0.0,0.2596775299622269,0.0,12.072291272011993,12.33196880197422 -73,|,-0.15124582975717527,6.641245829757175,6.135100193751182,5.6312993903486825,5.631299390348683,5.782545220105858,5.6312993903486825,0.9904517735307797,0.35255497364532395,0.0,2.4678848155172677,0.0,0.0,2.4678848155172677,|,-0.5061456360059866,6.036145636005994,6.036145636005997,5.631299390348683,5.631299390348683,6.036145636005997,5.53000000000001,0.9467965502523533,-0.10129939034867341,0.10129939034867341,0.0,0.0,24.144582544023987,24.144582544023987,|,0.12983876498111346,10.560161235018885,5.0492144923336255,5.631299390348683,5.631299390348683,5.179053257314739,5.179053257314739,0.9606095548354512,-0.45224613303394445,0.45224613303394445,0.0,0.0,10.358106514629478,10.358106514629478 -74,|,0.35255497364532395,6.137445026354676,6.036145636005997,5.887702065835798,5.887702065835798,5.887702065835798,5.887702065835798,0.9906060182691222,0.5009985438155224,0.0,3.506989806708657,0.0,0.0,3.506989806708657,|,-0.10129939034867341,5.631299390348681,5.179053257314739,5.887702065835798,5.887702065835796,5.179053257314739,5.077753866966066,0.945433732284635,-0.8099481988697326,0.8099481988697326,0.0,0.0,20.716213029258956,20.716213029258956,|,-0.45224613303394445,11.142246133033943,5.51094674268526,5.887702065835796,5.887702065835796,5.51094674268526,5.058700609651315,0.958971320655329,-0.8290014561844812,0.8290014561844812,0.0,0.0,11.02189348537052,11.02189348537052 -75,|,0.5009985438155224,5.989001456184478,5.179053257314739,5.057651636667991,5.057651636667991,5.057651636667991,5.057651636667991,0.9907345928864977,0.6224001644622703,0.0,4.356801151235892,0.0,0.0,4.356801151235892,|,-0.8099481988697326,6.339948198869737,5.51094674268526,5.057651636667991,5.057651636667991,5.51094674268526,4.700998543815527,0.945215408756224,-0.35665309285246405,0.35665309285246405,0.0,0.0,22.04378697074104,22.04378697074104,|,-0.8290014561844812,11.51900145618448,5.631299390348683,5.057651636667991,5.057651636667991,5.631299390348683,4.802297934164202,0.9588418436672623,-0.25535370250378886,0.25535370250378886,0.0,0.0,11.262598780697367,11.262598780697367 -76,|,0.6224001644622703,5.867599835537731,5.51094674268526,4.670455561985353,4.670455561985352,4.670455561985353,4.670455561985353,0.9908502375718768,1.462891345162177,0.0,10.240239416135239,0.0,0.0,10.240239416135239,|,-0.35665309285246405,5.88665309285247,5.631299390348683,4.670455561985352,4.670455561985352,5.027108654837816,4.670455561985352,0.9458991938010037,0.6041907355108673,0.0,2.4167629420434693,0.0,20.108434619351264,22.525197561394734,|,-0.25535370250378886,10.945353702503787,5.887702065835796,4.670455561985352,4.670455561985353,4.925809264489141,4.670455561985352,0.9593555525611702,0.9618928013466554,0.0,1.923785602693311,0.0,9.851618528978282,11.775404131671593 -77,|,1.462891345162177,5.027108654837823,5.027108654837816,2.16792131299536,2.16792131299536,2.16792131299536,2.16792131299536,0.9909029419157086,4.322078687004633,0.0,30.25455080903243,0.0,0.0,30.25455080903243,|,0.6041907355108673,4.925809264489139,4.925809264489141,2.16792131299536,2.167921312995361,2.16792131299536,2.16792131299536,0.9462108245688939,3.362078687004648,0.0,13.448314748018593,0.0,8.67168525198144,22.120000000000033,|,0.9618928013466554,9.728107198653344,5.057651636667991,2.167921312995361,2.167921312995361,2.167921312995361,2.167921312995361,0.9595896721844387,3.8516231250192856,0.0,7.703246250038571,0.0,4.335842625990722,12.039088876029293 -78,|,4.322078687004633,2.167921312995367,2.16792131299536,3.8174463381628034,3.8174463381628034,3.8174463381628034,3.8174463381628034,0.9909942867793731,2.6725536618371897,0.0,18.70787563286033,0.0,0.0,18.70787563286033,|,3.362078687004648,2.167921312995359,2.167921312995361,3.8174463381628034,3.817446338162801,3.8174463381628034,3.8174463381628034,0.9467509293863909,1.7125536618372057,0.0,6.850214647348823,0.0,15.269785352651214,22.120000000000037,|,3.8516231250192856,6.838376874980714,4.670455561985353,3.817446338162801,3.817446338162803,3.817446338162801,3.817446338162801,0.9599954380760869,4.704632348841837,0.0,9.409264697683675,0.0,7.634892676325602,17.044157374009277 -79,|,2.6725536618371897,3.817446338162811,3.8174463381628034,4.945153979912191,4.945153979912191,4.945153979912191,4.945153979912191,0.9911099234404932,1.5448460200878023,0.0,10.813922140614615,0.0,0.0,10.813922140614615,|,1.7125536618372057,3.8174463381627994,3.817446338162801,4.945153979912191,4.945153979912193,4.945153979912191,4.945153979912191,0.9474346669852539,0.5848460200878156,0.0,2.3393840803512624,0.0,19.780615919648763,22.120000000000026,|,4.704632348841837,5.985367651158164,2.167921312995361,4.945153979912193,4.945153979912192,4.945153979912193,4.945153979912193,0.9605091113251826,1.9273996819250057,0.0,3.8547993638500113,0.0,9.890307959824385,13.745107323674397 -80,|,1.5448460200878023,4.945153979912199,4.945153979912191,6.248351830009002,6.2483518300090015,6.248351830009002,6.248351830009002,0.9912518550273627,0.2416481699909907,0.0,1.691537189936935,0.0,0.0,1.691537189936935,|,0.5848460200878156,4.94515397991219,4.945153979912193,6.2483518300090015,6.2483518300090015,5.530000000000008,5.530000000000008,0.9464384199617406,-0.7183518300089933,0.7183518300089933,0.0,0.0,22.120000000000033,22.120000000000033,|,1.9273996819250057,8.762600318074995,3.817446338162803,6.2483518300090015,6.248351830009,5.744846020087809,5.744846020087809,0.9598530818634545,-0.5035058099211929,0.5035058099211929,0.0,0.0,11.489692040175617,11.489692040175617 -81,|,0.2416481699909907,6.2483518300090095,5.530000000000008,7.5103429156680255,7.5103429156680255,5.771648169990999,5.771648169990999,0.987057673415724,-1.7386947456770265,1.7386947456770265,0.0,64.54034895953122,0.0,64.54034895953122,|,-0.7183518300089933,6.248351830008999,5.744846020087809,7.5103429156680255,7.510342915668027,5.744846020087809,5.026494190078815,0.9412199069336402,-2.48384872558921,2.48384872558921,0.0,0.0,22.979384080351235,22.979384080351235,|,-0.5035058099211929,11.193505809921191,4.945153979912192,7.510342915668027,7.510342915668026,4.945153979912192,4.441648169990999,0.9529157878782563,-3.0686947456770284,3.0686947456770284,0.0,0.0,9.890307959824383,9.890307959824383 -82,|,-1.7386947456770265,8.228694745677027,5.744846020087809,4.828663540788997,4.828663540788997,5.744846020087809,4.006151274410782,0.9851751028690449,-0.8225122663782152,0.8225122663782152,0.0,30.531655327959346,0.0,30.531655327959346,|,-2.48384872558921,8.013848725589217,4.945153979912192,4.828663540788997,4.828663540788997,4.945153979912192,2.4613052543229816,0.9360589901291039,-2.3673582864660156,2.3673582864660156,0.0,0.0,19.780615919648767,19.780615919648767,|,-3.0686947456770284,13.758694745677026,6.248351830009,4.828663540788997,4.828663540788998,6.248351830009,3.1796570843319714,0.9493943437272719,-1.649006456457026,1.649006456457026,0.0,0.0,12.496703660018,12.496703660018 -83,|,-0.8225122663782152,7.3125122663782145,4.945153979912192,4.541944862499509,4.54194486249951,4.945153979912192,4.122641713533977,0.9843129716850684,-0.41930314896553256,0.41930314896553256,0.0,15.564532889600567,0.0,15.564532889600567,|,-2.3673582864660156,7.897358286466023,6.248351830009,4.54194486249951,4.54194486249951,6.248351830009,3.880993543542984,0.9351513836945139,-0.6609513189565259,0.6609513189565259,0.0,0.0,24.993407320036,24.993407320036,|,-1.649006456457026,12.339006456457025,7.510342915668026,4.54194486249951,4.541944862499509,6.190951318956536,4.54194486249951,0.9499573451716249,1.3193915967114904,0.0,2.638783193422981,0.0,12.381902637913072,15.020685831336053 -84,|,-0.41930314896553256,6.909303148965533,6.248351830009,3.6612184810696204,3.6612184810696204,4.080521630035153,3.6612184810696204,0.9844524021051676,2.1678301999738467,0.0,15.174811399816928,0.0,0.0,15.174811399816928,|,-0.6609513189565259,6.190951318956532,6.190951318956536,3.6612184810696204,3.6612184810696213,4.322169800026146,3.6612184810696204,0.9357277751966393,1.8687815189303896,0.0,7.475126075721558,0.0,17.288679200104585,24.763805275826144,|,1.3193915967114904,9.370608403288507,4.828663540788998,3.6612184810696213,3.6612184810696213,3.6612184810696213,3.6612184810696213,0.9504021374066819,2.4868366564308673,0.0,4.9736733128617345,0.0,7.322436962139243,12.296110275000977 -85,|,2.1678301999738467,4.322169800026153,4.322169800026146,6.320062921969912,6.320062921969913,6.320062921969912,6.320062921969912,0.9846873454229623,0.16993707803008107,0.0,1.1895595462105675,0.0,0.0,1.1895595462105675,|,1.8687815189303896,3.661218481069618,3.6612184810696213,6.320062921969913,6.320062921969913,5.530000000000011,5.530000000000011,0.9348099722168174,-0.790062921969902,0.790062921969902,0.0,0.0,22.120000000000044,22.120000000000044,|,2.4868366564308673,8.20316334356913,4.541944862499509,6.320062921969913,6.320062921969914,6.320062921969913,6.320062921969913,0.9511516220841236,0.7087185969604635,0.0,1.417437193920927,0.0,12.640125843939826,14.057563037860753 -86,|,0.16993707803008107,6.32006292196992,5.530000000000011,3.5906707228903567,3.590670722890356,3.5906707228903567,3.5906707228903567,0.9848176896618437,2.1092663551397353,0.0,14.764864485978148,0.0,0.0,14.764864485978148,|,-0.790062921969902,6.32006292196991,6.320062921969913,3.590670722890356,3.5906707228903514,4.380733644860258,3.590670722890356,0.9353648821778111,1.939329277109655,0.0,7.75731710843862,0.0,17.52293457944103,25.28025168787965,|,0.7087185969604635,9.981281403039535,3.6612184810696213,3.5906707228903514,3.590670722890348,3.5906707228903514,3.5906707228903514,0.9515674288018944,0.7792663551397334,0.0,1.5585327102794668,0.0,7.181341445780703,8.73987415606017 -87,|,2.1092663551397353,4.380733644860265,4.380733644860258,3.9017027803925948,3.9017027803925948,3.9017027803925948,3.9017027803925948,0.9849568319891397,2.5882972196073983,0.0,18.11808053725179,0.0,0.0,18.11808053725179,|,1.939329277109655,3.5906707228903487,3.5906707228903514,3.9017027803925948,3.9017027803925988,3.9017027803925948,3.9017027803925948,0.9359572479323321,1.6282972196074117,0.0,6.513188878429647,0.0,15.606811121570379,22.120000000000026,|,0.7792663551397334,9.910733644860262,6.320062921969914,3.9017027803925988,3.901702780392604,3.9017027803925988,3.9017027803925988,0.9520113020019106,3.1976264967170485,0.0,6.395252993434097,0.0,7.8034055607851975,14.198658554219294 -88,|,2.5882972196073983,3.9017027803926014,3.9017027803925948,4.513248939187975,4.513248939187975,4.513248939187975,4.513248939187975,0.9851146352543166,1.9767510608120178,0.0,13.837257425684125,0.0,0.0,13.837257425684125,|,1.6282972196074117,3.901702780392596,3.9017027803925988,4.513248939187975,4.513248939187975,4.513248939187975,4.513248939187975,0.9366290582438235,1.0167510608120347,0.0,4.067004243248139,0.0,18.0529957567519,22.12000000000004,|,3.1976264967170485,7.492373503282952,3.590670722890348,4.513248939187975,4.513248939187971,4.513248939187975,4.513248939187975,0.9525147048243892,2.275048280419421,0.0,4.550096560838842,0.0,9.02649787837595,13.576594439214793 -89,|,1.9767510608120178,4.5132489391879815,4.513248939187975,3.9990294399655237,3.9990294399655246,3.9990294399655237,3.9990294399655237,0.985251718197132,2.4909705600344694,0.0,17.436793920241286,0.0,0.0,17.436793920241286,|,1.0167510608120347,4.513248939187973,4.513248939187975,3.9990294399655246,3.9990294399655255,3.9990294399655246,3.9990294399655246,0.9372126566529547,1.5309705600344854,0.0,6.123882240137942,0.0,15.996117759862098,22.12000000000004,|,2.275048280419421,8.414951719580575,3.901702780392604,3.9990294399655255,3.999029439965529,3.9990294399655255,3.9990294399655255,0.9529520084521029,2.1777216208464996,0.0,4.355443241692999,0.0,7.998058879931051,12.35350212162405 -90,|,2.4909705600344694,3.9990294399655317,3.9990294399655246,6.773876785213478,6.773876785213477,6.489999999999994,6.489999999999994,0.9848345580986414,-0.2838767852134838,0.2838767852134838,0.0,10.537506267124519,0.0,10.537506267124519,|,1.5309705600344854,3.999029439965523,3.9990294399655255,6.773876785213477,6.773876785213473,5.530000000000011,5.530000000000011,0.935356566522839,-1.243876785213466,1.243876785213466,0.0,0.0,22.120000000000044,22.120000000000044,|,2.1777216208464996,8.5122783791535,4.513248939187971,6.773876785213473,6.773876785213471,6.69097056003447,6.69097056003447,0.9534866642473073,-0.08290622517900292,0.08290622517900292,0.0,0.0,13.38194112006894,13.38194112006894 -91,|,-0.2838767852134838,6.773876785213484,5.530000000000011,5.555783050703722,5.555783050703722,5.530000000000011,5.246123214786527,0.9843298137584237,-0.3096598359171949,0.3096598359171949,0.0,11.494573109246275,0.0,11.494573109246275,|,-1.243876785213466,6.773876785213471,6.69097056003447,5.555783050703722,5.555783050703724,6.69097056003447,5.447093774821004,0.9359174088039075,-0.1086892758827176,0.1086892758827176,0.0,0.0,26.76388224013788,26.76388224013788,|,-0.08290622517900292,10.772906225179,3.999029439965529,5.555783050703724,5.555783050703727,3.999029439965529,3.916123214786526,0.9503936658451841,-1.6396598359171977,1.6396598359171977,0.0,0.0,7.998058879931058,7.998058879931058 -92,|,-0.3096598359171949,6.799659835917194,6.69097056003447,4.451288028292646,4.451288028292647,4.760947864209841,4.451288028292646,0.9844844681781013,1.9300226958246292,0.0,13.510158870772404,0.0,0.0,13.510158870772404,|,-0.1086892758827176,5.638689275882724,3.999029439965529,4.451288028292647,4.451288028292647,3.999029439965529,3.8903401640828115,0.9353061350198526,-0.5609478642098358,0.5609478642098358,0.0,0.0,15.996117759862116,15.996117759862116,|,-1.6396598359171977,12.329659835917198,6.773876785213471,4.451288028292647,4.451288028292648,6.090947864209845,4.451288028292647,0.9508832476984421,0.6829289210036258,0.0,1.3658578420072516,0.0,12.18189572841969,13.547753570426941 -93,|,1.9300226958246292,4.559977304175371,3.999029439965529,6.080015754404081,6.080015754404081,5.929052135790158,5.929052135790158,0.9843605812439267,-0.1509636186139227,0.1509636186139227,0.0,5.60376952294881,0.0,5.60376952294881,|,-0.5609478642098358,6.090947864209841,6.090947864209845,6.080015754404081,6.080015754404081,6.090947864209845,5.530000000000009,0.9349633754073126,-0.5500157544040718,0.5500157544040718,0.0,0.0,24.36379145683938,24.36379145683938,|,0.6829289210036258,10.007071078996375,5.555783050703727,6.080015754404081,6.0800157544040765,6.080015754404081,6.080015754404081,0.9515365608713897,0.1586962173032722,0.0,0.3173924346065444,0.0,12.160031508808162,12.477423943414706 -94,|,-0.1509636186139227,6.640963618613924,6.090947864209845,4.2475664152457515,4.247566415245751,4.398530033859674,4.2475664152457515,0.9845045707551132,1.6924178303501707,0.0,11.846924812451196,0.0,0.0,11.846924812451196,|,-0.5500157544040718,6.0800157544040765,6.080015754404081,4.247566415245751,4.247566415245751,4.797582169649822,4.247566415245751,0.9355621567258757,1.2824335847542585,0.0,5.129734339017034,0.0,19.19032867859929,24.320063017616324,|,0.1586962173032722,10.531303782696725,4.451288028292648,4.247566415245751,4.24756641524575,4.247566415245751,4.247566415245751,0.9519827556449543,0.3624178303501697,0.0,0.7248356607003394,0.0,8.495132830491501,9.21996849119184 -95,|,1.6924178303501707,4.797582169649829,4.797582169649822,6.15879496803651,6.158794968036511,6.15879496803651,6.15879496803651,0.9847087023177122,0.33120503196348317,0.0,2.318435223744382,0.0,0.0,2.318435223744382,|,1.2824335847542585,4.247566415245745,4.247566415245751,6.158794968036511,6.158794968036514,5.530000000000009,5.530000000000009,0.9350660466642299,-0.6287949680365017,0.6287949680365017,0.0,0.0,22.120000000000037,22.120000000000037,|,0.3624178303501697,10.327582169649826,6.0800157544040765,6.158794968036514,6.158794968036517,6.158794968036514,6.158794968036514,0.9526153186393038,0.28363861671773183,0.0,0.5672772334354637,0.0,12.317589936073029,12.884867169508492 -96,|,0.33120503196348317,6.158794968036516,5.530000000000009,5.750871329835308,5.7508713298353085,5.750871329835308,5.750871329835308,0.9848945165953525,0.11033370212818472,0.0,0.772335914897293,0.0,0.0,0.772335914897293,|,-0.6287949680365017,6.158794968036509,6.158794968036514,5.7508713298353085,5.750871329835307,6.158794968036514,5.530000000000013,0.9353883975755787,-0.22087132983529578,0.22087132983529578,0.0,0.0,24.635179872146058,24.635179872146058,|,0.28363861671773183,10.406361383282267,4.24756641524575,5.750871329835307,5.750871329835302,4.531205031963482,4.531205031963482,0.9506139556955073,-1.2196662978718251,1.2196662978718251,0.0,0.0,9.062410063926963,9.062410063926963 -97,|,0.11033370212818472,6.3796662978718155,6.158794968036514,3.737287306957098,3.737287306957098,3.737287306957098,3.737287306957098,0.9850128687270927,2.531841363207601,0.0,17.722889542453206,0.0,0.0,17.722889542453206,|,-0.22087132983529578,5.750871329835301,4.531205031963482,3.737287306957098,3.737287306957098,3.958158636792394,3.737287306957098,0.9358946323432608,0.5730463951710876,0.0,2.2921855806843503,0.0,15.832634547169576,18.124820127853926,|,-1.2196662978718251,11.90966629787182,6.158794968036517,3.737287306957098,3.7372873069571,4.956953604828923,3.737287306957098,0.951000897540735,1.2018413632075937,0.0,2.4036827264151874,0.0,9.913907209657847,12.317589936073034 -98,|,2.531841363207601,3.9581586367924,3.958158636792394,4.2092994654899965,4.209299465489996,4.2092994654899965,4.2092994654899965,0.9851439672035138,2.2807005345099984,0.0,15.964903741569989,0.0,0.0,15.964903741569989,|,0.5730463951710876,4.956953604828917,4.956953604828923,4.209299465489996,4.209299465489996,4.209299465489996,4.209299465489996,0.9364553878258931,1.3207005345100153,0.0,5.282802138040061,0.0,16.837197861959982,22.120000000000044,|,1.2018413632075937,9.488158636792402,5.750871329835302,4.209299465489996,4.209299465489995,4.209299465489996,4.209299465489996,0.9514295124345021,2.7434132275529004,0.0,5.486826455105801,0.0,8.418598930979991,13.905425386085792 -99,|,2.2807005345099984,4.209299465490002,4.209299465489996,4.829211151685497,4.829211151685497,4.829211151685497,4.829211151685497,0.9852915757998936,1.660788848314497,0.0,11.62552193820148,0.0,0.0,11.62552193820148,|,1.3207005345100153,4.209299465489989,4.209299465489996,4.829211151685497,4.829211151685497,4.829211151685497,4.829211151685497,0.9370867630482695,0.7007888483145139,0.0,2.8031553932580557,0.0,19.316844606741988,22.120000000000044,|,2.7434132275529004,7.946586772447095,3.7372873069571,4.829211151685497,4.829211151685499,4.829211151685497,4.829211151685497,0.9519121057077694,1.6514893828245034,0.0,3.302978765649007,0.0,9.658422303370994,12.96140106902 diff --git a/tests/temp_local.csv b/tests/temp_local.csv deleted file mode 100644 index e324a9c..0000000 --- a/tests/temp_local.csv +++ /dev/null @@ -1,103 +0,0 @@ -t,|i=0,IL,OO,IS,IO,OQ,OS,DMFS,FR,EIL,BO,HC,SC,ITHC,TC,|i=1,IL,OO,IS,IO,OQ,OS,DMFS,FR,EIL,BO,HC,SC,ITHC,TC,|i=2,IL,OO,IS,IO,OQ,OS,DMFS,FR,EIL,BO,HC,SC,ITHC,TC -Avg,|,1.335357154944097,5.166128558858139,4.860348313728585,4.860348313728585,4.8603483137285854,4.8603483137285854,4.788860248969992,0.9917288953085509,1.3238714411418604,0.07148806475859368,9.76751654130318,2.6536369638389976,0.0,12.421153505142177,|,0.47233439455520015,5.094072229662593,4.860348313728585,4.8603483137285854,4.8603483137285854,4.860348313728585,4.55456806859903,0.9576559977345569,0.43592777033740826,0.3057802451295542,2.966832061867849,0.0,19.44139325491434,22.408225316782186,|,1.0812456577496963,9.672404515940315,4.860348313728585,4.860348313728585,4.8603483137285854,4.8603483137285854,4.626624397794583,0.9695710134249544,1.0175954840596841,0.2337239159340024,2.502638799987373,0.0,9.720696627457171,12.223335427444542 -"" -0,|,6.49,0.0,0.0,4.72928767693268,4.72928767693268,4.72928767693268,4.72928767693268,1.0,1.7607123230673203,0.0,12.324986261471242,0.0,0.0,12.324986261471242,|,5.53,0.0,0.0,4.72928767693268,4.72928767693268,4.72928767693268,4.72928767693268,1.0,0.8007123230673203,0.0,3.2028492922692813,0.0,18.91715070773072,22.12,|,10.69,0.0,0.0,4.72928767693268,4.72928767693268,4.72928767693268,4.72928767693268,1.0,5.96071232306732,0.0,11.92142464613464,0.0,9.45857535386536,21.38 -1,|,1.7607123230673203,4.72928767693268,4.72928767693268,5.10484805260974,5.10484805260974,5.10484805260974,5.10484805260974,1.0,1.38515194739026,0.0,9.696063631731821,0.0,0.0,9.696063631731821,|,0.8007123230673203,4.72928767693268,4.72928767693268,5.10484805260974,5.10484805260974,5.10484805260974,5.10484805260974,1.0,0.4251519473902601,0.0,1.7006077895610403,0.0,20.41939221043896,22.12,|,5.96071232306732,4.72928767693268,0.0,5.10484805260974,5.10484805260974,5.10484805260974,5.10484805260974,1.0,0.8558642704575794,0.0,1.7117285409151588,0.0,10.20969610521948,11.92142464613464 -2,|,1.38515194739026,5.104848052609741,5.10484805260974,5.250527815723572,5.250527815723571,5.250527815723572,5.250527815723572,1.0,1.239472184276428,0.0,8.676305289934996,0.0,0.0,8.676305289934996,|,0.4251519473902601,5.104848052609741,5.10484805260974,5.250527815723571,5.25052781572357,5.250527815723571,5.250527815723571,1.0,0.27947218427642895,0.0,1.1178887371057158,0.0,21.002111262894285,22.12,|,0.8558642704575794,9.834135729542421,4.72928767693268,5.25052781572357,5.250527815723569,5.25052781572357,5.25052781572357,1.0,0.3346241316666889,0.0,0.6692482633333778,0.0,10.50105563144714,11.170303894780519 -3,|,1.239472184276428,5.250527815723571,5.250527815723571,4.074800034721923,4.074800034721924,4.074800034721923,4.074800034721923,1.0,2.4151999652780765,0.0,16.906399756946534,0.0,0.0,16.906399756946534,|,0.27947218427642895,5.250527815723571,5.25052781572357,4.074800034721924,4.074800034721924,4.074800034721924,4.074800034721924,1.0,1.4551999652780756,0.0,5.820799861112302,0.0,16.299200138887695,22.119999999999997,|,0.3346241316666889,10.35537586833331,5.10484805260974,4.074800034721924,4.0748000347219255,4.074800034721924,4.074800034721924,1.0,1.3646721495545053,0.0,2.7293442991090107,0.0,8.149600069443848,10.878944368552858 -4,|,2.4151999652780765,4.074800034721924,4.074800034721924,5.567143660285906,5.567143660285906,5.567143660285906,5.567143660285906,1.0,0.9228563397140945,0.0,6.459994377998662,0.0,0.0,6.459994377998662,|,1.4551999652780756,4.074800034721925,4.074800034721924,5.567143660285906,5.567143660285906,5.529999999999999,5.529999999999999,0.9984978262514961,-0.03714366028590632,0.03714366028590632,0.0,0.0,22.119999999999997,22.119999999999997,|,1.3646721495545053,9.325327850445497,5.250527815723569,5.567143660285906,5.567143660285904,5.567143660285906,5.567143660285906,1.0,1.0480563049921683,0.0,2.0961126099843366,0.0,11.134287320571811,13.230399930556148 -5,|,0.9228563397140945,5.567143660285905,5.529999999999999,3.959819783917062,3.959819783917063,3.959819783917062,3.959819783917062,1.0,2.493036555797032,0.0,17.451255890579223,0.0,0.0,17.451255890579223,|,-0.03714366028590632,5.567143660285907,5.567143660285906,3.959819783917063,3.959819783917063,3.996963444202969,3.959819783917063,0.9987051834564624,1.5701802160829366,0.0,6.280720864331746,0.0,15.987853776811876,22.268574641143623,|,1.0480563049921683,9.641943695007832,4.0748000347219255,3.959819783917063,3.9598197839170606,3.959819783917063,3.959819783917063,1.0,1.163036555797031,0.0,2.326073111594062,0.0,7.919639567834126,10.245712679428188 -6,|,2.493036555797032,3.9969634442029687,3.996963444202969,4.846324048542063,4.846324048542063,4.846324048542063,4.846324048542063,1.0,1.6436759514579382,0.0,11.505731660205567,0.0,0.0,11.505731660205567,|,1.5701802160829366,3.959819783917064,3.959819783917063,4.846324048542063,4.846324048542062,4.846324048542063,4.846324048542063,0.9988923169409709,0.6836759514579365,0.0,2.734703805831746,0.0,19.38529619416825,22.119999999999997,|,1.163036555797031,9.526963444202966,5.567143660285904,4.846324048542062,4.846324048542064,4.846324048542062,4.846324048542062,1.0,1.8838561675408734,0.0,3.7677123350817467,0.0,9.692648097084124,13.46036043216587 -7,|,1.6436759514579382,4.846324048542062,4.846324048542063,5.7898518103468195,5.7898518103468195,5.7898518103468195,5.7898518103468195,1.0,0.7001481896531816,0.0,4.901037327572271,0.0,0.0,4.901037327572271,|,0.6836759514579365,4.846324048542064,4.846324048542062,5.7898518103468195,5.7898518103468195,5.5299999999999985,5.5299999999999985,0.9924472072330561,-0.25985181034682103,0.25985181034682103,0.0,0.0,22.119999999999994,22.119999999999994,|,1.8838561675408734,8.806143832459126,3.9598197839170606,5.7898518103468195,5.7898518103468195,5.7898518103468195,5.7898518103468195,1.0,0.05382414111111444,0.0,0.10764828222222889,0.0,11.579703620693639,11.687351902915868 -8,|,0.7001481896531816,5.789851810346819,5.5299999999999985,3.773784153558146,3.773784153558146,3.773784153558146,3.773784153558146,1.0,2.4563640360950343,0.0,17.19454825266524,0.0,0.0,17.19454825266524,|,-0.25985181034682103,5.789851810346821,5.7898518103468195,3.773784153558146,3.773784153558146,4.033635963904967,3.773784153558146,0.9931085761230926,1.7562158464418527,0.0,7.024863385767411,0.0,16.134543855619867,23.159407241387278,|,0.05382414111111444,10.636175858888885,4.846324048542064,3.773784153558146,3.773784153558146,3.773784153558146,3.773784153558146,1.0,1.1263640360950324,0.0,2.252728072190065,0.0,7.547568307116292,9.800296379306356 -9,|,2.4563640360950343,4.033635963904966,4.033635963904967,4.051993012286541,4.051993012286541,4.051993012286541,4.051993012286541,1.0,2.43800698771346,0.0,17.06604891399422,0.0,0.0,17.06604891399422,|,1.7562158464418527,3.7737841535581484,3.773784153558146,4.051993012286541,4.05199301228654,4.051993012286541,4.051993012286541,0.9937008340408612,1.4780069877134574,0.0,5.91202795085383,0.0,16.207972049146164,22.119999999999994,|,1.1263640360950324,9.563635963904966,5.7898518103468195,4.05199301228654,4.051993012286542,4.05199301228654,4.05199301228654,1.0,2.8642228341553118,0.0,5.7284456683106235,0.0,8.10398602457308,13.832431692883704 -10,|,2.43800698771346,4.051993012286541,4.051993012286541,4.430346058069936,4.430346058069935,4.430346058069936,4.430346058069936,1.0,2.0596539419300655,0.0,14.417577593510458,0.0,0.0,14.417577593510458,|,1.4780069877134574,4.051993012286543,4.05199301228654,4.430346058069935,4.430346058069935,4.430346058069935,4.430346058069935,0.9942418998480762,1.0996539419300628,0.0,4.398615767720251,0.0,17.72138423227974,22.11999999999999,|,2.8642228341553118,7.8257771658446895,3.773784153558146,4.430346058069935,4.430346058069933,4.430346058069935,4.430346058069935,1.0,2.207660929643523,0.0,4.415321859287046,0.0,8.86069211613987,13.276013975426915 -11,|,2.0596539419300655,4.430346058069935,4.430346058069935,4.022849785302228,4.022849785302228,4.022849785302228,4.022849785302228,1.0,2.4671502146977726,0.0,17.270051502884407,0.0,0.0,17.270051502884407,|,1.0996539419300628,4.430346058069937,4.430346058069935,4.022849785302228,4.022849785302228,4.022849785302228,4.022849785302228,0.994658506240758,1.50715021469777,0.0,6.02860085879108,0.0,16.09139914120891,22.11999999999999,|,2.207660929643523,8.482339070356478,4.051993012286542,4.022849785302228,4.022849785302226,4.022849785302228,4.022849785302228,1.0,2.236804156627837,0.0,4.473608313255674,0.0,8.045699570604455,12.51930788386013 -12,|,2.4671502146977726,4.022849785302228,4.022849785302228,4.229368288816449,4.229368288816449,4.229368288816449,4.229368288816449,1.0,2.260631711183551,0.0,15.824421978284859,0.0,0.0,15.824421978284859,|,1.50715021469777,4.022849785302229,4.022849785302228,4.229368288816449,4.22936828881645,4.229368288816449,4.229368288816449,0.9950360891893383,1.3006317111835486,0.0,5.202526844734194,0.0,16.917473155265796,22.11999999999999,|,2.236804156627837,8.45319584337216,4.430346058069933,4.22936828881645,4.229368288816452,4.22936828881645,4.22936828881645,1.0,2.4377819258813203,0.0,4.8755638517626405,0.0,8.4587365776329,13.33430042939554 -13,|,2.260631711183551,4.229368288816449,4.229368288816449,4.966288708546514,4.966288708546514,4.966288708546514,4.966288708546514,1.0,1.5237112914534858,0.0,10.6659790401744,0.0,0.0,10.6659790401744,|,1.3006317111835486,4.2293682888164525,4.22936828881645,4.966288708546514,4.9662887085465135,4.966288708546514,4.966288708546514,0.9954165408399698,0.5637112914534841,0.0,2.2548451658139363,0.0,19.865154834186058,22.119999999999994,|,2.4377819258813203,8.25221807411868,4.022849785302226,4.9662887085465135,4.966288708546512,4.9662887085465135,4.9662887085465135,1.0,1.4943430026370326,0.0,2.988686005274065,0.0,9.932577417093027,12.921263422367092 -14,|,1.5237112914534858,4.966288708546514,4.966288708546514,3.9671407548338697,3.9671407548338697,3.9671407548338697,3.9671407548338697,1.0,2.5228592451661305,0.0,17.660014716162912,0.0,0.0,17.660014716162912,|,0.5637112914534841,4.966288708546517,4.9662887085465135,3.9671407548338697,3.967140754833869,3.9671407548338697,3.9671407548338697,0.9956809688666959,1.5628592451661278,0.0,6.251436980664511,0.0,15.868563019335479,22.11999999999999,|,1.4943430026370326,9.195656997362965,4.229368288816452,3.967140754833869,3.9671407548338706,3.967140754833869,3.967140754833869,1.0,1.7565705366196154,0.0,3.5131410732392307,0.0,7.934281509667738,11.447422582906968 -15,|,2.5228592451661305,3.9671407548338706,3.9671407548338697,6.142427376683153,6.142427376683152,6.142427376683153,6.142427376683153,1.0,0.34757262331684746,0.0,2.4330083632179322,0.0,0.0,2.4330083632179322,|,1.5628592451661278,3.9671407548338715,3.967140754833869,6.142427376683152,6.142427376683153,5.529999999999997,5.529999999999997,0.9878592753272325,-0.6124273766831552,0.6124273766831552,0.0,0.0,22.119999999999987,22.119999999999987,|,1.7565705366196154,8.933429463380385,4.966288708546512,6.142427376683153,6.142427376683151,6.142427376683153,6.142427376683153,1.0,0.5804318684829743,0.0,1.1608637369659487,0.0,12.284854753366306,13.445718490332254 -16,|,0.34757262331684746,6.142427376683153,5.529999999999997,4.390221992312528,4.390221992312528,4.390221992312528,4.390221992312528,1.0,1.4873506310043165,0.0,10.411454417030216,0.0,0.0,10.411454417030216,|,-0.6124273766831552,6.142427376683155,6.142427376683153,4.390221992312528,4.390221992312528,5.002649368995683,4.390221992312528,0.9885314377166318,1.13977800768747,0.0,4.55911203074988,0.0,20.01059747598273,24.56970950673261,|,0.5804318684829743,10.109568131517026,3.9671407548338706,4.390221992312528,4.390221992312526,4.390221992312528,4.390221992312528,1.0,0.15735063100431734,0.0,0.3147012620086347,0.0,8.780443984625055,9.09514524663369 -17,|,1.4873506310043165,5.002649368995685,5.002649368995683,6.46941638687667,6.469416386876669,6.46941638687667,6.46941638687667,1.0,0.020583613123329236,0.0,0.14408529186330465,0.0,0.0,0.14408529186330465,|,1.13977800768747,4.39022199231253,4.390221992312528,6.469416386876669,6.469416386876669,5.529999999999998,5.529999999999998,0.9784433253016136,-0.9394163868766716,0.9394163868766716,0.0,0.0,22.11999999999999,22.11999999999999,|,0.15735063100431734,10.532649368995681,6.142427376683151,6.469416386876669,6.469416386876671,6.299778007687468,6.299778007687468,0.9980220890551685,-0.16963837918920088,0.16963837918920088,0.0,0.0,12.599556015374937,12.599556015374937 -18,|,0.020583613123329236,6.469416386876671,5.529999999999998,6.4926788367383335,6.4926788367383335,5.550583613123327,5.550583613123327,0.9897885949744951,-0.9420952236150066,0.9420952236150066,0.0,34.97057470058905,0.0,34.97057470058905,|,-0.9394163868766716,6.469416386876672,6.299778007687468,6.4926788367383335,6.4926788367383335,6.299778007687468,5.360361620810797,0.9676871348102571,-1.1323172159275368,1.1323172159275368,0.0,0.0,25.199112030749873,25.199112030749873,|,-0.16963837918920088,10.8596383791892,4.390221992312526,6.4926788367383335,6.492678836738335,4.390221992312526,4.220583613123325,0.9735339590334149,-2.2720952236150085,2.2720952236150085,0.0,0.0,8.780443984625052,8.780443984625052 -19,|,-0.9420952236150066,7.432095223615008,6.299778007687468,5.707125227889218,5.707125227889217,6.299778007687468,5.357682784072462,0.9868165030958518,-0.3494424438167565,0.3494424438167565,0.0,12.971303514478,0.0,12.971303514478,|,-1.1323172159275368,6.662317215927537,4.390221992312526,5.707125227889217,5.707125227889217,4.390221992312526,3.257904776384989,0.9445688973103803,-2.449220451504228,2.449220451504228,0.0,0.0,17.560887969250103,17.560887969250103,|,-2.2720952236150085,12.962095223615009,6.469416386876671,5.707125227889217,5.7071252278892155,6.469416386876671,4.1973211632616625,0.9596642932537901,-1.5098040646275548,1.5098040646275548,0.0,0.0,12.938832773753342,12.938832773753342 -20,|,-0.3494424438167565,6.839442443816758,4.390221992312526,3.1415097433483887,3.141509743348388,3.490952187165145,3.1415097433483887,0.9872261263211889,0.8992698051473806,0.0,6.294888636031665,0.0,0.0,6.294888636031665,|,-2.449220451504228,7.979220451504229,6.469416386876671,3.141509743348388,3.141509743348387,5.5907301948526165,3.1415097433483883,0.9462911920272371,0.878686192024055,0.0,3.51474476809622,0.0,22.362920779410466,25.877665547506687,|,-1.5098040646275548,12.199804064627553,6.492678836738335,3.141509743348387,3.1415097433483883,4.651313807975942,3.1415097433483874,0.9609175603052985,1.8413650287623935,0.0,3.682730057524787,0.0,9.302627615951884,12.98535767347667 -21,|,0.8992698051473806,5.59073019485262,5.5907301948526165,3.6293762288718954,3.6293762288718954,3.6293762288718954,3.6293762288718954,0.9876687696677232,2.8606237711281013,0.0,20.02436639789671,0.0,0.0,20.02436639789671,|,0.878686192024055,4.651313807975945,4.651313807975942,3.6293762288718954,3.6293762288718963,3.6293762288718954,3.6293762288718954,0.9481523225736327,1.9006237711281022,0.0,7.602495084512409,0.0,14.517504915487581,22.11999999999999,|,1.8413650287623935,8.848634971237606,5.7071252278892155,3.6293762288718963,3.6293762288718963,3.6293762288718963,3.6293762288718963,0.9622718544162451,3.919114027779713,0.0,7.838228055559426,0.0,7.2587524577437925,15.096980513303219 -22,|,2.8606237711281013,3.6293762288719,3.6293762288718954,4.669893612079397,4.669893612079396,4.669893612079397,4.669893612079397,0.9881951118727554,1.8201063879205996,0.0,12.740744715444198,0.0,0.0,12.740744715444198,|,1.9006237711281022,3.629376228871898,3.6293762288718963,4.669893612079396,4.669893612079396,4.669893612079396,4.669893612079396,0.9503653718904527,0.8601063879206023,0.0,3.4404255516824094,0.0,18.679574448317585,22.119999999999994,|,3.919114027779713,6.770885972220287,3.1415097433483883,4.669893612079396,4.669893612079394,4.669893612079396,4.669893612079396,0.9638822302508732,2.3907301590487053,0.0,4.781460318097411,0.0,9.339787224158792,14.121247542256203 -23,|,1.8201063879205996,4.6698936120794015,4.669893612079396,3.4847100541277953,3.4847100541277944,3.4847100541277953,3.4847100541277953,0.9885595018171209,3.0052899458722004,0.0,21.037029621105404,0.0,0.0,21.037029621105404,|,0.8601063879206023,4.669893612079397,4.669893612079396,3.4847100541277944,3.4847100541277953,3.4847100541277944,3.4847100541277944,0.9518974795377663,2.045289945872204,0.0,8.181159783488816,0.0,13.938840216511178,22.119999999999994,|,2.3907301590487053,8.299269840951293,3.6293762288718963,3.4847100541277953,3.484710054127797,3.4847100541277953,3.4847100541277953,0.9649971033413781,2.5353963337928063,0.0,5.0707926675856125,0.0,6.969420108255591,12.040212775841203 -24,|,3.0052899458722004,3.4847100541277998,3.4847100541277944,6.200060185821551,6.200060185821551,6.200060185821551,6.200060185821551,0.9891551077386588,0.28993981417844417,0.0,2.029578699249109,0.0,0.0,2.029578699249109,|,2.045289945872204,3.484710054127796,3.4847100541277953,6.200060185821551,6.200060185821551,5.529999999999999,5.529999999999999,0.9487753360751774,-0.6700601858215514,0.6700601858215514,0.0,0.0,22.119999999999997,22.119999999999997,|,2.5353963337928063,8.154603666207194,4.669893612079394,6.200060185821551,6.200060185821549,6.200060185821551,6.200060185821551,0.9668193957090349,1.00522976005065,0.0,2.0104595201013,0.0,12.400120371643101,14.410579891744401 -25,|,0.28993981417844417,6.200060185821557,5.529999999999999,3.177380856579159,3.177380856579158,3.177380856579159,3.177380856579159,0.9894369314550908,2.6425589575992845,0.0,18.49791270319499,0.0,0.0,18.49791270319499,|,-0.6700601858215514,6.2000601858215525,6.200060185821551,3.177380856579158,3.1773808565791573,3.8474410424007095,3.177380856579158,0.9501064996139555,2.352619143420841,0.0,9.410476573683365,0.0,15.389764169602838,24.800240743286203,|,1.00522976005065,9.684770239949348,3.484710054127797,3.1773808565791573,3.177380856579159,3.1773808565791573,3.1773808565791573,0.9676816524276262,1.3125589575992898,0.0,2.6251179151985795,0.0,6.3547617131583145,8.979879628356894 -26,|,2.6425589575992845,3.8474410424007157,3.8474410424007095,5.269384541363552,5.269384541363552,5.269384541363552,5.269384541363552,0.9898733553152382,1.2206154586364422,0.0,8.544308210455096,0.0,0.0,8.544308210455096,|,2.352619143420841,3.177380856579159,3.1773808565791573,5.269384541363552,5.269384541363552,5.269384541363552,5.269384541363552,0.9521679000434019,0.26061545863644664,0.0,1.0424618345457866,0.0,21.077538165454207,22.119999999999994,|,1.3125589575992898,9.37744104240071,6.200060185821549,5.269384541363552,5.269384541363552,5.269384541363552,5.269384541363552,0.9690169176435204,2.243234602057287,0.0,4.486469204114574,0.0,10.538769082727104,15.025238286841677 -27,|,1.2206154586364422,5.269384541363558,5.269384541363552,4.5535756243528125,4.5535756243528125,4.5535756243528125,4.5535756243528125,0.9902224483375697,1.9364243756471815,0.0,13.55497062953027,0.0,0.0,13.55497062953027,|,0.26061545863644664,5.269384541363554,5.269384541363552,4.5535756243528125,4.5535756243528125,4.5535756243528125,4.5535756243528125,0.9538168028002479,0.976424375647186,0.0,3.905697502588744,0.0,18.21430249741125,22.119999999999994,|,2.243234602057287,8.446765397942713,3.177380856579159,4.5535756243528125,4.5535756243528125,4.5535756243528125,4.5535756243528125,0.9700849888751731,0.8670398342836334,0.0,1.7340796685672668,0.0,9.107151248705625,10.841230917272892 -28,|,1.9364243756471815,4.553575624352819,4.5535756243528125,6.114313600092155,6.114313600092155,6.114313600092155,6.114313600092155,0.9906550114922454,0.37568639990783925,0.0,2.6298047993548748,0.0,0.0,2.6298047993548748,|,0.976424375647186,4.553575624352815,4.5535756243528125,6.114313600092155,6.114313600092154,5.5299999999999985,5.5299999999999985,0.9516321359202263,-0.5843136000921563,0.5843136000921563,0.0,0.0,22.119999999999994,22.119999999999994,|,0.8670398342836334,9.822960165716367,5.269384541363552,6.114313600092154,6.114313600092152,6.114313600092154,6.114313600092154,0.971408442028997,0.02211077555503138,0.0,0.04422155111006276,0.0,12.228627200184308,12.27284875129437 -29,|,0.37568639990783925,6.114313600092161,5.5299999999999985,3.6191974018225004,3.6191974018225004,3.6191974018225004,3.6191974018225004,0.990893482877675,2.2864889980853373,0.0,16.00542298659736,0.0,0.0,16.00542298659736,|,-0.5843136000921563,6.114313600092157,6.114313600092154,3.6191974018225004,3.6191974018224995,4.203511001914657,3.6191974018225004,0.9528664179685987,1.9108025981774972,0.0,7.643210392709989,0.0,16.814044007658627,24.457254400368615,|,0.02211077555503138,10.667889224444968,4.5535756243528125,3.6191974018224995,3.6191974018224995,3.6191974018224995,3.6191974018224995,0.9721380596668651,0.9564889980853444,0.0,1.9129779961706888,0.0,7.238394803644999,9.151372799815688 -30,|,2.2864889980853373,4.203511001914662,4.203511001914657,6.015424517555433,6.0154245175554335,6.015424517555433,6.015424517555433,0.9912640129775301,0.4745754824445614,0.0,3.3220283771119297,0.0,0.0,3.3220283771119297,|,1.9108025981774972,3.619197401822503,3.6191974018224995,6.0154245175554335,6.0154245175554335,5.529999999999997,5.529999999999997,0.9515007892374598,-0.4854245175554368,0.4854245175554368,0.0,0.0,22.119999999999987,22.119999999999987,|,0.9564889980853444,9.733511001914653,6.114313600092152,6.0154245175554335,6.015424517555435,6.0154245175554335,6.0154245175554335,0.9732717189347408,1.055378080622063,0.0,2.110756161244126,0.0,12.030849035110867,14.141605196354993 -31,|,0.4745754824445614,6.015424517555439,5.529999999999997,5.224081283287703,5.224081283287703,5.224081283287703,5.224081283287703,0.9915621703697444,0.7804941991568555,0.0,5.463459394097988,0.0,0.0,5.463459394097988,|,-0.4854245175554368,6.015424517555437,6.0154245175554335,5.224081283287703,5.224081283287703,5.709505800843139,5.224081283287703,0.9531560570587397,0.3059187167122941,0.0,1.2236748668491764,0.0,22.838023203372558,24.061698070221734,|,1.055378080622063,9.634621919377935,3.6191974018224995,5.224081283287703,5.224081283287704,4.6745754824445624,4.6745754824445624,0.9705939370555097,-0.5495058008431402,0.5495058008431402,0.0,0.0,9.349150964889125,9.349150964889125 -32,|,0.7804941991568555,5.709505800843144,5.709505800843139,4.355448885729298,4.355448885729299,4.355448885729298,4.355448885729298,0.9917956247947756,2.134551114270697,0.0,14.94185779989488,0.0,0.0,14.94185779989488,|,0.3059187167122941,5.224081283287707,4.6745754824445624,4.355448885729299,4.355448885729298,4.355448885729299,4.355448885729299,0.9544521161455851,0.6250453134275578,0.0,2.500181253710231,0.0,17.421795542917195,19.921976796627426,|,-0.5495058008431402,11.23950580084314,6.015424517555435,4.355448885729298,4.355448885729296,4.904954686572438,4.355448885729298,0.9714075319985175,1.1104698309829972,0.0,2.2209396619659945,0.0,9.809909373144876,12.03084903511087 -33,|,2.134551114270697,4.355448885729302,4.355448885729299,5.661531660367694,5.661531660367695,5.661531660367694,5.661531660367694,0.9920804464947681,0.8284683396323018,0.0,5.799278377426113,0.0,0.0,5.799278377426113,|,0.6250453134275578,4.9049546865724425,4.904954686572438,5.661531660367695,5.661531660367695,5.529999999999996,5.529999999999996,0.9552268124587282,-0.13153166036769903,0.13153166036769903,0.0,0.0,22.119999999999983,22.119999999999983,|,1.1104698309829972,9.579530169017001,5.224081283287704,5.661531660367695,5.661531660367697,5.661531660367695,5.661531660367695,0.9724001432747518,0.6730194539030068,0.0,1.3460389078060135,0.0,11.32306332073539,12.669102228541403 -34,|,0.8284683396323018,5.661531660367698,5.529999999999996,6.292964845138368,6.292964845138368,6.292964845138368,6.292964845138368,0.9923746897030428,0.06550349449392989,0.0,0.45852446145750925,0.0,0.0,0.45852446145750925,|,-0.13153166036769903,5.6615316603677,5.661531660367695,6.292964845138368,6.292964845138367,5.661531660367695,5.529999999999996,0.9523857292070317,-0.7629648451383719,0.7629648451383719,0.0,0.0,22.64612664147078,22.64612664147078,|,0.6730194539030068,10.016980546096994,4.355448885729296,6.292964845138367,6.292964845138365,5.028468339632303,5.028468339632303,0.9659599309890714,-1.264496505506064,1.264496505506064,0.0,0.0,10.056936679264606,10.056936679264606 -35,|,0.06550349449392989,6.42449650550607,5.661531660367695,4.104687954691534,4.104687954691534,4.104687954691534,4.104687954691534,0.992555111412835,1.6223472001700907,0.0,11.356430401190636,0.0,0.0,11.356430401190636,|,-0.7629648451383719,6.292964845138373,5.028468339632303,4.104687954691534,4.104687954691533,4.867652799829906,4.104687954691534,0.9535123257404746,0.16081553980239693,0.0,0.6432621592095877,0.0,19.470611199319624,20.11387335852921,|,-1.264496505506064,11.954496505506064,5.661531660367697,4.104687954691533,4.104687954691531,5.369184460197597,4.104687954691533,0.9667653496819801,0.2923472001700995,0.0,0.584694400340199,0.0,10.738368920395194,11.323063320735393 -36,|,1.6223472001700907,4.86765279982991,4.867652799829906,4.431689346880682,4.431689346880681,4.431689346880682,4.431689346880682,0.9927405600111431,2.0583106531193147,0.0,14.408174571835204,0.0,0.0,14.408174571835204,|,0.16081553980239693,5.369184460197603,5.369184460197597,4.431689346880681,4.431689346880681,4.431689346880681,4.431689346880681,0.9546703113743892,1.098310653119313,0.0,4.393242612477252,0.0,17.726757387522724,22.119999999999976,|,0.2923472001700995,10.397652799829899,6.292964845138365,4.431689346880681,4.431689346880683,4.431689346880681,4.431689346880681,0.9675932088560397,2.1536226984277835,0.0,4.307245396855567,0.0,8.863378693761362,13.17062409061693 -37,|,2.0583106531193147,4.4316893468806855,4.431689346880681,2.8883816420774937,2.8883816420774937,2.8883816420774937,2.8883816420774937,0.9928565337387961,3.601618357922502,0.0,25.211328505457516,0.0,0.0,25.211328505457516,|,1.098310653119313,4.431689346880687,4.431689346880681,2.8883816420774937,2.8883816420774937,2.8883816420774937,2.8883816420774937,0.9553944792125881,2.6416183579225003,0.0,10.566473431690001,0.0,11.553526568309975,22.119999999999976,|,2.1536226984277835,8.536377301572216,4.104687954691531,2.8883816420774937,2.888381642077494,2.8883816420774937,2.8883816420774937,0.9681109259769207,3.369929011041821,0.0,6.739858022083642,0.0,5.776763284154987,12.51662130623863 -38,|,3.601618357922502,2.8883816420774977,2.8883816420774937,4.181692281275389,4.181692281275389,4.181692281275389,4.181692281275389,0.9930180189144395,2.308307718724607,0.0,16.15815403107225,0.0,0.0,16.15815403107225,|,2.6416183579225003,2.8883816420774995,2.8883816420774937,4.181692281275389,4.18169228127539,4.181692281275389,4.181692281275389,0.9564028314740298,1.3483077187246053,0.0,5.393230874898421,0.0,16.726769125101555,22.119999999999976,|,3.369929011041821,7.320070988958179,4.431689346880683,4.18169228127539,4.18169228127539,4.18169228127539,4.18169228127539,0.9688318102831416,3.619926076647114,0.0,7.239852153294228,0.0,8.36338456255078,15.603236715845007 -39,|,2.308307718724607,4.181692281275392,4.181692281275389,4.037616387669554,4.037616387669555,4.037616387669554,4.037616387669554,0.9931671602006205,2.4523836123304417,0.0,17.16668528631309,0.0,0.0,17.16668528631309,|,1.3483077187246053,4.181692281275396,4.18169228127539,4.037616387669555,4.037616387669554,4.037616387669555,4.037616387669555,0.9573341055219163,1.49238361233044,0.0,5.96953444932176,0.0,16.15046555067822,22.11999999999998,|,3.619926076647114,7.070073923352885,2.888381642077494,4.037616387669554,4.037616387669556,4.037616387669554,4.037616387669554,0.9694975903597912,2.470691331055054,0.0,4.941382662110108,0.0,8.075232775339108,13.016615437449216 -40,|,2.4523836123304417,4.0376163876695585,4.037616387669555,5.124501672999136,5.124501672999136,5.124501672999136,5.124501672999136,0.9933475158091363,1.3654983270008607,0.0,9.558488289006025,0.0,0.0,9.558488289006025,|,1.49238361233044,4.037616387669561,4.037616387669554,5.124501672999136,5.124501672999135,5.124501672999136,5.124501672999136,0.9584602893030971,0.4054983270008581,0.0,1.6219933080034323,0.0,20.498006691996544,22.119999999999976,|,2.470691331055054,8.219308668944947,4.18169228127539,5.124501672999135,5.124501672999133,5.124501672999135,5.124501672999135,0.9703027139706739,1.5278819393313086,0.0,3.055763878662617,0.0,10.24900334599827,13.304767224660887 -41,|,1.3654983270008607,5.1245016729991395,5.124501672999136,5.1085086947130725,5.1085086947130725,5.1085086947130725,5.1085086947130725,0.9935180749180552,1.3814913052869242,0.0,9.670439137008469,0.0,0.0,9.670439137008469,|,0.4054983270008581,5.124501672999142,5.124501672999135,5.1085086947130725,5.1085086947130725,5.1085086947130725,5.1085086947130725,0.9595253013854926,0.4214913052869207,0.0,1.6859652211476828,0.0,20.43403477885229,22.119999999999973,|,1.5278819393313086,9.162118060668693,4.037616387669556,5.1085086947130725,5.108508694713071,5.1085086947130725,5.1085086947130725,0.9710641051287964,0.456989632287792,0.0,0.913979264575584,0.0,10.217017389426145,11.130996654001729 -42,|,1.3814913052869242,5.108508694713075,5.1085086947130725,4.5606987369844205,4.560698736984421,4.5606987369844205,4.5606987369844205,0.9936631202582588,1.9293012630155761,0.0,13.505108841109033,0.0,0.0,13.505108841109033,|,0.4214913052869207,5.10850869471308,5.1085086947130725,4.560698736984421,4.560698736984421,4.560698736984421,4.560698736984421,0.960430999361936,0.9693012630155717,0.0,3.877205052062287,0.0,18.242794947937686,22.119999999999973,|,0.456989632287792,10.233010367712208,5.124501672999133,4.560698736984421,4.560698736984421,4.560698736984421,4.560698736984421,0.9717116005352732,1.0207925683025039,0.0,2.0415851366050077,0.0,9.121397473968843,11.16298261057385 -43,|,1.9293012630155761,4.560698736984425,4.560698736984421,4.2864396267789875,4.286439626778987,4.2864396267789875,4.2864396267789875,0.9937936476111038,2.20356037322101,0.0,15.424922612547071,0.0,0.0,15.424922612547071,|,0.9693012630155717,4.5606987369844285,4.560698736984421,4.286439626778987,4.286439626778987,4.286439626778987,4.286439626778987,0.9612460435348574,1.2435603732210065,0.0,4.974241492884026,0.0,17.145758507115946,22.119999999999973,|,1.0207925683025039,9.669207431697494,5.108508694713071,4.286439626778987,4.286439626778988,4.286439626778987,4.286439626778987,0.9722942863441946,1.842861636236588,0.0,3.685723272473176,0.0,8.572879253557973,12.258602526031149 -44,|,2.20356037322101,4.28643962677899,4.286439626778987,5.934180959229707,5.934180959229707,5.934180959229707,5.934180959229707,0.993965721698748,0.5558190407702899,0.0,3.890733285392029,0.0,0.0,3.890733285392029,|,1.2435603732210065,4.286439626778994,4.286439626778987,5.934180959229707,5.934180959229707,5.529999999999993,5.529999999999993,0.9604321149969481,-0.40418095922971364,0.40418095922971364,0.0,0.0,22.119999999999973,22.119999999999973,|,1.842861636236588,8.847138363763413,4.560698736984421,5.934180959229707,5.934180959229705,5.934180959229707,5.934180959229707,0.9730624405032113,0.46937941399130256,0.0,0.9387588279826051,0.0,11.868361918459414,12.807120746442019 -45,|,0.5558190407702899,5.9341809592297095,5.529999999999993,5.0586555323165925,5.058655532316593,5.0586555323165925,5.0586555323165925,0.9941050481666472,1.0271635084536905,0.0,7.190144559175834,0.0,0.0,7.190144559175834,|,-0.40418095922971364,5.934180959229713,5.934180959229707,5.058655532316593,5.058655532316594,5.462836491546307,5.058655532316593,0.961345704557207,0.47134446768339977,0.0,1.885377870733599,0.0,21.851345966185228,23.736723836918827,|,0.46937941399130256,10.220620586008696,4.286439626778988,5.058655532316594,5.058655532316596,4.755819040770291,4.755819040770291,0.9723021729278022,-0.3028364915463033,0.3028364915463033,0.0,0.0,9.511638081540582,9.511638081540582 -46,|,1.0271635084536905,5.46283649154631,5.462836491546307,6.609714279427906,6.609714279427906,6.4899999999999975,6.4899999999999975,0.9937472738407153,-0.11971427942790847,0.11971427942790847,0.0,4.443794052363962,0.0,4.443794052363962,|,0.47134446768339977,5.0586555323166,4.755819040770291,6.609714279427906,6.609714279427907,5.227163508453691,5.227163508453691,0.9563521395757523,-1.3825507709742153,1.3825507709742153,0.0,0.0,20.908654033814763,20.908654033814763,|,-0.3028364915463033,10.992836491546303,5.934180959229705,6.609714279427907,6.609714279427907,5.934180959229705,5.631344467683402,0.968778519751534,-0.9783698117445052,0.9783698117445052,0.0,0.0,11.86836191845941,11.86836191845941 -47,|,-0.11971427942790847,6.609714279427909,5.227163508453691,5.859906743830658,5.859906743830658,5.227163508453691,5.107449229025782,0.9906560160675074,-0.7524575148048758,0.7524575148048758,0.0,27.931222949556986,0.0,27.931222949556986,|,-1.3825507709742153,6.9125507709742156,5.934180959229705,5.859906743830658,5.859906743830658,5.934180959229705,4.55163018825549,0.9518068980954119,-1.3082765555751683,1.3082765555751683,0.0,0.0,23.73672383691882,23.73672383691882,|,-0.9783698117445052,11.668369811744506,5.058655532316596,5.859906743830658,5.859906743830656,5.058655532316596,4.080285720572091,0.9618833139579112,-1.7796210232585672,1.7796210232585672,0.0,0.0,10.117311064633192,10.117311064633192 -48,|,-0.7524575148048758,7.242457514804876,5.934180959229705,4.0147969631261775,4.0147969631261775,4.767254477931053,4.0147969631261775,0.9908152602518558,1.1669264812986517,0.0,8.168485369090561,0.0,0.0,8.168485369090561,|,-1.3082765555751683,6.838276555575169,5.058655532316596,4.0147969631261775,4.0147969631261775,5.058655532316596,3.7503789767414277,0.9515057965553935,-0.2644179863847498,0.2644179863847498,0.0,0.0,20.234622129266384,20.234622129266384,|,-1.7796210232585672,12.469621023258565,6.609714279427907,4.0147969631261775,4.014796963126179,5.794417986384745,4.0147969631261775,0.9625329148800328,0.8152962930431622,0.0,1.6305925860863244,0.0,11.58883597276949,13.219428558855814 -49,|,1.1669264812986517,5.323073518701348,5.058655532316596,4.0416316792218865,4.041631679221887,4.0416316792218865,4.0416316792218865,0.9909701789320119,2.1839503343933613,0.0,15.287652340753528,0.0,0.0,15.287652340753528,|,-0.2644179863847498,5.794417986384751,5.794417986384745,4.041631679221887,4.0416316792218865,4.306049665606637,4.041631679221887,0.9523237465680084,1.4883683207781075,0.0,5.95347328311243,0.0,17.22419866242655,23.17767194553898,|,0.8152962930431622,9.874703706956838,5.859906743830656,4.0416316792218865,4.041631679221885,4.0416316792218865,4.0416316792218865,0.9631648708782694,2.633571357651932,0.0,5.267142715303864,0.0,8.083263358443773,13.350406073747637 -50,|,2.1839503343933613,4.30604966560664,4.306049665606637,5.449108650870278,5.4491086508702775,5.449108650870278,5.449108650870278,0.9911709583691701,1.04089134912972,0.0,7.28623944390804,0.0,0.0,7.28623944390804,|,1.4883683207781075,4.041631679221893,4.0416316792218865,5.4491086508702775,5.4491086508702775,5.4491086508702775,5.4491086508702775,0.9533838352738438,0.08089134912971652,0.0,0.32356539651886607,0.0,21.79643460348111,22.119999999999976,|,2.633571357651932,8.056428642348067,4.014796963126179,5.4491086508702775,5.449108650870279,5.4491086508702775,5.4491086508702775,0.9639839055454048,1.1992596699078337,0.0,2.3985193398156675,0.0,10.898217301740555,13.296736641556222 -51,|,1.04089134912972,5.44910865087028,5.4491086508702775,4.057537439958953,4.057537439958953,4.057537439958953,4.057537439958953,0.9913147584263745,2.4324625600410448,0.0,17.027237920287313,0.0,0.0,17.027237920287313,|,0.08089134912971652,5.449108650870283,5.4491086508702775,4.057537439958953,4.057537439958954,4.057537439958953,4.057537439958953,0.9541430804370855,1.4724625600410413,0.0,5.889850240164165,0.0,16.23014975983581,22.119999999999976,|,1.1992596699078337,9.490740330092166,4.041631679221885,4.057537439958954,4.057537439958954,4.057537439958954,4.057537439958954,0.9645705056158771,1.1833539091707648,0.0,2.3667078183415295,0.0,8.115074879917907,10.481782698259437 -52,|,2.4324625600410448,4.0575374399589546,4.057537439958953,5.158909447337027,5.158909447337028,5.158909447337027,5.158909447337027,0.9914909646291135,1.3310905526629702,0.0,9.31763386864079,0.0,0.0,9.31763386864079,|,1.4724625600410413,4.057537439958958,4.057537439958954,5.158909447337028,5.158909447337029,5.158909447337028,5.158909447337028,0.9550734257357157,0.37109055266296664,0.0,1.4843622106518666,0.0,20.635637789348113,22.11999999999998,|,1.1833539091707648,9.506646090829234,5.449108650870279,5.158909447337029,5.158909447337031,5.158909447337029,5.158909447337029,0.9652892992864351,1.473553112704015,0.0,2.94710622540803,0.0,10.317818894674058,13.264925120082088 -53,|,1.3310905526629702,5.158909447337031,5.158909447337028,5.388075616902475,5.388075616902474,5.388075616902475,5.388075616902475,0.991667523349313,1.1019243830975238,0.0,7.713470681682667,0.0,0.0,7.713470681682667,|,0.37109055266296664,5.158909447337034,5.158909447337029,5.388075616902474,5.388075616902474,5.388075616902474,5.388075616902474,0.9560056322796197,0.1419243830975221,0.0,0.5676975323900884,0.0,21.552302467609895,22.119999999999983,|,1.473553112704015,9.216446887295985,4.057537439958954,5.388075616902474,5.388075616902472,5.388075616902474,5.388075616902474,0.9660095309728827,0.14301493576049484,0.0,0.2860298715209897,0.0,10.776151233804947,11.062181105325937 -54,|,1.1019243830975238,5.3880756169024755,5.388075616902474,5.437337763404014,5.437337763404015,5.437337763404014,5.437337763404014,0.9918384208339607,1.0526622365959835,0.0,7.368635656171884,0.0,0.0,7.368635656171884,|,0.1419243830975221,5.388075616902478,5.388075616902474,5.437337763404015,5.437337763404015,5.437337763404015,5.437337763404015,0.9569079482532814,0.09266223659598083,0.0,0.3706489463839233,0.0,21.74935105361606,22.119999999999983,|,0.14301493576049484,10.546985064239504,5.158909447337031,5.437337763404015,5.437337763404017,5.301924383097526,5.301924383097526,0.9661958854506141,-0.1354133803064892,0.1354133803064892,0.0,0.0,10.603848766195052,10.603848766195052 -55,|,1.0526622365959835,5.437337763404016,5.437337763404015,5.418229551174271,5.418229551174272,5.418229551174271,5.418229551174271,0.9920018841646039,1.0717704488257276,0.0,7.502393141780093,0.0,0.0,7.502393141780093,|,0.09266223659598083,5.437337763404019,5.301924383097526,5.418229551174272,5.418229551174272,5.394586619693507,5.394586619693507,0.9576836171824602,-0.023642931480765128,0.023642931480765128,0.0,0.0,21.578346478774026,21.578346478774026,|,-0.1354133803064892,10.82541338030649,5.388075616902472,5.418229551174272,5.41822955117427,5.388075616902472,5.252662236595983,0.9662609107973571,-0.165567314578289,0.165567314578289,0.0,0.0,10.776151233804944,10.776151233804944 -56,|,1.0717704488257276,5.418229551174273,5.394586619693507,4.267815007053072,4.267815007053072,4.267815007053072,4.267815007053072,0.9921261020448281,2.1985420614661626,0.0,15.389794430263137,0.0,0.0,15.389794430263137,|,-0.023642931480765128,5.553642931480765,5.388075616902472,4.267815007053072,4.267815007053072,4.291457938533837,4.267815007053072,0.958340828390766,1.0966176783686352,0.0,4.386470713474541,0.0,17.165831754135347,21.552302467609888,|,-0.165567314578289,10.855567314578288,5.437337763404017,4.267815007053072,4.267815007053073,4.433382321631361,4.267815007053072,0.9667849089773909,1.0039554417726562,0.0,2.0079108835453123,0.0,8.866764643262721,10.874675526808034 -57,|,2.1985420614661626,4.291457938533838,4.291457938533837,3.571717033763198,3.571717033763198,3.571717033763198,3.571717033763198,0.992227131773817,2.9182829662368013,0.0,20.427980763657608,0.0,0.0,20.427980763657608,|,1.0966176783686352,4.433382321631364,4.433382321631361,3.571717033763198,3.571717033763199,3.571717033763198,3.571717033763198,0.9588753558689661,1.9582829662367978,0.0,7.833131864947191,0.0,14.286868135052792,22.119999999999983,|,1.0039554417726562,9.686044558227344,5.41822955117427,3.571717033763199,3.571717033763197,3.571717033763199,3.571717033763199,0.9672110907317725,2.850467959183727,0.0,5.700935918367454,0.0,7.143434067526398,12.844369985893852 -58,|,2.9182829662368013,3.571717033763199,3.571717033763198,2.9907826459947087,2.9907826459947087,2.9907826459947087,2.9907826459947087,0.9923097559863248,3.4992173540052907,0.0,24.494521478037036,0.0,0.0,24.494521478037036,|,1.9582829662367978,3.5717170337632025,3.571717033763199,2.9907826459947087,2.9907826459947087,2.9907826459947087,2.9907826459947087,0.9593125035520496,2.539217354005288,0.0,10.156869416021152,0.0,11.963130583978835,22.119999999999987,|,2.850467959183727,7.8395320408162705,4.267815007053073,2.9907826459947087,2.9907826459947104,2.9907826459947087,2.9907826459947087,0.9675596310296962,4.127500320242092,0.0,8.255000640484184,0.0,5.981565291989417,14.236565932473601 -59,|,3.4992173540052907,2.9907826459947096,2.9907826459947087,4.766560417147497,4.766560417147497,4.766560417147497,4.766560417147497,0.9924378681956918,1.7234395828525022,0.0,12.064077079967515,0.0,0.0,12.064077079967515,|,2.539217354005288,2.990782645994712,2.9907826459947087,4.766560417147497,4.766560417147497,4.766560417147497,4.766560417147497,0.9599903188533961,0.7634395828524996,0.0,3.0537583314099983,0.0,19.06624166858999,22.119999999999987,|,4.127500320242092,6.562499679757908,3.571717033763197,4.766560417147497,4.766560417147497,4.766560417147497,4.766560417147497,0.9681000569685969,2.932656936857792,0.0,5.865313873715584,0.0,9.533120834294994,15.398434708010578 -60,|,1.7234395828525022,4.766560417147498,4.766560417147497,6.8039523690390284,6.8039523690390284,6.489999999999999,6.489999999999999,0.9915417442920308,-0.3139523690390291,0.3139523690390291,0.0,11.65391193872876,0.0,11.65391193872876,|,0.7634395828524996,4.766560417147501,4.766560417147497,6.8039523690390284,6.8039523690390284,5.529999999999997,5.529999999999997,0.956570612867774,-1.2739523690390318,1.2739523690390318,0.0,0.0,22.119999999999987,22.119999999999987,|,2.932656936857792,7.757343063142208,2.9907826459947104,6.8039523690390284,6.8039523690390284,5.923439582852502,5.923439582852502,0.9658351093236902,-0.8805127861865261,0.8805127861865261,0.0,0.0,11.846879165705005,11.846879165705005 -61,|,-0.3139523690390291,6.803952369039029,5.529999999999997,3.051329339977242,3.051329339977242,3.365281709016271,3.051329339977242,0.9916289426252695,2.1647182909837257,0.0,15.15302803688608,0.0,0.0,15.15302803688608,|,-1.2739523690390318,6.803952369039033,5.923439582852502,3.051329339977242,3.051329339977241,4.325281709016274,3.051329339977242,0.9570183375881248,1.5981578738362288,0.0,6.392631495344915,0.0,17.301126836065094,23.69375833141001,|,-0.8805127861865261,11.570512786186526,4.766560417147497,3.051329339977241,3.051329339977239,3.931842126163767,3.051329339977241,0.9661873239675971,0.8347182909837301,0.0,1.6694365819674601,0.0,7.863684252327534,9.533120834294994 -62,|,2.1647182909837257,4.3252817090162745,4.325281709016274,6.367851011658045,6.367851011658045,6.367851011658045,6.367851011658045,0.9918052485741141,0.1221489883419542,0.0,0.8550429183936794,0.0,0.0,0.8550429183936794,|,1.5981578738362288,3.9318421261637724,3.931842126163767,6.367851011658045,6.367851011658044,5.529999999999996,5.529999999999996,0.9551524370402958,-0.8378510116580493,0.8378510116580493,0.0,0.0,22.119999999999983,22.119999999999983,|,0.8347182909837301,9.85528170901627,6.8039523690390284,6.367851011658044,6.367851011658044,6.367851011658044,6.367851011658044,0.9668994652974207,1.2708196483647143,0.0,2.5416392967294286,0.0,12.735702023316088,15.277341320045517 -63,|,0.1221489883419542,6.367851011658047,5.529999999999996,3.141260578815811,3.1412605788158103,3.141260578815811,3.141260578815811,0.9918895130738561,2.510888409526139,0.0,17.57621886668297,0.0,0.0,17.57621886668297,|,-0.8378510116580493,6.367851011658049,6.367851011658044,3.1412605788158103,3.141260578815811,3.9791115904738596,3.1412605788158103,0.9556135928778636,2.3887394211841846,0.0,9.554957684736738,0.0,15.916446361895439,25.471404046632177,|,1.2708196483647143,9.419180351635287,3.051329339977239,3.141260578815811,3.1412605788158094,3.141260578815811,3.141260578815811,0.9672398294955472,1.1808884095261423,0.0,2.3617768190522845,0.0,6.282521157631622,8.644297976683907 -64,|,2.510888409526139,3.9791115904738614,3.9791115904738596,3.7660492723050285,3.7660492723050285,3.7660492723050285,3.7660492723050285,0.9919882811504276,2.72395072769497,0.0,19.06765509386479,0.0,0.0,19.06765509386479,|,2.3887394211841846,3.1412605788158166,3.141260578815811,3.7660492723050285,3.7660492723050276,3.7660492723050285,3.7660492723050285,0.9561541227002152,1.7639507276949673,0.0,7.055802910779869,0.0,15.064197089220114,22.119999999999983,|,1.1808884095261423,9.509111590473857,6.367851011658044,3.7660492723050276,3.766049272305027,3.7660492723050276,3.7660492723050276,0.9676387770628565,3.782690148879159,0.0,7.565380297758318,0.0,7.532098544610055,15.097478842368373 -65,|,2.72395072769497,3.7660492723050307,3.7660492723050285,4.492430236462758,4.492430236462758,4.492430236462758,4.492430236462758,0.9921029980125087,1.99756976353724,0.0,13.982988344760681,0.0,0.0,13.982988344760681,|,1.7639507276949673,3.7660492723050334,3.7660492723050276,4.492430236462758,4.4924302364627575,4.492430236462758,4.492430236462758,0.9567819357267905,1.0375697635372365,0.0,4.150279054148946,0.0,17.969720945851034,22.11999999999998,|,3.782690148879159,6.90730985112084,3.1412605788158094,4.4924302364627575,4.4924302364627575,4.4924302364627575,4.4924302364627575,0.9681021455382307,2.4315204912322113,0.0,4.8630409824644225,0.0,8.984860472925515,13.847901455389938 -66,|,1.99756976353724,4.492430236462759,4.492430236462758,6.407171498157144,6.407171498157145,6.407171498157144,6.407171498157144,0.9922610388177902,0.08282850184285451,0.0,0.5797995128999816,0.0,0.0,0.5797995128999816,|,1.0375697635372365,4.492430236462765,4.4924302364627575,6.407171498157145,6.407171498157144,5.529999999999994,5.529999999999994,0.9549070088028702,-0.8771714981571508,0.8771714981571508,0.0,0.0,22.119999999999976,22.119999999999976,|,2.4315204912322113,8.258479508767788,3.766049272305027,6.407171498157144,6.407171498157144,6.197569763537238,6.197569763537238,0.9680858199402786,-0.2096017346199055,0.2096017346199055,0.0,0.0,12.395139527074477,12.395139527074477 -67,|,0.08282850184285451,6.407171498157145,5.529999999999994,4.058902947289716,4.058902947289717,4.058902947289716,4.058902947289716,0.9923579247262905,1.5539255545531327,0.0,10.87747888187193,0.0,0.0,10.87747888187193,|,-0.8771714981571508,6.407171498157151,6.197569763537238,4.058902947289717,4.058902947289717,4.9360744454468675,4.058902947289717,0.9554715387593161,1.261495318090371,0.0,5.045981272361484,0.0,19.74429778178747,24.790279054148954,|,-0.2096017346199055,10.899601734619905,4.4924302364627575,4.058902947289717,4.058902947289717,4.268504681909622,4.058902947289717,0.9684853612038059,0.22392555455313534,0.0,0.4478511091062707,0.0,8.537009363819244,8.984860472925515 -68,|,1.5539255545531327,4.936074445446867,4.9360744454468675,5.873504732822984,5.873504732822985,5.873504732822984,5.873504732822984,0.992493906460629,0.6164952671770161,0.0,4.315466870239113,0.0,0.0,4.315466870239113,|,1.261495318090371,4.268504681909629,4.268504681909622,5.873504732822985,5.873504732822985,5.529999999999993,5.529999999999993,0.9552232203663602,-0.3435047328229919,0.3435047328229919,0.0,0.0,22.119999999999973,22.119999999999973,|,0.22392555455313534,10.466074445446864,6.407171498157144,5.873504732822985,5.873504732822985,5.873504732822985,5.873504732822985,0.9690461271066623,0.7575923198872943,0.0,1.5151846397745885,0.0,11.74700946564597,13.262194105420559 -69,|,0.6164952671770161,5.873504732822984,5.529999999999993,6.135100193751177,6.135100193751177,6.135100193751177,6.135100193751177,0.992630871501374,0.011395073425831903,0.0,0.07976551398082332,0.0,0.0,0.07976551398082332,|,-0.3435047328229919,5.873504732822992,5.873504732822985,6.135100193751177,6.135100193751177,5.873504732822985,5.529999999999993,0.954240565047716,-0.6051001937511842,0.6051001937511842,0.0,0.0,23.49401893129194,23.49401893129194,|,0.7575923198872943,9.932407680112707,4.058902947289717,6.135100193751177,6.1351001937511755,4.816495267177011,4.816495267177011,0.9656891177400264,-1.3186049265741664,1.3186049265741664,0.0,0.0,9.632990534354022,9.632990534354022 -70,|,0.011395073425831903,6.478604926574168,5.873504732822985,6.165984400987113,6.165984400987113,5.884899806248817,5.884899806248817,0.9919426266016976,-0.28108459473829583,0.28108459473829583,0.0,10.43386015668554,0.0,10.43386015668554,|,-0.6051001937511842,6.1351001937511835,4.816495267177011,6.165984400987113,6.165984400987114,4.816495267177011,4.211395073425827,0.9493559362125287,-1.954589327561286,1.954589327561286,0.0,0.0,19.265981068708044,19.265981068708044,|,-1.3186049265741664,12.008604926574165,5.873504732822985,6.165984400987114,6.165984400987115,5.873504732822985,4.554899806248819,0.9616015766755064,-1.611084594738295,1.611084594738295,0.0,0.0,11.74700946564597,11.74700946564597 -71,|,-0.28108459473829583,6.771084594738296,4.816495267177011,5.049214492333626,5.049214492333626,4.816495267177011,4.535410672438715,0.9905808822245838,-0.5138038198949113,0.5138038198949113,0.0,19.072397794499107,0.0,19.072397794499107,|,-1.954589327561286,7.484589327561286,5.873504732822985,5.049214492333626,5.049214492333626,5.873504732822985,3.918915405261699,0.946838684777873,-1.1302990870719274,1.1302990870719274,0.0,0.0,23.49401893129194,23.49401893129194,|,-1.611084594738295,12.301084594738294,6.1351001937511755,5.049214492333626,5.049214492333628,6.1351001937511755,4.5240155990128805,0.9606479735899646,-0.5251988933207459,0.5251988933207459,0.0,0.0,12.270200387502351,12.270200387502351 -72,|,-0.5138038198949113,7.003803819894912,5.873504732822985,5.510946742685257,5.510946742685256,5.873504732822985,5.359700912928074,0.9902994311845846,-0.15124582975718326,0.15124582975718326,0.0,5.614245200586642,0.0,5.614245200586642,|,-1.1302990870719274,6.6602990870719285,6.1351001937511755,5.510946742685256,5.510946742685255,6.1351001937511755,5.004801106679248,0.9462346964370244,-0.5061456360060079,0.5061456360060079,0.0,0.0,24.540400775004702,24.540400775004702,|,-0.5251988933207459,11.215198893320746,6.165984400987115,5.510946742685255,5.510946742685253,6.036145636006001,5.510946742685255,0.9612624180405693,0.12983876498111435,0.0,0.2596775299622287,0.0,12.072291272012002,12.33196880197423 -73,|,-0.15124582975718326,6.6412458297571835,6.1351001937511755,5.6312993903486825,5.6312993903486825,5.782545220105866,5.6312993903486825,0.9904517735307797,0.35255497364530974,0.0,2.467884815517168,0.0,0.0,2.467884815517168,|,-0.5061456360060079,6.036145636006007,6.036145636006001,5.6312993903486825,5.631299390348683,6.036145636006001,5.529999999999993,0.9467965502523525,-0.1012993903486894,0.1012993903486894,0.0,0.0,24.144582544024004,24.144582544024004,|,0.12983876498111435,10.560161235018883,5.049214492333628,5.631299390348683,5.631299390348685,5.1790532573147425,5.1790532573147425,0.960609554835451,-0.4522461330339409,0.4522461330339409,0.0,0.0,10.358106514629485,10.358106514629485 -74,|,0.35255497364530974,6.13744502635469,6.036145636006001,5.887702065835798,5.887702065835799,5.887702065835798,5.887702065835798,0.9906060182691222,0.5009985438155127,0.0,3.5069898067085887,0.0,0.0,3.5069898067085887,|,-0.1012993903486894,5.6312993903486905,5.1790532573147425,5.887702065835799,5.887702065835798,5.1790532573147425,5.077753866966053,0.9454337322846342,-0.8099481988697459,0.8099481988697459,0.0,0.0,20.71621302925897,20.71621302925897,|,-0.4522461330339409,11.14224613303394,5.510946742685253,5.887702065835798,5.8877020658358,5.510946742685253,5.0587006096513125,0.9589713206553286,-0.8290014561844856,0.8290014561844856,0.0,0.0,11.021893485370507,11.021893485370507 -75,|,0.5009985438155127,5.9890014561844875,5.1790532573147425,5.057651636667991,5.057651636667991,5.057651636667991,5.057651636667991,0.9907345928864977,0.6224001644622641,0.0,4.356801151235849,0.0,0.0,4.356801151235849,|,-0.8099481988697459,6.339948198869746,5.510946742685253,5.057651636667991,5.057651636667991,5.510946742685253,4.7009985438155075,0.9452154087562232,-0.3566530928524836,0.3566530928524836,0.0,0.0,22.043786970741014,22.043786970741014,|,-0.8290014561844856,11.519001456184487,5.631299390348685,5.057651636667991,5.057651636667989,5.631299390348685,4.8022979341642,0.958841843667262,-0.2553537025037915,0.2553537025037915,0.0,0.0,11.26259878069737,11.26259878069737 -76,|,0.6224001644622641,5.867599835537736,5.510946742685253,4.670455561985353,4.670455561985353,4.670455561985353,4.670455561985353,0.9908502375718768,1.4628913451621646,0.0,10.240239416135152,0.0,0.0,10.240239416135152,|,-0.3566530928524836,5.886653092852483,5.631299390348685,4.670455561985353,4.670455561985354,5.0271086548378365,4.670455561985353,0.945899193801003,0.6041907355108487,0.0,2.4167629420433947,0.0,20.108434619351346,22.52519756139474,|,-0.2553537025037915,10.94535370250379,5.8877020658358,4.670455561985354,4.670455561985356,4.925809264489145,4.670455561985354,0.9593555525611699,0.9618928013466546,0.0,1.9237856026933091,0.0,9.85161852897829,11.7754041316716 -77,|,1.4628913451621646,5.027108654837835,5.0271086548378365,2.16792131299536,2.167921312995361,2.16792131299536,2.16792131299536,0.9909029419157086,4.322078687004641,0.0,30.254550809032487,0.0,0.0,30.254550809032487,|,0.6041907355108487,4.925809264489152,4.925809264489145,2.167921312995361,2.167921312995361,2.167921312995361,2.167921312995361,0.9462108245688932,3.362078687004633,0.0,13.448314748018532,0.0,8.671685251981444,22.119999999999976,|,0.9618928013466546,9.728107198653344,5.057651636667989,2.167921312995361,2.1679213129953627,2.167921312995361,2.167921312995361,0.9595896721844385,3.851623125019283,0.0,7.703246250038566,0.0,4.335842625990722,12.039088876029288 -78,|,4.322078687004641,2.167921312995359,2.167921312995361,3.8174463381628034,3.8174463381628034,3.8174463381628034,3.8174463381628034,0.9909942867793731,2.6725536618371986,0.0,18.70787563286039,0.0,0.0,18.70787563286039,|,3.362078687004633,2.167921312995367,2.167921312995361,3.8174463381628034,3.8174463381628034,3.8174463381628034,3.8174463381628034,0.9467509293863903,1.7125536618371906,0.0,6.850214647348762,0.0,15.269785352651214,22.119999999999976,|,3.851623125019283,6.8383768749807174,4.670455561985356,3.8174463381628034,3.817446338162801,3.8174463381628034,3.8174463381628034,0.9599954380760866,4.704632348841836,0.0,9.409264697683671,0.0,7.634892676325607,17.044157374009277 -79,|,2.6725536618371986,3.817446338162801,3.8174463381628034,4.945153979912191,4.945153979912191,4.945153979912191,4.945153979912191,0.991109923440493,1.5448460200878111,0.0,10.813922140614679,0.0,0.0,10.813922140614679,|,1.7125536618371906,3.81744633816281,3.8174463381628034,4.945153979912191,4.94515397991219,4.945153979912191,4.945153979912191,0.9474346669852534,0.5848460200878032,0.0,2.3393840803512127,0.0,19.780615919648763,22.119999999999976,|,4.704632348841836,5.985367651158163,2.1679213129953627,4.94515397991219,4.945153979912192,4.94515397991219,4.94515397991219,0.9605091113251824,1.9273996819250083,0.0,3.8547993638500166,0.0,9.89030795982438,13.745107323674397 -80,|,1.5448460200878111,4.945153979912188,4.945153979912191,6.248351830009002,6.248351830009003,6.248351830009002,6.248351830009002,0.9912518550273626,0.24164816999099958,0.0,1.691537189936997,0.0,0.0,1.691537189936997,|,0.5848460200878032,4.945153979912197,4.94515397991219,6.248351830009003,6.248351830009003,5.529999999999993,5.529999999999993,0.9464384199617399,-0.7183518300090102,0.7183518300090102,0.0,0.0,22.119999999999973,22.119999999999973,|,1.9273996819250083,8.762600318074993,3.817446338162801,6.248351830009003,6.2483518300090015,5.7448460200878095,5.7448460200878095,0.9598530818634542,-0.5035058099211938,0.5035058099211938,0.0,0.0,11.489692040175619,11.489692040175619 -81,|,0.24164816999099958,6.248351830009001,5.529999999999993,7.5103429156680255,7.5103429156680255,5.771648169990993,5.771648169990993,0.9870576734157238,-1.7386947456770327,1.7386947456770327,0.0,64.54034895953146,0.0,64.54034895953146,|,-0.7183518300090102,6.24835183000901,5.7448460200878095,7.5103429156680255,7.5103429156680255,5.7448460200878095,5.026494190078799,0.9412199069336393,-2.483848725589226,2.483848725589226,0.0,0.0,22.979384080351238,22.979384080351238,|,-0.5035058099211938,11.193505809921193,4.945153979912192,7.5103429156680255,7.5103429156680255,4.945153979912192,4.441648169990998,0.9529157878782559,-3.0686947456770275,3.0686947456770275,0.0,0.0,9.890307959824383,9.890307959824383 -82,|,-1.7386947456770327,8.228694745677032,5.7448460200878095,4.828663540788997,4.828663540788998,5.7448460200878095,4.006151274410777,0.9851751028690447,-0.8225122663782205,0.8225122663782205,0.0,30.531655327959545,0.0,30.531655327959545,|,-2.483848725589226,8.013848725589227,4.945153979912192,4.828663540788998,4.828663540788997,4.945153979912192,2.4613052543229657,0.9360589901291029,-2.3673582864660325,2.3673582864660325,0.0,0.0,19.780615919648767,19.780615919648767,|,-3.0686947456770275,13.758694745677026,6.2483518300090015,4.828663540788997,4.828663540788999,6.2483518300090015,3.179657084331974,0.9493943437272716,-1.6490064564570233,1.6490064564570233,0.0,0.0,12.496703660018003,12.496703660018003 -83,|,-0.8225122663782205,7.312512266378221,4.945153979912192,4.541944862499509,4.541944862499509,4.945153979912192,4.122641713533971,0.9843129716850681,-0.4193031489655379,0.4193031489655379,0.0,15.564532889600764,0.0,15.564532889600764,|,-2.3673582864660325,7.897358286466034,6.2483518300090015,4.541944862499509,4.541944862499508,6.2483518300090015,3.880993543542969,0.9351513836945129,-0.6609513189565401,0.6609513189565401,0.0,0.0,24.993407320036006,24.993407320036006,|,-1.6490064564570233,12.339006456457023,7.5103429156680255,4.541944862499508,4.541944862499508,6.1909513189565315,4.541944862499508,0.9499573451716247,1.319391596711494,0.0,2.638783193422988,0.0,12.381902637913063,15.020685831336051 -84,|,-0.4193031489655379,6.909303148965538,6.2483518300090015,3.6612184810696204,3.6612184810696204,4.080521630035158,3.6612184810696204,0.9844524021051674,2.167830199973843,0.0,15.174811399816903,0.0,0.0,15.174811399816903,|,-0.6609513189565401,6.190951318956541,6.1909513189565315,3.6612184810696204,3.6612184810696196,4.322169800026161,3.6612184810696204,0.9357277751966383,1.868781518930371,0.0,7.475126075721484,0.0,17.288679200104642,24.763805275826126,|,1.319391596711494,9.370608403288504,4.828663540788999,3.6612184810696196,3.6612184810696213,3.6612184810696196,3.6612184810696196,0.9504021374066817,2.4868366564308735,0.0,4.973673312861747,0.0,7.322436962139239,12.296110275000986 -85,|,2.167830199973843,4.322169800026158,4.322169800026161,6.320062921969912,6.320062921969911,6.320062921969912,6.320062921969912,0.9846873454229622,0.16993707803009173,0.0,1.189559546210642,0.0,0.0,1.189559546210642,|,1.868781518930371,3.6612184810696293,3.6612184810696196,6.320062921969911,6.320062921969911,5.5299999999999905,5.5299999999999905,0.9348099722168163,-0.7900629219699207,0.7900629219699207,0.0,0.0,22.119999999999962,22.119999999999962,|,2.4868366564308735,8.203163343569127,4.541944862499508,6.320062921969911,6.320062921969909,6.320062921969911,6.320062921969911,0.9511516220841234,0.7087185969604706,0.0,1.4174371939209411,0.0,12.640125843939822,14.057563037860763 -86,|,0.16993707803009173,6.320062921969909,5.5299999999999905,3.5906707228903567,3.590670722890356,3.5906707228903567,3.5906707228903567,0.9848176896618436,2.1092663551397255,0.0,14.764864485978078,0.0,0.0,14.764864485978078,|,-0.7900629219699207,6.320062921969921,6.320062921969911,3.590670722890356,3.590670722890356,4.3807336448602765,3.590670722890356,0.9353648821778101,1.9393292771096347,0.0,7.757317108438539,0.0,17.522934579441106,25.280251687879645,|,0.7087185969604706,9.981281403039528,3.6612184810696213,3.590670722890356,3.5906707228903576,3.590670722890356,3.590670722890356,0.9515674288018942,0.7792663551397361,0.0,1.5585327102794722,0.0,7.181341445780712,8.739874156060184 -87,|,2.1092663551397255,4.380733644860275,4.3807336448602765,3.9017027803925948,3.9017027803925948,3.9017027803925948,3.9017027803925948,0.9849568319891397,2.588297219607407,0.0,18.11808053725185,0.0,0.0,18.11808053725185,|,1.9393292771096347,3.5906707228903647,3.590670722890356,3.9017027803925948,3.9017027803925957,3.9017027803925948,3.9017027803925948,0.9359572479323314,1.6282972196073957,0.0,6.513188878429583,0.0,15.606811121570379,22.119999999999962,|,0.7792663551397361,9.910733644860265,6.320062921969909,3.9017027803925957,3.9017027803925934,3.9017027803925957,3.9017027803925957,0.9520113020019102,3.19762649671705,0.0,6.3952529934341,0.0,7.803405560785191,14.198658554219291 -88,|,2.588297219607407,3.9017027803925934,3.9017027803925948,4.513248939187975,4.513248939187975,4.513248939187975,4.513248939187975,0.9851146352543166,1.9767510608120267,0.0,13.837257425684186,0.0,0.0,13.837257425684186,|,1.6282972196073957,3.901702780392605,3.9017027803925957,4.513248939187975,4.513248939187974,4.513248939187975,4.513248939187975,0.9366290582438227,1.016751060812016,0.0,4.067004243248064,0.0,18.0529957567519,22.119999999999965,|,3.19762649671705,7.492373503282949,3.5906707228903576,4.513248939187974,4.513248939187974,4.513248939187974,4.513248939187974,0.9525147048243888,2.2750482804194334,0.0,4.550096560838867,0.0,9.026497878375949,13.576594439214816 -89,|,1.9767510608120267,4.513248939187973,4.513248939187975,3.9990294399655237,3.9990294399655246,3.9990294399655237,3.9990294399655237,0.985251718197132,2.4909705600344783,0.0,17.43679392024135,0.0,0.0,17.43679392024135,|,1.016751060812016,4.513248939187983,4.513248939187974,3.9990294399655246,3.9990294399655255,3.9990294399655246,3.9990294399655246,0.9372126566529538,1.5309705600344659,0.0,6.123882240137863,0.0,15.996117759862098,22.119999999999962,|,2.2750482804194334,8.414951719580564,3.9017027803925934,3.9990294399655255,3.9990294399655273,3.9990294399655255,3.9990294399655255,0.9529520084521026,2.1777216208465013,0.0,4.355443241693003,0.0,7.998058879931051,12.353502121624054 -90,|,2.4909705600344783,3.999029439965521,3.9990294399655246,6.773876785213478,6.773876785213479,6.490000000000003,6.490000000000003,0.9848345580986414,-0.2838767852134749,0.2838767852134749,0.0,10.537506267124188,0.0,10.537506267124188,|,1.5309705600344659,3.9990294399655344,3.9990294399655255,6.773876785213479,6.773876785213479,5.529999999999991,5.529999999999991,0.9353565665228382,-1.2438767852134873,1.2438767852134873,0.0,0.0,22.119999999999965,22.119999999999965,|,2.1777216208465013,8.512278379153498,4.513248939187974,6.773876785213479,6.773876785213479,6.690970560034476,6.690970560034476,0.953486664247307,-0.08290622517900292,0.08290622517900292,0.0,0.0,13.381941120068952,13.381941120068952 -91,|,-0.2838767852134749,6.773876785213475,5.529999999999991,5.555783050703722,5.555783050703722,5.529999999999991,5.246123214786516,0.9843298137584237,-0.3096598359172056,0.3096598359172056,0.0,11.494573109246671,0.0,11.494573109246671,|,-1.2438767852134873,6.7738767852134885,6.690970560034476,5.555783050703722,5.555783050703721,6.690970560034476,5.447093774820988,0.9359174088039066,-0.10868927588273358,0.10868927588273358,0.0,0.0,26.763882240137903,26.763882240137903,|,-0.08290622517900292,10.772906225179003,3.9990294399655273,5.555783050703721,5.555783050703719,3.9990294399655273,3.9161232147865244,0.9503936658451838,-1.6396598359171968,1.6396598359171968,0.0,0.0,7.998058879931055,7.998058879931055 -92,|,-0.3096598359172056,6.799659835917207,6.690970560034476,4.451288028292646,4.4512880282926455,4.760947864209852,4.451288028292646,0.9844844681781013,1.9300226958246238,0.0,13.510158870772367,0.0,0.0,13.510158870772367,|,-0.10868927588273358,5.638689275882733,3.9990294399655273,4.4512880282926455,4.451288028292646,3.9990294399655273,3.8903401640827937,0.9353061350198516,-0.5609478642098518,0.5609478642098518,0.0,0.0,15.99611775986211,15.99611775986211,|,-1.6396598359171968,12.329659835917196,6.773876785213479,4.451288028292646,4.451288028292646,6.090947864209843,4.451288028292646,0.9508832476984418,0.6829289210036356,0.0,1.3658578420072711,0.0,12.181895728419686,13.547753570426957 -93,|,1.9300226958246238,4.559977304175376,3.9990294399655273,6.080015754404081,6.080015754404081,5.929052135790151,5.929052135790151,0.9843605812439267,-0.15096361861392982,0.15096361861392982,0.0,5.603769522949074,0.0,5.603769522949074,|,-0.5609478642098518,6.090947864209852,6.090947864209843,6.080015754404081,6.080015754404081,6.090947864209843,5.529999999999991,0.9349633754073114,-0.5500157544040896,0.5500157544040896,0.0,0.0,24.363791456839373,24.363791456839373,|,0.6829289210036356,10.007071078996365,5.555783050703719,6.080015754404081,6.080015754404079,6.080015754404081,6.080015754404081,0.9515365608713894,0.158696217303274,0.0,0.317392434606548,0.0,12.160031508808162,12.47742394341471 -94,|,-0.15096361861392982,6.640963618613929,6.090947864209843,4.2475664152457515,4.247566415245752,4.398530033859681,4.2475664152457515,0.9845045707551132,1.6924178303501618,0.0,11.846924812451132,0.0,0.0,11.846924812451132,|,-0.5500157544040896,6.080015754404089,6.080015754404081,4.247566415245752,4.247566415245753,4.797582169649842,4.247566415245752,0.9355621567258746,1.282433584754239,0.0,5.129734339016956,0.0,19.190328678599368,24.320063017616324,|,0.158696217303274,10.531303782696725,4.451288028292646,4.247566415245753,4.247566415245755,4.247566415245753,4.247566415245753,0.9519827556449538,0.36241783035016706,0.0,0.7248356607003341,0.0,8.495132830491507,9.21996849119184 -95,|,1.6924178303501618,4.7975821696498375,4.797582169649842,6.15879496803651,6.158794968036511,6.15879496803651,6.15879496803651,0.984708702317712,0.3312050319634938,0.0,2.3184352237444568,0.0,0.0,2.3184352237444568,|,1.282433584754239,4.247566415245761,4.247566415245753,6.158794968036511,6.158794968036511,5.529999999999992,5.529999999999992,0.9350660466642289,-0.6287949680365186,0.6287949680365186,0.0,0.0,22.11999999999997,22.11999999999997,|,0.36241783035016706,10.327582169649833,6.080015754404079,6.158794968036511,6.158794968036509,6.158794968036511,6.158794968036511,0.9526153186393034,0.2836386167177354,0.0,0.5672772334354708,0.0,12.317589936073022,12.884867169508492 -96,|,0.3312050319634938,6.158794968036507,5.529999999999992,5.750871329835308,5.750871329835307,5.750871329835308,5.750871329835308,0.9848945165953523,0.1103337021281785,0.0,0.7723359148972495,0.0,0.0,0.7723359148972495,|,-0.6287949680365186,6.158794968036519,6.158794968036511,5.750871329835307,5.750871329835307,6.158794968036511,5.529999999999992,0.9353883975755776,-0.22087132983531443,0.22087132983531443,0.0,0.0,24.635179872146043,24.635179872146043,|,0.2836386167177354,10.406361383282263,4.247566415245755,5.750871329835307,5.7508713298353085,4.5312050319634904,4.5312050319634904,0.950613955695507,-1.2196662978718162,1.2196662978718162,0.0,0.0,9.062410063926981,9.062410063926981 -97,|,0.1103337021281785,6.379666297871822,6.158794968036511,3.737287306957098,3.737287306957098,3.737287306957098,3.737287306957098,0.9850128687270925,2.531841363207591,0.0,17.72288954245314,0.0,0.0,17.72288954245314,|,-0.22087132983531443,5.750871329835316,4.5312050319634904,3.737287306957098,3.7372873069570973,3.9581586367924126,3.737287306957098,0.9358946323432596,0.5730463951710778,0.0,2.292185580684311,0.0,15.83263454716965,18.124820127853962,|,-1.2196662978718162,11.909666297871818,6.158794968036509,3.7372873069570973,3.7372873069570955,4.956953604828914,3.7372873069570973,0.9510008975407346,1.2018413632075955,0.0,2.403682726415191,0.0,9.913907209657827,12.317589936073018 -98,|,2.531841363207591,3.958158636792409,3.9581586367924126,4.2092994654899965,4.2092994654899965,4.2092994654899965,4.2092994654899965,0.9851439672035136,2.2807005345100073,0.0,15.964903741570051,0.0,0.0,15.964903741570051,|,0.5730463951710778,4.956953604828922,4.956953604828914,4.2092994654899965,4.2092994654899965,4.2092994654899965,4.2092994654899965,0.9364553878258921,1.320700534509995,0.0,5.28280213803998,0.0,16.837197861959986,22.119999999999965,|,1.2018413632075955,9.488158636792402,5.7508713298353085,4.2092994654899965,4.209299465489998,4.2092994654899965,4.2092994654899965,0.9514295124345018,2.7434132275529075,0.0,5.486826455105815,0.0,8.418598930979993,13.905425386085808 -99,|,2.2807005345100073,4.209299465489994,4.2092994654899965,4.829211151685497,4.829211151685496,4.829211151685497,4.829211151685497,0.9852915757998933,1.6607888483145068,0.0,11.625521938201548,0.0,0.0,11.625521938201548,|,1.320700534509995,4.209299465490006,4.2092994654899965,4.829211151685496,4.829211151685495,4.829211151685496,4.829211151685496,0.9370867630482685,0.7007888483144953,0.0,2.803155393257981,0.0,19.316844606741984,22.119999999999965,|,2.7434132275529075,7.946586772447092,3.7372873069570955,4.829211151685495,4.829211151685495,4.829211151685495,4.829211151685495,0.9519121057077691,1.6514893828245079,0.0,3.3029787656490157,0.0,9.65842230337099,12.961401069020006 diff --git a/tests/test_instances.py b/tests/test_instances.py index 4e344e3..f400608 100644 --- a/tests/test_instances.py +++ b/tests/test_instances.py @@ -434,9 +434,9 @@ def test_omit_state_vars_false_rosling(self): temp_filename = 'tests/additional_files/temp_TestSaveInstance_omit_state_vars_false_rosling.json' try: instances.save_instance( - instance_name='test_omit_state_vars_rosling_false', + instance_name='test_omit_state_vars_false_rosling', instance_data=instance, - instance_description='this is test_omit_state_vars_rosling_false', + instance_description='this is test_omit_state_vars_false_rosling', filepath=temp_filename, omit_state_vars=False ) diff --git a/tests/test_sim.py b/tests/test_sim.py index 364db82..52b7c7d 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -458,9 +458,6 @@ def test_assembly_3_stage_as_multiproduct(self): """ print_status('TestMultiproductSimulation', 'test_assembly_3_stage_as_multiproduct()') - orig_network = load_instance("assembly_3_stage") - rms = {n.index: SupplyChainProduct.from_node(n) for n in orig_network.source_nodes} - network = serial_system( num_nodes=2, node_order_in_system=[1, 0], @@ -476,7 +473,7 @@ def test_assembly_3_stage_as_multiproduct(self): # initial_inventory_level=[7, 13, 11] ) # Add supplier nodes for products 1 and 2. (Can't be external supplier because prod 1 and 2 - # need separate RMs to match oroginal system.) + # need separate RMs to match original system.) network.add_predecessor(network.get_node_from_index(1), SupplyChainNode(index=11, supply_type='U')) network.add_predecessor(network.get_node_from_index(1), SupplyChainNode(index=12, supply_type='U')) network.get_node_from_index(1).supply_type = None @@ -507,7 +504,7 @@ def test_assembly_3_stage_as_multiproduct(self): nodes[12].inventory_policy = Policy(type='BS', base_stock_level=100, node=nodes[12]) total_cost = simulation(network, 100, rand_seed=17, progress_bar=False, consistency_checks='E') - write_results(network=network, num_periods=100, columns_to_print=['basic', 'costs'], write_txt=True, txt_filename='temp.txt') +# write_results(network=network, num_periods=100, columns_to_print=['basic', 'costs'], write_txt=True, txt_filename='temp.txt') # Compare total cost. self.assertEqual(total_cost, 1884) @@ -531,66 +528,142 @@ def test_assembly_3_stage_as_multiproduct(self): self.assertEqual(nodes[1].state_vars[95].inbound_shipment[12][12], 4) self.assertEqual(nodes[1].state_vars[78].backorders_by_successor[0][2], 2) - def test_rosling_figure_1(self): + def test_rosling_figure_1_as_multiproduct_LBS(self): """Test that simulation() function correctly simulates model in Rosling (1989), - Figure 1. + Figure 1 in which predecessor products are interpreted as separate RMs at a single node, + with each stage following a local base-stock policy instead of BEBS. """ - print_status('TestSimulation', 'test_rosling_figure_1()') + print_status('TestSimulation', 'test_rosling_figure_1_as_multiproduct_LBS()') + + # First simulate the original system, except with BEBS policy replaced with local BS policy. + orig_network = load_instance("rosling_figure_1") + orig_nodes = {n.index: n for n in orig_network.nodes} + orig_nodes[1].inventory_policy = Policy(type='BS', base_stock_level=8, node=orig_nodes[1]) + orig_nodes[2].inventory_policy = Policy(type='BS', base_stock_level=12, node=orig_nodes[2]) + orig_nodes[3].inventory_policy = Policy(type='BS', base_stock_level=15, node=orig_nodes[3]) + orig_nodes[4].inventory_policy = Policy(type='BS', base_stock_level=23, node=orig_nodes[4]) + orig_nodes[5].inventory_policy = Policy(type='BS', base_stock_level=25, node=orig_nodes[5]) + orig_nodes[6].inventory_policy = Policy(type='BS', base_stock_level=7, node=orig_nodes[6]) + orig_nodes[7].inventory_policy = Policy(type='BS', base_stock_level=17, node=orig_nodes[7]) + # Add some costs, even though they're not in the original. + orig_nodes[1].local_holding_cost = 10 + orig_nodes[2].local_holding_cost = 5 + orig_nodes[3].local_holding_cost = 5 + orig_nodes[4].local_holding_cost = 2 + orig_nodes[5].local_holding_cost = 2 + orig_nodes[6].local_holding_cost = 1 + orig_nodes[7].local_holding_cost = 1 + orig_nodes[1].stockout_cost = 100 - network = load_instance("rosling_figure_1") - - nodes = {n.index: n for n in network.nodes} - dummy_prods = {n.index: n._dummy_product.index for n in network.nodes} - ext_dummy_prods = {n.index: n._external_supplier_dummy_product.index for n in network.source_nodes} + T = 100 - # Make the BS levels a little smaller so there are some stockouts. - nodes[1].inventory_policy.base_stock_level = 6 - nodes[2].inventory_policy.base_stock_level = 20 - nodes[3].inventory_policy.base_stock_level = 35 - nodes[4].inventory_policy.base_stock_level = 58 - nodes[5].inventory_policy.base_stock_level = 45 - nodes[6].inventory_policy.base_stock_level = 65 - nodes[7].inventory_policy.base_stock_level = 75 + orig_cost = simulation(orig_network, T, rand_seed=17, progress_bar=False, consistency_checks='E') +# write_results(network=orig_network, num_periods=T, columns_to_print=['basic'], write_txt=True, txt_filename='temp_orig.txt') - total_cost = simulation(network, 100, rand_seed=17, progress_bar=False, consistency_checks='E') + # Next build multi-product version of system. + network = serial_system( + num_nodes=4, + node_order_in_system=[3, 2, 1, 0], + node_order_in_lists=[0, 1, 2, 3], + holding_cost=[10, None, None, None], # nodes 1, 2, and 3 have product-specific holding cost + stockout_cost=[100, None, None, None], + demand_type='UD', + lo=0, + hi=10, + shipment_lead_time=[1, None, None, None], # nodes 1, 2 and 3 have product-specific LT + policy_type=['BS', None, None, None], # nodes 1, 2, and 3 have product-specific BS policies + base_stock_level=[8, None, None, None], + initial_inventory_level=[8, None, None, None] # and product-specific initial IL + ) + # Add supplier nodes for products 5, 6 and 7. (Can't use external supplier for prod 6 and 7 because they + # need separate RMs to match original system. Can't use external supplier for prod 5 because other products + # at node 2 would be assumed to have NBOM of 1 with it.) + network.add_predecessor(network.get_node_from_index(2), SupplyChainNode(index=22, supply_type='U')) + network.add_predecessor(network.get_node_from_index(3), SupplyChainNode(index=33, supply_type='U')) + network.get_node_from_index(3).supply_type = None - # Compare total cost. - self.assertEqual(total_cost, 0) + nodes = {n.index: n for n in network.nodes} - # Compare a few performance measures. - self.assertEqual(nodes[1].state_vars[6].order_quantity[2][dummy_prods[2]], 4) - self.assertEqual(nodes[1].state_vars[6].order_quantity[3][dummy_prods[3]], 4) - self.assertEqual(nodes[2].state_vars[6].order_quantity[5][dummy_prods[5]], 4) - self.assertEqual(nodes[3].state_vars[6].order_quantity[4][dummy_prods[4]], 4) - self.assertEqual(nodes[4].state_vars[6].order_quantity[6][dummy_prods[6]], 0) - self.assertEqual(nodes[4].state_vars[6].order_quantity[7][dummy_prods[7]], 0) - self.assertEqual(nodes[1].state_vars[16].inventory_level[dummy_prods[1]], 3) - self.assertEqual(nodes[2].state_vars[16].inventory_level[dummy_prods[2]], 7) - self.assertEqual(nodes[3].state_vars[16].inventory_level[dummy_prods[3]], 4) - self.assertEqual(nodes[4].state_vars[16].inventory_level[dummy_prods[4]], 9) - self.assertEqual(nodes[5].state_vars[16].inventory_level[dummy_prods[5]], 7) - self.assertEqual(nodes[6].state_vars[16].inventory_level[dummy_prods[6]], 19) - self.assertEqual(nodes[7].state_vars[16].inventory_level[dummy_prods[7]], 24) - self.assertEqual(nodes[1].state_vars[44].inventory_level[dummy_prods[1]], -4) - self.assertEqual(nodes[2].state_vars[44].inventory_level[dummy_prods[2]], -5) - self.assertEqual(nodes[3].state_vars[44].inventory_level[dummy_prods[3]], 0) - self.assertEqual(nodes[4].state_vars[44].inventory_level[dummy_prods[4]], -2) - self.assertEqual(nodes[5].state_vars[44].inventory_level[dummy_prods[5]], -6) - self.assertEqual(nodes[6].state_vars[44].inventory_level[dummy_prods[6]], 0) - self.assertEqual(nodes[7].state_vars[44].inventory_level[dummy_prods[7]], 10) - self.assertEqual(nodes[1].state_vars[16].inbound_shipment[2][dummy_prods[2]], 2) - self.assertEqual(nodes[1].state_vars[16].inbound_shipment[3][dummy_prods[3]], 2) - self.assertEqual(nodes[2].state_vars[16].inbound_shipment[5][dummy_prods[5]], 1) - self.assertEqual(nodes[3].state_vars[16].inbound_shipment[4][dummy_prods[4]], 0) - self.assertEqual(nodes[4].state_vars[16].inbound_shipment[6][dummy_prods[6]], 12) - self.assertEqual(nodes[4].state_vars[16].inbound_shipment[7][dummy_prods[7]], 12) - self.assertEqual(nodes[5].state_vars[16].inbound_shipment[None][ext_dummy_prods[5]], 9) - self.assertEqual(nodes[6].state_vars[16].inbound_shipment[None][ext_dummy_prods[6]], 13) - self.assertEqual(nodes[7].state_vars[16].inbound_shipment[None][ext_dummy_prods[7]], 12) - self.assertEqual(nodes[1].state_vars[45].raw_material_inventory[dummy_prods[2]], 0) - self.assertEqual(nodes[1].state_vars[45].raw_material_inventory[dummy_prods[3]], 5) - self.assertEqual(nodes[2].state_vars[45].raw_material_inventory[dummy_prods[5]], 0) - self.assertEqual(nodes[4].state_vars[45].raw_material_inventory[dummy_prods[6]], 0) + products = {prod_index: SupplyChainProduct(index=prod_index) for prod_index in [1, 2, 3, 4, 5, 6, 7, 55, 66, 77]} + products[1].set_bill_of_materials(rm_index=3, num_needed=1) + products[1].set_bill_of_materials(rm_index=2, num_needed=1) + products[3].set_bill_of_materials(rm_index=4, num_needed=1) + products[2].set_bill_of_materials(rm_index=5, num_needed=1) + products[4].set_bill_of_materials(rm_index=7, num_needed=1) + products[4].set_bill_of_materials(rm_index=6, num_needed=1) + products[6].set_bill_of_materials(rm_index=66, num_needed=1) + products[7].set_bill_of_materials(rm_index=77, num_needed=1) + products[5].set_bill_of_materials(rm_index=55, num_needed=1) + + nodes[0].add_product(products[1]) + nodes[1].add_products([products[3], products[2]]) + nodes[2].add_products([products[4], products[5]]) + nodes[3].add_products([products[7], products[6]]) + nodes[33].add_products([products[66], products[77]]) + nodes[22].add_product(products[55]) + nodes[22].inventory_policy = Policy(type='BS', base_stock_level=1000, node=nodes[22]) + + # Other product-specific attributes. + products[2].local_holding_cost = 5 + products[3].local_holding_cost = 5 + products[4].local_holding_cost = 2 + products[5].local_holding_cost = 2 + products[6].local_holding_cost = 1 + products[7].local_holding_cost = 1 + products[2].shipment_lead_time = 1 + products[3].shipment_lead_time = 3 + products[4].shipment_lead_time = 2 + products[5].shipment_lead_time = 4 + products[6].shipment_lead_time = 1 + products[7].shipment_lead_time = 2 + products[2].inventory_policy = Policy(type='BS', base_stock_level=12, node=nodes[1], product=products[2]) + products[3].inventory_policy = Policy(type='BS', base_stock_level=15, node=nodes[1], product=products[3]) + products[4].inventory_policy = Policy(type='BS', base_stock_level=23, node=nodes[2], product=products[4]) + products[5].inventory_policy = Policy(type='BS', base_stock_level=25, node=nodes[2], product=products[5]) + products[6].inventory_policy = Policy(type='BS', base_stock_level=7, node=nodes[3], product=products[6]) + products[7].inventory_policy = Policy(type='BS', base_stock_level=17, node=nodes[3], product=products[7]) + products[66].inventory_policy = Policy(type='BS', base_stock_level=1000, node=nodes[33], product=products[66]) + products[77].inventory_policy = Policy(type='BS', base_stock_level=1000, node=nodes[33], product=products[77]) + products[2].initial_inventory_level = 8 + products[3].initial_inventory_level = 24 + products[4].initial_inventory_level = 16 + products[5].initial_inventory_level = 32 + products[6].initial_inventory_level = 8 + products[7].initial_inventory_level = 16 + + # Simulate multi-product network. + cost = simulation(network, T, rand_seed=17, progress_bar=False, consistency_checks='E') +# write_results(network=network, num_periods=T, columns_to_print=['basic'], write_txt=True, txt_filename='temp_new.txt') + + # Map (node, product, pred, rm) in original network to new network. + rm_mapping = { + (1, orig_nodes[1]._dummy_product.index, 3, orig_nodes[3]._dummy_product.index): (0, 1, 1, 3), + (1, orig_nodes[1]._dummy_product.index, 2, orig_nodes[2]._dummy_product.index): (0, 1, 1, 2), + (2, orig_nodes[2]._dummy_product.index, 5, orig_nodes[5]._dummy_product.index): (1, 2, 2, 5), + (3, orig_nodes[3]._dummy_product.index, 4, orig_nodes[4]._dummy_product.index): (1, 3, 2, 4), + (4, orig_nodes[4]._dummy_product.index, 7, orig_nodes[7]._dummy_product.index): (2, 4, 3, 7), + (4, orig_nodes[4]._dummy_product.index, 6, orig_nodes[6]._dummy_product.index): (2, 4, 3, 6), + (5, orig_nodes[5]._dummy_product.index, None, orig_nodes[5]._external_supplier_dummy_product.index): (2, 5, 22, 55), + (6, orig_nodes[6]._dummy_product.index, None, orig_nodes[6]._external_supplier_dummy_product.index): (3, 6, 33, 66), + (7, orig_nodes[7]._dummy_product.index, None, orig_nodes[7]._external_supplier_dummy_product.index): (3, 7, 33, 77) + } + + # Compare costs. + self.assertEqual(orig_cost, cost) + + # Compare performance measures. + for t in range(T): + for m in rm_mapping: + orig_n_ind, orig_prod_ind, orig_pred_ind, orig_rm_ind = m[0], m[1], m[2], m[3] + n_ind, prod_ind, pred_ind, rm_ind = rm_mapping[m][0], rm_mapping[m][1], rm_mapping[m][2], rm_mapping[m][3] + self.assertEqual(orig_nodes[orig_n_ind].state_vars[t].order_quantity[orig_pred_ind][orig_rm_ind], + nodes[n_ind].state_vars[t].order_quantity[pred_ind][rm_ind]) + self.assertEqual(orig_nodes[orig_n_ind].state_vars[t].inventory_level[orig_prod_ind], + nodes[n_ind].state_vars[t].inventory_level[prod_ind]) + self.assertEqual(orig_nodes[orig_n_ind].state_vars[t].inbound_shipment[orig_pred_ind][orig_rm_ind], + nodes[n_ind].state_vars[t].inbound_shipment[pred_ind][rm_ind]) + self.assertEqual(orig_nodes[orig_n_ind].state_vars[t].raw_material_inventory[orig_rm_ind], + nodes[n_ind].state_vars[t].raw_material_inventory[rm_ind]) class TestStepByStepSimulation(unittest.TestCase): diff --git a/tests/test_sim_io.py b/tests/test_sim_io.py index b02f708..33e193c 100644 --- a/tests/test_sim_io.py +++ b/tests/test_sim_io.py @@ -45,9 +45,6 @@ def test_example_6_1(self): # Build network. network = load_instance("example_6_1") - # reindex nodes to 2 -> 1 -> 0 - network.reindex_nodes({1: 0, 2: 1, 3: 2}) - # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) filename_root = 'tests/additional_files/temp_TestWriteResults_test_example_6_1' @@ -95,8 +92,6 @@ def test_periods_to_print(self): # Build network. network = load_instance("example_6_1") - # reindex nodes to 2 -> 1 -> 0 - network.reindex_nodes({1: 0, 2: 1, 3: 2}) # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) @@ -145,8 +140,6 @@ def test_columns_to_print_none(self): # Build network. network = load_instance("example_6_1") - # reindex nodes to 2 -> 1 -> 0 - network.reindex_nodes({1: 0, 2: 1, 3: 2}) # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) @@ -193,8 +186,6 @@ def test_columns_to_print_list(self): # Build network. network = load_instance("example_6_1") - # reindex nodes to 2 -> 1 -> 0 - network.reindex_nodes({1: 0, 2: 1, 3: 2}) # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) @@ -241,8 +232,6 @@ def test_columns_to_print_string(self): # Build network. network = load_instance("example_6_1") - # reindex nodes to 2 -> 1 -> 0 - network.reindex_nodes({1: 0, 2: 1, 3: 2}) # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) @@ -289,8 +278,6 @@ def test_columns_to_print_list_of_strings(self): # Build network. network = load_instance("example_6_1") - # reindex nodes to 2 -> 1 -> 0 - network.reindex_nodes({1: 0, 2: 1, 3: 2}) # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) @@ -338,8 +325,6 @@ def test_columns_to_print_mixed(self): # Build network. network = load_instance("example_6_1") - # reindex nodes to 2 -> 1 -> 0 - network.reindex_nodes({1: 0, 2: 1, 3: 2}) # Simulate and write results. simulation(network, 100, rand_seed=17, progress_bar=False) diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index 7d7fa83..19aaefa 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -13,8 +13,8 @@ from stockpyl.demand_source import DemandSource from stockpyl.instances import * from stockpyl.sim import * -#from tests.settings import * -RUN_ALL_TESTS = False +from tests.settings import * +#RUN_ALL_TESTS = False # Module-level functions. @@ -691,7 +691,7 @@ def test_multiproduct_5_7(self): network.remove_product(network.products_by_index[10]) - self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 11, -1001, -5, -4, -3, -2])) + self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 11, -1001, -9, -7, -5, -4, -3, -2])) class TestProductLists(unittest.TestCase): @@ -730,9 +730,9 @@ def test_multiproduct_5_7(self): network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") network.add_product(SupplyChainProduct(10)) network.add_product(SupplyChainProduct(11)) - products = {i: network.products_by_index[i] for i in [0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -5, -4, -3, -2]} + products = {i: network.products_by_index[i] for i in [0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -9, -7, -5, -4, -3, -2]} - self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -5, -4, -3, -2])) + self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -9, -7, -5, -4, -3, -2])) self.assertSetEqual(set(network.products), set(products.values())) self.assertDictEqual(network.products_by_index, {i: products[i] for i in products.keys()}) diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 0fbb4cf..3ac884c 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -99,10 +99,10 @@ def test_update_dummy(self): print_status('TestIndex', 'test_bad_index()') node = SupplyChainNode(index=5) - self.assertEqual(node._dummy_product.index, -5) + self.assertEqual(node._dummy_product.index, -10) node.index = 10 - self.assertEqual(node._dummy_product.index, -10) + self.assertEqual(node._dummy_product.index, -20) def test_bad_index(self): """Test that index property correctly raises error when appropriate. @@ -481,8 +481,8 @@ def test_basic(self): nodes[2].remove_product(1) nodes[3].remove_product(nodes[3].products_by_index[2]) - self.assertEqual(nodes[1].product_indices, [-1]) - self.assertEqual(nodes[2].product_indices, [-2]) + self.assertEqual(nodes[1].product_indices, [-2]) + self.assertEqual(nodes[2].product_indices, [-4]) self.assertEqual(nodes[3].product_indices, [3]) def test_multiproduct_5_7(self): @@ -531,7 +531,7 @@ def test_basic(self): print_status('TestAddRemoveDummyProduct', 'test_basic()') node = SupplyChainNode(4) - self.assertEqual(node.product_indices, [-4]) + self.assertEqual(node.product_indices, [-8]) self.assertTrue(node.products[0].is_dummy) def test_add_remove(self): @@ -540,7 +540,7 @@ def test_add_remove(self): print_status('TestAddRemoveDummyProduct', 'test_add_remove()') node = SupplyChainNode(4) - self.assertEqual(node.product_indices, [-4]) + self.assertEqual(node.product_indices, [-8]) self.assertTrue(node.products[0].is_dummy) self.assertEqual(node._dummy_product, node.products[0]) @@ -550,7 +550,7 @@ def test_add_remove(self): self.assertIsNone(node._dummy_product) node.remove_product(5) - self.assertEqual(node.product_indices, [-4]) + self.assertEqual(node.product_indices, [-8]) self.assertTrue(node.products[0].is_dummy) self.assertEqual(node._dummy_product, node.products[0]) @@ -582,9 +582,9 @@ def test_basic(self): nodes[2].remove_products([1]) nodes[3].remove_products([nodes[3].products_by_index[2], 3]) - self.assertEqual(nodes[1].product_indices, [-1]) - self.assertEqual(nodes[2].product_indices, [-2]) - self.assertEqual(nodes[3].product_indices, [-3]) + self.assertEqual(nodes[1].product_indices, [-2]) + self.assertEqual(nodes[2].product_indices, [-4]) + self.assertEqual(nodes[3].product_indices, [-6]) def test_multiproduct_5_7(self): """Test remove_product() for 5-node 7-product instance. diff --git a/tests/test_supply_chain_product.py b/tests/test_supply_chain_product.py index f4a4a94..3a52130 100644 --- a/tests/test_supply_chain_product.py +++ b/tests/test_supply_chain_product.py @@ -6,8 +6,8 @@ from stockpyl.policy import Policy from stockpyl.instances import * from stockpyl.sim import * -#from tests.settings import RUN_ALL_TESTS -RUN_ALL_TESTS = False +from tests.settings import RUN_ALL_TESTS +#RUN_ALL_TESTS = False # Module-level functions. From 3341f20a5e462f5f1de6707ee330dfcf94ff8ac8 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Tue, 23 Apr 2024 11:18:40 -0400 Subject: [PATCH 38/94] Fixed bug in which OQ was calculated wrong if there are multiple products at a node that use the same RM --- src/stockpyl/policy.py | 7 ++++++- src/stockpyl/sim.py | 2 ++ src/stockpyl/supply_chain_node.py | 8 ++++++-- tests/settings.py | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index b237676..fd733d0 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -434,6 +434,11 @@ def get_order_quantity(self, product_index=None, predecessor_index=None, rm_inde # external demand. demand = self.node._get_attribute_total('inbound_order', self.node.network.period, product_index=product_index) + # Calculate total orders that have already been placed by this node to this supplier for this RM + # in the current time period (for other products at the node that use the same RM). These units + # will be included in IP_before_demand and so must be subtracted before setting the order quantity. + units_already_ordered = self.node.state_vars_current.order_quantity[predecessor_index][rm_index] + # Determine predecessor and RM index. # Calculate (local or echelon) inventory position, before demand is subtracted. @@ -445,7 +450,7 @@ def get_order_quantity(self, product_index=None, predecessor_index=None, rm_inde self.node.state_vars_current.inventory_position(prod_index=product_index, predecessor_index=predecessor_index, rm_index=rm_index) # Calculate current inventory position, after demand is subtracted. - IP = IP_before_demand - demand + IP = IP_before_demand - demand - units_already_ordered # Determine order quantity based on policy. This order quantity is in units of the product. if self.type == 'BS': diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index daf48de..e0c3241 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -528,6 +528,8 @@ def _initialize_state_vars(network): pred_index = n.raw_material_suppliers_by_raw_material(rm_index)[0] init_IL = n.get_attribute('inventory_policy', prod).get_order_quantity( product_index=prod.index, predecessor_index=pred_index, rm_index=rm_index, inventory_position=0) + # Now divide by the NBOM becuase result from get_order_quantity() will be in units of the RM. + init_IL /= n.NBOM(product=prod, predecessor=pred_index, raw_material=rm_index) n.state_vars[0].inventory_level[prod.index] = init_IL # Initialize inbound order pipeline. (Exclude external demand.) diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index d990c3a..c4bcdd4 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1450,7 +1450,8 @@ def get_attribute(self, attr, product=None): or a product-keyed dict. ``product`` may be either a |class_product| object or the index of the product. * If ``self.attr`` is a dict and contains the key ``product``, returns ``self.attr[product]``. - (This returns a (node, product)-specific value of the attribute.) + ``product`` must be the product index, in this case. + (This returns a (node, product)-specific value of the attribute.) * Else if ``self.attr`` equals its default value (e.g., ``None``), or is a dict but does not contain the key ``product``, returns ``self.products[product].attr``. (This returns a product-specific value of the attribute.) @@ -1473,6 +1474,8 @@ def get_attribute(self, attr, product=None): any The value of the attribute for the product (if any). """ + # TODO : allow product = None for single-product nodes. + # Get self.attr and the product and index. self_attr = getattr(self, attr) if product is None: @@ -1518,7 +1521,8 @@ def get_attribute(self, attr, product=None): return self_attr def _get_attribute_total(self, attribute, period, product_index=None, include_external=True): - """Return total of ``attribute`` in the node's ``state_vars`` for the period and product specified, for an + """Return total (over all successors/predecessors) of ``attribute`` in the node's ``state_vars`` + for the period and product specified, for an attribute that is indexed by successor or predecessor, i.e., ``inbound_shipment``,`` on_order_by_predecessor``, ``inbound_order``, ``outbound_shipment``, ``backorders_by_successor``, ``outbound_disrupted_items``, ``inbound_disrupted_items``. diff --git a/tests/settings.py b/tests/settings.py index 4743b20..968f05d 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -2,4 +2,4 @@ # Set to True to run all tests, even those that are normally skipped because # they are slow. -RUN_ALL_TESTS = True +RUN_ALL_TESTS = False From ef112b7abbea422bb952a9cd4bca367714e49694 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Wed, 24 Apr 2024 19:36:55 -0400 Subject: [PATCH 39/94] Clean up before working on #141 --- CHANGELOG.md | 1 + src/stockpyl/policy.py | 6 + src/stockpyl/sim_io.py | 4 +- src/stockpyl/supply_chain_node.py | 24 +-- .../test_sim_disruption_example_6_1_RP.csv | 186 +++++++++--------- 5 files changed, 115 insertions(+), 106 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b8ea65..996942f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ a given number and return the corresponding value. ### Fixed - Bug in ``helpers.ensure_list_for_time_period()`` that caused it to handle numpy arrays improperly. - Bug in ``demand_source.py`` that sometimes caused infinite recursion when some attributes were ``None``. +- Bug in ``sim_io.py`` that caused incorrect headers for a few state variables. ## [0.0.15] -- 2024-02-10 diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index fd733d0..5f44ccb 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -361,6 +361,10 @@ def get_order_quantity(self, product_index=None, predecessor_index=None, rm_inde If the policy's ``node`` attribute is ``None``, assumes that the product and raw material have a BOM number of 1. + Order quantity returned is in the units of ``rm_index``, not ``product_index``. For example, if + 4 units of ``rm_index`` are required to make 1 unit of ``product_index``, and if we should increase + the inventory position of ``product_index`` by 5 units, then this function will return 20. + If ``inventory_position`` (and ``echelon_inventory_position_adjusted``, for balanced echelon base-stock policies) are provided, they will override the values indicated by the node's current state variables. This allows the @@ -438,6 +442,8 @@ def get_order_quantity(self, product_index=None, predecessor_index=None, rm_inde # in the current time period (for other products at the node that use the same RM). These units # will be included in IP_before_demand and so must be subtracted before setting the order quantity. units_already_ordered = self.node.state_vars_current.order_quantity[predecessor_index][rm_index] + # Convert to downstream units. + units_already_ordered /= NBOM # Determine predecessor and RM index. diff --git a/src/stockpyl/sim_io.py b/src/stockpyl/sim_io.py index 67decdd..706dcf5 100644 --- a/src/stockpyl/sim_io.py +++ b/src/stockpyl/sim_io.py @@ -207,8 +207,8 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= if 'IDI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_disrupted_items, "IDI") if 'RM' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "RM") if 'OS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_shipment, "OS") - if 'DMFS' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "DMFS") - if 'FR' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "FR") + if 'DMFS' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].demand_met_from_stock, "DMFS") + if 'FR' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].fill_rate, "FR") if 'IL' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].inventory_level, "IL") if 'BO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].backorders_by_successor, "BO") if 'ODI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_disrupted_items , "ODI") diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index c4bcdd4..25f60ab 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -2161,7 +2161,8 @@ def inbound_disrupted_items_aggregate(self, prod_index=None): def inventory_position(self, prod_index=None, predecessor_index=None, rm_index=None): """Current local inventory position at node for product with index ``prod_index``. - Equals inventory level plus on-order inventory. + Equals inventory level plus on-order inventory. Returns the inventory position in the units of the + downstream product, i.e., of ``prod_index``, not of ``rm_index``. On-order includes raw material inventory that has not yet been processed, as well as inbound disrupted items due to type-RP disruptions. @@ -2216,18 +2217,19 @@ def inventory_position(self, prod_index=None, predecessor_index=None, rm_index=N pred = self.node.network.get_node_from_index(predecessor_index) rm_index = pred.product_indices[0] + # Determine total units of RM in the pipeline, converted to units of the downstream product. if predecessor_index is not None: - return self.inventory_level[prod_index] \ - + self.on_order_by_predecessor[predecessor_index][rm_index] \ - + self.raw_material_inventory[rm_index] \ - + self.inbound_disrupted_items[predecessor_index][rm_index] + pipeline = (self.on_order_by_predecessor[predecessor_index][rm_index] \ + + self.raw_material_inventory[rm_index] \ + + self.inbound_disrupted_items[predecessor_index][rm_index]) \ + / self.node.NBOM(product=prod_index, predecessor=predecessor_index, raw_material=rm_index) else: - # Note: If <=1 predecessor, raw_material_inventory should always = 0 - # (because raw materials are processed right away). - return self.inventory_level[prod_index] \ - + self.on_order(prod_index=prod_index) \ - + self.raw_material_aggregate(prod_index=prod_index) \ - + self.inbound_disrupted_items_aggregate(prod_index=prod_index) + # These functions already convert to units of the downstream product. + pipeline = self.on_order(prod_index=prod_index) \ + + self.raw_material_aggregate(prod_index=prod_index) \ + + self.inbound_disrupted_items_aggregate(prod_index=prod_index) + + return self.inventory_level[prod_index] + pipeline @property def echelon_on_hand_inventory(self): diff --git a/tests/additional_files/test_sim_disruption_example_6_1_RP.csv b/tests/additional_files/test_sim_disruption_example_6_1_RP.csv index 8f71f54..fc16084 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_RP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_RP.csv @@ -6,96 +6,96 @@ t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:- 4,,False,4.419121865976485,[],4.419121865976484,4.899637150783011,10.59794347688952,[0.0],0,0.0,9.007580627672532,4.419121865976485,0.8158406680188101,1.590362849216989,0.0,0,11.132539944518923,0.0,0.0,0.0,11.132539944518923,,True,4.419121865976484,[],4.419121865976484,5.018678442983148,0,[5.018678442983148],5.410958707799862,0.0,0.0,0.0,0.5999478070535571,-4.89963715078301,4.89963715078301,0.0,10.821917415599724,0.0,0.0,0.0,10.821917415599724,,False,4.419121865976484,[],4.419121865976482,10.42963715078301,5.279041292200137,"[6.010515284806527, 4.419121865976482]",0,0.0,5.018678442983148,4.419121865976484,0.9759365956106659,0.26036284921698893,0.0,0,0.5207256984339779,0,10.037356885966297,0.0,10.558082584400275 5,,False,4.474830192821853,[],4.474830192821853,9.374467343604863,0.0,[0.0],0,0.0,1.590362849216989,1.590362849216989,0.7457369456524102,-2.8844673436048636,2.8844673436048636,0,0.0,107.07142779461253,0.0,0.0,107.07142779461253,,True,4.474830192821853,[],4.474830192821853,4.474830192821852,0,[4.474830192821853],10.42963715078301,0.0,0.0,0.0,0.5086032652247512,-9.374467343604863,9.374467343604863,0.0,20.85927430156602,0.0,0.0,0.0,20.85927430156602,,False,4.474830192821853,[],4.474830192821853,8.893952058798337,6.010515284806527,"[4.419121865976482, 4.474830192821853]",0,0.0,4.474830192821853,4.474830192821853,0.979600348728758,1.796047941201663,0.0,0,3.592095882403326,0,8.949660385643705,0.0,12.541756268047031 6,,False,2.3874509873063987,[],2.3874509873063996,11.761918330911262,0.0,[0.0],0,0.0,0.0,0.0,0.6897104042392165,-5.271918330911262,5.271918330911262,0,0.0,195.69360844342603,0.0,0.0,195.69360844342603,,True,2.3874509873063996,[],2.3874509873064005,2.3874509873063996,0,[2.3874509873064005],14.904467343604864,0.0,0.0,0.0,0.4703923624820008,-11.761918330911262,11.761918330911262,0.0,29.808934687209728,0.0,0.0,0.0,29.808934687209728,,False,2.3874509873064005,[],2.3874509873063996,6.862281180128255,4.419121865976482,"[4.474830192821853, 2.3874509873063996]",0,0.0,2.3874509873064005,2.3874509873064005,0.9811329560555454,3.8277188198717447,0.0,0,7.655437639743489,0,4.774901974612801,0.0,12.43033961435629 -7,,False,5.950369682396903,[],5.950369682396903,17.712288013308164,0.0,[0.0],0,0.0,0.0,0.0,0.5809319464015877,-11.222288013308166,11.222288013308166,0,0.0,416.5713310539991,0.0,0.0,416.5713310539991,,True,5.950369682396903,[],5.950369682396902,5.950369682396901,0,[5.950369682396902],17.291918330911265,0.0,0.0,0.0,0.39620389808463924,-17.712288013308164,17.712288013308164,0.0,34.58383666182253,0.0,0.0,0.0,34.58383666182253,,False,5.950369682396902,[],5.950369682396902,8.337820669703305,4.474830192821853,"[2.3874509873063996, 5.950369682396902]",0,0.0,5.950369682396902,5.950369682396902,0.9841085932673639,2.3521793302966945,0.0,0,4.704358660593389,0,11.900739364793804,0.0,16.605098025387193 -8,,False,4.571953935823766,[],4.5719539358237675,22.284241949131932,0.0,[22.284241949131932],0,0.0,0.0,0.0,0.5181429409923104,-15.794241949131932,15.794241949131932,0,0.0,586.2822611517772,0.0,0.0,586.2822611517772,,False,4.5719539358237675,[],4.571953935823767,4.571953935823766,23.24228801330817,[4.571953935823767],0.0,0.0,22.284241949131932,4.5719539358237675,0.4614641354396298,0.9580460641762372,0.0,0.0,3.8321842567049487,0,89.13696779652773,0.0,92.96915205323268,,False,4.571953935823767,[],4.571953935823767,10.522323618220673,2.3874509873063996,"[5.950369682396902, 4.571953935823767]",0,0.0,4.571953935823767,4.571953935823767,0.9858261879520376,0.16767638177932742,0.0,0,0.33535276355865484,0,9.143907871647533,0.0,9.479260635206188 -9,,False,4.257593162880828,[],4.257593162880828,4.257593162880827,22.284241949131932,[4.257593162880828],0,0.0,20.05183511201276,4.257593162880829,0.5622074582342398,2.2324068371191723,0.0,0,15.626847859834207,0.0,0.0,0.0,15.626847859834207,,False,4.257593162880828,[],4.257593162880825,4.257593162880824,4.571953935823767,[4.257593162880825],0.0,0.0,4.257593162880828,4.257593162880828,0.5107117752649893,1.272406837119176,0.0,0.0,5.089627348476704,0,17.03037265152331,0.0,22.120000000000015,,False,4.257593162880825,[],4.2575931628808235,8.829547098704595,5.950369682396902,"[4.571953935823767, 4.2575931628808235]",0,0.0,4.257593162880825,4.257593162880825,0.9871223445065508,1.860452901295404,0.0,0,3.720905802590808,0,8.51518632576165,0.0,12.236092128352459 -10,,False,4.3705250390757495,[],4.37052503907575,4.37052503907575,4.257593162880828,[4.37052503907575],0,0.0,4.3705250390757495,4.3705250390757495,0.5997775052500238,2.1194749609242507,0.0,0,14.836324726469755,0.0,0.0,0.0,14.836324726469755,,False,4.37052503907575,[],4.37052503907575,4.3705250390757495,4.257593162880825,[4.37052503907575],0.0,0.0,4.37052503907575,4.37052503907575,0.5527010278306473,1.1594749609242507,0.0,0.0,4.637899843697003,0,17.482100156303,0.0,22.120000000000005,,False,4.37052503907575,[],4.370525039075752,8.628118201956578,4.571953935823767,"[4.2575931628808235, 4.370525039075752]",0,0.0,4.37052503907575,4.37052503907575,0.9882274663991957,2.0618817980434203,0.0,0,4.123763596086841,0,8.7410500781515,0.0,12.864813674238341 -11,,False,5.597720466912608,[],5.597720466912607,5.597720466912606,4.37052503907575,[5.530000000000001],0,0.0,5.597720466912608,5.597720466912608,0.6394110888020618,0.8922795330873932,0.0,0,6.245956731611752,0.0,0.0,0.0,6.245956731611752,,False,5.597720466912607,[],5.597720466912607,5.597720466912606,4.37052503907575,[5.597720466912607],0.0,0.0,5.530000000000001,5.530000000000001,0.5957985040254986,-0.06772046691260591,0.06772046691260591,0.0,0.0,0.0,22.120000000000005,0.0,22.120000000000005,,False,5.597720466912607,[],5.597720466912609,9.968245505988364,4.2575931628808235,"[4.370525039075752, 5.597720466912609]",0,0.0,5.597720466912607,5.597720466912607,0.9893932871619144,0.7217544940116367,0.0,0,1.4435089880232734,0,11.195440933825214,0.0,12.638949921848488 -12,,False,5.122219165222679,[],5.12221916522268,5.189939632135285,5.530000000000001,[5.189939632135286],0,0.0,5.122219165222679,5.122219165222679,0.6693715830888035,1.300060367864715,0.0,0,9.100422575053004,0.0,0.0,0.0,9.100422575053004,,False,5.12221916522268,[],5.12221916522268,5.122219165222679,5.597720466912607,[5.092279533087389],0.0,0.0,5.189939632135286,5.12221916522268,0.6293826665850314,0.40778083477732086,0.0,0.0,1.6311233391092834,0,20.759758528541145,0.0,22.390881867650428,,False,5.12221916522268,[],5.1222191652226785,10.71993963213529,4.370525039075752,"[5.597720466912609, 5.1222191652226785]",0,0.0,5.092279533087389,5.092279533087389,0.9897889225754252,-0.029939632135291383,0.029939632135291383,0,0.0,0.0,10.184559066174778,0.0,10.184559066174778 -13,,False,4.484564337907547,[],4.484564337907547,4.484564337907545,5.189939632135286,[4.484564337907547],0,0.0,4.484564337907547,4.484564337907547,0.6917919486174242,2.005435662092454,0.0,0,14.038049634647178,0.0,0.0,0.0,14.038049634647178,,False,4.484564337907547,[],4.484564337907547,4.514503970042838,5.092279533087389,[4.514503970042838],0.0,0.0,4.484564337907547,4.484564337907547,0.6545147352802583,1.0154960299571627,0.0,0.0,4.061984119828651,0,17.938257351630188,0.0,22.00024147145884,,False,4.484564337907547,[],4.484564337907549,9.60678350313023,5.597720466912609,"[5.1222191652226785, 4.484564337907549]",0,0.0,4.514503970042838,4.484564337907547,0.9904813497129313,1.0832164968697704,0.0,0,2.166432993739541,0,9.029007940085677,0.0,11.195440933825218 -14,,False,4.399746149894089,[],4.3997461498940895,4.399746149894088,4.484564337907547,[1.0154960299571627],0,0.0,4.399746149894089,4.399746149894089,0.7110176084095495,2.0902538501059125,0.0,0,14.631776950741386,0.0,0.0,0.0,14.631776950741386,,True,4.3997461498940895,[],4.399746149894089,4.399746149894089,0,[4.399746149894089],4.514503970042838,0.0,1.0154960299571627,1.0154960299571627,0.6280843936995064,-3.384250119936927,3.384250119936927,0.0,9.029007940085677,0.0,4.061984119828651,0.0,13.090992059914328,,False,4.399746149894089,[],4.399746149894087,8.884310487801638,5.1222191652226785,"[4.484564337907549, 4.399746149894087]",0,0.0,4.399746149894089,4.399746149894089,0.9910751120474274,1.8056895121983603,0.0,0,3.6113790243967205,0,8.799492299788177,0.0,12.410871324184898 -15,,False,5.947439821046639,[],5.947439821046639,9.331689940983564,1.0154960299571627,[0.0],0,0.0,3.105749880063075,3.105749880063075,0.696334254698549,-2.8416899409835636,2.8416899409835636,0,0.0,105.48353060930988,0.0,0.0,105.48353060930988,,True,5.947439821046639,[],5.947439821046639,5.94743982104664,0,[5.947439821046639],8.914250119936927,0.0,0.0,0.0,0.5792417081239438,-9.331689940983566,9.331689940983566,0.0,17.828500239873854,0.0,0.0,0.0,17.828500239873854,,False,5.947439821046639,[],5.947439821046641,10.347185970940728,4.484564337907549,"[4.399746149894087, 5.947439821046641]",0,0.0,5.947439821046639,5.947439821046639,0.9917691517345099,0.3428140290592703,0.0,0,0.6856280581185406,0,11.894879642093278,0.0,12.580507700211818 -16,,False,3.978447805324402,[],3.978447805324402,13.310137746307966,0.0,[13.310137746307968],0,0.0,0.0,0.0,0.6619024994679914,-6.8201377463079655,6.8201377463079655,0,0.0,253.16351314295167,0.0,0.0,253.16351314295167,,False,3.978447805324402,[],3.978447805324401,3.978447805324401,14.861689940983567,[3.978447805324401],0.0,0.0,13.310137746307968,3.978447805324402,0.6000470130753361,1.5515521946755992,0.0,0.0,6.206208778702397,0,53.24055098523187,0.0,59.44675976393427,,False,3.978447805324401,[],3.978447805324403,9.925887626371045,4.399746149894087,"[5.947439821046641, 3.978447805324403]",0,0.0,3.978447805324401,3.978447805324401,0.9921761438520238,0.7641123736289561,0.0,0,1.5282247472579122,0,7.956895610648802,0.0,9.485120357906714 -17,,False,4.838244613602479,[],4.838244613602479,4.838244613602475,13.310137746307968,[4.838244613602479],0,0.0,11.658382359910444,4.838244613602479,0.681080221237756,1.6517553863975234,0.0,0,11.562287704782664,0.0,0.0,0.0,11.562287704782664,,False,4.838244613602479,[],4.838244613602479,4.8382446136024795,3.978447805324401,[4.838244613602479],0.0,0.0,4.838244613602479,4.838244613602479,0.6227333301648095,0.6917553863975217,0.0,0.0,2.7670215455900866,0,19.352978454409914,0.0,22.12,,False,4.838244613602479,[],4.838244613602477,8.81669241892688,5.947439821046641,"[3.978447805324403, 4.838244613602477]",0,0.0,4.838244613602479,4.838244613602479,0.9926199322152517,1.8733075810731181,0.0,0,3.7466151621462362,0,9.676489227204957,0.0,13.423104389351193 -18,,False,4.770549546168043,[],4.770549546168045,4.770549546168041,4.838244613602479,[0.6917553863975217],0,0.0,4.770549546168043,4.770549546168043,0.6979722749547879,1.7194504538319588,0.0,0,12.036153176823712,0.0,0.0,0.0,12.036153176823712,,True,4.770549546168045,[],4.770549546168044,4.770549546168045,0,[4.770549546168044],4.838244613602479,0.0,0.6917553863975217,0.6917553863975217,0.5974297691944956,-4.078794159770523,4.078794159770523,0.0,9.676489227204957,0.0,2.7670215455900866,0.0,12.443510772795044,,False,4.770549546168044,[],4.770549546168046,9.608794159770522,3.978447805324403,"[4.838244613602477, 4.770549546168046]",0,0.0,4.770549546168044,4.770549546168044,0.9930108283269294,1.0812058402294769,0.0,0,2.1624116804589537,0,9.541099092336088,0.0,11.703510772795042 -19,,False,5.389348913256123,[],5.389348913256123,9.468143073026642,0.6917553863975217,[9.468143073026646],0,0.0,2.4112058402294805,2.4112058402294805,0.6838254395829847,-2.9781430730266427,2.9781430730266427,0,0.0,110.54867087074896,0.0,0.0,110.54867087074896,,False,5.389348913256123,[],5.389348913256123,5.389348913256124,9.608794159770522,[5.389348913256123],0.0,0.0,9.468143073026646,5.389348913256122,0.6201583082860735,0.14065108674387528,8.881784197001252e-16,0.0,0.5626043469755011,0,37.87257229210658,0.0,38.43517663908209,,False,5.389348913256123,[],5.389348913256125,10.15989845942417,4.838244613602477,"[4.770549546168046, 5.389348913256125]",0,0.0,5.389348913256123,5.389348913256123,0.9934054269570152,0.5301015405758305,0.0,0,1.060203081151661,0,10.778697826512246,0.0,11.838900907663907 -20,,False,7.77831304155244,[],7.778313041552441,7.778313041552437,9.468143073026646,[5.5299999999999985],0,0.0,9.468143073026646,6.490000000000003,0.695168409197066,-1.2883130415524375,1.2883130415524375,0,0.0,47.82218010242648,0.0,0.0,47.82218010242648,,False,7.778313041552441,[],7.778313041552442,7.778313041552442,5.389348913256123,[5.300651086743876],0.0,0.0,5.5299999999999985,5.529999999999998,0.6269991512559994,-2.248313041552443,2.2483130415524437,0.0,0.0,0.0,22.119999999999994,0.0,22.119999999999994,,False,7.778313041552442,[],7.77831304155244,13.167661954808565,4.770549546168046,"[5.389348913256125, 7.77831304155244]",0,0.0,5.300651086743876,5.300651086743876,0.9699020909466246,-2.477661954808566,2.477661954808566,0,0.0,0.0,10.601302173487753,0.0,10.601302173487753 -21,,False,6.193639724282317,[],6.193639724282318,8.441952765834756,5.5299999999999985,[5.300651086743876],0,0.0,5.5299999999999985,4.241686958447561,0.6945841407109238,-1.951952765834756,1.951952765834756,0,0.0,72.45648666778614,0.0,0.0,72.45648666778614,,False,6.193639724282318,[],6.193639724282319,8.671301679090885,5.300651086743876,[5.389348913256125],0.0,0.0,5.300651086743876,3.0523380451914326,0.6194045336559975,-3.1413016790908843,3.141301679090885,0.0,0.0,0.0,21.202604346975505,0.0,21.202604346975505,,False,6.193639724282319,[],6.193639724282319,13.97195276583476,5.389348913256125,"[7.77831304155244, 6.193639724282319]",0,0.0,5.389348913256125,2.911686958447559,0.9416139144956085,-3.2819527658347596,3.2819527658347596,0,0.0,0.0,10.77869782651225,0.0,10.77869782651225 -22,,False,5.2186383160538625,[],5.2186383160538625,8.359939995144742,5.300651086743876,[5.389348913256125],0,0.0,5.300651086743876,3.3486983209091203,0.6921760150893107,-1.8699399951447422,1.8699399951447422,0,0.0,69.41217261977283,0.0,0.0,69.41217261977283,,False,5.2186383160538625,[],5.2186383160538625,8.500591081888622,5.389348913256125,[7.77831304155244],0.0,0.0,5.389348913256125,2.2480472341652398,0.6108181906918735,-2.970591081888622,2.9705910818886228,0.0,0.0,0.0,21.5573956530245,0.0,21.5573956530245,,False,5.2186383160538625,[],5.218638316053861,11.41227804033618,7.77831304155244,"[6.193639724282319, 5.218638316053861]",0,0.0,7.77831304155244,4.496360275717681,0.9379715941434273,-0.7222780403361817,0.7222780403361817,0,0.0,0.0,15.55662608310488,0.0,15.55662608310488 -23,,False,5.881761038948611,[],5.881761038948611,8.852352120837228,5.389348913256125,[7.77831304155244],0,0.0,5.389348913256125,3.519408918111383,0.6875978244372991,-2.362352120837228,2.362352120837228,0,0.0,87.69051072547789,0.0,0.0,87.69051072547789,,False,5.881761038948611,[],5.881761038948611,6.604039079284792,7.77831304155244,[6.193639724282319],0.0,0.0,7.77831304155244,4.807721959663818,0.6208990405678889,-1.074039079284792,1.074039079284793,0.0,0.0,0.0,31.11325216620976,0.0,31.11325216620976,,False,5.881761038948611,[],5.881761038948612,11.100399355002475,6.193639724282319,"[5.218638316053861, 5.881761038948612]",0,0.0,6.193639724282319,5.471361683946137,0.937593568333974,-0.4103993550024736,0.4103993550024736,0,0.0,0.0,12.387279448564637,0.0,12.387279448564637 -24,,False,3.9909146571348924,[],3.9909146571348924,5.06495373641968,7.77831304155244,[0.0],0,0.0,6.35326677797212,3.9909146571348924,0.6976104385608624,1.4250462635803203,0.0,0,9.975323845062242,0.0,0.0,0.0,9.975323845062242,,True,3.9909146571348924,[],3.9909146571348924,4.401314012137366,0,[4.401314012137366],6.193639724282319,0.0,0.0,0.0,0.6009989790792033,-5.064953736419684,5.064953736419685,0.0,12.387279448564637,0.0,0.0,0.0,12.387279448564637,,False,3.9909146571348924,[],3.9909146571348906,9.872675696083505,5.218638316053861,"[5.881761038948612, 3.9909146571348906]",0,0.0,4.401314012137366,3.9909146571348924,0.9395937193187581,0.8173243039164948,0.0,0,1.6346486078329896,0,8.802628024274732,0.0,10.437276632107721 -25,,False,3.4167057864631127,[],3.4167057864631127,8.481659522882794,0.0,[0.0],0,0.0,1.4250462635803203,1.4250462635803203,0.6901185810121155,-1.9916595228827925,1.9916595228827925,0,0.0,73.93040148940925,0.0,0.0,73.93040148940925,,True,3.4167057864631127,[],3.4167057864631127,3.4167057864631127,0,[3.4167057864631127],10.594953736419685,0.0,0.0,0.0,0.5849485646137371,-8.481659522882797,8.481659522882797,0.0,21.18990747283937,0.0,0.0,0.0,21.18990747283937,,False,3.4167057864631127,[],3.4167057864631127,7.407620443598004,5.881761038948612,"[3.9909146571348906, 3.4167057864631127]",0,0.0,3.4167057864631127,3.4167057864631127,0.9412069430928429,3.2823795564019944,0.0,0,6.564759112803989,0,6.8334115729262255,0.0,13.398170685730214 -26,,False,3.6533219026386536,[],3.6533219026386528,12.134981425521445,0.0,[12.134981425521449],0,0.0,0.0,0.0,0.670958877763455,-5.644981425521446,5.644981425521446,0,0.0,209.54171051535607,0.0,0.0,209.54171051535607,,False,3.6533219026386528,[],3.6533219026386528,3.6533219026386528,14.011659522882798,[3.6533219026386528],0.0,0.0,12.134981425521449,3.653321902638652,0.5964716021810907,1.8766780973613484,8.881784197001252e-16,0.0,7.5067123894453935,0,48.539925702085796,0.0,56.04663809153119,,False,3.6533219026386528,[],3.6533219026386545,7.070027689101767,3.9909146571348906,"[3.4167057864631127, 3.6533219026386545]",0,0.0,3.6533219026386528,3.6533219026386528,0.9428392097125456,3.6199723108982322,0.0,0,7.2399446217964645,0,7.3066438052773055,0.0,14.54658842707377 -27,,False,4.119408733952893,[],4.119408733952894,4.119408733952891,12.134981425521449,[4.119408733952895],0,0.0,9.764390159474338,4.119408733952892,0.6809467989948429,2.37059126604711,8.881784197001252e-16,0,16.594138862329768,0.0,0.0,0.0,16.594138862329768,,False,4.119408733952894,[],4.119408733952893,4.119408733952893,3.6533219026386528,[4.119408733952893],0.0,0.0,4.119408733952895,4.119408733952894,0.608720557037092,1.4105912660471072,0.0,0.0,5.642365064188429,0,16.47763493581158,0.0,22.120000000000008,,False,4.119408733952893,[],4.119408733952893,7.772730636591548,3.4167057864631127,"[3.6533219026386545, 4.119408733952893]",0,0.0,4.119408733952893,4.119408733952893,0.9445743043020437,2.917269363408452,0.0,0,5.834538726816904,0,8.238817467905786,0.0,14.07335619472269 -28,,False,5.582122794713039,[],5.5821227947130385,5.582122794713035,4.119408733952895,[5.53],0,0.0,5.58212279471304,5.582122794713039,0.6935519009564419,0.9078772052869652,0.0,0,6.355140437008757,0.0,0.0,0.0,6.355140437008757,,False,5.5821227947130385,[],5.5821227947130385,5.5821227947130385,4.119408733952893,[5.5821227947130385],0.0,0.0,5.53,5.53,0.6238102591448448,-0.05212279471303827,0.05212279471303827,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.5821227947130385,[],5.5821227947130385,9.701531528665932,3.6533219026386545,"[4.119408733952893, 5.5821227947130385]",0,0.0,5.5821227947130385,5.5821227947130385,0.9467640536710024,0.9884684713340679,0.0,0,1.9769369426681358,0,11.164245589426077,0.0,13.141182532094213 -29,,False,5.887748459593357,[],5.887748459593357,5.939871254306392,5.53,[5.5821227947130385],0,0.0,5.887748459593357,5.887748459593357,0.7058110269556231,0.5501287456936081,0.0,0,3.850901219855257,0.0,0.0,0.0,3.850901219855257,,False,5.887748459593357,[],5.887748459593357,5.887748459593357,5.5821227947130385,[5.107877205286961],0.0,0.0,5.5821227947130385,5.53,0.6364286258264713,-0.3577484595933571,0.3577484595933571,0.0,0.0,0.0,22.328491178852154,0.0,22.328491178852154,,False,5.887748459593357,[],5.887748459593357,11.469871254306396,4.119408733952893,"[5.5821227947130385, 5.887748459593357]",0,0.0,5.107877205286961,5.107877205286961,0.9435949160236066,-0.7798712543063964,0.7798712543063964,0,0.0,0.0,10.215754410573922,0.0,10.215754410573922 -30,,False,4.792834109895426,[],4.792834109895426,5.15058256948878,5.5821227947130385,[5.107877205286961],0,0.0,4.792834109895426,4.792834109895426,0.7150890380190152,1.3394174305112205,0.0,0,9.375922013578544,0.0,0.0,0.0,9.375922013578544,,False,4.792834109895426,[],4.792834109895426,5.572705364201823,5.107877205286961,[5.5727053642018225],0.0,0.0,5.107877205286961,4.750128745693604,0.6476137826749433,-0.04270536420182225,0.04270536420182225,0.0,0.0,0.0,20.431508821147844,0.0,20.431508821147844,,False,4.792834109895426,[],4.792834109895426,10.680582569488783,5.5821227947130385,"[5.887748459593357, 4.792834109895426]",0,0.0,5.5727053642018225,4.792834109895426,0.9453737964070178,0.009417430511216018,0.0,0,0.018834861022432037,0,11.145410728403645,0.0,11.164245589426077 -31,,False,4.37652260501504,[],4.37652260501504,4.419227969216859,5.107877205286961,[4.419227969216863],0,0.0,4.37652260501504,4.37652260501504,0.7230642868054382,2.070772030783141,0.0,0,14.495404215481988,0.0,0.0,0.0,14.495404215481988,,False,4.37652260501504,[],4.376522605015039,4.376522605015041,5.5727053642018225,[4.376522605015039],0.0,0.0,4.419227969216863,4.37652260501504,0.6574778038152089,1.15347739498496,0.0,0.0,4.61390957993984,0,17.67691187686745,0.0,22.29082145680729,,False,4.376522605015039,[],4.376522605015041,9.169356714910467,5.887748459593357,"[4.792834109895426, 4.376522605015041]",0,0.0,4.376522605015039,4.376522605015039,0.9469028971509229,1.520643285089534,0.0,0,3.041286570179068,0,8.753045210030079,0.0,11.794331780209147 -32,,False,3.491846710452517,[],3.491846710452517,3.4918467104525135,4.419227969216863,[3.491846710452517],0,0.0,3.491846710452517,3.491846710452517,0.7291141750800182,2.9981532895474867,0.0,0,20.987073026832405,0.0,0.0,0.0,20.987073026832405,,False,3.491846710452517,[],3.491846710452516,3.491846710452518,4.376522605015039,[3.491846710452516],0.0,0.0,3.491846710452517,3.491846710452517,0.6649604827177523,2.0381532895474823,0.0,0.0,8.15261315818993,0,13.967386841810068,0.0,22.119999999999997,,False,3.491846710452516,[],3.4918467104525144,7.868369315467555,4.792834109895426,"[4.376522605015041, 3.4918467104525144]",0,0.0,3.491846710452516,3.491846710452516,0.9480628470043935,2.821630684532444,0.0,0,5.643261369064888,0,6.983693420905032,0.0,12.62695478996992 -33,,False,6.09964697578482,[],6.09964697578482,6.099646975784816,3.491846710452517,[2.0381532895474823],0,0.0,6.09964697578482,6.09964697578482,0.7390714284030322,0.3903530242151838,0.0,0,2.7324711695062867,0.0,0.0,0.0,2.7324711695062867,,True,6.09964697578482,[],6.09964697578482,6.099646975784823,0,[6.09964697578482],3.491846710452516,0.0,2.0381532895474823,2.0381532895474823,0.6528002480730055,-4.061493686237338,4.061493686237338,0.0,6.983693420905032,0.0,8.15261315818993,0.0,15.136306579094962,,False,6.09964697578482,[],6.099646975784822,9.591493686237335,4.376522605015041,"[3.4918467104525144, 6.099646975784822]",0,0.0,6.09964697578482,6.09964697578482,0.9499719590423015,1.0985063137626652,0.0,0,2.1970126275253303,0,12.19929395156964,0.0,14.39630657909497 -34,,False,6.179716344700701,[],6.179716344700701,10.241210030938035,2.0381532895474823,[0.0],0,0.0,2.428506313762666,2.428506313762666,0.7266455197830846,-3.7512100309380347,3.7512100309380347,0,0.0,139.24491634841985,0.0,0.0,139.24491634841985,,True,6.179716344700701,[],6.1797163447007,6.179716344700703,0,[4.5903530242151795],9.591493686237335,0.0,0.0,0.0,0.6293623908613117,-10.241210030938038,10.241210030938038,0.0,19.18298737247467,0.0,0.0,0.0,19.18298737247467,,False,6.1797163447007,[],6.179716344700698,12.279363320485519,3.4918467104525144,"[6.099646975784822, 6.179716344700698]",0,0.0,4.5903530242151795,4.5903530242151795,0.9425340937912581,-1.5893633204855204,1.5893633204855204,0,0.0,0.0,9.180706048430359,0.0,9.180706048430359 -35,,False,4.101792060544322,[],4.101792060544322,14.343002091482358,0.0,[14.181846710452515],0,0.0,0.0,0.0,0.7097318827029766,-7.853002091482357,7.853002091482357,0,0.0,291.5034376358251,0.0,0.0,291.5034376358251,,False,4.101792060544322,[],4.101792060544323,5.691155381029846,14.181846710452515,[5.691155381029843],0.0,0.0,14.181846710452515,3.9406366795144763,0.637074968272656,-0.16115538102984583,0.16115538102984583,0.0,0.0,0.0,56.72738684181006,0.0,56.72738684181006,,False,4.101792060544323,[],4.101792060544325,10.28150840524502,6.099646975784822,"[6.179716344700698, 4.101792060544325]",0,0.0,5.691155381029843,4.101792060544323,0.9438716888849212,0.4084915947549783,0.0,0,0.8169831895099566,0,11.382310762059687,0.0,12.199293951569643 -36,,False,3.962170123484518,[],3.9621701234845172,4.123325504514359,14.181846710452515,[4.123325504514363],0,0.0,11.815172214966875,3.962170123484518,0.7161147629225845,2.36667449548564,0.0,0,16.56672146839948,0.0,0.0,0.0,16.56672146839948,,False,3.9621701234845172,[],3.9621701234845172,3.96217012348452,5.691155381029843,[3.9621701234845172],0.0,0.0,4.123325504514363,3.9621701234845172,0.6450555450848264,1.5678298765154803,0.0,0.0,6.271319506061921,0,16.493302018057452,0.0,22.764621524119374,,False,3.9621701234845172,[],3.962170123484519,8.063962184028842,6.179716344700698,"[4.101792060544325, 3.962170123484519]",0,0.0,3.9621701234845172,3.9621701234845172,0.9451059280776806,2.6260378159711593,0.0,0,5.2520756319423185,0,7.9243402469690345,0.0,13.176415878911353 -37,,False,4.924196254971815,[],4.924196254971816,4.924196254971812,4.123325504514363,[4.924196254971816],0,0.0,4.924196254971815,4.924196254971815,0.7236666061237521,1.5658037450281883,0.0,0,10.960626215197319,0.0,0.0,0.0,10.960626215197319,,False,4.924196254971816,[],4.924196254971816,4.92419625497182,3.9621701234845172,[4.924196254971816],0.0,0.0,4.924196254971816,4.924196254971816,0.6544976876077656,0.6058037450281812,0.0,0.0,2.423214980112725,0,19.696785019887265,0.0,22.11999999999999,,False,4.924196254971816,[],4.924196254971815,8.886366378456332,4.101792060544325,"[3.962170123484519, 4.924196254971815]",0,0.0,4.924196254971816,4.924196254971816,0.9465662062805866,1.8036336215436677,0.0,0,3.6072672430873354,0,9.848392509943633,0.0,13.455659753030968 -38,,False,6.495434252883474,[],6.495434252883474,6.495434252883468,4.924196254971816,[5.529999999999998],0,0.0,6.490000000000005,6.490000000000005,0.7330060582521601,-0.005434252883468993,0.005434252883468993,0,0.0,0.201719467034369,0.0,0.0,0.201719467034369,,False,6.495434252883474,[],6.495434252883473,6.495434252883475,4.924196254971816,[5.765803745028187],0.0,0.0,5.529999999999998,5.529999999999998,0.6611716456188722,-0.9654342528834761,0.9654342528834761,0.0,0.0,0.0,22.11999999999999,0.0,22.11999999999999,,False,6.495434252883473,[],6.495434252883473,11.419630507855285,3.962170123484519,"[4.924196254971815, 6.495434252883473]",0,0.0,5.765803745028187,5.765803745028187,0.9445696094688697,-0.729630507855286,0.729630507855286,0,0.0,0.0,11.531607490056373,0.0,11.531607490056373 -39,,False,5.33818125199332,[],5.338181251993321,6.303615504876792,5.529999999999998,[5.765803745028187],0,0.0,5.343615504876789,5.33818125199332,0.7402430356774419,0.18638449512320854,0.0,0,1.3046914658624598,0.0,0.0,0.0,1.3046914658624598,,False,5.338181251993321,[],5.338181251993322,6.06781175984861,5.765803745028187,[4.924196254971815],0.0,0.0,5.765803745028187,4.800369492144711,0.6676249052830548,-0.5378117598486103,0.5378117598486103,0.0,0.0,0.0,23.063214980112747,0.0,23.063214980112747,,False,5.338181251993322,[],5.338181251993324,11.833615504876793,4.924196254971815,"[6.495434252883473, 5.338181251993324]",0,0.0,4.924196254971815,4.1945657471165285,0.9402651966402581,-1.1436155048767933,1.1436155048767933,0,0.0,0.0,9.84839250994363,0.0,9.84839250994363 -40,,False,4.6013616099847985,[],4.6013616099847985,5.139173369833404,5.765803745028187,[4.924196254971815],0,0.0,4.6013616099847985,4.6013616099847985,0.7461734616199857,1.3508266301665968,0.0,0,9.455786411166176,0.0,0.0,0.0,9.455786411166176,,False,4.6013616099847985,[],4.601361609984799,5.7449771148615945,4.924196254971815,[5.744977114861593],0.0,0.0,4.924196254971815,4.386384495123204,0.6741465954903371,-0.2149771148615942,0.2149771148615942,0.0,0.0,0.0,19.69678501988726,0.0,19.69678501988726,,False,4.601361609984799,[],4.601361609984799,9.939542861978119,6.495434252883473,"[5.338181251993324, 4.601361609984799]",0,0.0,5.744977114861593,4.601361609984799,0.9416289823175401,0.7504571380218801,0.0,0,1.5009142760437602,0,11.489954229723185,0.0,12.990868505766946 -41,,False,4.939135912525254,[],4.939135912525253,5.154113027386842,4.924196254971815,[5.154113027386847],0,0.0,4.939135912525254,4.939135912525254,0.7522450952776545,1.3358869726131575,0.0,0,9.351208808292103,0.0,0.0,0.0,9.351208808292103,,False,4.939135912525253,[],4.939135912525253,4.939135912525254,5.744977114861593,[4.939135912525253],0.0,0.0,5.154113027386847,4.939135912525253,0.6819411409736971,0.5908640874747455,0.0,0.0,2.363456349898982,0,20.61645210954739,0.0,22.97990845944637,,False,4.939135912525253,[],4.939135912525255,9.540497522510051,5.338181251993324,"[4.601361609984799, 4.939135912525255]",0,0.0,4.939135912525253,4.939135912525253,0.9430252407145349,1.1495024774899507,0.0,0,2.2990049549799014,0,9.878271825050506,0.0,12.177276780030407 -42,,False,3.581249541408597,[],3.581249541408598,3.5812495414085923,5.154113027386847,[0.5908640874747455],0,0.0,3.581249541408597,3.581249541408597,0.7564689261794462,2.9087504585914075,0.0,0,20.361253210139854,0.0,0.0,0.0,20.361253210139854,,True,3.581249541408598,[],3.581249541408599,3.5812495414086003,0,[3.581249541408599],4.939135912525253,0.0,0.5908640874747455,0.5908640874747455,0.6731279083695824,-2.9903854539338526,2.9903854539338526,0.0,9.878271825050506,0.0,2.363456349898982,0.0,12.241728174949488,,False,3.581249541408599,[],3.5812495414085976,8.52038545393385,4.601361609984799,"[4.939135912525255, 3.5812495414085976]",0,0.0,3.581249541408599,3.581249541408599,0.9439965706228642,2.169614546066151,0.0,0,4.339229092132302,0,7.162499082817198,0.0,11.5017281749495 -43,,False,6.0424916173394205,[],6.0424916173394205,9.032877071273267,0.5908640874747455,[0.0],0,0.0,3.499614546066153,3.499614546066153,0.7515114363256561,-2.5428770712732676,2.5428770712732676,0,0.0,94.39159688566369,0.0,0.0,94.39159688566369,,True,6.0424916173394205,[],6.04249161733942,6.0424916173394205,0,[6.04249161733942],8.520385453933851,0.0,0.0,0.0,0.6543067168552267,-9.032877071273273,9.032877071273273,0.0,17.040770907867703,0.0,0.0,0.0,17.040770907867703,,False,6.04249161733942,[],6.042491617339418,9.623741158748011,4.939135912525255,"[3.5812495414085976, 6.042491617339418]",0,0.0,6.04249161733942,6.04249161733942,0.9455624710359385,1.0662588412519858,0.0,0,2.1325176825039716,0,12.08498323467884,0.0,14.21750091718281 -44,,False,4.465583546326495,[],4.465583546326495,13.498460617599761,0.0,[13.498460617599768],0,0.0,0.0,0.0,0.736296696470678,-7.008460617599763,7.008460617599763,0,0.0,260.15405812530315,0.0,0.0,260.15405812530315,,False,4.465583546326495,[],4.465583546326496,4.465583546326497,14.56287707127327,[4.465583546326496],0.0,0.0,13.498460617599768,4.465583546326496,0.6613054571516842,1.0644164536735028,0.0,0.0,4.257665814694011,0,53.99384247039907,0.0,58.25150828509308,,False,4.465583546326496,[],4.4655835463264975,10.50807516366591,3.5812495414085976,"[6.042491617339418, 4.4655835463264975]",0,0.0,4.465583546326496,4.465583546326496,0.9466645871202732,0.18192483633408774,0.0,0,0.3638496726681755,0,8.931167092652991,0.0,9.295016765321167 -45,,False,3.5049461291856643,[],3.504946129185666,3.504946129185658,13.498460617599768,[3.504946129185666],0,0.0,10.513406746785428,3.504946129185665,0.7404214767828957,2.9850538708143413,0.0,0,20.89537709570039,0.0,0.0,0.0,20.89537709570039,,False,3.504946129185666,[],3.504946129185667,3.504946129185668,4.465583546326496,[3.504946129185667],0.0,0.0,3.504946129185666,3.504946129185666,0.666603231443848,2.0250538708143324,0.0,0.0,8.10021548325733,0,14.019784516742664,0.0,22.119999999999994,,False,3.504946129185667,[],3.5049461291856687,7.970529675512162,6.042491617339418,"[4.4655835463264975, 3.5049461291856687]",0,0.0,3.504946129185667,3.504946129185667,0.9474988461456474,2.7194703244878387,0.0,0,5.438940648975677,0,7.009892258371334,0.0,12.448832907347011 -46,,False,4.7878385782883734,[],4.787838578288374,4.787838578288366,3.504946129185666,[4.787838578288374],0,0.0,4.7878385782883734,4.7878385782883734,0.7458518583110725,1.7021614217116339,0.0,0,11.915129951981438,0.0,0.0,0.0,11.915129951981438,,False,4.787838578288374,[],4.787838578288374,4.787838578288374,3.504946129185667,[4.787838578288374],0.0,0.0,4.787838578288374,4.787838578288374,0.6735778903296563,0.742161421711625,0.0,0.0,2.9686456868465,0,19.151354313153497,0.0,22.119999999999997,,False,4.787838578288374,[],4.787838578288373,8.292784707474036,4.4655835463264975,"[3.5049461291856687, 4.787838578288373]",0,0.0,4.787838578288374,4.787838578288374,0.9485971700461197,2.3972152925259618,0.0,0,4.7944305850519235,0,9.575677156576749,0.0,14.370107741628672 -47,,False,4.573131205960277,[],4.573131205960277,4.573131205960269,4.787838578288374,[4.573131205960277],0,0.0,4.573131205960277,4.573131205960277,0.7508307220609337,1.9168687940397309,0.0,0,13.418081558278116,0.0,0.0,0.0,13.418081558278116,,False,4.573131205960277,[],4.573131205960278,4.573131205960278,4.787838578288374,[4.573131205960278],0.0,0.0,4.573131205960277,4.573131205960277,0.6799726300204156,0.956868794039722,0.0,0.0,3.827475176158888,0,18.29252482384111,0.0,22.119999999999997,,False,4.573131205960278,[],4.57313120596028,9.360969784248647,3.5049461291856687,"[4.787838578288373, 4.57313120596028]",0,0.0,4.573131205960278,4.573131205960278,0.9496041720450203,1.3290302157513523,0.0,0,2.6580604315027045,0,9.146262411920556,0.0,11.804322843423261 -48,,False,5.501448331524805,[],5.501448331524805,5.501448331524798,4.573131205960277,[5.501448331524805],0,0.0,5.501448331524805,5.501448331524805,0.7565677219716553,0.9885516684752034,0.0,0,6.919861679326424,0.0,0.0,0.0,6.919861679326424,,False,5.501448331524805,[],5.501448331524805,5.501448331524804,4.573131205960278,[5.501448331524805],0.0,0.0,5.501448331524805,5.501448331524805,0.6873411026033411,0.028551668475195413,0.0,0.0,0.11420667390078165,0,22.00579332609922,0.0,22.12,,False,5.501448331524805,[],5.501448331524805,10.074579537485079,4.787838578288373,"[4.57313120596028, 5.501448331524805]",0,0.0,5.501448331524805,5.501448331524805,0.950764511164152,0.61542046251492,0.0,0,1.23084092502984,0,11.00289666304961,0.0,12.23373758807945 -49,,False,6.158186652932027,[],6.158186652932026,6.158186652932019,5.501448331524805,[5.53],0,0.0,6.158186652932027,6.158186652932027,0.762684081823915,0.33181334706798093,0.0,0,2.3226934294758665,0.0,0.0,0.0,2.3226934294758665,,False,6.158186652932026,[],6.158186652932027,6.158186652932026,5.501448331524805,[5.1885516684752],0.0,0.0,5.53,5.53,0.6926338040036177,-0.6281866529320261,0.6281866529320261,0.0,0.0,0.0,22.12,0.0,22.12,,False,6.158186652932027,[],6.158186652932029,11.65963498445683,4.57313120596028,"[5.501448331524805, 6.158186652932029]",0,0.0,5.1885516684752,5.1885516684752,0.9480454502438678,-0.9696349844568273,0.9696349844568273,0,0.0,0.0,10.3771033369504,0.0,10.3771033369504 -50,,False,6.371862133549777,[],6.371862133549777,7.000048786481796,5.53,[5.1885516684752],0,0.0,5.861813347067981,5.861813347067981,0.7666690505680388,-0.5100487864817955,0.5100487864817955,0,0.0,18.93301095420425,0.0,0.0,18.93301095420425,,False,6.371862133549777,[],6.371862133549777,7.341497118006603,5.1885516684752,[5.501448331524805],0.0,0.0,5.1885516684752,4.560365015543174,0.6932183611152801,-1.8114971180066028,1.8114971180066028,0.0,0.0,0.0,20.7542066739008,0.0,20.7542066739008,,False,6.371862133549777,[],6.371862133549775,12.5300487864818,5.501448331524805,"[6.158186652932029, 6.371862133549775]",0,0.0,5.501448331524805,4.531813347067978,0.9420447009271178,-1.8400487864817991,1.8400487864817991,0,0.0,0.0,11.00289666304961,0.0,11.00289666304961 -51,,False,5.175553293954833,[],5.175553293954833,6.987050411961429,5.1885516684752,[5.501448331524805],0,0.0,5.1885516684752,4.6785028819934045,0.7694377310057484,-0.4970504119614283,0.4970504119614283,0,0.0,18.450511292008215,0.0,0.0,18.450511292008215,,False,5.175553293954833,[],5.175553293954833,7.01560208043663,5.501448331524805,[6.158186652932029],0.0,0.0,5.501448331524805,3.689951213518202,0.6936164319012494,-1.4856020804366308,1.4856020804366308,0.0,0.0,0.0,22.00579332609922,0.0,22.00579332609922,,False,5.175553293954833,[],5.175553293954831,11.547415427504601,6.158186652932029,"[6.371862133549775, 5.175553293954831]",0,0.0,6.158186652932029,4.31813786645023,0.9398725722110832,-0.8574154275046029,0.8574154275046029,0,0.0,0.0,12.316373305864058,0.0,12.316373305864058 -52,,False,4.743369817307445,[],4.743369817307444,6.228971897744068,5.501448331524805,[6.158186652932029],0,0.0,5.2404202292688735,4.743369817307445,0.7736217143456557,0.2610281022559313,0.0,0,1.8271967157915192,0.0,0.0,0.0,1.8271967157915192,,False,4.743369817307444,[],4.743369817307445,5.600785244812046,6.158186652932029,[5.600785244812048],0.0,0.0,6.158186652932029,4.672584572495398,0.698905528950953,-0.07078524481204607,0.07078524481204607,0.0,0.0,0.0,24.632746611728116,0.0,24.632746611728116,,False,4.743369817307445,[],4.743369817307447,9.918923111262274,6.371862133549775,"[5.175553293954831, 4.743369817307447]",0,0.0,5.600785244812048,4.743369817307445,0.9409636967790262,0.7710768887377268,0.0,0,1.5421537774754537,0,11.201570489624096,0.0,12.74372426709955 -53,,False,4.632174275867238,[],4.632174275867239,4.702959520679277,6.158186652932029,[4.702959520679285],0,0.0,4.632174275867238,4.632174275867238,0.7775636129253085,1.787040479320722,0.0,0,12.509283355245053,0.0,0.0,0.0,12.509283355245053,,False,4.632174275867239,[],4.632174275867239,4.6321742758672375,5.600785244812048,[4.632174275867239],0.0,0.0,4.702959520679285,4.632174275867239,0.7041484517177672,0.8978257241327627,0.0,0.0,3.591302896531051,0,18.81183808271714,0.0,22.403140979248192,,False,4.632174275867239,[],4.6321742758672375,9.37554409317468,5.175553293954831,"[4.743369817307447, 4.6321742758672375]",0,0.0,4.632174275867239,4.632174275867239,0.9419916890139796,1.3144559068253185,0.0,0,2.628911813650637,0,9.264348551734479,0.0,11.893260365385116 -54,,False,2.34482395243653,[],2.3448239524365313,2.3448239524365233,4.702959520679285,[2.3448239524365313],0,0.0,2.34482395243653,2.34482395243653,0.7795071398513775,4.145176047563478,0.0,0,29.016232332944345,0.0,0.0,0.0,29.016232332944345,,False,2.3448239524365313,[],2.3448239524365313,2.3448239524365295,4.632174275867239,[2.3448239524365313],0.0,0.0,2.3448239524365313,2.3448239524365313,0.7067334399823565,3.1851760475634707,0.0,0.0,12.740704190253883,0,9.379295809746125,0.0,22.120000000000008,,False,2.3448239524365313,[],2.344823952436533,6.976998228303766,4.743369817307447,"[4.6321742758672375, 2.344823952436533]",0,0.0,2.3448239524365313,2.3448239524365313,0.9424985337610096,3.7130017716962342,0.0,0,7.4260035433924685,0,4.689647904873063,0.0,12.115651448265531 -55,,False,5.345517943888766,[],5.3455179438887654,5.3455179438887575,2.3448239524365313,[5.3455179438887654],0,0.0,5.345517943888766,5.345517943888766,0.783813329885836,1.1444820561112428,0.0,0,8.011374392778698,0.0,0.0,0.0,8.011374392778698,,False,5.3455179438887654,[],5.3455179438887654,5.345517943888764,2.3448239524365313,[5.3455179438887654],0.0,0.0,5.3455179438887654,5.3455179438887654,0.712460888650475,0.18448205611123658,0.0,0.0,0.7379282244449463,0,21.382071775555062,0.0,22.120000000000008,,False,5.3455179438887654,[],5.345517943888764,7.690341896325291,4.6321742758672375,"[2.344823952436533, 5.345517943888764]",0,0.0,5.3455179438887654,5.3455179438887654,0.9436215281324292,2.9996581036747063,0.0,0,5.999316207349413,0,10.691035887777531,0.0,16.690352095126944 -56,,False,5.45293632653351,[],5.45293632653351,5.452936326533502,5.3455179438887654,[5.45293632653351],0,0.0,5.45293632653351,5.45293632653351,0.7880361358238815,1.0370636734664984,0.0,0,7.259445714265489,0.0,0.0,0.0,7.259445714265489,,False,5.45293632653351,[],5.45293632653351,5.452936326533507,5.3455179438887654,[5.344482056111239],0.0,0.0,5.45293632653351,5.45293632653351,0.7180774322892939,0.07706367346649223,0.0,0.0,0.30825469386596893,0,21.81174530613404,0.0,22.120000000000008,,False,5.45293632653351,[],5.452936326533512,10.79845427042227,2.344823952436533,"[5.345517943888764, 5.452936326533512]",0,0.0,5.344482056111239,5.344482056111239,0.9443342794020506,-0.1084542704222704,0.1084542704222704,0,0.0,0.0,10.688964112222479,0.0,10.688964112222479 -57,,False,4.833939091648935,[],4.833939091648935,4.833939091648927,5.45293632653351,[4.833939091648935],0,0.0,4.833939091648935,4.833939091648935,0.7916439901243184,1.6560609083510736,0.0,0,11.592426358457516,0.0,0.0,0.0,11.592426358457516,,False,4.833939091648935,[],4.8339390916489355,4.942393362071204,5.344482056111239,[4.942393362071206],0.0,0.0,4.833939091648935,4.833939091648935,0.7228760594150012,0.587606637928797,0.0,0.0,2.350426551715188,0,19.33575636659574,0.0,21.686182918310926,,False,4.8339390916489355,[],4.833939091648934,10.286875418182442,5.345517943888764,"[5.452936326533512, 4.833939091648934]",0,0.0,4.942393362071206,4.8339390916489355,0.9452817701935912,0.4031245818175577,0.0,0,0.8062491636351155,0,9.884786724142412,0.0,10.691035887777527 -58,,False,4.056943191532738,[],4.056943191532738,4.05694319153273,4.833939091648935,[4.056943191532738],0,0.0,4.056943191532738,4.056943191532738,0.7945784682609872,2.4330568084672706,0.0,0,17.031397659270894,0.0,0.0,0.0,17.031397659270894,,False,4.056943191532738,[],4.056943191532737,4.056943191532735,4.942393362071206,[4.056943191532737],0.0,0.0,4.056943191532738,4.056943191532738,0.726779062478265,1.4730568084672653,0.0,0.0,5.892227233869061,0,16.22777276613095,0.0,22.12000000000001,,False,4.056943191532737,[],4.056943191532737,8.890882283181668,5.452936326533512,"[4.833939091648934, 4.056943191532737]",0,0.0,4.056943191532737,4.056943191532737,0.9460524196658091,1.7991177168183325,0.0,0,3.598235433636665,0,8.113886383065473,0.0,11.712121816702139 -59,,False,6.403958738659293,[],6.403958738659293,6.403958738659285,4.056943191532738,[5.530000000000002],0,0.0,6.403958738659293,6.403958738659293,0.7990460347542058,0.0860412613407151,0.0,0,0.6022888293850057,0.0,0.0,0.0,0.6022888293850057,,False,6.403958738659293,[],6.403958738659293,6.403958738659291,4.056943191532737,[6.403958738659293],0.0,0.0,5.530000000000002,5.530000000000002,0.7297531255348746,-0.8739587386592911,0.8739587386592911,0.0,0.0,0.0,22.120000000000008,0.0,22.120000000000008,,False,6.403958738659293,[],6.403958738659291,10.460901930192026,4.833939091648934,"[4.056943191532737, 6.403958738659291]",0,0.0,6.403958738659293,6.403958738659293,0.9472256871429373,0.2290980698079732,0.0,0,0.4581961396159464,0,12.807917477318586,0.0,13.266113616934533 -60,,False,4.98144919548836,[],4.98144919548836,5.855407934147643,5.530000000000002,[5.855407934147651],0,0.0,4.98144919548836,4.98144919548836,0.8023890870227557,0.634592065852357,0.0,0,4.442144460966499,0.0,0.0,0.0,4.442144460966499,,False,4.98144919548836,[],4.98144919548836,4.9814491954883575,6.403958738659293,[4.28604126134071],0.0,0.0,5.855407934147651,4.98144919548836,0.7342489284698608,0.5485508045116418,0.0,0.0,2.1942032180465674,0,23.421631736590605,0.0,25.615834954637172,,False,4.98144919548836,[],4.98144919548836,11.385407934147649,4.056943191532737,"[6.403958738659291, 4.98144919548836]",0,0.0,4.28604126134071,4.28604126134071,0.9457812706710783,-0.6954079341476502,0.6954079341476502,0,0.0,0.0,8.57208252268142,0.0,8.57208252268142 -61,,False,3.326495378009777,[],3.326495378009777,3.326495378009769,5.855407934147651,[3.326495378009777],0,0.0,3.326495378009777,3.326495378009777,0.8045602414920744,3.1635046219902314,0.0,0,22.14453235393162,0.0,0.0,0.0,22.14453235393162,,False,3.326495378009777,[],3.3264953780097777,4.021903312157425,4.28604126134071,[4.021903312157428],0.0,0.0,3.326495378009777,3.326495378009777,0.7371687400227043,1.508096687842575,0.0,0.0,6.0323867513703,0,13.305981512039107,0.0,19.338368263409407,,False,3.3264953780097777,[],3.3264953780097795,8.307944573498137,6.403958738659291,"[4.98144919548836, 3.3264953780097795]",0,0.0,4.021903312157428,3.3264953780097777,0.9463769727744172,2.3820554265018634,0.0,0,4.764110853003727,0,8.043806624314856,0.0,12.807917477318583 -62,,False,5.1023476825496665,[],5.1023476825496665,5.1023476825496585,3.326495378009777,[5.1023476825496665],0,0.0,5.1023476825496665,5.1023476825496665,0.8077992933620737,1.3876523174503417,0.0,0,9.71356622215239,0.0,0.0,0.0,9.71356622215239,,False,5.1023476825496665,[],5.1023476825496665,5.102347682549664,4.021903312157428,[5.1023476825496665],0.0,0.0,5.1023476825496665,5.1023476825496665,0.7415246811609001,0.4276523174503364,0.0,0.0,1.7106092698013455,0,20.409390730198666,0.0,22.12000000000001,,False,5.1023476825496665,[],5.102347682549665,8.42884306055944,4.98144919548836,"[3.3264953780097795, 5.102347682549665]",0,0.0,5.1023476825496665,5.1023476825496665,0.9472656750934134,2.261156939440557,0.0,0,4.522313878881114,0,10.204695365099333,0.0,14.727009243980447 -63,,False,4.5673907194519865,[],4.5673907194519865,4.5673907194519785,5.1023476825496665,[4.5673907194519865],0,0.0,4.5673907194519865,4.5673907194519865,0.8106090093167112,1.9226092805480217,0.0,0,13.458264963836152,0.0,0.0,0.0,13.458264963836152,,False,4.5673907194519865,[],4.5673907194519865,4.567390719451984,5.1023476825496665,[4.5673907194519865],0.0,0.0,4.5673907194519865,4.5673907194519865,0.7453032428526131,0.9626092805480164,0.0,0.0,3.8504371221920657,0,18.269562877807946,0.0,22.12000000000001,,False,4.5673907194519865,[],4.567390719451988,9.66973840200165,3.3264953780097795,"[5.102347682549665, 4.567390719451988]",0,0.0,4.5673907194519865,4.5673907194519865,0.9480365800325206,1.02026159799835,0.0,0,2.0405231959967,0,9.134781438903973,0.0,11.175304634900673 -64,,False,5.477754099433527,[],5.477754099433527,5.477754099433519,4.5673907194519865,[0.9626092805480164],0,0.0,5.477754099433527,5.477754099433527,0.8138722782501437,1.012245900566481,0.0,0,7.085721303965367,0.0,0.0,0.0,7.085721303965367,,True,5.477754099433527,[],5.477754099433527,5.4777540994335245,0,[5.477754099433527],4.5673907194519865,0.0,0.9626092805480164,0.9626092805480164,0.7354893201016812,-4.515144818885511,4.515144818885511,0.0,9.134781438903973,0.0,3.8504371221920657,0.0,12.985218561096039,,False,5.477754099433527,[],5.477754099433525,10.045144818885511,5.102347682549665,"[4.567390719451988, 5.477754099433525]",0,0.0,5.477754099433527,5.477754099433527,0.9489319268145561,0.6448551811144876,0.0,0,1.2897103622289752,0,10.955508198867054,0.0,12.24521856109603 -65,,False,4.7409713552611095,[],4.7409713552611095,9.256116174146612,0.9626092805480164,[0.0],0,0.0,1.9748551811144974,1.9748551811144974,0.8080341755896595,-2.766116174146612,2.766116174146612,0,0.0,102.67823238432223,0.0,0.0,102.67823238432223,,True,4.7409713552611095,[],4.7409713552611095,4.740971355261108,0,[4.7409713552611095],10.045144818885515,0.0,0.0,0.0,0.7246822989163131,-9.25611617414662,9.25611617414662,0.0,20.09028963777103,0.0,0.0,0.0,20.09028963777103,,False,4.7409713552611095,[],4.740971355261111,10.218725454694635,4.567390719451988,"[5.477754099433525, 4.740971355261111]",0,0.0,4.7409713552611095,4.7409713552611095,0.9496823031065391,0.4712745453053664,0.0,0,0.9425490906107328,0,9.481942710522219,0.0,10.424491801132952 -66,,False,5.339820964186644,[],5.339820964186644,14.595937138333255,0.0,[0.0],0,0.0,0.0,0.0,0.7948791975287575,-8.105937138333257,8.105937138333257,0,0.0,300.89238657493047,0.0,0.0,300.89238657493047,,True,5.339820964186644,[],5.339820964186641,5.339820964186639,0,[5.339820964186641],14.786116174146624,0.0,0.0,0.0,0.7128843081488913,-14.595937138333262,14.595937138333262,0.0,29.572232348293248,0.0,0.0,0.0,29.572232348293248,,False,5.339820964186641,[],5.339820964186639,10.080792319447749,5.477754099433525,"[4.740971355261111, 5.339820964186639]",0,0.0,5.339820964186641,5.339820964186641,0.9505014865256384,0.6092076805522506,0.0,0,1.2184153611045012,0,10.679641928373282,0.0,11.898057289477784 -67,,False,4.992619850055427,[],4.992619850055429,19.588556988388685,0.0,[0.0],0,0.0,0.0,0.0,0.7829612229347019,-13.098556988388683,13.098556988388683,0,0.0,486.2184354089879,0.0,0.0,486.2184354089879,,True,4.992619850055429,[],4.992619850055428,4.992619850055426,0,[4.992619850055428],20.125937138333263,0.0,0.0,0.0,0.7021957191162013,-19.588556988388692,19.588556988388692,0.0,40.25187427666653,0.0,0.0,0.0,40.25187427666653,,False,4.992619850055428,[],4.992619850055428,10.332440814242066,4.740971355261111,"[5.339820964186639, 4.992619850055428]",0,0.0,4.992619850055428,4.992619850055428,0.9512436395821845,0.35755918575793366,0.0,0,0.7151183715158673,0,9.985239700110856,0.0,10.700358071626724 -68,,False,4.224663894043056,[],4.224663894043054,23.81322088243174,0.0,[23.813220882431747],0,0.0,0.0,0.0,0.7731521055704907,-17.32322088243174,17.32322088243174,0,0.0,643.0379591558661,0.0,0.0,643.0379591558661,,False,4.224663894043054,[],4.224663894043057,4.224663894043056,25.11855698838869,[4.224663894043057],0.0,0.0,23.813220882431747,4.224663894043054,0.7059266792930086,1.3053361059569433,0.0,0.0,5.221344423827773,0,95.25288352972699,0.0,100.47422795355476,,False,4.224663894043057,[],4.224663894043057,9.217283744098484,5.339820964186639,"[4.992619850055428, 4.224663894043057]",0,0.0,4.224663894043057,4.224663894043057,0.9518544704223091,1.4727162559015161,0.0,0,2.9454325118030322,0,8.449327788086114,0.0,11.394760299889146 -69,,False,5.773140855889249,[],5.773140855889251,5.773140855889242,23.813220882431747,[5.53],0,0.0,23.09636173832099,5.773140855889249,0.77697042385283,0.7168591441107566,0.0,0,5.018014008775296,0.0,0.0,0.0,5.018014008775296,,False,5.773140855889251,[],5.773140855889252,5.77314085588925,4.224663894043057,[5.773140855889252],0.0,0.0,5.53,5.53,0.7101676432163625,-0.2431408558892505,0.2431408558892505,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.773140855889252,[],5.77314085588925,9.997804749932305,4.992619850055428,"[4.224663894043057, 5.77314085588925]",0,0.0,5.773140855889252,5.773140855889252,0.9526648590585436,0.6921952500676927,0.0,0,1.3843905001353853,0,11.546281711778503,0.0,12.930672211913889 -70,,False,6.405205305878188,[],6.40520530587819,6.648346161767432,5.53,[5.773140855889252],0,0.0,6.246859144110757,6.246859144110757,0.78060591518001,-0.15834616176743133,0.15834616176743133,0,0.0,5.87780952480705,0.0,0.0,5.87780952480705,,False,6.40520530587819,[],6.405205305878191,6.405205305878188,5.773140855889252,[4.91685914411075],0.0,0.0,5.773140855889252,5.530000000000001,0.7129760539846371,-0.8752053058781888,0.8752053058781888,0.0,0.0,0.0,23.092563423557007,0.0,23.092563423557007,,False,6.405205305878191,[],6.405205305878193,12.17834616176744,4.224663894043057,"[5.77314085588925, 6.405205305878193]",0,0.0,4.91685914411075,4.91685914411075,0.9492727897347437,-1.4883461617674412,1.4883461617674412,0,0.0,0.0,9.8337182882215,0.0,9.8337182882215 -71,,False,6.392325753491903,[],6.392325753491902,7.267531059370083,5.773140855889252,[4.91685914411075],0,0.0,5.773140855889252,5.61479469412182,0.7823623473457916,-0.7775310593700828,0.7775310593700828,0,0.0,28.861952923817473,0.0,0.0,28.861952923817473,,False,6.392325753491902,[],6.392325753491903,7.880671915259341,4.91685914411075,[5.77314085588925],0.0,0.0,4.91685914411075,4.041653838232561,0.711525949759459,-2.3506719152593414,2.3506719152593414,0.0,0.0,0.0,19.667436576443,0.0,19.667436576443,,False,6.392325753491903,[],6.392325753491905,12.797531059370097,5.77314085588925,"[6.405205305878193, 6.392325753491905]",0,0.0,5.77314085588925,4.284794694121809,0.9442605493134872,-2.1075310593700944,2.1075310593700944,0,0.0,0.0,11.5462817117785,0.0,11.5462817117785 -72,,False,4.5065675177966735,[],4.5065675177966735,6.857239433056008,4.91685914411075,[0.0],0,0.0,4.91685914411075,4.139328084740667,0.78406531258446,-0.3672394330560067,0.3672394330560067,0,0.0,13.631927755038967,0.0,0.0,13.631927755038967,,True,4.5065675177966735,[],4.506567517796674,6.614098577166765,0,[6.405205305878193],5.77314085588925,0.0,0.0,0.0,0.7026260352458226,-6.857239433056015,6.857239433056015,0.0,11.5462817117785,0.0,0.0,0.0,11.5462817117785,,False,4.506567517796674,[],4.506567517796671,10.898893271288577,6.405205305878193,"[6.392325753491905, 4.506567517796671]",0,0.0,6.405205305878193,4.297674246508098,0.9443779560267261,-0.20889327128857627,0.20889327128857627,0,0.0,0.0,12.810410611756385,0.0,12.810410611756385 -73,,False,5.923162608341952,[],5.9231626083419515,12.78040204139796,0.0,[0.0],0,0.0,0.0,0.0,0.7713837333007988,-6.290402041397959,6.290402041397959,0,0.0,233.49972377669224,0.0,0.0,233.49972377669224,,True,5.9231626083419515,[],5.9231626083419515,6.132055879630524,0,[6.132055879630528],12.178346161767443,0.0,0.0,0.0,0.6912616659391845,-12.780402041397966,12.780402041397966,0.0,24.356692323534887,0.0,0.0,0.0,24.356692323534887,,False,5.9231626083419515,[],5.92316260834195,10.42973012613862,6.392325753491905,"[4.506567517796671, 5.92316260834195]",0,0.0,6.132055879630528,5.9231626083419515,0.9452775945507685,0.2602698738613771,0.0,0,0.5205397477227542,0,12.264111759261056,0.0,12.78465150698381 -74,,False,6.706604953678462,[],6.706604953678462,19.48700699507642,0.0,[0.0],0,0.0,0.0,0.0,0.7575110916978401,-12.997006995076422,12.997006995076422,0,0.0,482.4488996572367,0.0,0.0,482.4488996572367,,True,6.706604953678462,[],6.706604953678461,6.7066049536784575,0,[4.766837391658048],18.31040204139797,0.0,0.0,0.0,0.6788299475460524,-19.487006995076428,19.487006995076428,0.0,36.62080408279594,0.0,0.0,0.0,36.62080408279594,,False,6.706604953678461,[],6.706604953678463,12.629767562020412,4.506567517796671,"[5.92316260834195, 6.706604953678463]",0,0.0,4.766837391658048,4.766837391658048,0.9410601432291905,-1.9397675620204131,1.9397675620204131,0,0.0,0.0,9.533674783316096,0.0,9.533674783316096 -75,,False,5.873589415635379,[],5.873589415635381,25.3605964107118,0.0,[0.0],0,0.0,0.0,0.0,0.7457650490005422,-18.8705964107118,18.8705964107118,0,0.0,700.476538765622,0.0,0.0,700.476538765622,,True,5.873589415635381,[],5.87358941563538,7.813356977655789,0,[5.92316260834195],23.077239433056018,0.0,0.0,0.0,0.6683039425337575,-25.360596410711807,25.360596410711807,0.0,46.154478866112036,0.0,0.0,0.0,46.154478866112036,,False,5.87358941563538,[],5.873589415635382,12.580194369313844,5.92316260834195,"[6.706604953678463, 5.873589415635382]",0,0.0,5.92316260834195,3.9833950463215366,0.9369840140791679,-1.8901943693138437,1.8901943693138437,0,0.0,0.0,11.8463252166839,0.0,11.8463252166839 -76,,False,5.649086732629106,[],5.649086732629108,31.009683143340908,0.0,[0.0],0,0.0,0.0,0.0,0.7348065702977933,-24.519683143340906,24.519683143340906,0,0.0,910.1706382808144,0.0,0.0,910.1706382808144,,True,5.649086732629108,[],5.649086732629107,7.539281101942946,0,[6.706604953678463],29.00040204139797,0.0,0.0,0.0,0.6584836988376573,-31.009683143340915,31.009683143340915,0.0,58.00080408279594,0.0,0.0,0.0,58.00080408279594,,False,5.649086732629107,[],5.649086732629105,11.522676148264486,6.706604953678463,"[5.873589415635382, 5.649086732629105]",0,0.0,6.706604953678463,4.816410584364619,0.9357440499588403,-0.832676148264488,0.832676148264488,0,0.0,0.0,13.413209907356926,0.0,13.413209907356926 -77,,False,3.7771264633246933,[],3.7771264633246915,34.7868096066656,0.0,[0.0],0,0.0,0.0,0.0,0.7276573538150011,-28.296809606665597,28.296809606665597,0,0.0,1050.377572599427,0.0,0.0,1050.377572599427,,True,3.7771264633246915,[],3.7771264633246906,4.609802611589174,0,[4.609802611589179],35.70700699507643,0.0,0.0,0.0,0.6520770570033685,-34.78680960666561,34.78680960666561,0.0,71.41401399015287,0.0,0.0,0.0,71.41401399015287,,False,3.7771264633246906,[],3.7771264633246924,9.426213195953796,5.873589415635382,"[5.649086732629105, 3.7771264633246924]",0,0.0,4.609802611589179,3.7771264633246906,0.9363692208755423,1.2637868040462035,0.0,0,2.527573608092407,0,9.219605223178357,0.0,11.747178831270764 -78,,False,5.620548215961735,[],5.620548215961733,40.40735782262733,0.0,[40.316809606665615],0,0.0,0.0,0.0,0.7172728214534755,-33.91735782262733,33.91735782262733,0,0.0,1259.0123223759265,0.0,0.0,1259.0123223759265,,False,5.620548215961733,[],5.620548215961732,5.620548215961729,40.316809606665615,[5.620548215961732],0.0,0.0,40.316809606665615,5.530000000000008,0.6568124177312192,-0.09054821596172502,0.09054821596172502,0.0,0.0,0.0,161.26723842666246,0.0,161.26723842666246,,False,5.620548215961732,[],5.620548215961732,9.397674679286425,5.649086732629105,"[3.7771264633246924, 5.620548215961732]",0,0.0,5.620548215961732,5.620548215961732,0.9372773074653948,1.2923253207135765,0.0,0,2.584650641427153,0,11.241096431923465,0.0,13.825747073350618 -79,,False,4.839062623136937,[],4.839062623136935,4.92961083909865,40.316809606665615,[4.92961083909866],0,0.0,38.75642044576427,4.83906262313694,0.7207044994122909,1.5603891609013472,0.0,0,10.92272412630943,0.0,0.0,0.0,10.92272412630943,,False,4.839062623136935,[],4.839062623136932,4.839062623136928,5.620548215961732,[4.839062623136932],0.0,0.0,4.92961083909866,4.839062623136935,0.6609779502699211,0.6909373768630722,0.0,0.0,2.763749507452289,0,19.71844335639464,0.0,22.48219286384693,,False,4.839062623136932,[],4.83906262313693,10.459610839098662,3.7771264633246924,"[5.620548215961732, 4.83906262313693]",0,0.0,4.839062623136932,4.839062623136932,0.938038621190503,0.23038916090133732,0.0,0,0.46077832180267464,0,9.678125246273863,0.0,10.138903568076538 -80,,False,4.643254974231806,[],4.643254974231809,4.643254974231799,4.92961083909866,[4.643254974231809],0,0.0,4.643254974231806,4.643254974231806,0.7239199019988789,1.8467450257682012,0.0,0,12.92721518037741,0.0,0.0,0.0,12.92721518037741,,False,4.643254974231809,[],4.643254974231809,4.643254974231806,4.839062623136932,[4.643254974231809],0.0,0.0,4.643254974231809,4.643254974231809,0.6648809575626223,0.886745025768195,0.0,0.0,3.54698010307278,0,18.573019896927235,0.0,22.120000000000015,,False,4.643254974231809,[],4.643254974231809,9.482317597368738,5.620548215961732,"[4.83906262313693, 4.643254974231809]",0,0.0,4.643254974231809,4.643254974231809,0.9387519544782694,1.207682402631261,0.0,0,2.415364805262522,0,9.286509948463618,0.0,11.70187475372614 -81,,False,5.556121798533965,[],5.556121798533965,5.556121798533955,4.643254974231809,[5.530000000000004],0,0.0,5.556121798533965,5.556121798533965,0.7276714781907057,0.9338782014660447,0.0,0,6.537147410262313,0.0,0.0,0.0,6.537147410262313,,False,5.556121798533965,[],5.556121798533964,5.556121798533962,4.643254974231809,[5.556121798533964],0.0,0.0,5.530000000000004,5.530000000000004,0.6693709110311259,-0.02612179853396146,0.02612179853396146,0.0,0.0,0.0,22.120000000000015,0.0,22.120000000000015,,False,5.556121798533964,[],5.556121798533966,10.199376772765774,4.83906262313693,"[4.643254974231809, 5.556121798533966]",0,0.0,5.556121798533964,5.556121798533964,0.9395842372506927,0.49062322723422636,0.0,0,0.9812464544684527,0,11.112243597067929,0.0,12.093490051536381 -82,,False,6.363886524417105,[],6.363886524417106,6.390008322951057,5.530000000000004,[5.556121798533964],0,0.0,6.363886524417105,6.363886524417105,0.731845118776755,0.0999916770489433,0.0,0,0.6999417393426031,0.0,0.0,0.0,0.6999417393426031,,False,6.363886524417106,[],6.363886524417106,6.3638865244171035,5.556121798533964,[5.133878201466035],0.0,0.0,5.556121798533964,5.530000000000003,0.6724298542927525,-0.8338865244171032,0.8338865244171032,0.0,0.0,0.0,22.224487194135857,0.0,22.224487194135857,,False,6.363886524417106,[],6.363886524417104,11.92000832295107,4.643254974231809,"[5.556121798533966, 6.363886524417104]",0,0.0,5.133878201466035,5.133878201466035,0.9375480011412647,-1.230008322951071,1.230008322951071,0,0.0,0.0,10.26775640293207,0.0,10.26775640293207 -83,,False,7.539162716269333,[],7.539162716269333,8.373049240686424,5.556121798533964,[5.133878201466035],0,0.0,5.656113475582908,5.656113475582908,0.7321729817331879,-1.8830492406864252,1.8830492406864252,0,0.0,69.8987878142801,0.0,0.0,69.8987878142801,,False,7.539162716269333,[],7.539162716269333,8.7691710392204,5.133878201466035,[5.556121798533966],0.0,0.0,5.133878201466035,4.299991677048932,0.6706096035115402,-3.239171039220401,3.239171039220401,0.0,0.0,0.0,20.53551280586414,0.0,20.53551280586414,,False,7.539162716269333,[],7.539162716269335,13.903049240686439,5.556121798533966,"[6.363886524417104, 7.539162716269335]",0,0.0,5.556121798533966,4.326113475582895,0.9310618602073316,-3.2130492406864377,3.2130492406864377,0,0.0,0.0,11.112243597067932,0.0,11.112243597067932 -84,,False,3.559958552316202,[],3.559958552316204,6.799129591536592,5.133878201466035,[0.0],0,0.0,5.133878201466035,3.25082896077961,0.733684270620024,-0.30912959153659214,0.30912959153659214,0,0.0,11.4748904378383,0.0,0.0,11.4748904378383,,True,3.559958552316204,[],3.5599585523162056,6.773007793002638,0,[6.363886524417104],5.556121798533966,0.0,0.0,0.0,0.6650099876834432,-6.799129591536605,6.799129591536605,0.0,11.112243597067932,0.0,0.0,0.0,11.112243597067932,,False,3.5599585523162056,[],3.5599585523162034,11.099121268585538,6.363886524417104,"[7.539162716269335, 3.5599585523162034]",0,0.0,6.363886524417104,3.1508372837306666,0.9306778845102693,-0.409121268585539,0.409121268585539,0,0.0,0.0,12.727773048834209,0.0,12.727773048834209 -85,,False,6.19072725611364,[],6.19072725611364,12.989856847650232,0.0,[0.0],0,0.0,0.0,0.0,0.7231832013665238,-6.499856847650232,6.499856847650232,0,0.0,241.27468618477658,0.0,0.0,241.27468618477658,,True,6.19072725611364,[],6.190727256113641,6.599848524699176,0,[6.59984852469918],11.92000832295107,0.0,0.0,0.0,0.6554918390538813,-12.989856847650245,12.989856847650245,0.0,23.84001664590214,0.0,0.0,0.0,23.84001664590214,,False,6.190727256113641,[],6.190727256113641,9.750685808429846,7.539162716269335,"[3.5599585523162034, 6.190727256113641]",0,0.0,6.59984852469918,6.190727256113641,0.9316700774258154,0.9393141915701548,0.0,0,1.8786283831403097,0,13.19969704939836,0.0,15.07832543253867 -86,,False,5.617640845511145,[],5.617640845511145,18.607497693161378,0.0,[18.51985684765025],0,0.0,0.0,0.0,0.7139110456884356,-12.117497693161377,12.117497693161377,0,0.0,449.8015143701503,0.0,0.0,449.8015143701503,,False,5.617640845511145,[],5.617640845511144,5.61764084551114,18.51985684765025,[4.499272743886358],0.0,0.0,18.51985684765025,5.530000000000005,0.6597088595039259,-0.0876408455111406,0.0876408455111406,0.0,0.0,0.0,74.079427390601,0.0,74.079427390601,,False,5.617640845511144,[],5.617640845511143,11.808368101624787,3.5599585523162034,"[6.190727256113641, 5.617640845511143]",0,0.0,4.499272743886358,4.499272743886358,0.9299936715822918,-1.1183681016247862,1.1183681016247862,0,0.0,0.0,8.998545487772716,0.0,8.998545487772716 -87,,False,6.21707079698011,[],6.21707079698011,6.304711642491238,18.51985684765025,[0.0],0,0.0,18.334568490141486,6.217070796980108,0.7179136830864057,0.18528835750876205,1.7763568394002505e-15,0,1.2970185025613343,0.0,0.0,0.0,1.2970185025613343,,True,6.21707079698011,[],6.217070796980111,7.335438898604892,0,[6.190727256113641],4.499272743886358,0.0,0.0,0.0,0.6504789493203021,-6.304711642491251,6.304711642491251,0.0,8.998545487772716,0.0,0.0,0.0,8.998545487772716,,False,6.217070796980111,[],6.217070796980109,11.834711642491255,6.190727256113641,"[5.617640845511143, 6.217070796980109]",0,0.0,6.190727256113641,5.072359154488855,0.9283970651442716,-1.1447116424912558,1.1447116424912558,0,0.0,0.0,12.381454512227283,0.0,12.381454512227283 -88,,False,5.226288269498875,[],5.226288269498875,11.530999911990113,0.0,[0.0],0,0.0,0.18528835750876205,0.18528835750876027,0.7099804134169311,-5.040999911990113,5.040999911990115,0,0.0,187.121916733073,0.0,0.0,187.121916733073,,True,5.226288269498875,[],5.226288269498876,6.370999911990127,0,[5.617640845511143],10.69,0.0,0.0,0.0,0.6429174499606872,-11.530999911990126,11.530999911990126,0.0,21.38,0.0,0.0,0.0,21.38,,False,5.226288269498876,[],5.226288269498876,11.443359066478987,5.617640845511143,"[6.217070796980109, 5.226288269498876]",0,0.0,5.617640845511143,4.472929203019887,0.9275537641300594,-0.7533590664789891,0.7533590664789891,0,0.0,0.0,11.235281691022285,0.0,11.235281691022285 -89,,False,5.847401432576639,[],5.847401432576639,17.378401344566754,0.0,[0.0],0,0.0,0.0,0.0,0.7008649539072025,-10.888401344566752,10.888401344566754,0,0.0,404.1774579103178,0.0,0.0,404.1774579103178,,True,5.847401432576639,[],5.847401432576638,6.600760499055622,0,[6.217070796980109],16.30764084551114,0.0,0.0,0.0,0.6346630138206679,-17.378401344566765,17.378401344566765,0.0,32.61528169102228,0.0,0.0,0.0,32.61528169102228,,False,5.847401432576638,[],5.84740143257664,11.073689702075516,6.217070796980109,"[5.226288269498876, 5.84740143257664]",0,0.0,6.217070796980109,5.46371173050112,0.9276414432175052,-0.3836897020755181,0.3836897020755181,0,0.0,0.0,12.434141593960218,0.0,12.434141593960218 -90,,False,5.174833011991471,[],5.17483301199147,22.553234356558225,0.0,[0.0],0,0.0,0.0,0.0,0.6929909936375189,-16.063234356558223,16.063234356558226,0,0.0,596.2672593154412,0.0,0.0,596.2672593154412,,True,5.17483301199147,[],5.174833011991472,5.558522714066986,0,[5.226288269498876],22.52471164249125,0.0,0.0,0.0,0.6275328080262386,-22.553234356558235,22.553234356558235,0.0,45.0494232849825,0.0,0.0,0.0,45.0494232849825,,False,5.174833011991472,[],5.174833011991474,11.022234444568113,5.226288269498876,"[5.84740143257664, 5.174833011991474]",0,0.0,5.226288269498876,4.842598567423358,0.9277330795368396,-0.33223444456811446,0.33223444456811446,0,0.0,0.0,10.452576538997752,0.0,10.452576538997752 -91,,False,3.783145107640761,[],3.783145107640759,26.336379464198984,0.0,[26.336379464198995],0,0.0,0.0,0.0,0.6873456456146059,-19.846379464198982,19.846379464198986,0,0.0,736.6976057110662,0.0,0.0,736.6976057110662,,False,3.783145107640759,[],3.7831451076407583,4.115379552208869,27.750999911990128,[4.115379552208873],0.0,0.0,26.336379464198995,3.7831451076407596,0.6305670565880732,1.4146204477911337,0.0,0.0,5.658481791164535,0,105.34551785679598,0.0,111.00399964796051,,False,3.7831451076407583,[],3.7831451076407596,8.957978119632234,5.84740143257664,"[5.174833011991474, 3.7831451076407596]",0,0.0,4.115379552208873,3.7831451076407587,0.9283217912521496,1.7320218803677672,0.0,0,3.4640437607355343,0,8.230759104417746,0.0,11.694802865153282 -92,,False,5.734501064880046,[],5.734501064880044,5.734501064880032,26.336379464198995,[5.5300000000000065],0,0.0,25.58088052907903,5.734501064880046,0.6911592910130424,0.7554989351199666,0.0,0,5.288492545839766,0.0,0.0,0.0,5.288492545839766,,False,5.734501064880044,[],5.734501064880042,5.734501064880037,4.115379552208873,[5.734501064880042],0.0,0.0,5.5300000000000065,5.5300000000000065,0.6346382803156821,-0.20450106488003783,0.20450106488003783,0.0,0.0,0.0,22.120000000000026,0.0,22.120000000000026,,False,5.734501064880042,[],5.73450106488004,9.517646172520799,5.174833011991474,"[3.7831451076407596, 5.73450106488004]",0,0.0,5.734501064880042,5.734501064880042,0.9291960962702159,1.1723538274792,0.0,0,2.3447076549584,0,11.469002129760083,0.0,13.813709784718483 -93,,False,4.0455027380385795,[],4.045502738038581,4.250003802918608,5.5300000000000065,[4.250003802918619],0,0.0,4.0455027380385795,4.0455027380385795,0.6937942029051573,2.2399961970813935,0.0,0,15.679973379569756,0.0,0.0,0.0,15.679973379569756,,False,4.045502738038581,[],4.045502738038582,4.045502738038578,5.734501064880042,[4.045502738038582],0.0,0.0,4.250003802918619,4.045502738038581,0.637755408052105,1.4844972619614225,0.0,0.0,5.93798904784569,0,17.000015211674476,0.0,22.938004259520167,,False,4.045502738038582,[],4.045502738038584,9.780003802918623,3.7831451076407596,"[5.73450106488004, 4.045502738038584]",0,0.0,4.045502738038582,4.045502738038582,0.9298001683452921,0.9099961970813775,0.0,0,1.819992394162755,0,8.091005476077164,0.0,9.91099787023992 -94,,False,5.7699773599307935,[],5.769977359930793,5.769977359930782,4.250003802918619,[5.530000000000005],0,0.0,5.7699773599307935,5.7699773599307935,0.6974754401236423,0.7200226400692191,0.0,0,5.040158480484534,0.0,0.0,0.0,5.040158480484534,,False,5.769977359930793,[],5.769977359930793,5.769977359930788,4.045502738038582,[5.769977359930793],0.0,0.0,5.530000000000005,5.530000000000005,0.6416103418135971,-0.23997735993078795,0.23997735993078795,0.0,0.0,0.0,22.12000000000002,0.0,22.12000000000002,,False,5.769977359930793,[],5.769977359930791,9.815480097969374,5.73450106488004,"[4.045502738038584, 5.769977359930791]",0,0.0,5.769977359930793,5.769977359930793,0.930644117857256,0.8745199020306247,0.0,0,1.7490398040612494,0,11.539954719861585,0.0,13.288994523922835 -95,,False,6.268389522403902,[],6.2683895224039015,6.508366882334679,5.530000000000005,[5.769977359930793],0,0.0,6.250022640069224,6.250022640069224,0.7013378704284317,-0.018366882334678536,0.018366882334678536,0,0.0,0.6817786722632672,0.0,0.0,0.6817786722632672,,False,6.2683895224039015,[],6.2683895224039015,6.268389522403896,5.769977359930793,[4.920022640069209],0.0,0.0,5.769977359930793,5.530000000000005,0.6447121255243198,-0.7383895224038968,0.7383895224038968,0.0,0.0,0.0,23.07990943972317,0.0,23.07990943972317,,False,6.2683895224039015,[],6.268389522403903,12.038366882334694,4.045502738038584,"[5.769977359930791, 6.268389522403903]",0,0.0,4.920022640069209,4.920022640069209,0.9287650816933808,-1.3483668823346928,1.3483668823346928,0,0.0,0.0,9.840045280138417,0.0,9.840045280138417 -96,,False,4.132358910020625,[],4.132358910020625,4.870748432424512,5.769977359930793,[4.870748432424522],0,0.0,4.150725792355304,4.132358910020625,0.7038548146064794,1.619251567575489,0.0,0,11.334760973028423,0.0,0.0,0.0,11.334760973028423,,False,4.132358910020625,[],4.132358910020626,5.4807257923553125,4.920022640069209,[5.480725792355319],0.0,0.0,4.870748432424522,4.132358910020625,0.6477062773053819,0.04927420764468682,0.0,0.0,0.19709683057874727,0,19.482993729698087,0.0,19.680090560276835,,False,4.132358910020626,[],4.132358910020624,10.400748432424528,5.769977359930791,"[6.268389522403903, 4.132358910020624]",0,0.0,5.480725792355319,4.132358910020626,0.929365406592834,0.2892515675754721,0.0,0,0.5785031351509442,0,10.961451584710638,0.0,11.539954719861582 -97,,False,5.145861852428309,[],5.145861852428308,5.145861852428299,4.870748432424522,[5.145861852428308],0,0.0,5.145861852428309,5.145861852428309,0.7069303754460088,1.3441381475717016,0.0,0,9.408967033001911,0.0,0.0,0.0,9.408967033001911,,False,5.145861852428308,[],5.145861852428309,5.145861852428304,5.480725792355319,[5.145861852428309],0.0,0.0,5.145861852428308,5.145861852428308,0.6513649583543135,0.3841381475716972,0.0,0.0,1.5365525902867887,0,20.583447409713234,0.0,22.120000000000022,,False,5.145861852428309,[],5.1458618524283075,9.278220762448932,6.268389522403903,"[4.132358910020624, 5.1458618524283075]",0,0.0,5.145861852428309,5.145861852428309,0.9300989690483927,1.411779237551066,0.0,0,2.823558475102132,0,10.291723704856619,0.0,13.11528217995875 -98,,False,5.878673548190895,[],5.878673548190895,5.878673548190885,5.145861852428308,[5.5300000000000065],0,0.0,5.878673548190895,5.878673548190895,0.7103666623424336,0.6113264518091146,0.0,0,4.279285162663802,0.0,0.0,0.0,4.279285162663802,,False,5.878673548190895,[],5.8786735481908945,5.878673548190889,5.145861852428309,[5.54413814757169],0.0,0.0,5.5300000000000065,5.5300000000000065,0.6547573206456488,-0.3486735481908889,0.3486735481908889,0.0,0.0,0.0,22.120000000000026,0.0,22.120000000000026,,False,5.8786735481908945,[],5.878673548190896,11.024535400619204,4.132358910020624,"[5.1458618524283075, 5.878673548190896]",0,0.0,5.54413814757169,5.54413814757169,0.9302513306183345,-0.3345354006192043,0.3345354006192043,0,0.0,0.0,11.08827629514338,0.0,11.08827629514338 -99,,False,4.76040549180619,[],4.760405491806191,5.109079039997068,5.5300000000000065,[5.10907903999708],0,0.0,4.76040549180619,4.76040549180619,0.7130907915278842,1.380920960002931,0.0,0,9.666446720020517,0.0,0.0,0.0,9.666446720020517,,False,4.760405491806191,[],4.760405491806191,5.09494089242539,5.54413814757169,[5.094940892425395],0.0,0.0,5.10907903999708,4.760405491806191,0.6580044801974415,0.4350591075746104,0.0,0.0,1.7402364302984417,0,20.43631615998832,0.0,22.17655259028676,,False,4.760405491806191,[],4.760405491806191,10.639079039997087,5.1458618524283075,"[5.878673548190896, 4.760405491806191]",0,0.0,5.094940892425395,4.760405491806191,0.9309073475929192,0.05092096000291235,0.0,0,0.1018419200058247,0,10.18988178485079,0.0,10.291723704856615 +7,,False,5.950369682396903,[],5.950369682396903,17.712288013308164,0.0,[0.0],0,0.0,0.0,0.0,0.5809319464015877,-11.222288013308166,11.222288013308166,0,0.0,416.5713310539991,0.0,0.0,416.5713310539991,,True,5.950369682396903,[],5.9503696823969,5.950369682396899,0,[5.9503696823969],17.291918330911265,0.0,0.0,0.0,0.39620389808463924,-17.712288013308164,17.712288013308164,0.0,34.58383666182253,0.0,0.0,0.0,34.58383666182253,,False,5.9503696823969,[],5.9503696823969,8.337820669703301,4.474830192821853,"[2.3874509873063996, 5.9503696823969]",0,0.0,5.9503696823969,5.9503696823969,0.9841085932673639,2.3521793302966962,0.0,0,4.7043586605933925,0,11.9007393647938,0.0,16.605098025387193 +8,,False,4.571953935823766,[],4.5719539358237675,22.284241949131932,0.0,[22.284241949131932],0,0.0,0.0,0.0,0.5181429409923104,-15.794241949131932,15.794241949131932,0,0.0,586.2822611517772,0.0,0.0,586.2822611517772,,False,4.5719539358237675,[],4.571953935823767,4.571953935823766,23.242288013308166,[4.571953935823767],0.0,0.0,22.284241949131932,4.5719539358237675,0.4614641354396298,0.9580460641762336,0.0,0.0,3.8321842567049345,0,89.13696779652773,0.0,92.96915205323266,,False,4.571953935823767,[],4.571953935823768,10.52232361822067,2.3874509873063996,"[5.9503696823969, 4.571953935823768]",0,0.0,4.571953935823767,4.571953935823767,0.9858261879520376,0.1676763817793292,0.0,0,0.3353527635586584,0,9.143907871647533,0.0,9.479260635206192 +9,,False,4.257593162880828,[],4.257593162880828,4.257593162880827,22.284241949131932,[4.257593162880828],0,0.0,20.05183511201276,4.257593162880829,0.5622074582342398,2.2324068371191723,0.0,0,15.626847859834207,0.0,0.0,0.0,15.626847859834207,,False,4.257593162880828,[],4.257593162880829,4.257593162880828,4.571953935823767,[4.257593162880829],0.0,0.0,4.257593162880828,4.257593162880828,0.5107117752649893,1.2724068371191724,0.0,0.0,5.089627348476689,0,17.03037265152331,0.0,22.12,,False,4.257593162880829,[],4.257593162880831,8.8295470987046,5.9503696823969,"[4.571953935823768, 4.257593162880831]",0,0.0,4.257593162880829,4.257593162880829,0.9871223445065508,1.8604529012954005,0.0,0,3.720905802590801,0,8.515186325761658,0.0,12.236092128352459 +10,,False,4.3705250390757495,[],4.37052503907575,4.37052503907575,4.257593162880828,[4.37052503907575],0,0.0,4.3705250390757495,4.3705250390757495,0.5997775052500238,2.1194749609242507,0.0,0,14.836324726469755,0.0,0.0,0.0,14.836324726469755,,False,4.37052503907575,[],4.37052503907575,4.3705250390757495,4.257593162880829,[4.37052503907575],0.0,0.0,4.37052503907575,4.37052503907575,0.5527010278306473,1.1594749609242507,0.0,0.0,4.637899843697003,0,17.482100156303,0.0,22.120000000000005,,False,4.37052503907575,[],4.370525039075749,8.628118201956582,4.571953935823768,"[4.257593162880831, 4.370525039075749]",0,0.0,4.37052503907575,4.37052503907575,0.9882274663991957,2.0618817980434185,0.0,0,4.123763596086837,0,8.7410500781515,0.0,12.864813674238338 +11,,False,5.597720466912608,[],5.597720466912607,5.597720466912606,4.37052503907575,[5.530000000000001],0,0.0,5.597720466912608,5.597720466912608,0.6394110888020618,0.8922795330873932,0.0,0,6.245956731611752,0.0,0.0,0.0,6.245956731611752,,False,5.597720466912607,[],5.597720466912607,5.597720466912606,4.37052503907575,[5.597720466912607],0.0,0.0,5.530000000000001,5.530000000000001,0.5957985040254986,-0.06772046691260591,0.06772046691260591,0.0,0.0,0.0,22.120000000000005,0.0,22.120000000000005,,False,5.597720466912607,[],5.597720466912605,9.968245505988357,4.257593162880831,"[4.370525039075749, 5.597720466912605]",0,0.0,5.597720466912607,5.597720466912607,0.9893932871619144,0.721754494011642,0.0,0,1.443508988023284,0,11.195440933825214,0.0,12.638949921848498 +12,,False,5.122219165222679,[],5.12221916522268,5.189939632135285,5.530000000000001,[5.189939632135286],0,0.0,5.122219165222679,5.122219165222679,0.6693715830888035,1.300060367864715,0.0,0,9.100422575053004,0.0,0.0,0.0,9.100422575053004,,False,5.12221916522268,[],5.12221916522268,5.122219165222679,5.597720466912607,[5.092279533087391],0.0,0.0,5.189939632135286,5.12221916522268,0.6293826665850314,0.40778083477732086,0.0,0.0,1.6311233391092834,0,20.759758528541145,0.0,22.390881867650428,,False,5.12221916522268,[],5.122219165222682,10.71993963213529,4.370525039075749,"[5.597720466912605, 5.122219165222682]",0,0.0,5.092279533087391,5.092279533087391,0.9897889225754252,-0.029939632135289607,0.029939632135289607,0,0.0,0.0,10.184559066174781,0.0,10.184559066174781 +13,,False,4.484564337907547,[],4.484564337907547,4.484564337907545,5.189939632135286,[4.484564337907547],0,0.0,4.484564337907547,4.484564337907547,0.6917919486174242,2.005435662092454,0.0,0,14.038049634647178,0.0,0.0,0.0,14.038049634647178,,False,4.484564337907547,[],4.484564337907547,4.514503970042837,5.092279533087391,[4.514503970042837],0.0,0.0,4.484564337907547,4.484564337907547,0.6545147352802583,1.0154960299571645,0.0,0.0,4.061984119828658,0,17.938257351630188,0.0,22.000241471458846,,False,4.484564337907547,[],4.484564337907545,9.60678350313023,5.597720466912605,"[5.122219165222682, 4.484564337907545]",0,0.0,4.514503970042837,4.484564337907547,0.9904813497129313,1.0832164968697686,0.0,0,2.1664329937395372,0,9.029007940085673,0.0,11.19544093382521 +14,,False,4.399746149894089,[],4.3997461498940895,4.399746149894088,4.484564337907547,[1.0154960299571645],0,0.0,4.399746149894089,4.399746149894089,0.7110176084095495,2.0902538501059125,0.0,0,14.631776950741386,0.0,0.0,0.0,14.631776950741386,,True,4.3997461498940895,[],4.399746149894089,4.399746149894089,0,[4.399746149894089],4.514503970042837,0.0,1.0154960299571645,1.0154960299571645,0.6280843936995064,-3.384250119936925,3.384250119936925,0.0,9.029007940085673,0.0,4.061984119828658,0.0,13.090992059914331,,False,4.399746149894089,[],4.399746149894089,8.884310487801638,5.122219165222682,"[4.484564337907545, 4.399746149894089]",0,0.0,4.399746149894089,4.399746149894089,0.9910751120474274,1.805689512198362,0.0,0,3.611379024396724,0,8.799492299788177,0.0,12.410871324184901 +15,,False,5.947439821046639,[],5.947439821046639,9.331689940983562,1.0154960299571645,[0.0],0,0.0,3.105749880063077,3.105749880063077,0.696334254698549,-2.841689940983562,2.841689940983562,0,0.0,105.48353060930981,0.0,0.0,105.48353060930981,,True,5.947439821046639,[],5.947439821046639,5.94743982104664,0,[5.947439821046639],8.914250119936925,0.0,0.0,0.0,0.5792417081239438,-9.331689940983564,9.331689940983564,0.0,17.82850023987385,0.0,0.0,0.0,17.82850023987385,,False,5.947439821046639,[],5.947439821046637,10.347185970940728,4.484564337907545,"[4.399746149894089, 5.947439821046637]",0,0.0,5.947439821046639,5.947439821046639,0.9917691517345099,0.3428140290592685,0.0,0,0.685628058118537,0,11.894879642093278,0.0,12.580507700211815 +16,,False,3.978447805324402,[],3.978447805324402,13.310137746307964,0.0,[13.310137746307966],0,0.0,0.0,0.0,0.6619024994679915,-6.820137746307964,6.820137746307964,0,0.0,253.1635131429516,0.0,0.0,253.1635131429516,,False,3.978447805324402,[],3.978447805324401,3.978447805324401,14.861689940983563,[3.978447805324401],0.0,0.0,13.310137746307966,3.978447805324402,0.6000470130753361,1.5515521946755975,0.0,0.0,6.20620877870239,0,53.24055098523186,0.0,59.44675976393425,,False,3.978447805324401,[],3.978447805324403,9.925887626371043,4.399746149894089,"[5.947439821046637, 3.978447805324403]",0,0.0,3.978447805324401,3.978447805324401,0.9921761438520238,0.7641123736289561,0.0,0,1.5282247472579122,0,7.956895610648802,0.0,9.485120357906714 +17,,False,4.838244613602479,[],4.838244613602479,4.838244613602477,13.310137746307966,[4.838244613602479],0,0.0,11.658382359910442,4.838244613602479,0.6810802212377561,1.6517553863975234,0.0,0,11.562287704782664,0.0,0.0,0.0,11.562287704782664,,False,4.838244613602479,[],4.83824461360248,4.8382446136024795,3.978447805324401,[4.83824461360248],0.0,0.0,4.838244613602479,4.838244613602479,0.6227333301648095,0.6917553863975199,0.0,0.0,2.7670215455900795,0,19.352978454409914,0.0,22.119999999999994,,False,4.83824461360248,[],4.83824461360248,8.816692418926888,5.947439821046637,"[3.978447805324403, 4.83824461360248]",0,0.0,4.83824461360248,4.83824461360248,0.9926199322152517,1.8733075810731128,0.0,0,3.7466151621462256,0,9.67648922720496,0.0,13.423104389351186 +18,,False,4.770549546168043,[],4.770549546168043,4.770549546168041,4.838244613602479,[0.6917553863975199],0,0.0,4.770549546168043,4.770549546168043,0.697972274954788,1.7194504538319588,0.0,0,12.036153176823712,0.0,0.0,0.0,12.036153176823712,,True,4.770549546168043,[],4.770549546168044,4.770549546168043,0,[4.770549546168044],4.83824461360248,0.0,0.6917553863975199,0.6917553863975199,0.5974297691944955,-4.078794159770523,4.078794159770523,0.0,9.67648922720496,0.0,2.7670215455900795,0.0,12.44351077279504,,False,4.770549546168044,[],4.770549546168042,9.608794159770525,3.978447805324403,"[4.83824461360248, 4.770549546168042]",0,0.0,4.770549546168044,4.770549546168044,0.9930108283269294,1.0812058402294715,0.0,0,2.162411680458943,0,9.541099092336088,0.0,11.703510772795031 +19,,False,5.389348913256123,[],5.389348913256123,9.468143073026646,0.6917553863975199,[9.468143073026646],0,0.0,2.4112058402294787,2.4112058402294787,0.6838254395829848,-2.9781430730266445,2.9781430730266445,0,0.0,110.54867087074904,0.0,0.0,110.54867087074904,,False,5.389348913256123,[],5.389348913256123,5.389348913256122,9.608794159770525,[5.389348913256123],0.0,0.0,9.468143073026646,5.389348913256122,0.6201583082860734,0.14065108674387883,8.881784197001252e-16,0.0,0.5626043469755153,0,37.87257229210658,0.0,38.4351766390821,,False,5.389348913256123,[],5.389348913256125,10.15989845942417,4.83824461360248,"[4.770549546168042, 5.389348913256125]",0,0.0,5.389348913256123,5.389348913256123,0.9934054269570152,0.5301015405758287,0.0,0,1.0602030811516574,0,10.778697826512246,0.0,11.838900907663904 +20,,False,7.77831304155244,[],7.7783130415524395,7.77831304155244,9.468143073026646,[5.530000000000002],0,0.0,9.468143073026646,6.490000000000001,0.695168409197066,-1.2883130415524393,1.2883130415524393,0,0.0,47.82218010242654,0.0,0.0,47.82218010242654,,False,7.7783130415524395,[],7.778313041552439,7.778313041552439,5.389348913256123,[5.300651086743871],0.0,0.0,5.530000000000002,5.530000000000001,0.6269991512559993,-2.2483130415524375,2.2483130415524384,0.0,0.0,0.0,22.120000000000008,0.0,22.120000000000008,,False,7.778313041552439,[],7.77831304155244,13.167661954808569,4.770549546168042,"[5.389348913256125, 7.77831304155244]",0,0.0,5.300651086743871,5.300651086743871,0.9699020909466246,-2.4776619548085677,2.4776619548085677,0,0.0,0.0,10.601302173487742,0.0,10.601302173487742 +21,,False,6.193639724282317,[],6.193639724282316,8.441952765834756,5.530000000000002,[5.300651086743871],0,0.0,5.530000000000002,4.241686958447563,0.6945841407109238,-1.9519527658347542,1.9519527658347542,0,0.0,72.45648666778607,0.0,0.0,72.45648666778607,,False,6.193639724282316,[],6.193639724282315,8.671301679090883,5.300651086743871,[5.389348913256125],0.0,0.0,5.300651086743871,3.0523380451914326,0.6194045336559973,-3.1413016790908825,3.1413016790908834,0.0,0.0,0.0,21.202604346975484,0.0,21.202604346975484,,False,6.193639724282315,[],6.193639724282313,13.971952765834757,5.389348913256125,"[7.77831304155244, 6.193639724282313]",0,0.0,5.389348913256125,2.9116869584475573,0.9416139144956085,-3.281952765834758,3.281952765834758,0,0.0,0.0,10.77869782651225,0.0,10.77869782651225 +22,,False,5.2186383160538625,[],5.218638316053861,8.359939995144746,5.300651086743871,[5.389348913256125],0,0.0,5.300651086743871,3.348698320909117,0.6921760150893107,-1.8699399951447457,1.8699399951447457,0,0.0,69.41217261977296,0.0,0.0,69.41217261977296,,False,5.218638316053861,[],5.218638316053861,8.500591081888619,5.389348913256125,[7.77831304155244],0.0,0.0,5.389348913256125,2.2480472341652415,0.6108181906918734,-2.9705910818886183,2.970591081888619,0.0,0.0,0.0,21.5573956530245,0.0,21.5573956530245,,False,5.218638316053861,[],5.218638316053861,11.41227804033618,7.77831304155244,"[6.193639724282313, 5.218638316053861]",0,0.0,7.77831304155244,4.496360275717683,0.9379715941434275,-0.7222780403361782,0.7222780403361782,0,0.0,0.0,15.55662608310488,0.0,15.55662608310488 +23,,False,5.881761038948611,[],5.881761038948611,8.852352120837232,5.389348913256125,[7.77831304155244],0,0.0,5.389348913256125,3.5194089181113792,0.6875978244372991,-2.3623521208372313,2.3623521208372313,0,0.0,87.69051072547802,0.0,0.0,87.69051072547802,,False,5.881761038948611,[],5.881761038948611,6.604039079284789,7.77831304155244,[6.193639724282313],0.0,0.0,7.77831304155244,4.807721959663821,0.6208990405678888,-1.0740390792847885,1.0740390792847894,0.0,0.0,0.0,31.11325216620976,0.0,31.11325216620976,,False,5.881761038948611,[],5.881761038948609,11.100399355002473,6.193639724282313,"[5.218638316053861, 5.881761038948609]",0,0.0,6.193639724282313,5.471361683946135,0.937593568333974,-0.4103993550024754,0.4103993550024754,0,0.0,0.0,12.387279448564627,0.0,12.387279448564627 +24,,False,3.9909146571348924,[],3.9909146571348924,5.0649537364196835,7.77831304155244,[0.0],0,0.0,6.353266777972124,3.9909146571348924,0.6976104385608624,1.4250462635803167,0.0,0,9.975323845062217,0.0,0.0,0.0,9.975323845062217,,True,3.9909146571348924,[],3.9909146571348924,4.401314012137368,0,[4.401314012137368],6.193639724282313,0.0,0.0,0.0,0.6009989790792032,-5.064953736419681,5.064953736419682,0.0,12.387279448564627,0.0,0.0,0.0,12.387279448564627,,False,3.9909146571348924,[],3.990914657134894,9.872675696083506,5.218638316053861,"[5.881761038948609, 3.990914657134894]",0,0.0,4.401314012137368,3.9909146571348924,0.9395937193187581,0.817324303916493,0.0,0,1.634648607832986,0,8.802628024274735,0.0,10.437276632107721 +25,,False,3.4167057864631127,[],3.4167057864631127,8.481659522882797,0.0,[0.0],0,0.0,1.4250462635803167,1.4250462635803167,0.6901185810121155,-1.991659522882796,1.991659522882796,0,0.0,73.93040148940938,0.0,0.0,73.93040148940938,,True,3.4167057864631127,[],3.4167057864631127,3.4167057864631127,0,[3.4167057864631127],10.594953736419681,0.0,0.0,0.0,0.584948564613737,-8.481659522882794,8.481659522882794,0.0,21.189907472839362,0.0,0.0,0.0,21.189907472839362,,False,3.4167057864631127,[],3.4167057864631127,7.407620443598011,5.881761038948609,"[3.990914657134894, 3.4167057864631127]",0,0.0,3.4167057864631127,3.4167057864631127,0.9412069430928429,3.282379556401989,0.0,0,6.564759112803978,0,6.8334115729262255,0.0,13.398170685730204 +26,,False,3.6533219026386536,[],3.6533219026386528,12.134981425521449,0.0,[12.134981425521445],0,0.0,0.0,0.0,0.670958877763455,-5.64498142552145,5.64498142552145,0,0.0,209.5417105153562,0.0,0.0,209.5417105153562,,False,3.6533219026386528,[],3.653321902638652,3.653321902638652,14.011659522882795,[3.653321902638652],0.0,0.0,12.134981425521445,3.653321902638652,0.5964716021810906,1.8766780973613484,8.881784197001252e-16,0.0,7.5067123894453935,0,48.53992570208578,0.0,56.04663809153118,,False,3.653321902638652,[],3.65332190263865,7.070027689101767,3.990914657134894,"[3.4167057864631127, 3.65332190263865]",0,0.0,3.653321902638652,3.653321902638652,0.9428392097125456,3.6199723108982313,0.0,0,7.239944621796463,0,7.306643805277304,0.0,14.546588427073766 +27,,False,4.119408733952893,[],4.119408733952894,4.119408733952898,12.134981425521445,[4.119408733952895],0,0.0,9.764390159474342,4.119408733952892,0.6809467989948429,2.3705912660471027,8.881784197001252e-16,0,16.594138862329718,0.0,0.0,0.0,16.594138862329718,,False,4.119408733952894,[],4.119408733952894,4.119408733952894,3.653321902638652,[4.119408733952894],0.0,0.0,4.119408733952895,4.119408733952894,0.6087205570370919,1.4105912660471063,0.0,0.0,5.642365064188425,0,16.47763493581158,0.0,22.120000000000005,,False,4.119408733952894,[],4.119408733952896,7.772730636591549,3.4167057864631127,"[3.65332190263865, 4.119408733952896]",0,0.0,4.119408733952894,4.119408733952894,0.9445743043020437,2.91726936340845,0.0,0,5.8345387268169,0,8.238817467905788,0.0,14.073356194722688 +28,,False,5.582122794713039,[],5.5821227947130385,5.582122794713042,4.119408733952895,[5.53],0,0.0,5.58212279471304,5.582122794713039,0.6935519009564419,0.9078772052869581,0.0,0,6.355140437008707,0.0,0.0,0.0,6.355140437008707,,False,5.5821227947130385,[],5.5821227947130385,5.582122794713038,4.119408733952894,[5.5821227947130385],0.0,0.0,5.53,5.53,0.6238102591448447,-0.05212279471303827,0.05212279471303827,0.0,0.0,0.0,22.12,0.0,22.12,,False,5.5821227947130385,[],5.5821227947130385,9.701531528665937,3.65332190263865,"[4.119408733952896, 5.5821227947130385]",0,0.0,5.5821227947130385,5.5821227947130385,0.9467640536710024,0.9884684713340617,0.0,0,1.9769369426681234,0,11.164245589426077,0.0,13.1411825320942 +29,,False,5.887748459593357,[],5.887748459593357,5.939871254306399,5.53,[5.5821227947130385],0,0.0,5.887748459593357,5.887748459593357,0.7058110269556231,0.550128745693601,0.0,0,3.8509012198552073,0.0,0.0,0.0,3.8509012198552073,,False,5.887748459593357,[],5.887748459593358,5.887748459593357,5.5821227947130385,[5.107877205286957],0.0,0.0,5.5821227947130385,5.53,0.6364286258264712,-0.3577484595933571,0.3577484595933571,0.0,0.0,0.0,22.328491178852154,0.0,22.328491178852154,,False,5.887748459593358,[],5.88774845959336,11.469871254306401,4.119408733952896,"[5.5821227947130385, 5.88774845959336]",0,0.0,5.107877205286957,5.107877205286957,0.9435949160236066,-0.7798712543064008,0.7798712543064008,0,0.0,0.0,10.215754410573915,0.0,10.215754410573915 +30,,False,4.792834109895426,[],4.792834109895426,5.150582569488787,5.5821227947130385,[5.107877205286957],0,0.0,4.792834109895426,4.792834109895426,0.7150890380190152,1.3394174305112134,0.0,0,9.375922013578494,0.0,0.0,0.0,9.375922013578494,,False,4.792834109895426,[],4.792834109895426,5.572705364201827,5.107877205286957,[5.572705364201827],0.0,0.0,5.107877205286957,4.7501287456936,0.6476137826749432,-0.0427053642018258,0.0427053642018258,0.0,0.0,0.0,20.43150882114783,0.0,20.43150882114783,,False,4.792834109895426,[],4.792834109895424,10.680582569488786,5.5821227947130385,"[5.88774845959336, 4.792834109895424]",0,0.0,5.572705364201827,4.792834109895426,0.9453737964070178,0.009417430511211577,0.0,0,0.018834861022423155,0,11.145410728403654,0.0,11.164245589426077 +31,,False,4.37652260501504,[],4.37652260501504,4.41922796921687,5.107877205286957,[4.419227969216866],0,0.0,4.37652260501504,4.37652260501504,0.7230642868054382,2.0707720307831305,0.0,0,14.495404215481914,0.0,0.0,0.0,14.495404215481914,,False,4.37652260501504,[],4.376522605015039,4.37652260501504,5.572705364201827,[4.376522605015039],0.0,0.0,4.419227969216866,4.37652260501504,0.6574778038152088,1.1534773949849608,0.0,0.0,4.613909579939843,0,17.676911876867464,0.0,22.290821456807308,,False,4.376522605015039,[],4.376522605015041,9.169356714910467,5.88774845959336,"[4.792834109895424, 4.376522605015041]",0,0.0,4.376522605015039,4.376522605015039,0.9469028971509229,1.5206432850895322,0.0,0,3.0412865701790643,0,8.753045210030079,0.0,11.794331780209143 +32,,False,3.491846710452517,[],3.491846710452517,3.4918467104525206,4.419227969216866,[3.491846710452517],0,0.0,3.491846710452517,3.491846710452517,0.7291141750800182,2.9981532895474796,0.0,0,20.987073026832356,0.0,0.0,0.0,20.987073026832356,,False,3.491846710452517,[],3.491846710452516,3.491846710452517,4.376522605015039,[3.491846710452516],0.0,0.0,3.491846710452517,3.491846710452517,0.6649604827177522,2.038153289547483,0.0,0.0,8.152613158189933,0,13.967386841810068,0.0,22.12,,False,3.491846710452516,[],3.491846710452516,7.86836931546756,4.792834109895424,"[4.376522605015041, 3.491846710452516]",0,0.0,3.491846710452516,3.491846710452516,0.9480628470043935,2.8216306845324404,0.0,0,5.643261369064881,0,6.983693420905032,0.0,12.626954789969913 +33,,False,6.09964697578482,[],6.09964697578482,6.0996469757848235,3.491846710452517,[2.038153289547483],0,0.0,6.09964697578482,6.09964697578482,0.7390714284030322,0.3903530242151767,0.0,0,2.732471169506237,0.0,0.0,0.0,2.732471169506237,,True,6.09964697578482,[],6.09964697578482,6.099646975784821,0,[6.09964697578482],3.491846710452516,0.0,2.038153289547483,2.038153289547483,0.6528002480730054,-4.061493686237337,4.061493686237337,0.0,6.983693420905032,0.0,8.152613158189933,0.0,15.136306579094965,,False,6.09964697578482,[],6.099646975784818,9.591493686237339,4.376522605015041,"[3.491846710452516, 6.099646975784818]",0,0.0,6.09964697578482,6.09964697578482,0.9499719590423015,1.0985063137626616,0.0,0,2.1970126275253232,0,12.19929395156964,0.0,14.396306579094963 +34,,False,6.179716344700701,[],6.179716344700701,10.241210030938042,2.038153289547483,[0.0],0,0.0,2.42850631376266,2.42850631376266,0.7266455197830844,-3.751210030938041,3.751210030938041,0,0.0,139.24491634842008,0.0,0.0,139.24491634842008,,True,6.179716344700701,[],6.179716344700701,6.179716344700703,0,[4.590353024215178],9.591493686237335,0.0,0.0,0.0,0.6293623908613116,-10.241210030938038,10.241210030938038,0.0,19.18298737247467,0.0,0.0,0.0,19.18298737247467,,False,6.179716344700701,[],6.179716344700699,12.279363320485523,3.491846710452516,"[6.099646975784818, 6.179716344700699]",0,0.0,4.590353024215178,4.590353024215178,0.9425340937912581,-1.589363320485523,1.589363320485523,0,0.0,0.0,9.180706048430356,0.0,9.180706048430356 +35,,False,4.101792060544322,[],4.101792060544321,14.343002091482363,0.0,[14.181846710452513],0,0.0,0.0,0.0,0.7097318827029765,-7.853002091482363,7.853002091482363,0,0.0,291.5034376358253,0.0,0.0,291.5034376358253,,False,4.101792060544321,[],4.101792060544322,5.691155381029846,14.181846710452513,[5.691155381029845],0.0,0.0,14.181846710452513,3.9406366795144745,0.6370749682726558,-0.16115538102984672,0.16115538102984672,0.0,0.0,0.0,56.72738684181005,0.0,56.72738684181005,,False,4.101792060544322,[],4.101792060544322,10.281508405245027,6.099646975784818,"[6.179716344700699, 4.101792060544322]",0,0.0,5.691155381029845,4.101792060544322,0.9438716888849212,0.408491594754973,0.0,0,0.816983189509946,0,11.38231076205969,0.0,12.199293951569636 +36,,False,3.962170123484518,[],3.962170123484518,4.1233255045143675,14.181846710452513,[4.123325504514365],0,0.0,11.815172214966882,3.962170123484519,0.7161147629225845,2.366674495485632,0.0,0,16.56672146839942,0.0,0.0,0.0,16.56672146839942,,False,3.962170123484518,[],3.962170123484519,3.96217012348452,5.691155381029845,[3.962170123484519],0.0,0.0,4.123325504514365,3.962170123484518,0.6450555450848263,1.5678298765154803,0.0,0.0,6.271319506061921,0,16.49330201805746,0.0,22.76462152411938,,False,3.962170123484519,[],3.9621701234845172,8.063962184028846,6.179716344700699,"[4.101792060544322, 3.9621701234845172]",0,0.0,3.962170123484519,3.962170123484519,0.9451059280776806,2.626037815971153,0.0,0,5.252075631942306,0,7.924340246969038,0.0,13.176415878911344 +37,,False,4.924196254971815,[],4.9241962549718155,4.924196254971819,4.123325504514365,[4.9241962549718155],0,0.0,4.924196254971815,4.924196254971815,0.7236666061237521,1.565803745028182,0.0,0,10.960626215197275,0.0,0.0,0.0,10.960626215197275,,False,4.9241962549718155,[],4.9241962549718155,4.924196254971816,3.962170123484519,[4.9241962549718155],0.0,0.0,4.9241962549718155,4.9241962549718155,0.6544976876077655,0.6058037450281839,0.0,0.0,2.4232149801127356,0,19.696785019887262,0.0,22.119999999999997,,False,4.9241962549718155,[],4.924196254971817,8.88636637845634,4.101792060544322,"[3.9621701234845172, 4.924196254971817]",0,0.0,4.9241962549718155,4.9241962549718155,0.9465662062805866,1.8036336215436597,0.0,0,3.6072672430873194,0,9.848392509943631,0.0,13.45565975303095 +38,,False,6.495434252883474,[],6.495434252883473,6.495434252883476,4.9241962549718155,[5.529999999999999],0,0.0,6.4899999999999975,6.4899999999999975,0.7330060582521601,-0.005434252883476098,0.005434252883476098,0,0.0,0.20171946703463275,0.0,0.0,0.20171946703463275,,False,6.495434252883473,[],6.495434252883473,6.495434252883473,4.9241962549718155,[5.765803745028177],0.0,0.0,5.529999999999999,5.529999999999999,0.661171645618872,-0.9654342528834734,0.9654342528834734,0.0,0.0,0.0,22.119999999999997,0.0,22.119999999999997,,False,6.495434252883473,[],6.495434252883471,11.419630507855294,3.9621701234845172,"[4.924196254971817, 6.495434252883471]",0,0.0,5.765803745028177,5.765803745028177,0.9445696094688696,-0.7296305078552958,0.7296305078552958,0,0.0,0.0,11.531607490056354,0.0,11.531607490056354 +39,,False,5.33818125199332,[],5.33818125199332,6.303615504876797,5.529999999999999,[5.765803745028177],0,0.0,5.343615504876796,5.33818125199332,0.7402430356774419,0.1863844951232032,0.0,0,1.3046914658624225,0.0,0.0,0.0,1.3046914658624225,,False,5.33818125199332,[],5.338181251993321,6.067811759848616,5.765803745028177,[4.924196254971817],0.0,0.0,5.765803745028177,4.8003694921447035,0.6676249052830547,-0.5378117598486165,0.5378117598486165,0.0,0.0,0.0,23.063214980112708,0.0,23.063214980112708,,False,5.338181251993321,[],5.338181251993323,11.833615504876796,4.924196254971817,"[6.495434252883471, 5.338181251993323]",0,0.0,4.924196254971817,4.194565747116521,0.9402651966402579,-1.1436155048767995,1.1436155048767995,0,0.0,0.0,9.848392509943634,0.0,9.848392509943634 +40,,False,4.6013616099847985,[],4.6013616099847985,5.139173369833418,5.765803745028177,[4.924196254971817],0,0.0,4.6013616099847985,4.6013616099847985,0.7461734616199857,1.3508266301665817,0.0,0,9.455786411166072,0.0,0.0,0.0,9.455786411166072,,False,4.6013616099847985,[],4.601361609984799,5.744977114861599,4.924196254971817,[5.744977114861599],0.0,0.0,4.924196254971817,4.386384495123201,0.674146595490337,-0.21497711486159776,0.21497711486159776,0.0,0.0,0.0,19.69678501988727,0.0,19.69678501988727,,False,4.601361609984799,[],4.601361609984801,9.939542861978126,6.495434252883471,"[5.338181251993323, 4.601361609984801]",0,0.0,5.744977114861599,4.601361609984799,0.9416289823175399,0.7504571380218721,0.0,0,1.5009142760437442,0,11.489954229723198,0.0,12.990868505766942 +41,,False,4.939135912525254,[],4.939135912525255,5.154113027386855,4.924196254971817,[5.1541130273868525],0,0.0,4.939135912525254,4.939135912525254,0.7522450952776545,1.335886972613145,0.0,0,9.351208808292014,0.0,0.0,0.0,9.351208808292014,,False,4.939135912525255,[],4.939135912525254,4.939135912525255,5.744977114861599,[4.939135912525254],0.0,0.0,5.1541130273868525,4.939135912525255,0.681941140973697,0.5908640874747464,0.0,0.0,2.3634563498989856,0,20.61645210954741,0.0,22.979908459446396,,False,4.939135912525254,[],4.939135912525256,9.540497522510059,5.338181251993323,"[4.601361609984801, 4.939135912525256]",0,0.0,4.939135912525254,4.939135912525254,0.9430252407145346,1.149502477489941,0.0,0,2.299004954979882,0,9.878271825050508,0.0,12.17727678003039 +42,,False,3.581249541408597,[],3.581249541408597,3.5812495414085994,5.1541130273868525,[0.5908640874747464],0,0.0,3.581249541408597,3.581249541408597,0.7564689261794462,2.9087504585914004,0.0,0,20.361253210139804,0.0,0.0,0.0,20.361253210139804,,True,3.581249541408597,[],3.5812495414085963,3.5812495414085976,0,[3.5812495414085963],4.939135912525254,0.0,0.5908640874747464,0.5908640874747464,0.6731279083695823,-2.990385453933851,2.990385453933851,0.0,9.878271825050508,0.0,2.3634563498989856,0.0,12.241728174949493,,False,3.5812495414085963,[],3.581249541408596,8.520385453933853,4.601361609984801,"[4.939135912525256, 3.581249541408596]",0,0.0,3.5812495414085963,3.5812495414085963,0.9439965706228639,2.169614546066146,0.0,0,4.339229092132292,0,7.162499082817193,0.0,11.501728174949484 +43,,False,6.0424916173394205,[],6.0424916173394205,9.032877071273273,0.5908640874747464,[0.0],0,0.0,3.4996145460661467,3.4996145460661467,0.7515114363256561,-2.542877071273274,2.542877071273274,0,0.0,94.39159688566392,0.0,0.0,94.39159688566392,,True,6.0424916173394205,[],6.04249161733942,6.042491617339422,0,[6.04249161733942],8.52038545393385,0.0,0.0,0.0,0.6543067168552266,-9.03287707127327,9.03287707127327,0.0,17.0407709078677,0.0,0.0,0.0,17.0407709078677,,False,6.04249161733942,[],6.04249161733942,9.623741158748018,4.939135912525256,"[3.581249541408596, 6.04249161733942]",0,0.0,6.04249161733942,6.04249161733942,0.9455624710359383,1.0662588412519822,0.0,0,2.1325176825039645,0,12.08498323467884,0.0,14.217500917182804 +44,,False,4.465583546326495,[],4.465583546326497,13.498460617599768,0.0,[13.498460617599768],0,0.0,0.0,0.0,0.736296696470678,-7.008460617599768,7.008460617599768,0,0.0,260.1540581253034,0.0,0.0,260.1540581253034,,False,4.465583546326497,[],4.465583546326496,4.465583546326498,14.56287707127327,[4.465583546326496],0.0,0.0,13.498460617599768,4.4655835463264975,0.6613054571516841,1.0644164536735028,0.0,0.0,4.257665814694011,0,53.99384247039907,0.0,58.25150828509308,,False,4.465583546326496,[],4.465583546326494,10.508075163665916,3.581249541408596,"[6.04249161733942, 4.465583546326494]",0,0.0,4.465583546326496,4.465583546326496,0.946664587120273,0.1819248363340824,0.0,0,0.3638496726681648,0,8.931167092652991,0.0,9.295016765321156 +45,,False,3.5049461291856643,[],3.5049461291856643,3.504946129185665,13.498460617599768,[3.5049461291856643],0,0.0,10.513406746785432,3.5049461291856634,0.7404214767828957,2.985053870814336,8.881784197001252e-16,0,20.89537709570035,0.0,0.0,0.0,20.89537709570035,,False,3.5049461291856643,[],3.5049461291856634,3.504946129185666,4.465583546326496,[3.5049461291856634],0.0,0.0,3.5049461291856643,3.5049461291856643,0.6666032314438479,2.025053870814334,0.0,0.0,8.100215483257337,0,14.019784516742657,0.0,22.119999999999994,,False,3.5049461291856634,[],3.504946129185665,7.970529675512162,6.04249161733942,"[4.465583546326494, 3.504946129185665]",0,0.0,3.5049461291856634,3.5049461291856634,0.9474988461456472,2.7194703244878387,0.0,0,5.438940648975677,0,7.009892258371327,0.0,12.448832907347004 +46,,False,4.7878385782883734,[],4.787838578288373,4.7878385782883734,3.5049461291856643,[4.787838578288373],0,0.0,4.787838578288374,4.7878385782883734,0.7458518583110725,1.7021614217116268,0.0,0,11.915129951981388,0.0,0.0,0.0,11.915129951981388,,False,4.787838578288373,[],4.787838578288373,4.787838578288374,3.5049461291856634,[4.787838578288373],0.0,0.0,4.787838578288373,4.787838578288373,0.6735778903296562,0.742161421711625,0.0,0.0,2.9686456868465,0,19.15135431315349,0.0,22.11999999999999,,False,4.787838578288373,[],4.787838578288371,8.29278470747404,4.465583546326494,"[3.504946129185665, 4.787838578288371]",0,0.0,4.787838578288373,4.787838578288373,0.9485971700461195,2.39721529252596,0.0,0,4.79443058505192,0,9.575677156576745,0.0,14.370107741628665 +47,,False,4.573131205960277,[],4.573131205960277,4.573131205960278,4.787838578288373,[4.573131205960277],0,0.0,4.573131205960277,4.573131205960277,0.7508307220609337,1.916868794039722,0.0,0,13.418081558278054,0.0,0.0,0.0,13.418081558278054,,False,4.573131205960277,[],4.573131205960278,4.57313120596028,4.787838578288373,[4.573131205960278],0.0,0.0,4.573131205960277,4.573131205960277,0.6799726300204155,0.9568687940397202,0.0,0.0,3.827475176158881,0,18.29252482384111,0.0,22.11999999999999,,False,4.573131205960278,[],4.573131205960278,9.360969784248653,3.504946129185665,"[4.787838578288371, 4.573131205960278]",0,0.0,4.573131205960278,4.573131205960278,0.9496041720450202,1.329030215751347,0.0,0,2.658060431502694,0,9.146262411920556,0.0,11.80432284342325 +48,,False,5.501448331524805,[],5.501448331524805,5.501448331524805,4.573131205960277,[5.501448331524805],0,0.0,5.501448331524805,5.501448331524805,0.7565677219716553,0.9885516684751945,0.0,0,6.919861679326361,0.0,0.0,0.0,6.919861679326361,,False,5.501448331524805,[],5.501448331524805,5.5014483315248075,4.573131205960278,[5.501448331524805],0.0,0.0,5.501448331524805,5.501448331524805,0.687341102603341,0.028551668475193637,0.0,0.0,0.11420667390077455,0,22.00579332609922,0.0,22.119999999999994,,False,5.501448331524805,[],5.501448331524805,10.074579537485087,4.787838578288371,"[4.573131205960278, 5.501448331524805]",0,0.0,5.501448331524805,5.501448331524805,0.9507645111641518,0.6154204625149129,0.0,0,1.2308409250298258,0,11.00289666304961,0.0,12.233737588079435 +49,,False,6.158186652932027,[],6.158186652932028,6.158186652932028,5.501448331524805,[5.5299999999999985],0,0.0,6.158186652932027,6.158186652932027,0.762684081823915,0.33181334706797205,0.0,0,2.3226934294758044,0.0,0.0,0.0,2.3226934294758044,,False,6.158186652932028,[],6.158186652932027,6.15818665293203,5.501448331524805,[5.188551668475191],0.0,0.0,5.5299999999999985,5.5299999999999985,0.6926338040036176,-0.6281866529320297,0.6281866529320297,0.0,0.0,0.0,22.119999999999994,0.0,22.119999999999994,,False,6.158186652932027,[],6.1581866529320255,11.659634984456835,4.573131205960278,"[5.501448331524805, 6.1581866529320255]",0,0.0,5.188551668475191,5.188551668475191,0.9480454502438675,-0.9696349844568362,0.9696349844568362,0,0.0,0.0,10.377103336950382,0.0,10.377103336950382 +50,,False,6.371862133549777,[],6.371862133549777,7.000048786481806,5.5299999999999985,[5.188551668475191],0,0.0,5.8618133470679705,5.8618133470679705,0.7666690505680387,-0.5100487864818062,0.5100487864818062,0,0.0,18.933010954204644,0.0,0.0,18.933010954204644,,False,6.371862133549777,[],6.371862133549777,7.3414971180066155,5.188551668475191,[5.501448331524805],0.0,0.0,5.188551668475191,4.560365015543161,0.69321836111528,-1.8114971180066153,1.8114971180066153,0.0,0.0,0.0,20.754206673900764,0.0,20.754206673900764,,False,6.371862133549777,[],6.3718621335497785,12.530048786481807,5.501448331524805,"[6.1581866529320255, 6.3718621335497785]",0,0.0,5.501448331524805,4.531813347067969,0.9420447009271176,-1.840048786481808,1.840048786481808,0,0.0,0.0,11.00289666304961,0.0,11.00289666304961 +51,,False,5.175553293954833,[],5.175553293954833,6.987050411961449,5.188551668475191,[5.501448331524805],0,0.0,5.188551668475191,4.678502881993385,0.7694377310057482,-0.49705041196144784,0.49705041196144784,0,0.0,18.450511292008944,0.0,0.0,18.450511292008944,,False,5.175553293954833,[],5.175553293954833,7.015602080436644,5.501448331524805,[6.1581866529320255],0.0,0.0,5.501448331524805,3.6899512135181896,0.6936164319012492,-1.4856020804366432,1.4856020804366432,0.0,0.0,0.0,22.00579332609922,0.0,22.00579332609922,,False,5.175553293954833,[],5.1755532939548345,11.547415427504616,6.1581866529320255,"[6.3718621335497785, 5.1755532939548345]",0,0.0,6.1581866529320255,4.3181378664502175,0.9398725722110829,-0.8574154275046153,0.8574154275046153,0,0.0,0.0,12.316373305864051,0.0,12.316373305864051 +52,,False,4.743369817307445,[],4.743369817307444,6.228971897744089,5.501448331524805,[6.1581866529320255],0,0.0,5.240420229268893,4.743369817307445,0.7736217143456555,0.2610281022559118,0.0,0,1.8271967157913824,0.0,0.0,0.0,1.8271967157913824,,False,4.743369817307444,[],4.7433698173074434,5.600785244812062,6.1581866529320255,[5.600785244812059],0.0,0.0,6.1581866529320255,4.672584572495382,0.6989055289509528,-0.07078524481206205,0.07078524481206205,0.0,0.0,0.0,24.632746611728102,0.0,24.632746611728102,,False,4.7433698173074434,[],4.743369817307442,9.918923111262277,6.3718621335497785,"[5.1755532939548345, 4.743369817307442]",0,0.0,5.600785244812059,4.7433698173074434,0.9409636967790259,0.7710768887377197,0.0,0,1.5421537774754395,0,11.201570489624117,0.0,12.743724267099557 +53,,False,4.632174275867238,[],4.6321742758672375,4.702959520679302,6.1581866529320255,[4.7029595206793],0,0.0,4.632174275867238,4.632174275867238,0.7775636129253083,1.7870404793206989,0.0,0,12.509283355244893,0.0,0.0,0.0,12.509283355244893,,False,4.6321742758672375,[],4.6321742758672375,4.632174275867241,5.600785244812059,[4.6321742758672375],0.0,0.0,4.7029595206793,4.6321742758672375,0.704148451717767,0.8978257241327592,0.0,0.0,3.5913028965310367,0,18.8118380827172,0.0,22.403140979248235,,False,4.6321742758672375,[],4.632174275867239,9.375544093174682,5.1755532939548345,"[4.743369817307442, 4.632174275867239]",0,0.0,4.6321742758672375,4.6321742758672375,0.9419916890139792,1.3144559068253168,0.0,0,2.6289118136506335,0,9.264348551734475,0.0,11.893260365385109 +54,,False,2.34482395243653,[],2.3448239524365295,2.344823952436532,4.7029595206793,[2.3448239524365295],0,0.0,2.34482395243653,2.34482395243653,0.7795071398513773,4.145176047563469,0.0,0,29.016232332944284,0.0,0.0,0.0,29.016232332944284,,False,2.3448239524365295,[],2.3448239524365295,2.344823952436533,4.6321742758672375,[2.3448239524365295],0.0,0.0,2.3448239524365295,2.3448239524365295,0.7067334399823563,3.185176047563467,0.0,0.0,12.740704190253869,0,9.379295809746118,0.0,22.119999999999987,,False,2.3448239524365295,[],2.3448239524365313,6.9769982283037715,4.743369817307442,"[4.632174275867239, 2.3448239524365313]",0,0.0,2.3448239524365295,2.3448239524365295,0.9424985337610092,3.713001771696229,0.0,0,7.426003543392458,0,4.689647904873059,0.0,12.115651448265517 +55,,False,5.345517943888766,[],5.3455179438887654,5.345517943888768,2.3448239524365295,[5.3455179438887654],0,0.0,5.345517943888766,5.345517943888766,0.7838133298858357,1.144482056111232,0.0,0,8.011374392778624,0.0,0.0,0.0,8.011374392778624,,False,5.3455179438887654,[],5.3455179438887654,5.345517943888769,2.3448239524365295,[5.3455179438887654],0.0,0.0,5.3455179438887654,5.3455179438887654,0.7124608886504749,0.18448205611123125,0.0,0.0,0.737928224444925,0,21.382071775555062,0.0,22.119999999999987,,False,5.3455179438887654,[],5.345517943888764,7.690341896325297,4.632174275867239,"[2.3448239524365313, 5.345517943888764]",0,0.0,5.3455179438887654,5.3455179438887654,0.9436215281324287,2.9996581036747028,0.0,0,5.9993162073494055,0,10.691035887777531,0.0,16.690352095126936 +56,,False,5.45293632653351,[],5.45293632653351,5.4529363265335125,5.3455179438887654,[5.45293632653351],0,0.0,5.45293632653351,5.45293632653351,0.7880361358238813,1.0370636734664878,0.0,0,7.259445714265414,0.0,0.0,0.0,7.259445714265414,,False,5.45293632653351,[],5.45293632653351,5.452936326533514,5.3455179438887654,[5.344482056111234],0.0,0.0,5.45293632653351,5.45293632653351,0.7180774322892937,0.0770636734664869,0.0,0.0,0.3082546938659476,0,21.81174530613404,0.0,22.119999999999987,,False,5.45293632653351,[],5.45293632653351,10.798454270422276,2.3448239524365313,"[5.345517943888764, 5.45293632653351]",0,0.0,5.344482056111234,5.344482056111234,0.9443342794020503,-0.10845427042227573,0.10845427042227573,0,0.0,0.0,10.688964112222468,0.0,10.688964112222468 +57,,False,4.833939091648935,[],4.833939091648935,4.833939091648937,5.45293632653351,[4.833939091648935],0,0.0,4.833939091648935,4.833939091648935,0.7916439901243182,1.656060908351063,0.0,0,11.592426358457441,0.0,0.0,0.0,11.592426358457441,,False,4.833939091648935,[],4.833939091648934,4.942393362071213,5.344482056111234,[4.9423933620712095],0.0,0.0,4.833939091648935,4.833939091648935,0.722876059415001,0.5876066379287863,0.0,0.0,2.3504265517151453,0,19.33575636659574,0.0,21.686182918310884,,False,4.833939091648934,[],4.833939091648932,10.286875418182445,5.345517943888764,"[5.45293632653351, 4.833939091648932]",0,0.0,4.9423933620712095,4.833939091648934,0.9452817701935908,0.4031245818175542,0.0,0,0.8062491636351083,0,9.884786724142419,0.0,10.691035887777527 +58,,False,4.056943191532738,[],4.056943191532738,4.05694319153274,4.833939091648935,[4.056943191532738],0,0.0,4.056943191532738,4.056943191532738,0.794578468260987,2.43305680846726,0.0,0,17.03139765927082,0.0,0.0,0.0,17.03139765927082,,False,4.056943191532738,[],4.0569431915327385,4.056943191532742,4.9423933620712095,[4.0569431915327385],0.0,0.0,4.056943191532738,4.056943191532738,0.7267790624782647,1.4730568084672582,0.0,0.0,5.892227233869033,0,16.22777276613095,0.0,22.119999999999983,,False,4.0569431915327385,[],4.0569431915327385,8.890882283181675,5.45293632653351,"[4.833939091648932, 4.0569431915327385]",0,0.0,4.0569431915327385,4.0569431915327385,0.9460524196658088,1.7991177168183254,0.0,0,3.598235433636651,0,8.113886383065477,0.0,11.712121816702128 +59,,False,6.403958738659293,[],6.403958738659293,6.403958738659296,4.056943191532738,[5.529999999999997],0,0.0,6.403958738659293,6.403958738659293,0.7990460347542055,0.08604126134070444,0.0,0,0.6022888293849311,0.0,0.0,0.0,0.6022888293849311,,False,6.403958738659293,[],6.403958738659293,6.403958738659297,4.0569431915327385,[6.403958738659293],0.0,0.0,5.529999999999997,5.529999999999997,0.7297531255348744,-0.8739587386592964,0.8739587386592964,0.0,0.0,0.0,22.119999999999987,0.0,22.119999999999987,,False,6.403958738659293,[],6.403958738659291,10.460901930192033,4.833939091648932,"[4.0569431915327385, 6.403958738659291]",0,0.0,6.403958738659293,6.403958738659293,0.947225687142937,0.22909806980796432,0.0,0,0.45819613961592864,0,12.807917477318586,0.0,13.266113616934515 +60,,False,4.98144919548836,[],4.98144919548836,5.855407934147659,5.529999999999997,[5.855407934147657],0,0.0,4.98144919548836,4.98144919548836,0.8023890870227555,0.634592065852341,0.0,0,4.442144460966387,0.0,0.0,0.0,4.442144460966387,,False,4.98144919548836,[],4.98144919548836,4.981449195488365,6.403958738659293,[4.286041261340703],0.0,0.0,5.855407934147657,4.98144919548836,0.7342489284698606,0.5485508045116365,0.0,0.0,2.194203218046546,0,23.421631736590626,0.0,25.615834954637172,,False,4.98144919548836,[],4.981449195488362,11.385407934147658,4.0569431915327385,"[6.403958738659291, 4.981449195488362]",0,0.0,4.286041261340703,4.286041261340703,0.9457812706710779,-0.6954079341476573,0.6954079341476573,0,0.0,0.0,8.572082522681406,0.0,8.572082522681406 +61,,False,3.326495378009777,[],3.326495378009777,3.3264953780097795,5.855407934147657,[3.326495378009777],0,0.0,3.326495378009777,3.326495378009777,0.8045602414920742,3.1635046219902208,0.0,0,22.144532353931545,0.0,0.0,0.0,22.144532353931545,,False,3.326495378009777,[],3.326495378009776,4.021903312157438,4.286041261340703,[4.021903312157433],0.0,0.0,3.326495378009777,3.326495378009777,0.737168740022704,1.5080966878425626,0.0,0.0,6.03238675137025,0,13.305981512039107,0.0,19.338368263409357,,False,3.326495378009776,[],3.326495378009774,8.30794457349814,6.403958738659291,"[4.981449195488362, 3.326495378009774]",0,0.0,4.021903312157433,3.326495378009776,0.9463769727744168,2.382055426501858,0.0,0,4.764110853003716,0,8.043806624314866,0.0,12.807917477318583 +62,,False,5.1023476825496665,[],5.1023476825496665,5.102347682549669,3.326495378009777,[5.1023476825496665],0,0.0,5.1023476825496665,5.1023476825496665,0.8077992933620735,1.387652317450331,0.0,0,9.713566222152316,0.0,0.0,0.0,9.713566222152316,,False,5.1023476825496665,[],5.1023476825496665,5.102347682549671,4.021903312157433,[5.1023476825496665],0.0,0.0,5.1023476825496665,5.1023476825496665,0.7415246811609,0.4276523174503293,0.0,0.0,1.7106092698013171,0,20.409390730198666,0.0,22.119999999999983,,False,5.1023476825496665,[],5.102347682549668,8.428843060559448,4.981449195488362,"[3.326495378009774, 5.102347682549668]",0,0.0,5.1023476825496665,5.1023476825496665,0.9472656750934131,2.2611569394405535,0.0,0,4.522313878881107,0,10.204695365099333,0.0,14.72700924398044 +63,,False,4.5673907194519865,[],4.5673907194519865,4.567390719451989,5.1023476825496665,[4.5673907194519865],0,0.0,4.5673907194519865,4.5673907194519865,0.810609009316711,1.922609280548011,0.0,0,13.458264963836077,0.0,0.0,0.0,13.458264963836077,,False,4.5673907194519865,[],4.5673907194519865,4.567390719451991,5.1023476825496665,[4.5673907194519865],0.0,0.0,4.5673907194519865,4.5673907194519865,0.7453032428526128,0.9626092805480093,0.0,0.0,3.8504371221920373,0,18.269562877807946,0.0,22.119999999999983,,False,4.5673907194519865,[],4.567390719451985,9.66973840200166,3.326495378009774,"[5.102347682549668, 4.567390719451985]",0,0.0,4.5673907194519865,4.5673907194519865,0.9480365800325202,1.0202615979983412,0.0,0,2.0405231959966823,0,9.134781438903973,0.0,11.175304634900655 +64,,False,5.477754099433527,[],5.477754099433527,5.47775409943353,4.5673907194519865,[0.9626092805480093],0,0.0,5.477754099433527,5.477754099433527,0.8138722782501435,1.0122459005664703,0.0,0,7.085721303965292,0.0,0.0,0.0,7.085721303965292,,True,5.477754099433527,[],5.477754099433527,5.477754099433532,0,[5.477754099433527],4.5673907194519865,0.0,0.9626092805480093,0.9626092805480093,0.735489320101681,-4.515144818885518,4.515144818885518,0.0,9.134781438903973,0.0,3.8504371221920373,0.0,12.98521856109601,,False,5.477754099433527,[],5.477754099433525,10.045144818885516,5.102347682549668,"[4.567390719451985, 5.477754099433525]",0,0.0,5.477754099433527,5.477754099433527,0.9489319268145556,0.6448551811144823,0.0,0,1.2897103622289645,0,10.955508198867054,0.0,12.245218561096019 +65,,False,4.7409713552611095,[],4.7409713552611095,9.25611617414663,0.9626092805480093,[0.0],0,0.0,1.9748551811144797,1.9748551811144797,0.8080341755896593,-2.76611617414663,2.76611617414663,0,0.0,102.6782323843229,0.0,0.0,102.6782323843229,,True,4.7409713552611095,[],4.7409713552611095,4.740971355261115,0,[4.7409713552611095],10.045144818885515,0.0,0.0,0.0,0.724682298916313,-9.256116174146626,9.256116174146626,0.0,20.09028963777103,0.0,0.0,0.0,20.09028963777103,,False,4.7409713552611095,[],4.740971355261111,10.218725454694642,4.567390719451985,"[5.477754099433525, 4.740971355261111]",0,0.0,4.7409713552611095,4.7409713552611095,0.9496823031065387,0.4712745453053575,0.0,0,0.942549090610715,0,9.481942710522219,0.0,10.424491801132934 +66,,False,5.339820964186644,[],5.339820964186644,14.595937138333273,0.0,[0.0],0,0.0,0.0,0.0,0.7948791975287574,-8.105937138333275,8.105937138333275,0,0.0,300.89238657493115,0.0,0.0,300.89238657493115,,True,5.339820964186644,[],5.339820964186641,5.3398209641866465,0,[5.339820964186641],14.786116174146624,0.0,0.0,0.0,0.712884308148891,-14.59593713833327,14.59593713833327,0.0,29.572232348293248,0.0,0.0,0.0,29.572232348293248,,False,5.339820964186641,[],5.339820964186641,10.080792319447758,5.477754099433525,"[4.740971355261111, 5.339820964186641]",0,0.0,5.339820964186641,5.339820964186641,0.950501486525638,0.6092076805522417,0.0,0,1.2184153611044835,0,10.679641928373282,0.0,11.898057289477766 +67,,False,4.992619850055427,[],4.992619850055429,19.588556988388703,0.0,[0.0],0,0.0,0.0,0.0,0.7829612229347018,-13.098556988388701,13.098556988388701,0,0.0,486.21843540898857,0.0,0.0,486.21843540898857,,True,4.992619850055429,[],4.992619850055428,4.9926198500554335,0,[4.992619850055428],20.125937138333263,0.0,0.0,0.0,0.702195719116201,-19.5885569883887,19.5885569883887,0.0,40.25187427666653,0.0,0.0,0.0,40.25187427666653,,False,4.992619850055428,[],4.992619850055428,10.332440814242075,4.740971355261111,"[5.339820964186641, 4.992619850055428]",0,0.0,4.992619850055428,4.992619850055428,0.9512436395821842,0.3575591857579248,0.0,0,0.7151183715158496,0,9.985239700110856,0.0,10.700358071626706 +68,,False,4.224663894043056,[],4.224663894043054,23.813220882431757,0.0,[23.813220882431754],0,0.0,0.0,0.0,0.7731521055704906,-17.323220882431755,17.323220882431755,0,0.0,643.0379591558667,0.0,0.0,643.0379591558667,,False,4.224663894043054,[],4.224663894043057,4.224663894043063,25.11855698838869,[4.224663894043057],0.0,0.0,23.813220882431754,4.224663894043054,0.7059266792930085,1.3053361059569362,0.0,0.0,5.221344423827745,0,95.25288352972701,0.0,100.47422795355476,,False,4.224663894043057,[],4.224663894043057,9.21728374409849,5.339820964186641,"[4.992619850055428, 4.224663894043057]",0,0.0,4.224663894043057,4.224663894043057,0.9518544704223088,1.472716255901509,0.0,0,2.945432511803018,0,8.449327788086114,0.0,11.394760299889132 +69,,False,5.773140855889249,[],5.773140855889247,5.773140855889249,23.813220882431754,[5.529999999999993],0,0.0,23.096361738321004,5.773140855889249,0.7769704238528298,0.7168591441107495,0.0,0,5.018014008775246,0.0,0.0,0.0,5.018014008775246,,False,5.773140855889247,[],5.773140855889248,5.773140855889253,4.224663894043057,[5.773140855889248],0.0,0.0,5.529999999999993,5.529999999999993,0.7101676432163623,-0.24314085588925405,0.24314085588925405,0.0,0.0,0.0,22.119999999999973,0.0,22.119999999999973,,False,5.773140855889248,[],5.77314085588925,9.997804749932312,4.992619850055428,"[4.224663894043057, 5.77314085588925]",0,0.0,5.773140855889248,5.773140855889248,0.9526648590585433,0.6921952500676891,0.0,0,1.3843905001353782,0,11.546281711778496,0.0,12.930672211913874 +70,,False,6.405205305878188,[],6.40520530587819,6.648346161767447,5.529999999999993,[5.773140855889248],0,0.0,6.246859144110743,6.246859144110743,0.7806059151800097,-0.15834616176744554,0.15834616176744554,0,0.0,5.877809524807578,0.0,0.0,5.877809524807578,,False,6.40520530587819,[],6.405205305878191,6.405205305878195,5.773140855889248,[4.916859144110746],0.0,0.0,5.773140855889248,5.529999999999994,0.712976053984637,-0.8752053058781959,0.8752053058781959,0.0,0.0,0.0,23.092563423556992,0.0,23.092563423556992,,False,6.405205305878191,[],6.405205305878189,12.178346161767443,4.224663894043057,"[5.77314085588925, 6.405205305878189]",0,0.0,4.916859144110746,4.916859144110746,0.9492727897347434,-1.4883461617674447,1.4883461617674447,0,0.0,0.0,9.833718288221492,0.0,9.833718288221492 +71,,False,6.392325753491903,[],6.392325753491902,7.267531059370101,5.773140855889248,[4.916859144110746],0,0.0,5.773140855889248,5.6147946941218025,0.7823623473457912,-0.7775310593701006,0.7775310593701006,0,0.0,28.86195292381813,0.0,0.0,28.86195292381813,,False,6.392325753491902,[],6.392325753491903,7.880671915259351,4.916859144110746,[5.77314085588925],0.0,0.0,4.916859144110746,4.04165383823255,0.7115259497594589,-2.350671915259352,2.350671915259352,0.0,0.0,0.0,19.667436576442984,0.0,19.667436576442984,,False,6.392325753491903,[],6.392325753491905,12.797531059370097,5.77314085588925,"[6.405205305878189, 6.392325753491905]",0,0.0,5.77314085588925,4.284794694121805,0.9442605493134869,-2.107531059370098,2.107531059370098,0,0.0,0.0,11.5462817117785,0.0,11.5462817117785 +72,,False,4.5065675177966735,[],4.5065675177966735,6.857239433056029,4.916859144110746,[0.0],0,0.0,4.916859144110746,4.1393280847406455,0.7840653125844598,-0.367239433056028,0.367239433056028,0,0.0,13.63192775503976,0.0,0.0,13.63192775503976,,True,4.5065675177966735,[],4.506567517796674,6.614098577166776,0,[6.405205305878189],5.77314085588925,0.0,0.0,0.0,0.7026260352458225,-6.857239433056026,6.857239433056026,0.0,11.5462817117785,0.0,0.0,0.0,11.5462817117785,,False,4.506567517796674,[],4.506567517796674,10.898893271288584,6.405205305878189,"[6.392325753491905, 4.506567517796674]",0,0.0,6.405205305878189,4.297674246508091,0.9443779560267258,-0.20889327128858337,0.20889327128858337,0,0.0,0.0,12.810410611756378,0.0,12.810410611756378 +73,,False,5.923162608341952,[],5.9231626083419515,12.78040204139798,0.0,[0.0],0,0.0,0.0,0.0,0.7713837333007985,-6.29040204139798,6.29040204139798,0,0.0,233.49972377669303,0.0,0.0,233.49972377669303,,True,5.9231626083419515,[],5.9231626083419515,6.132055879630538,0,[6.132055879630535],12.17834616176744,0.0,0.0,0.0,0.6912616659391843,-12.780402041397977,12.780402041397977,0.0,24.35669232353488,0.0,0.0,0.0,24.35669232353488,,False,5.9231626083419515,[],5.92316260834195,10.429730126138628,6.392325753491905,"[4.506567517796674, 5.92316260834195]",0,0.0,6.132055879630535,5.9231626083419515,0.9452775945507683,0.26026987386137,0.0,0,0.52053974772274,0,12.26411175926107,0.0,12.78465150698381 +74,,False,6.706604953678462,[],6.706604953678462,19.48700699507644,0.0,[0.0],0,0.0,0.0,0.0,0.7575110916978398,-12.997006995076443,12.997006995076443,0,0.0,482.4488996572375,0.0,0.0,482.4488996572375,,True,6.706604953678462,[],6.706604953678461,6.706604953678465,0,[4.766837391658044],18.310402041397975,0.0,0.0,0.0,0.6788299475460522,-19.487006995076438,19.487006995076438,0.0,36.62080408279595,0.0,0.0,0.0,36.62080408279595,,False,6.706604953678461,[],6.706604953678463,12.629767562020415,4.506567517796674,"[5.92316260834195, 6.706604953678463]",0,0.0,4.766837391658044,4.766837391658044,0.9410601432291902,-1.9397675620204167,1.9397675620204167,0,0.0,0.0,9.533674783316089,0.0,9.533674783316089 +75,,False,5.873589415635379,[],5.873589415635381,25.36059641071182,0.0,[0.0],0,0.0,0.0,0.0,0.7457650490005419,-18.870596410711823,18.870596410711823,0,0.0,700.4765387656228,0.0,0.0,700.4765387656228,,True,5.873589415635381,[],5.87358941563538,7.8133569776558,0,[5.92316260834195],23.077239433056018,0.0,0.0,0.0,0.6683039425337572,-25.36059641071182,25.36059641071182,0.0,46.154478866112036,0.0,0.0,0.0,46.154478866112036,,False,5.87358941563538,[],5.873589415635382,12.580194369313848,5.92316260834195,"[6.706604953678463, 5.873589415635382]",0,0.0,5.92316260834195,3.983395046321533,0.9369840140791675,-1.8901943693138472,1.8901943693138472,0,0.0,0.0,11.8463252166839,0.0,11.8463252166839 +76,,False,5.649086732629106,[],5.649086732629108,31.00968314334093,0.0,[0.0],0,0.0,0.0,0.0,0.734806570297793,-24.519683143340927,24.519683143340927,0,0.0,910.1706382808152,0.0,0.0,910.1706382808152,,True,5.649086732629108,[],5.649086732629111,7.539281101942961,0,[6.706604953678463],29.00040204139797,0.0,0.0,0.0,0.6584836988376572,-31.00968314334093,31.00968314334093,0.0,58.00080408279594,0.0,0.0,0.0,58.00080408279594,,False,5.649086732629111,[],5.649086732629109,11.522676148264493,6.706604953678463,"[5.873589415635382, 5.649086732629109]",0,0.0,6.706604953678463,4.816410584364616,0.93574404995884,-0.8326761482644951,0.8326761482644951,0,0.0,0.0,13.413209907356926,0.0,13.413209907356926 +77,,False,3.7771264633246933,[],3.7771264633246915,34.78680960666562,0.0,[0.0],0,0.0,0.0,0.0,0.7276573538150007,-28.29680960666562,28.29680960666562,0,0.0,1050.3775725994276,0.0,0.0,1050.3775725994276,,True,3.7771264633246915,[],3.7771264633246906,4.609802611589188,0,[4.609802611589186],35.70700699507643,0.0,0.0,0.0,0.6520770570033684,-34.78680960666562,34.78680960666562,0.0,71.41401399015287,0.0,0.0,0.0,71.41401399015287,,False,3.7771264633246906,[],3.7771264633246924,9.426213195953803,5.873589415635382,"[5.649086732629109, 3.7771264633246924]",0,0.0,4.609802611589186,3.7771264633246906,0.936369220875542,1.2637868040461964,0.0,0,2.5275736080923927,0,9.219605223178371,0.0,11.747178831270764 +78,,False,5.620548215961735,[],5.620548215961733,40.407357822627354,0.0,[40.31680960666562],0,0.0,0.0,0.0,0.7172728214534752,-33.91735782262735,33.91735782262735,0,0.0,1259.0123223759272,0.0,0.0,1259.0123223759272,,False,5.620548215961733,[],5.620548215961732,5.620548215961736,40.31680960666562,[5.620548215961732],0.0,0.0,40.31680960666562,5.530000000000001,0.6568124177312191,-0.09054821596173213,0.09054821596173213,0.0,0.0,0.0,161.2672384266625,0.0,161.2672384266625,,False,5.620548215961732,[],5.620548215961732,9.397674679286428,5.649086732629109,"[3.7771264633246924, 5.620548215961732]",0,0.0,5.620548215961732,5.620548215961732,0.9372773074653946,1.292325320713573,0.0,0,2.584650641427146,0,11.241096431923465,0.0,13.82574707335061 +79,,False,4.839062623136937,[],4.839062623136935,4.929610839098665,40.31680960666562,[4.929610839098667],0,0.0,38.75642044576429,4.83906262313694,0.7207044994122906,1.560389160901333,0.0,0,10.92272412630933,0.0,0.0,0.0,10.92272412630933,,False,4.839062623136935,[],4.839062623136932,4.839062623136935,5.620548215961732,[4.839062623136932],0.0,0.0,4.929610839098667,4.839062623136935,0.660977950269921,0.6909373768630651,0.0,0.0,2.7637495074522604,0,19.71844335639467,0.0,22.48219286384693,,False,4.839062623136932,[],4.83906262313693,10.459610839098666,3.7771264633246924,"[5.620548215961732, 4.83906262313693]",0,0.0,4.839062623136932,4.839062623136932,0.9380386211905027,0.23038916090133377,0.0,0,0.46077832180266753,0,9.678125246273863,0.0,10.13890356807653 +80,,False,4.643254974231806,[],4.643254974231809,4.643254974231806,4.929610839098667,[4.643254974231809],0,0.0,4.643254974231806,4.643254974231806,0.7239199019988786,1.846745025768194,0.0,0,12.92721518037736,0.0,0.0,0.0,12.92721518037736,,False,4.643254974231809,[],4.643254974231809,4.643254974231813,4.839062623136932,[4.643254974231809],0.0,0.0,4.643254974231809,4.643254974231809,0.6648809575626222,0.8867450257681879,0.0,0.0,3.5469801030727517,0,18.573019896927235,0.0,22.119999999999987,,False,4.643254974231809,[],4.643254974231809,9.482317597368741,5.620548215961732,"[4.83906262313693, 4.643254974231809]",0,0.0,4.643254974231809,4.643254974231809,0.9387519544782692,1.2076824026312574,0.0,0,2.4153648052625147,0,9.286509948463618,0.0,11.701874753726132 +81,,False,5.556121798533965,[],5.556121798533965,5.556121798533962,4.643254974231809,[5.529999999999997],0,0.0,5.556121798533965,5.556121798533965,0.7276714781907053,0.9338782014660376,0.0,0,6.537147410262263,0.0,0.0,0.0,6.537147410262263,,False,5.556121798533965,[],5.556121798533964,5.556121798533969,4.643254974231809,[5.556121798533964],0.0,0.0,5.529999999999997,5.529999999999997,0.6693709110311257,-0.026121798533968565,0.026121798533968565,0.0,0.0,0.0,22.119999999999987,0.0,22.119999999999987,,False,5.556121798533964,[],5.556121798533966,10.199376772765778,4.83906262313693,"[4.643254974231809, 5.556121798533966]",0,0.0,5.556121798533964,5.556121798533964,0.9395842372506924,0.4906232272342228,0.0,0,0.9812464544684456,0,11.112243597067929,0.0,12.093490051536374 +82,,False,6.363886524417105,[],6.363886524417106,6.390008322951071,5.529999999999997,[5.556121798533964],0,0.0,6.363886524417105,6.363886524417105,0.7318451187767546,0.09999167704892908,0.0,0,0.6999417393425036,0.0,0.0,0.0,0.6999417393425036,,False,6.363886524417106,[],6.363886524417106,6.363886524417111,5.556121798533964,[5.133878201466032],0.0,0.0,5.556121798533964,5.529999999999996,0.672429854292752,-0.8338865244171103,0.8338865244171103,0.0,0.0,0.0,22.224487194135857,0.0,22.224487194135857,,False,6.363886524417106,[],6.363886524417104,11.920008322951073,4.643254974231809,"[5.556121798533966, 6.363886524417104]",0,0.0,5.133878201466032,5.133878201466032,0.9375480011412645,-1.2300083229510745,1.2300083229510745,0,0.0,0.0,10.267756402932063,0.0,10.267756402932063 +83,,False,7.539162716269333,[],7.539162716269333,8.373049240686438,5.556121798533964,[5.133878201466032],0,0.0,5.6561134755828935,5.6561134755828935,0.7321729817331876,-1.8830492406864394,1.8830492406864394,0,0.0,69.89878781428062,0.0,0.0,69.89878781428062,,False,7.539162716269333,[],7.539162716269333,8.76917103922041,5.133878201466032,[5.556121798533966],0.0,0.0,5.133878201466032,4.299991677048921,0.6706096035115399,-3.2391710392204116,3.2391710392204116,0.0,0.0,0.0,20.535512805864126,0.0,20.535512805864126,,False,7.539162716269333,[],7.539162716269335,13.903049240686443,5.556121798533966,"[6.363886524417104, 7.539162716269335]",0,0.0,5.556121798533966,4.326113475582892,0.9310618602073313,-3.2130492406864413,3.2130492406864413,0,0.0,0.0,11.112243597067932,0.0,11.112243597067932 +84,,False,3.559958552316202,[],3.559958552316204,6.79912959153661,5.133878201466032,[0.0],0,0.0,5.133878201466032,3.250828960779592,0.7336842706200237,-0.3091295915366099,0.3091295915366099,0,0.0,11.474890437838958,0.0,0.0,11.474890437838958,,True,3.559958552316204,[],3.5599585523162056,6.773007793002649,0,[6.363886524417104],5.556121798533966,0.0,0.0,0.0,0.6650099876834429,-6.799129591536616,6.799129591536616,0.0,11.112243597067932,0.0,0.0,0.0,11.112243597067932,,False,3.5599585523162056,[],3.5599585523162034,11.099121268585542,6.363886524417104,"[7.539162716269335, 3.5599585523162034]",0,0.0,6.363886524417104,3.150837283730663,0.930677884510269,-0.40912126858554254,0.40912126858554254,0,0.0,0.0,12.727773048834209,0.0,12.727773048834209 +85,,False,6.19072725611364,[],6.19072725611364,12.98985684765025,0.0,[0.0],0,0.0,0.0,0.0,0.7231832013665236,-6.49985684765025,6.49985684765025,0,0.0,241.27468618477727,0.0,0.0,241.27468618477727,,True,6.19072725611364,[],6.190727256113641,6.599848524699187,0,[6.599848524699183],11.92000832295107,0.0,0.0,0.0,0.655491839053881,-12.989856847650255,12.989856847650255,0.0,23.84001664590214,0.0,0.0,0.0,23.84001664590214,,False,6.190727256113641,[],6.190727256113641,9.750685808429846,7.539162716269335,"[3.5599585523162034, 6.190727256113641]",0,0.0,6.599848524699183,6.190727256113641,0.9316700774258151,0.9393141915701513,0.0,0,1.8786283831403026,0,13.199697049398367,0.0,15.07832543253867 +86,,False,5.617640845511145,[],5.617640845511145,18.607497693161395,0.0,[18.519856847650253],0,0.0,0.0,0.0,0.7139110456884353,-12.117497693161395,12.117497693161395,0,0.0,449.801514370151,0.0,0.0,449.801514370151,,False,5.617640845511145,[],5.617640845511144,5.617640845511147,18.519856847650253,[4.499272743886355],0.0,0.0,18.519856847650253,5.529999999999998,0.6597088595039254,-0.0876408455111477,0.0876408455111477,0.0,0.0,0.0,74.07942739060101,0.0,74.07942739060101,,False,5.617640845511144,[],5.617640845511146,11.80836810162479,3.5599585523162034,"[6.190727256113641, 5.617640845511146]",0,0.0,4.499272743886355,4.499272743886355,0.9299936715822916,-1.1183681016247897,1.1183681016247897,0,0.0,0.0,8.99854548777271,0.0,8.99854548777271 +87,,False,6.21707079698011,[],6.21707079698011,6.304711642491252,18.519856847650253,[0.0],0,0.0,18.334568490141507,6.217070796980112,0.7179136830864054,0.18528835750874784,0.0,0,1.2970185025612349,0.0,0.0,0.0,1.2970185025612349,,True,6.21707079698011,[],6.217070796980111,7.335438898604902,0,[6.190727256113641],4.499272743886355,0.0,0.0,0.0,0.6504789493203016,-6.304711642491258,6.304711642491258,0.0,8.99854548777271,0.0,0.0,0.0,8.99854548777271,,False,6.217070796980111,[],6.217070796980109,11.834711642491259,6.190727256113641,"[5.617640845511146, 6.217070796980109]",0,0.0,6.190727256113641,5.0723591544888516,0.9283970651442712,-1.1447116424912593,1.1447116424912593,0,0.0,0.0,12.381454512227283,0.0,12.381454512227283 +88,,False,5.226288269498875,[],5.226288269498875,11.530999911990127,0.0,[0.0],0,0.0,0.18528835750874784,0.18528835750874784,0.7099804134169309,-5.040999911990127,5.040999911990127,0,0.0,187.1219167330735,0.0,0.0,187.1219167330735,,True,5.226288269498875,[],5.226288269498876,6.370999911990138,0,[5.617640845511146],10.689999999999996,0.0,0.0,0.0,0.6429174499606868,-11.530999911990133,11.530999911990133,0.0,21.379999999999992,0.0,0.0,0.0,21.379999999999992,,False,5.226288269498876,[],5.226288269498876,11.443359066478987,5.617640845511146,"[6.217070796980109, 5.226288269498876]",0,0.0,5.617640845511146,4.472929203019887,0.9275537641300592,-0.7533590664789891,0.7533590664789891,0,0.0,0.0,11.235281691022292,0.0,11.235281691022292 +89,,False,5.847401432576639,[],5.847401432576639,17.378401344566768,0.0,[0.0],0,0.0,0.0,0.0,0.7008649539072023,-10.888401344566766,10.888401344566766,0,0.0,404.1774579103183,0.0,0.0,404.1774579103183,,True,5.847401432576639,[],5.847401432576638,6.600760499055629,0,[6.217070796980109],16.30764084551114,0.0,0.0,0.0,0.6346630138206674,-17.37840134456677,17.37840134456677,0.0,32.61528169102228,0.0,0.0,0.0,32.61528169102228,,False,5.847401432576638,[],5.84740143257664,11.073689702075516,6.217070796980109,"[5.226288269498876, 5.84740143257664]",0,0.0,6.217070796980109,5.46371173050112,0.927641443217505,-0.3836897020755181,0.3836897020755181,0,0.0,0.0,12.434141593960218,0.0,12.434141593960218 +90,,False,5.174833011991471,[],5.17483301199147,22.55323435655824,0.0,[0.0],0,0.0,0.0,0.0,0.6929909936375187,-16.063234356558237,16.063234356558237,0,0.0,596.2672593154417,0.0,0.0,596.2672593154417,,True,5.17483301199147,[],5.174833011991472,5.558522714066993,0,[5.226288269498876],22.52471164249125,0.0,0.0,0.0,0.627532808026238,-22.553234356558242,22.553234356558242,0.0,45.0494232849825,0.0,0.0,0.0,45.0494232849825,,False,5.174833011991472,[],5.174833011991474,11.022234444568113,5.226288269498876,"[5.84740143257664, 5.174833011991474]",0,0.0,5.226288269498876,4.842598567423358,0.9277330795368394,-0.33223444456811446,0.33223444456811446,0,0.0,0.0,10.452576538997752,0.0,10.452576538997752 +91,,False,3.783145107640761,[],3.783145107640759,26.336379464199,0.0,[26.336379464199002],0,0.0,0.0,0.0,0.6873456456146056,-19.846379464198996,19.846379464198996,0,0.0,736.6976057110667,0.0,0.0,736.6976057110667,,False,3.783145107640759,[],3.7831451076407583,4.115379552208876,27.750999911990128,[4.115379552208873],0.0,0.0,26.336379464199002,3.7831451076407596,0.6305670565880728,1.4146204477911266,0.0,0.0,5.6584817911645064,0,105.34551785679601,0.0,111.00399964796051,,False,3.7831451076407583,[],3.7831451076407596,8.957978119632234,5.84740143257664,"[5.174833011991474, 3.7831451076407596]",0,0.0,4.115379552208873,3.7831451076407587,0.9283217912521494,1.7320218803677672,0.0,0,3.4640437607355343,0,8.230759104417746,0.0,11.694802865153282 +92,,False,5.734501064880046,[],5.734501064880044,5.734501064880039,26.336379464199002,[5.529999999999999],0,0.0,25.580880529079042,5.734501064880046,0.6911592910130422,0.7554989351199595,0.0,0,5.288492545839716,0.0,0.0,0.0,5.288492545839716,,False,5.734501064880044,[],5.734501064880042,5.734501064880044,4.115379552208873,[5.734501064880042],0.0,0.0,5.529999999999999,5.529999999999999,0.6346382803156815,-0.20450106488004494,0.20450106488004494,0.0,0.0,0.0,22.119999999999997,0.0,22.119999999999997,,False,5.734501064880042,[],5.73450106488004,9.517646172520799,5.174833011991474,"[3.7831451076407596, 5.73450106488004]",0,0.0,5.734501064880042,5.734501064880042,0.9291960962702156,1.1723538274792,0.0,0,2.3447076549584,0,11.469002129760083,0.0,13.813709784718483 +93,,False,4.0455027380385795,[],4.045502738038581,4.250003802918622,5.529999999999999,[4.250003802918626],0,0.0,4.0455027380385795,4.0455027380385795,0.693794202905157,2.2399961970813793,0.0,0,15.679973379569656,0.0,0.0,0.0,15.679973379569656,,False,4.045502738038581,[],4.045502738038582,4.045502738038585,5.734501064880042,[4.045502738038582],0.0,0.0,4.250003802918626,4.045502738038581,0.6377554080521043,1.4844972619614154,0.0,0.0,5.937989047845662,0,17.000015211674505,0.0,22.938004259520167,,False,4.045502738038582,[],4.045502738038584,9.780003802918623,3.7831451076407596,"[5.73450106488004, 4.045502738038584]",0,0.0,4.045502738038582,4.045502738038582,0.9298001683452919,0.9099961970813775,0.0,0,1.819992394162755,0,8.091005476077164,0.0,9.91099787023992 +94,,False,5.7699773599307935,[],5.769977359930793,5.769977359930789,4.250003802918626,[5.529999999999998],0,0.0,5.7699773599307935,5.7699773599307935,0.697475440123642,0.720022640069212,0.0,0,5.040158480484484,0.0,0.0,0.0,5.040158480484484,,False,5.769977359930793,[],5.769977359930793,5.769977359930795,4.045502738038582,[5.769977359930793],0.0,0.0,5.529999999999998,5.529999999999998,0.6416103418135964,-0.23997735993079505,0.23997735993079505,0.0,0.0,0.0,22.11999999999999,0.0,22.11999999999999,,False,5.769977359930793,[],5.769977359930791,9.815480097969374,5.73450106488004,"[4.045502738038584, 5.769977359930791]",0,0.0,5.769977359930793,5.769977359930793,0.9306441178572556,0.8745199020306247,0.0,0,1.7490398040612494,0,11.539954719861585,0.0,13.288994523922835 +95,,False,6.268389522403902,[],6.2683895224039015,6.508366882334693,5.529999999999998,[5.769977359930793],0,0.0,6.25002264006921,6.25002264006921,0.7013378704284314,-0.018366882334692747,0.018366882334692747,0,0.0,0.6817786722637947,0.0,0.0,0.6817786722637947,,False,6.2683895224039015,[],6.2683895224039015,6.268389522403903,5.769977359930793,[4.920022640069209],0.0,0.0,5.769977359930793,5.529999999999998,0.644712125524319,-0.7383895224039039,0.7383895224039039,0.0,0.0,0.0,23.07990943972317,0.0,23.07990943972317,,False,6.2683895224039015,[],6.268389522403903,12.038366882334694,4.045502738038584,"[5.769977359930791, 6.268389522403903]",0,0.0,4.920022640069209,4.920022640069209,0.9287650816933805,-1.3483668823346928,1.3483668823346928,0,0.0,0.0,9.840045280138417,0.0,9.840045280138417 +96,,False,4.132358910020625,[],4.132358910020625,4.870748432424526,5.769977359930793,[4.870748432424529],0,0.0,4.150725792355318,4.132358910020625,0.7038548146064791,1.6192515675754748,0.0,0,11.334760973028324,0.0,0.0,0.0,11.334760973028324,,False,4.132358910020625,[],4.132358910020626,5.48072579235532,4.920022640069209,[5.480725792355319],0.0,0.0,4.870748432424529,4.132358910020625,0.6477062773053811,0.04927420764467971,0.0,0.0,0.19709683057871885,0,19.482993729698116,0.0,19.680090560276835,,False,4.132358910020626,[],4.132358910020624,10.400748432424528,5.769977359930791,"[6.268389522403903, 4.132358910020624]",0,0.0,5.480725792355319,4.132358910020626,0.9293654065928337,0.2892515675754721,0.0,0,0.5785031351509442,0,10.961451584710638,0.0,11.539954719861582 +97,,False,5.145861852428309,[],5.145861852428308,5.145861852428306,4.870748432424529,[5.145861852428308],0,0.0,5.145861852428309,5.145861852428309,0.7069303754460086,1.3441381475716945,0.0,0,9.408967033001861,0.0,0.0,0.0,9.408967033001861,,False,5.145861852428308,[],5.145861852428309,5.145861852428311,5.480725792355319,[5.145861852428309],0.0,0.0,5.145861852428308,5.145861852428308,0.6513649583543127,0.38413814757169007,0.0,0.0,1.5365525902867603,0,20.583447409713234,0.0,22.119999999999994,,False,5.145861852428309,[],5.1458618524283075,9.278220762448932,6.268389522403903,"[4.132358910020624, 5.1458618524283075]",0,0.0,5.145861852428309,5.145861852428309,0.9300989690483925,1.411779237551066,0.0,0,2.823558475102132,0,10.291723704856619,0.0,13.11528217995875 +98,,False,5.878673548190895,[],5.878673548190895,5.878673548190892,5.145861852428308,[5.529999999999999],0,0.0,5.878673548190895,5.878673548190895,0.7103666623424334,0.6113264518091075,0.0,0,4.2792851626637525,0.0,0.0,0.0,4.2792851626637525,,False,5.878673548190895,[],5.8786735481908945,5.878673548190896,5.145861852428309,[5.54413814757169],0.0,0.0,5.529999999999999,5.529999999999999,0.654757320645648,-0.348673548190896,0.348673548190896,0.0,0.0,0.0,22.119999999999997,0.0,22.119999999999997,,False,5.8786735481908945,[],5.878673548190896,11.024535400619204,4.132358910020624,"[5.1458618524283075, 5.878673548190896]",0,0.0,5.54413814757169,5.54413814757169,0.9302513306183343,-0.3345354006192043,0.3345354006192043,0,0.0,0.0,11.08827629514338,0.0,11.08827629514338 +99,,False,4.76040549180619,[],4.760405491806191,5.1090790399970825,5.529999999999999,[5.109079039997087],0,0.0,4.76040549180619,4.76040549180619,0.713090791527884,1.3809209600029169,0.0,0,9.666446720020417,0.0,0.0,0.0,9.666446720020417,,False,4.760405491806191,[],4.760405491806191,5.094940892425397,5.54413814757169,[5.094940892425395],0.0,0.0,5.109079039997087,4.760405491806191,0.6580044801974406,0.4350591075746033,0.0,0.0,1.7402364302984132,0,20.436316159988348,0.0,22.17655259028676,,False,4.760405491806191,[],4.760405491806191,10.639079039997087,5.1458618524283075,"[5.878673548190896, 4.760405491806191]",0,0.0,5.094940892425395,4.760405491806191,0.9309073475929189,0.05092096000291235,0.0,0,0.1018419200058247,0,10.18988178485079,0.0,10.291723704856615 From 3a3e68ab3ee773f10f6bd32adbd7df62306c3fb7 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Thu, 25 Apr 2024 10:17:50 -0400 Subject: [PATCH 40/94] About to revamp orders so they center FG, not RMs --- src/stockpyl/policy.py | 20 +++++-- src/stockpyl/sim.py | 58 ++++++++++++++----- src/stockpyl/sim_io.py | 6 +- src/stockpyl/supply_chain_node.py | 12 +++- ..._TestSaveInstance_example_4_2_correct.json | 2 +- ..._TestSaveInstance_example_6_1_correct.json | 2 +- ...ample_6_1_with_order_capacity_correct.json | 2 +- ..._TestSaveInstance_example_9_5_correct.json | 2 +- ..._TestSaveInstance_figure_6_14_correct.json | 2 +- ...nstance_omit_state_vars_false_correct.json | 2 +- ...omit_state_vars_false_rosling_correct.json | 2 +- ...Instance_omit_state_vars_true_correct.json | 2 +- .../test_sim_disruption_example_6_1_OP.csv | 2 +- .../test_sim_disruption_example_6_1_RP.csv | 2 +- .../test_sim_disruption_example_6_1_SP.csv | 2 +- .../test_sim_disruption_example_6_1_TP.csv | 2 +- ...riteResults_test_columns_to_print_none.csv | 22 +++---- ...riteResults_test_columns_to_print_none.txt | 24 ++++---- ...m_io_TestWriteResults_test_example_6_1.csv | 2 +- ...m_io_TestWriteResults_test_example_6_1.txt | 2 +- ...TestWriteResults_test_periods_to_print.csv | 2 +- ...TestWriteResults_test_periods_to_print.txt | 2 +- 22 files changed, 112 insertions(+), 62 deletions(-) diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index 5f44ccb..c17dfd0 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -352,7 +352,8 @@ def from_dict(cls, the_dict): def get_order_quantity(self, product_index=None, predecessor_index=None, rm_index=None, inventory_position=None, echelon_inventory_position_adjusted=None): """Calculate order quantity using the policy type specified in ``type``. - If ``type`` is ``None``, return ``None``. + If ``type`` is ``None``, return ``None``. Returns order quantity in the units of the upstream product + (the raw material). The method obtains the necessary state variables (typically inventory position, and sometimes others) from ``self.node.network``. The order quantity is set using the @@ -441,12 +442,21 @@ def get_order_quantity(self, product_index=None, predecessor_index=None, rm_inde # Calculate total orders that have already been placed by this node to this supplier for this RM # in the current time period (for other products at the node that use the same RM). These units # will be included in IP_before_demand and so must be subtracted before setting the order quantity. - units_already_ordered = self.node.state_vars_current.order_quantity[predecessor_index][rm_index] - # Convert to downstream units. + # units_already_ordered = self.node.state_vars_current.order_quantity[predecessor_index][rm_index] + # # Convert to downstream units. + # units_already_ordered /= NBOM + + # Determine number of units of this raw material that are already spoken for (via pending_finished_goods) + # for all products at this node. First in units of the raw material: + units_already_ordered = 0 + for prod in self.node.products: + units_already_ordered += \ + self.node.state_vars_current.pending_finished_goods[prod.index] \ + * self.node.NBOM(product=prod.index, predecessor=predecessor_index, raw_material=rm_index) + # Then convert to units of this product: units_already_ordered /= NBOM - - # Determine predecessor and RM index. + # Calculate (local or echelon) inventory position, before demand is subtracted. if self.type in ('EBS', 'BEBS'): IP_before_demand = \ diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index e0c3241..cdd2991 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -407,6 +407,10 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Loop through products at predecessor. for rm in (p.products if p is not None else [node._external_supplier_dummy_product]): rm_index = rm.index + + # Calculate NBOM. + NBOM = node.NBOM(product=prod, predecessor=p, raw_material=rm) + # Was an override order quantity provided? try: if None in order_quantity_override[node]: @@ -416,25 +420,38 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan except: qty_override = None if qty_override is not None: - order_quantity = qty_override + rm_order_quantity = qty_override + if NBOM == 0: + NBOM = 1 # TODO: This is klugey. Basically we need to determine how many FG to make if order quantity override is provided but there's no NBOM; maybe just raise an error in this case? + fg_order_quantity = qty_override / NBOM + elif NBOM == 0: + rm_order_quantity = 0 + fg_order_quantity = 0 else: - # Calculate order quantity from policy. - # (It will be 0 if there's no BOM relationship for this product/predecessor/raw material.) - order_quantity = min(order_capac, policy.get_order_quantity(product_index=prod.index, predecessor_index=p_index, rm_index=rm_index)) + # Calculate order quantity from policy, expressed in units of the raw material. + rm_order_quantity = policy.get_order_quantity(product_index=prod.index, predecessor_index=p_index, rm_index=rm_index) + fg_order_quantity = rm_order_quantity / NBOM + + # Adjust to account for order capacity. + fg_order_quantity = min(fg_order_quantity, order_capac) + rm_order_quantity = fg_order_quantity * NBOM # Place order in predecessor's order pipeline (converting first to raw material units via BOM). # (Add to any existing inbound order, because multiple products at the node can order the same RM.) if p is not None: - p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] += order_quantity + p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] += rm_order_quantity else: # Place order to external supplier. (For now, this just means adding to inbound shipment pipeline.) - node.state_vars_current.inbound_shipment_pipeline[None][rm_index][order_lead_time + shipment_lead_time] += order_quantity + node.state_vars_current.inbound_shipment_pipeline[None][rm_index][order_lead_time + shipment_lead_time] += rm_order_quantity # Record order quantity. (Add to existing order quantity, since multiple products might order the same RM from # the same predecessor.) - node.state_vars_current.order_quantity[p_index][rm_index] += order_quantity + node.state_vars_current.order_quantity[p_index][rm_index] += rm_order_quantity # Add order to on_order_by_predecessor. - node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += order_quantity + node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += rm_order_quantity + + # Update pending finished goods. (Convert to downstream units.) + node.state_vars_current.pending_finished_goods[prod.index] += fg_order_quantity def _generate_downstream_shipments(node_index, network, period, visited, consistency_checks='W'): @@ -634,10 +651,11 @@ def _initialize_next_period_state_vars(network, period): n.state_vars[period + 1].inbound_order_pipeline[s][prod_index] = \ n.state_vars[period].inbound_order_pipeline[s][prod_index][1:] + [0] - # Set next period's starting IL, BO, IDI, ODI, RM, and OO. + # Set next period's starting IL, BO, IDI, ODI, RM, PFG, and OO. # Loop through products at node. for prod_index in n.product_indices: n.state_vars[period + 1].inventory_level[prod_index] = n.state_vars[period].inventory_level[prod_index] + n.state_vars[period + 1].pending_finished_goods[prod_index] = n.state_vars[period].pending_finished_goods[prod_index] # Loop through successors. for s_index in n.successor_indices(include_external=True): n.state_vars[period + 1].backorders_by_successor[s_index][prod_index] = \ @@ -814,7 +832,7 @@ def _raw_materials_to_finished_goods(node): # Determine number of units of each product that can be processed. new_finished_goods = {} - for prod_index in node.product_indices: + for i, prod_index in enumerate(node.product_indices): # Shortcut to product and BOM. prod = node.products_by_index[prod_index] BOM = {} @@ -829,15 +847,23 @@ def _raw_materials_to_finished_goods(node): # in units of the product. avail_rm = {rm_index: node.state_vars_current.raw_material_inventory[rm_index] / BOM[rm_index] for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True)} - - # Determine number of units that can be processed. - new_finished_goods[prod_index] = min(avail_rm.values()) + + # Determine number of finished goods to make: min of min RM available and pending FG, + # unless this is the last product to process, in which case process as many RM as possible. + num_to_make = min(avail_rm.values()) + if i < len(node.product_indices) - 1: + num_to_make = min(num_to_make, node.state_vars_current.pending_finished_goods[prod_index]) + + # Number of finished goods = min of min RM available and pending FG. + new_finished_goods[prod_index] = num_to_make # Process units: remove from raw material and add to finished goods. for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True): - node.state_vars_current.raw_material_inventory[rm_index] \ - -= new_finished_goods[prod_index] * BOM[rm_index] - node.state_vars_current.inventory_level[prod_index] += new_finished_goods[prod_index] + node.state_vars_current.raw_material_inventory[rm_index] -= num_to_make * BOM[rm_index] + node.state_vars_current.inventory_level[prod_index] += num_to_make + + # Subtract units from pending_finished_goods. + node.state_vars_current.pending_finished_goods[prod_index] -= num_to_make return new_finished_goods diff --git a/src/stockpyl/sim_io.py b/src/stockpyl/sim_io.py index 706dcf5..78b9ce3 100644 --- a/src/stockpyl/sim_io.py +++ b/src/stockpyl/sim_io.py @@ -34,6 +34,8 @@ that cannot be received due to a type-RP disruption at the node - ``RM:p``: number of items from predecessor ``p`` in raw-material inventory at node + - ``PFG:p``: number of items of product ``p`` that are pending, waiting to be + processed from raw materials - ``OS:s``: outbound shipment to successor ``s`` - ``DMFS``: demand met from stock at the node in the current period - ``FR``: fill rate; cumulative from start of simulation to the current period @@ -134,7 +136,7 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= # Determine columns to print. if columns_to_print is None or columns_to_print == 'all' or 'all' in columns_to_print: - cols_to_print = ['DISR', 'IO', 'IOPL', 'OQ', 'OO', 'IS', 'ISPL', 'IDI', 'RM', 'OS', 'DMFS', 'FR', 'IL', 'BO', 'ODI', 'HC', 'SC', 'ITHC', 'REV', 'TC'] + cols_to_print = ['DISR', 'IO', 'IOPL', 'OQ', 'OO', 'IS', 'ISPL', 'IDI', 'RM', 'PFG', 'OS', 'DMFS', 'FR', 'IL', 'BO', 'ODI', 'HC', 'SC', 'ITHC', 'REV', 'TC'] elif not is_list(columns_to_print) and isinstance(columns_to_print, str): # columns_to_print is a string; put it in a list. cols_to_print = [columns_to_print] @@ -174,6 +176,7 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= if 'ISPL' in cols_to_print: temp += ISPL if 'IDI' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_disrupted_items) if 'RM' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].raw_material_inventory) + if 'PFG' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].pending_finished_goods) if 'OS' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].outbound_shipment) if 'DMFS' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].demand_met_from_stock) if 'FR' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].fill_rate) @@ -206,6 +209,7 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= if 'ISPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment_pipeline, "ISPL") if 'IDI' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_disrupted_items, "IDI") if 'RM' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].raw_material_inventory, "RM") + if 'PFG' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].pending_finished_goods, "PFG") if 'OS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].outbound_shipment, "OS") if 'DMFS' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].demand_met_from_stock, "DMFS") if 'FR' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].fill_rate, "FR") diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 25f60ab..44cb456 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1689,6 +1689,10 @@ class NodeStateVars(object): ``raw_material_inventory[prod]`` = number of units of product ``prod`` from _all_ predecessors in raw-material inventory at node. # TODO: note: this is a change, used to be indexed by predecessor + pending_finished_goods : dict + ``pending_finished_goods[prod]`` = number of units of product ``prod`` that are waiting to be + produced from raw materials. (This is used internally to ensure that raw materials are used to produce + the finished goods that they were originally ordered for.) disrupted : bool ``True`` if the node was disrupted in the period, ``False`` otherwise. holding_cost_incurred : float @@ -1805,6 +1809,7 @@ def __init__(self, node=None, period=None): self.order_quantity = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} self.raw_material_inventory = {prod_index: 0 for prod_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True)} + self.pending_finished_goods = {prod_index: 0 for prod_index in self.node.product_indices} # Fill rate quantities. self.demand_cumul = {prod_index: 0 for prod_index in self.node.product_indices} @@ -1826,6 +1831,7 @@ def __init__(self, node=None, period=None): self.inbound_disrupted_items = {} self.order_quantity = {} self.raw_material_inventory = {} + self.pending_finished_goods = {} # Remaining state variables. self.disrupted = False @@ -2047,7 +2053,7 @@ def on_order(self, prod_index=None): total_on_order = np.sum([ self.on_order_by_predecessor[p][rm_index] - * self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) + / self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) ]) @@ -2433,6 +2439,7 @@ def to_dict(self): sv_dict['inbound_disrupted_items'] = copy.deepcopy(self.inbound_disrupted_items) sv_dict['order_quantity'] = copy.deepcopy(self.order_quantity) sv_dict['raw_material_inventory'] = copy.deepcopy(self.raw_material_inventory) + sv_dict['pending_finished_goods'] = copy.deepcopy(self.pending_finished_goods) sv_dict['inventory_level'] = self.inventory_level sv_dict['disrupted'] = self.disrupted sv_dict['holding_cost_incurred'] = self.holding_cost_incurred @@ -2485,6 +2492,7 @@ def from_dict(cls, the_dict): nsv.inbound_disrupted_items = copy.deepcopy(the_dict['inbound_disrupted_items']) nsv.order_quantity = copy.deepcopy(the_dict['order_quantity']) nsv.raw_material_inventory = copy.deepcopy(the_dict['raw_material_inventory']) + nsv.pending_finished_goods = copy.deepcopy(the_dict['pending_finished_goods']) nsv.inventory_level = the_dict['inventory_level'] nsv.disrupted = the_dict['disrupted'] nsv.holding_cost_incurred = the_dict['holding_cost_incurred'] @@ -2523,6 +2531,7 @@ def reindex_state_variables(self, old_to_new_dict, old_to_new_prod_dict): old_rm_indices = list(self.raw_material_inventory.keys()) for rm_index in old_rm_indices: change_dict_key(self.raw_material_inventory, rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.pending_finished_goods, prod.index, old_to_new_prod_dict[prod.index]) # State variables indexed by predecessor. for p in self.node.predecessors(include_external=True): @@ -2602,6 +2611,7 @@ def deep_equal_to(self, other, rel_tol=1e-8): if self.inbound_disrupted_items != other.inbound_disrupted_items: return False if self.order_quantity != other.order_quantity: return False if self.raw_material_inventory != other.raw_material_inventory: return False + if self.pending_finished_goods != other.pending_finished_goods: return False if self.inventory_level != other.inventory_level: return False if self.disrupted != other.disrupted: return False if self.holding_cost_incurred != other.holding_cost_incurred: return False diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json index 4787a8c..5e0a485 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-04-21 22:28:41.855000"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-04-24 21:29:04.115019"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json index 9f6b0df..2b13166 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:41.863841"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.123250"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json index f61937a..b84e544 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:41.869483"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.129012"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json index 1d1f5dc..5dbc2d8 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-04-21 22:28:41.858721"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-04-24 21:29:04.117995"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json index dac621b..b5fff6f 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:41.878365"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.137151"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json index 90f111d..d07b848 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:42.252486"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.407469"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json index 89ffae0..d4cae67 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:42.427125"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 12.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 12.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 42.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 54.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 49.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 59.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 73.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 83.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 87.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 88.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 90.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 101.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 108.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 105.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 113.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 116.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 114.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 127.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 130.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 127.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 134.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 130.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 130.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 72.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 72.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "pending_finished_goods": {"-8": 76.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "pending_finished_goods": {"-8": 68.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 42.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 72.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 74.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 69.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 68.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 99.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 109.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 115.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 110.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 98.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 112.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 132.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 127.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 129.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 132.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 126.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 154.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 154.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 139.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 155.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 155.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 155.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.594193"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json index 33a0b67..4219433 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:28:42.193124"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.345880"} \ No newline at end of file diff --git a/tests/additional_files/test_sim_disruption_example_6_1_OP.csv b/tests/additional_files/test_sim_disruption_example_6_1_OP.csv index b99207f..c217a33 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_OP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_OP.csv @@ -1,4 +1,4 @@ -t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-2,FR:-2,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-4,FR:-4,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-6,FR:-6,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC 0,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,2.6018801180469207,0,0,18.213160826328444,0.0,0.0,0.0,18.213160826328444,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,1.6418801180469207,0,0,6.567520472187683,0,15.552479527812318,0.0,22.12,,False,3.8881198819530796,[],3.888119881953079,3.888119881953079,0,"[0, 3.888119881953079]",0,0.0,3.8881198819530796,3.8881198819530796,1.0,6.80188011804692,0,0,13.60376023609384,0,7.776239763906159,0.0,21.38 1,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,1.1710978153106169,0,0,8.197684707174318,0.0,0.0,0.0,8.197684707174318,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,0.2110978153106169,0,0,0.8443912612424676,0,21.275608738757533,0.0,22.12,,False,5.318902184689383,[],5.318902184689383,9.207022066642462,0,"[3.888119881953079, 5.318902184689383]",0,0.0,5.318902184689383,5.318902184689383,1.0,1.482977933357537,0,0,2.965955866715074,0,10.637804369378767,0.0,13.60376023609384 2,,False,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[5.279041292200137],0,0.0,5.279041292200137,5.279041292200137,1.0,1.210958707799863,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200137,[],0,0.0,5.318902184689383,[0],0,0.0,5.279041292200137,5.279041292200137,1.0,0.25095870779986296,0,0,1.0038348311994518,0,21.11616516880055,0.0,22.12,,False,0,[],0.0,5.318902184689383,3.888119881953079,"[5.318902184689383, 0.0]",0,0.0,0,0.0,1.0,5.371097815310616,0,0,10.742195630621232,0,0.0,0.0,10.742195630621232 diff --git a/tests/additional_files/test_sim_disruption_example_6_1_RP.csv b/tests/additional_files/test_sim_disruption_example_6_1_RP.csv index fc16084..0bbb59e 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_RP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_RP.csv @@ -1,4 +1,4 @@ -t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-2,FR:-2,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-4,FR:-4,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-6,FR:-6,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC 0,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,2.6018801180469207,0,0,18.213160826328444,0.0,0.0,0.0,18.213160826328444,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,1.6418801180469207,0,0,6.567520472187683,0,15.552479527812318,0.0,22.12,,False,3.8881198819530796,[],3.888119881953079,3.888119881953079,0,"[0, 3.888119881953079]",0,0.0,3.8881198819530796,3.8881198819530796,1.0,6.80188011804692,0,0,13.60376023609384,0,7.776239763906159,0.0,21.38 1,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,1.1710978153106169,0,0,8.197684707174318,0.0,0.0,0.0,8.197684707174318,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,0.2110978153106169,0,0,0.8443912612424676,0,21.275608738757533,0.0,22.12,,False,5.318902184689383,[],5.318902184689383,9.207022066642462,0,"[3.888119881953079, 5.318902184689383]",0,0.0,5.318902184689383,5.318902184689383,1.0,1.482977933357537,0,0,2.965955866715074,0,10.637804369378767,0.0,13.60376023609384 2,,False,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[0.2110978153106169],0,0.0,5.279041292200137,5.279041292200137,1.0,1.210958707799863,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200137,[],5.279041292200137,5.279041292200137,0,[5.279041292200137],5.318902184689383,0.0,0.2110978153106169,0.2110978153106169,0.6501503996393926,-5.06794347688952,5.06794347688952,0,10.637804369378767,0.0,0.8443912612424676,0.0,11.482195630621234,,False,5.279041292200137,[],5.279041292200137,10.59794347688952,3.888119881953079,"[5.318902184689383, 5.279041292200137]",0,0.0,5.279041292200137,5.279041292200137,1.0,0.09205652311047885,0,0,0.1841130462209577,0,10.558082584400275,0.0,10.742195630621232 diff --git a/tests/additional_files/test_sim_disruption_example_6_1_SP.csv b/tests/additional_files/test_sim_disruption_example_6_1_SP.csv index a74cf72..9c8f8b2 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_SP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_SP.csv @@ -1,4 +1,4 @@ -t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-2,FR:-2,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-4,FR:-4,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-6,FR:-6,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC 0,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,2.6018801180469207,0,0,18.213160826328444,0.0,0.0,0.0,18.213160826328444,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,1.6418801180469207,0,0,6.567520472187683,0,15.552479527812318,0.0,22.12,,False,3.8881198819530796,[],3.888119881953079,3.888119881953079,0,"[0, 3.888119881953079]",0,0.0,3.8881198819530796,3.8881198819530796,1.0,6.80188011804692,0,0,13.60376023609384,0,7.776239763906159,0.0,21.38 1,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,1.1710978153106169,0,0,8.197684707174318,0.0,0.0,0.0,8.197684707174318,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,0.2110978153106169,0,0,0.8443912612424676,0,21.275608738757533,0.0,22.12,,False,5.318902184689383,[],5.318902184689383,9.207022066642462,0,"[3.888119881953079, 5.318902184689383]",0,0.0,5.318902184689383,5.318902184689383,1.0,1.482977933357537,0,0,2.965955866715074,0,10.637804369378767,0.0,13.60376023609384 2,,False,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[5.279041292200137],0,0.0,5.279041292200137,5.279041292200137,1.0,1.210958707799863,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[0],0,0.0,5.279041292200137,5.279041292200137,1.0,0.25095870779986296,0,0,1.0038348311994518,0,21.11616516880055,0.0,22.12,,False,5.279041292200137,[],5.279041292200137,10.59794347688952,3.888119881953079,"[5.318902184689383, 5.279041292200137]",0,0.0,0,0.0,0.6355779233163648,0.09205652311047885,0,5.279041292200137,10.742195630621232,0,0.0,0.0,10.742195630621232 diff --git a/tests/additional_files/test_sim_disruption_example_6_1_TP.csv b/tests/additional_files/test_sim_disruption_example_6_1_TP.csv index 192035a..49aba30 100644 --- a/tests/additional_files/test_sim_disruption_example_6_1_TP.csv +++ b/tests/additional_files/test_sim_disruption_example_6_1_TP.csv @@ -1,4 +1,4 @@ -t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-2,FR:-2,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-4,FR:-4,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-6,FR:-6,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC 0,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,2.6018801180469207,0,0,18.213160826328444,0.0,0.0,0.0,18.213160826328444,,False,3.8881198819530796,[],3.8881198819530796,3.8881198819530796,0,[3.8881198819530796],0,0.0,3.8881198819530796,3.8881198819530796,1.0,1.6418801180469207,0,0,6.567520472187683,0,15.552479527812318,0.0,22.12,,False,3.8881198819530796,[],3.888119881953079,3.888119881953079,0,"[0, 3.888119881953079]",0,0.0,3.8881198819530796,3.8881198819530796,1.0,6.80188011804692,0,0,13.60376023609384,0,7.776239763906159,0.0,21.38 1,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,1.1710978153106169,0,0,8.197684707174318,0.0,0.0,0.0,8.197684707174318,,False,5.318902184689383,[],5.318902184689383,5.318902184689383,3.8881198819530796,[5.318902184689383],0,0.0,5.318902184689383,5.318902184689383,1.0,0.2110978153106169,0,0,0.8443912612424676,0,21.275608738757533,0.0,22.12,,False,5.318902184689383,[],5.318902184689383,9.207022066642462,0,"[3.888119881953079, 5.318902184689383]",0,0.0,5.318902184689383,5.318902184689383,1.0,1.482977933357537,0,0,2.965955866715074,0,10.637804369378767,0.0,13.60376023609384 2,,False,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[5.279041292200137],0,0.0,5.279041292200137,5.279041292200137,1.0,1.210958707799863,0,0,8.47671095459904,0.0,0.0,0.0,8.47671095459904,,True,5.279041292200137,[],5.279041292200137,5.279041292200137,5.318902184689383,[5.279041292200137],0,0.0,5.279041292200137,5.279041292200137,1.0,0.25095870779986296,0,0,1.0038348311994518,0,21.11616516880055,0.0,22.12,,False,5.279041292200137,[],5.279041292200137,10.59794347688952,3.888119881953079,"[5.318902184689383, 5.279041292200137]",0,0.0,5.279041292200137,5.279041292200137,1.0,0.09205652311047885,0,0,0.1841130462209577,0,10.558082584400275,0.0,10.742195630621232 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv index 1403170..1145406 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv @@ -1,12 +1,12 @@ -t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC -0,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,1.0,1.2137341099786818,0,0,8.496138769850774,0.0,0.0,0.0,8.496138769850774,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,1.0,0.25373410997868184,0,0,1.0149364399147274,0,21.105063560085274,0.0,22.12,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,"[0, 5.276265890021318]",0,0.0,5.276265890021318,5.276265890021318,1.0,5.413734109978681,0,0,10.827468219957362,0,10.552531780042637,0.0,21.38 -1,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,1.0,3.3446280788065055,0,0,23.41239655164554,0.0,0.0,0.0,23.41239655164554,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,1.0,2.3846280788065055,0,0,9.538512315226022,0,12.581487684773979,0.0,22.12,,False,3.1453719211934947,[],3.1453719211934947,8.421637811214813,0,"[5.276265890021318, 3.1453719211934947]",0,0.0,3.1453719211934947,3.1453719211934947,1.0,2.2683621887851864,0,0,4.536724377570373,0,6.2907438423869895,0.0,10.827468219957362 -2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0,0.0,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0,0.0,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0,0.0,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 -3,,False,6.14531128957209,[],6.145311289572089,6.239212400898446,5.53,[5.623901111326356],0,0.0,6.14531128957209,6.14531128957209,1.0,0.250787599101554,0,0,1.755513193710878,0.0,0.0,0.0,1.755513193710878,,False,6.145311289572089,[],6.1453112895720885,6.14531128957209,5.623901111326356,[5.066098888673643],0,0.0,5.623901111326356,5.53,0.9648745647930684,-0.6153112895720891,0.6153112895720891,0,0.0,0.0,22.495604445305425,0.0,22.495604445305425,,False,6.1453112895720885,[],6.145311289572087,11.769212400898443,3.1453719211934947,"[5.623901111326356, 6.145311289572087]",0,0.0,5.066098888673643,5.066098888673643,0.9465494325617361,-1.0792124008984452,1.0792124008984452,0,0.0,0.0,10.132197777347287,0.0,10.132197777347287 -4,,False,6.037190468227883,[],6.037190468227883,6.652501757799973,5.623901111326356,[5.066098888673643],0,0.0,5.87468871042791,5.87468871042791,0.993804273838809,-0.16250175779997278,0.16250175779997278,0,0.0,6.032065249534989,0.0,0.0,6.032065249534989,,False,6.037190468227883,[],6.037190468227882,7.116402869126329,5.066098888673643,[5.623901111326356],0,0.0,5.066098888673643,4.450787599101554,0.9124747708758353,-1.5864028691263288,1.5864028691263288,0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227882,[],6.037190468227884,12.18250175779997,5.623901111326356,"[6.145311289572087, 6.037190468227884]",0,0.0,5.623901111326356,4.544688710427911,0.9019479117772604,-1.492501757799971,1.492501757799971,0,0.0,0.0,11.247802222652712,0.0,11.247802222652712 +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,PFG:-2,OS:EXT|-2,DMFS:-2,FR:-2,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,PFG:-4,OS:1|-4,DMFS:-4,FR:-4,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,PFG:-6,OS:2|-6,DMFS:-6,FR:-6,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +0,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,5.276265890021318,1.0,1.2137341099786818,0,0,8.496138769850774,0.0,0.0,0.0,8.496138769850774,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,5.276265890021318,1.0,0.25373410997868184,0,0,1.0149364399147274,0,21.105063560085274,0.0,22.12,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,"[0, 5.276265890021318]",0,0.0,5.276265890021318,5.276265890021318,5.276265890021318,1.0,5.413734109978681,0,0,10.827468219957362,0,10.552531780042637,0.0,21.38 +1,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,3.1453719211934947,1.0,3.3446280788065055,0,0,23.41239655164554,0.0,0.0,0.0,23.41239655164554,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,3.1453719211934947,1.0,2.3846280788065055,0,0,9.538512315226022,0,12.581487684773979,0.0,22.12,,False,3.1453719211934947,[],3.1453719211934947,8.421637811214813,0,"[5.276265890021318, 3.1453719211934947]",0,0.0,8.421637811214813,3.1453719211934947,3.1453719211934947,1.0,2.2683621887851864,0,0,4.536724377570373,0,6.2907438423869895,0.0,10.827468219957362 +2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0,0.0,5.623901111326357,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0,0.0,5.623901111326357,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0,0.0,8.769273032519852,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 +3,,False,6.14531128957209,[],6.145311289572089,6.239212400898446,5.53,[5.623901111326356],0,0.0,6.239212400898446,6.14531128957209,6.14531128957209,1.0,0.250787599101554,0,0,1.755513193710878,0.0,0.0,0.0,1.755513193710878,,False,6.145311289572089,[],6.1453112895720885,6.14531128957209,5.623901111326356,[5.066098888673643],0,0.0,6.14531128957209,5.623901111326356,5.53,0.9648745647930684,-0.6153112895720891,0.6153112895720891,0,0.0,0.0,22.495604445305425,0.0,22.495604445305425,,False,6.1453112895720885,[],6.145311289572087,11.769212400898443,3.1453719211934947,"[5.623901111326356, 6.145311289572087]",0,0.0,11.769212400898443,5.066098888673643,5.066098888673643,0.9465494325617361,-1.0792124008984452,1.0792124008984452,0,0.0,0.0,10.132197777347287,0.0,10.132197777347287 +4,,False,6.037190468227883,[],6.037190468227883,6.652501757799973,5.623901111326356,[5.066098888673643],0,0.0,6.652501757799973,5.87468871042791,5.87468871042791,0.993804273838809,-0.16250175779997278,0.16250175779997278,0,0.0,6.032065249534989,0.0,0.0,6.032065249534989,,False,6.037190468227883,[],6.037190468227882,7.116402869126329,5.066098888673643,[5.623901111326356],0,0.0,7.116402869126329,5.066098888673643,4.450787599101554,0.9124747708758353,-1.5864028691263288,1.5864028691263288,0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227882,[],6.037190468227884,12.18250175779997,5.623901111326356,"[6.145311289572087, 6.037190468227884]",0,0.0,12.18250175779997,5.623901111326356,4.544688710427911,0.9019479117772604,-1.492501757799971,1.492501757799971,0,0.0,0.0,11.247802222652712,0.0,11.247802222652712 ... -95,,False,6.130726446440085,[],6.130726446440086,7.57737086691143,5.4680702998326325,[6.976644420471352],0,0.0,5.4680702998326325,5.043355579528655,0.9665360502301662,-1.0873708669114297,1.0873708669114297,0,0.0,40.363206579752266,0.0,0.0,40.363206579752266,,False,6.130726446440086,[],6.130726446440086,6.130726446440084,6.976644420471352,[4.686396819846024],0,0.0,6.976644420471352,5.530000000000002,0.9139652719144801,-0.6007264464400839,0.6007264464400839,0,0.0,0.0,27.90657768188541,0.0,27.90657768188541,,False,6.130726446440086,[],6.130726446440088,12.134329626594061,3.7919143161941378,"[6.003603180153982, 6.130726446440088]",0,0.0,4.686396819846024,4.686396819846024,0.9263860172792653,-1.4443296265940617,1.4443296265940617,0,0.0,0.0,9.372793639692048,0.0,9.372793639692048 -96,,False,5.560039692192106,[],5.560039692192106,6.160766138632184,6.976644420471352,[4.686396819846024],0,0.0,6.647410559103536,5.560039692192106,0.9669120992580992,0.3292338613678165,0.0,0,2.3046370295747156,0.0,0.0,0.0,2.3046370295747156,,False,5.560039692192106,[],5.560039692192106,7.004369318786166,4.686396819846024,[6.003603180153982],0,0.0,4.686396819846024,4.08567037340594,0.9119522231043865,-1.4743693187861657,1.4743693187861657,0,0.0,0.0,18.745587279384097,0.0,18.745587279384097,,False,5.560039692192106,[],5.560039692192106,11.690766138632183,6.003603180153982,"[6.130726446440088, 5.560039692192106]",0,0.0,6.003603180153982,4.559273553559921,0.9251905939878785,-1.0007661386321853,1.0007661386321853,0,0.0,0.0,12.007206360307965,0.0,12.007206360307965 -97,,False,4.381602699335917,[],4.381602699335917,5.855972018122078,4.686396819846024,[5.855972018122083],0,0.0,4.381602699335917,4.381602699335917,0.9672025433462068,0.6340279818779235,0.0,0,4.438195873145465,0.0,0.0,0.0,4.438195873145465,,False,4.381602699335917,[],4.381602699335917,5.3823688379681,6.003603180153982,[5.3823688379681025],0,0.0,5.855972018122083,4.381602699335917,0.912725102486183,0.14763116203189952,0.0,0,0.5905246481275981,0,23.42388807248833,0.0,24.01441272061593,,False,4.381602699335917,[],4.381602699335919,9.941642391528015,6.130726446440088,"[5.560039692192106, 4.381602699335919]",0,0.0,5.3823688379681025,4.381602699335917,0.9258472675520476,0.7483576084719852,0.0,0,1.4967152169439704,0,10.764737675936205,0.0,12.261452892880175 -98,,False,4.775201280806586,[],4.775201280806585,4.775201280806579,5.855972018122083,[4.775201280806585],0,0.0,4.775201280806586,4.775201280806586,0.9675133263495452,1.7147987191934204,0.0,0,12.003591034353942,0.0,0.0,0.0,12.003591034353942,,False,4.775201280806585,[],4.775201280806586,4.775201280806583,5.3823688379681025,[4.775201280806586],0,0.0,4.775201280806585,4.775201280806585,0.9135521042580494,0.7547987191934169,0.0,0,3.0191948767736676,0,19.10080512322634,0.0,22.120000000000008,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,"[4.381602699335919, 4.775201280806584]",0,0.0,4.775201280806586,4.775201280806586,0.9265499259666677,1.5331960198575052,0.0,0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182 -99,,False,7.215901450653069,[],7.21590145065307,7.215901450653063,4.775201280806585,[5.530000000000003],0,0.0,6.4900000000000055,6.4900000000000055,0.9665518084518686,-0.7259014506530637,0.7259014506530637,0,0.0,26.94546184824172,0.0,0.0,26.94546184824172,,False,7.21590145065307,[],7.21590145065307,7.215901450653067,4.775201280806586,[5.914798719193424],0,0.0,5.530000000000003,5.530000000000003,0.9114742407752131,-1.6859014506530672,1.6859014506530672,0,0.0,0.0,22.12000000000001,0.0,22.12000000000001,,False,7.21590145065307,[],7.215901450653072,11.991102731459648,4.381602699335919,"[4.775201280806584, 7.215901450653072]",0,0.0,5.914798719193424,5.914798719193424,0.9250413810029866,-1.301102731459646,1.301102731459646,0,0.0,0.0,11.829597438386848,0.0,11.829597438386848 +95,,False,6.130726446440085,[],6.130726446440086,7.57737086691143,5.4680702998326325,[6.976644420471352],0,0.0,7.57737086691143,5.4680702998326325,5.043355579528655,0.9665360502301662,-1.0873708669114297,1.0873708669114297,0,0.0,40.363206579752266,0.0,0.0,40.363206579752266,,False,6.130726446440086,[],6.130726446440086,6.130726446440084,6.976644420471352,[4.686396819846024],0,0.0,6.130726446440084,6.976644420471352,5.530000000000002,0.9139652719144801,-0.6007264464400839,0.6007264464400839,0,0.0,0.0,27.90657768188541,0.0,27.90657768188541,,False,6.130726446440086,[],6.130726446440088,12.134329626594061,3.7919143161941378,"[6.003603180153982, 6.130726446440088]",0,0.0,12.134329626594061,4.686396819846024,4.686396819846024,0.9263860172792653,-1.4443296265940617,1.4443296265940617,0,0.0,0.0,9.372793639692048,0.0,9.372793639692048 +96,,False,5.560039692192106,[],5.560039692192106,6.160766138632184,6.976644420471352,[4.686396819846024],0,0.0,6.160766138632184,6.647410559103536,5.560039692192106,0.9669120992580992,0.3292338613678165,0.0,0,2.3046370295747156,0.0,0.0,0.0,2.3046370295747156,,False,5.560039692192106,[],5.560039692192106,7.004369318786166,4.686396819846024,[6.003603180153982],0,0.0,7.004369318786166,4.686396819846024,4.08567037340594,0.9119522231043865,-1.4743693187861657,1.4743693187861657,0,0.0,0.0,18.745587279384097,0.0,18.745587279384097,,False,5.560039692192106,[],5.560039692192106,11.690766138632183,6.003603180153982,"[6.130726446440088, 5.560039692192106]",0,0.0,11.690766138632183,6.003603180153982,4.559273553559921,0.9251905939878785,-1.0007661386321853,1.0007661386321853,0,0.0,0.0,12.007206360307965,0.0,12.007206360307965 +97,,False,4.381602699335917,[],4.381602699335917,5.855972018122078,4.686396819846024,[5.855972018122083],0,0.0,5.855972018122078,4.381602699335917,4.381602699335917,0.9672025433462068,0.6340279818779235,0.0,0,4.438195873145465,0.0,0.0,0.0,4.438195873145465,,False,4.381602699335917,[],4.381602699335917,5.3823688379681,6.003603180153982,[5.3823688379681025],0,0.0,5.3823688379681,5.855972018122083,4.381602699335917,0.912725102486183,0.14763116203189952,0.0,0,0.5905246481275981,0,23.42388807248833,0.0,24.01441272061593,,False,4.381602699335917,[],4.381602699335919,9.941642391528015,6.130726446440088,"[5.560039692192106, 4.381602699335919]",0,0.0,9.941642391528015,5.3823688379681025,4.381602699335917,0.9258472675520476,0.7483576084719852,0.0,0,1.4967152169439704,0,10.764737675936205,0.0,12.261452892880175 +98,,False,4.775201280806586,[],4.775201280806585,4.775201280806579,5.855972018122083,[4.775201280806585],0,0.0,4.775201280806579,4.775201280806586,4.775201280806586,0.9675133263495452,1.7147987191934204,0.0,0,12.003591034353942,0.0,0.0,0.0,12.003591034353942,,False,4.775201280806585,[],4.775201280806586,4.775201280806583,5.3823688379681025,[4.775201280806586],0,0.0,4.775201280806583,4.775201280806585,4.775201280806585,0.9135521042580494,0.7547987191934169,0.0,0,3.0191948767736676,0,19.10080512322634,0.0,22.120000000000008,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,"[4.381602699335919, 4.775201280806584]",0,0.0,9.156803980142493,4.775201280806586,4.775201280806586,0.9265499259666677,1.5331960198575052,0.0,0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182 +99,,False,7.215901450653069,[],7.21590145065307,7.215901450653063,4.775201280806585,[5.530000000000003],0,0.0,7.215901450653063,6.4900000000000055,6.4900000000000055,0.9665518084518686,-0.7259014506530637,0.7259014506530637,0,0.0,26.94546184824172,0.0,0.0,26.94546184824172,,False,7.21590145065307,[],7.21590145065307,7.215901450653067,4.775201280806586,[5.914798719193424],0,0.0,7.215901450653067,5.530000000000003,5.530000000000003,0.9114742407752131,-1.6859014506530672,1.6859014506530672,0,0.0,0.0,22.12000000000001,0.0,22.12000000000001,,False,7.21590145065307,[],7.215901450653072,11.991102731459648,4.381602699335919,"[4.775201280806584, 7.215901450653072]",0,0.0,11.991102731459648,5.914798719193424,5.914798719193424,0.9250413810029866,-1.301102731459646,1.301102731459646,0,0.0,0.0,11.829597438386848,0.0,11.829597438386848 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt index 55a46a1..010e3f7 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt @@ -1,13 +1,13 @@ -t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OO:2|-4 IS:2|-4 ISPL:2|-4 IDI:2|-4 RM:-4 OS:EXT|-2 DMFS:-4 FR:-4 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OO:3|-6 IS:3|-6 ISPL:3|-6 IDI:3|-6 RM:-6 OS:1|-4 DMFS:-6 FR:-6 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 IDI:EXT|-7 RM:-7 OS:2|-6 DMFS:-7 FR:-7 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC ---- ------- ------ ----------- ------------- --------- --------- --------- -------------------- ---------- ------- ----------- --------- -------- --------- ----------- ------------ -------- -------- ------ ----- -------- ------- ------ --------- ----------- --------- --------- --------- -------------------- ---------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------------ ------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- -0 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 0 [0, 5.276265890021318] 0 0 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 -1 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 0 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 -2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 -3 | False 6.14531 [] 6.14531 6.23921 5.53 [5.623901111326356] 0 0 6.14531 6.14531 1 0.250788 0 0 1.75551 0 0 0 1.75551 | False 6.14531 [] 6.14531 6.14531 5.6239 [5.066098888673643] 0 0 5.6239 5.53 0.964875 -0.615311 0.615311 0 0 0 22.4956 0 22.4956 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326356, 6.145311289572087] 0 0 5.0661 5.0661 0.946549 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 -4 | False 6.03719 [] 6.03719 6.6525 5.6239 [5.066098888673643] 0 0 5.87469 5.87469 0.993804 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326356] 0 0 5.0661 4.45079 0.912475 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572087, 6.037190468227884] 0 0 5.6239 4.54469 0.901948 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 +t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OO:2|-4 IS:2|-4 ISPL:2|-4 IDI:2|-4 RM:-4 PFG:-2 OS:EXT|-2 DMFS:-2 FR:-2 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OO:3|-6 IS:3|-6 ISPL:3|-6 IDI:3|-6 RM:-6 PFG:-4 OS:1|-4 DMFS:-4 FR:-4 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 IDI:EXT|-7 RM:-7 PFG:-6 OS:2|-6 DMFS:-6 FR:-6 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC +--- ------- ------ ----------- ------------- --------- --------- --------- -------------------- ---------- ------- -------- ----------- --------- -------- --------- ----------- ------------ -------- -------- ------ ----- -------- ------- ------ --------- ----------- --------- --------- --------- -------------------- ---------- ------- -------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------------ ------- -------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- +0 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 0 [0, 5.276265890021318] 0 0 5.27627 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 +1 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 0 8.42164 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 +2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 0 5.6239 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 0 5.6239 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 0 8.76927 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 +3 | False 6.14531 [] 6.14531 6.23921 5.53 [5.623901111326356] 0 0 6.23921 6.14531 6.14531 1 0.250788 0 0 1.75551 0 0 0 1.75551 | False 6.14531 [] 6.14531 6.14531 5.6239 [5.066098888673643] 0 0 6.14531 5.6239 5.53 0.964875 -0.615311 0.615311 0 0 0 22.4956 0 22.4956 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326356, 6.145311289572087] 0 0 11.7692 5.0661 5.0661 0.946549 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 +4 | False 6.03719 [] 6.03719 6.6525 5.6239 [5.066098888673643] 0 0 6.6525 5.87469 5.87469 0.993804 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326356] 0 0 7.1164 5.0661 4.45079 0.912475 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572087, 6.037190468227884] 0 0 12.1825 5.6239 4.54469 0.901948 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 ... -95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 0 5.46807 5.04336 0.966536 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 0 6.97664 5.53 0.913965 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 0 4.6864 4.6864 0.926386 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 -96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 0 6.64741 5.56004 0.966912 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 0 4.6864 4.08567 0.911952 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 0 6.0036 4.55927 0.925191 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 -97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122083] 0 0 4.3816 4.3816 0.967203 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 0 5.85597 4.3816 0.912725 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 0 5.38237 4.3816 0.925847 0.748358 0 0 1.49672 0 10.7647 0 12.2615 -98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 0 4.7752 4.7752 0.967513 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 0 4.7752 4.7752 0.913552 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 0 4.7752 4.7752 0.92655 1.5332 0 0 3.06639 0 9.5504 0 12.6168 -99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.530000000000003] 0 0 6.49 6.49 0.966552 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 0 5.53 5.53 0.911474 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 0 5.9148 5.9148 0.925041 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file +95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 0 7.57737 5.46807 5.04336 0.966536 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 0 6.13073 6.97664 5.53 0.913965 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 0 12.1343 4.6864 4.6864 0.926386 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 +96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 0 6.16077 6.64741 5.56004 0.966912 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 0 7.00437 4.6864 4.08567 0.911952 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 0 11.6908 6.0036 4.55927 0.925191 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 +97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122083] 0 0 5.85597 4.3816 4.3816 0.967203 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 0 5.38237 5.85597 4.3816 0.912725 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 0 9.94164 5.38237 4.3816 0.925847 0.748358 0 0 1.49672 0 10.7647 0 12.2615 +98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 0 4.7752 4.7752 4.7752 0.967513 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 0 4.7752 4.7752 4.7752 0.913552 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 0 9.1568 4.7752 4.7752 0.92655 1.5332 0 0 3.06639 0 9.5504 0 12.6168 +99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.530000000000003] 0 0 7.2159 6.49 6.49 0.966552 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 0 7.2159 5.53 5.53 0.911474 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 0 11.9911 5.9148 5.9148 0.925041 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv index 9227da9..375b229 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.csv @@ -1,4 +1,4 @@ -t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,RM:-4,OS:EXT|-2,DMFS:-2,FR:-2,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,RM:-6,OS:1|-4,DMFS:-4,FR:-4,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,RM:-7,OS:2|-6,DMFS:-6,FR:-6,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC 0,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0.0,5.276265890021318,5.276265890021318,1.0,1.2137341099786818,0,0,8.496138769850774,0.0,0.0,0.0,8.496138769850774,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0.0,5.276265890021318,5.276265890021318,1.0,0.25373410997868184,0,0,1.0149364399147274,0,21.105063560085274,0.0,22.12,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,"[0, 5.276265890021318]",0.0,5.276265890021318,5.276265890021318,1.0,5.413734109978681,0,0,10.827468219957362,0,10.552531780042637,0.0,21.38 1,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0.0,3.1453719211934947,3.1453719211934947,1.0,3.3446280788065055,0,0,23.41239655164554,0.0,0.0,0.0,23.41239655164554,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0.0,3.1453719211934947,3.1453719211934947,1.0,2.3846280788065055,0,0,9.538512315226022,0,12.581487684773979,0.0,22.12,,False,3.1453719211934947,[],3.1453719211934947,8.421637811214813,0,"[5.276265890021318, 3.1453719211934947]",0.0,3.1453719211934947,3.1453719211934947,1.0,2.2683621887851864,0,0,4.536724377570373,0,6.2907438423869895,0.0,10.827468219957362 2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0.0,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0.0,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0.0,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt index 414b375..374d828 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_example_6_1.txt @@ -1,4 +1,4 @@ -t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OO:2|-4 IS:2|-4 ISPL:2|-4 RM:-4 OS:EXT|-2 DMFS:-4 FR:-4 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OO:3|-6 IS:3|-6 ISPL:3|-6 RM:-6 OS:1|-4 DMFS:-6 FR:-6 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 RM:-7 OS:2|-6 DMFS:-7 FR:-7 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC +t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OO:2|-4 IS:2|-4 ISPL:2|-4 RM:-4 OS:EXT|-2 DMFS:-2 FR:-2 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OO:3|-6 IS:3|-6 ISPL:3|-6 RM:-6 OS:1|-4 DMFS:-4 FR:-4 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 RM:-7 OS:2|-6 DMFS:-6 FR:-6 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC --- ------- ------ ----------- ------------- --------- --------- --------- -------------------- ------- ----------- --------- -------- --------- ----------- ------------ -------- -------- ------ ----- -------- ------- ------ --------- ----------- --------- --------- --------- -------------------- ------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- 0 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 0 [0, 5.276265890021318] 0 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 1 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv index 23044c0..25cfbcd 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.csv @@ -1,4 +1,4 @@ -t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,RM:-4,OS:EXT|-2,DMFS:-4,FR:-4,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,RM:-6,OS:1|-4,DMFS:-6,FR:-6,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,RM:-7,OS:2|-6,DMFS:-7,FR:-7,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,RM:-4,OS:EXT|-2,DMFS:-2,FR:-2,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,RM:-6,OS:1|-4,DMFS:-4,FR:-4,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,RM:-7,OS:2|-6,DMFS:-6,FR:-6,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC 2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0.0,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0.0,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0.0,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 7,,False,4.637898661600952,[],4.637898661600952,6.23002976948168,6.145311289572087,[6.037190468227884],0.0,5.885341059053767,4.637898661600952,0.9204288008215301,0.25997023051832,0.0,0,1.8197916136282402,0.0,0.0,0.0,1.8197916136282402,,False,4.637898661600952,[],4.637898661600952,5.722839301253796,6.037190468227884,[5.722839301253794],0.0,6.037190468227884,4.445059360347156,0.8374863190034552,-0.19283930125379545,0.19283930125379545,0,0.0,0.0,24.148761872911535,0.0,24.148761872911535,,False,4.637898661600952,[],4.637898661600953,9.526200371472186,6.886638929781608,"[4.888301709871232, 4.637898661600953]",0.0,5.722839301253794,4.637898661600952,0.8618582871905256,1.1637996285278138,0.0,0,2.3275992570556276,0,11.445678602507588,0.0,13.773277859563215 43,,False,4.305821103558777,[],4.305821103558777,5.402292414882582,6.845413294824678,[3.8445867051753195],0.0,5.75770570970726,4.305821103558777,0.9602399216477591,1.0877075851174185,0.0,0,7.6139530958219295,0.0,0.0,0.0,7.6139530958219295,,False,4.305821103558777,[],4.305821103558777,7.087705709707268,3.8445867051753195,[7.0877057097072695],0.0,3.8445867051753195,2.748115393851509,0.9057915787473153,-1.5577057097072675,1.5577057097072675,0,0.0,0.0,15.378346820701278,0.0,15.378346820701278,,False,4.305821103558777,[],4.30582110355878,9.432548314804329,8.345157394902941,"[5.126727211245546, 4.30582110355878]",0.0,7.0877057097072695,4.305821103558777,0.917130372459522,1.2574516851956714,0.0,0,2.514903370391343,0,14.175411419414539,0.0,16.690314789805882 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt index da18f8a..c2fa9d3 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_periods_to_print.txt @@ -1,4 +1,4 @@ - t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OO:2|-4 IS:2|-4 ISPL:2|-4 RM:-4 OS:EXT|-2 DMFS:-4 FR:-4 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OO:3|-6 IS:3|-6 ISPL:3|-6 RM:-6 OS:1|-4 DMFS:-6 FR:-6 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 RM:-7 OS:2|-6 DMFS:-7 FR:-7 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC + t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OO:2|-4 IS:2|-4 ISPL:2|-4 RM:-4 OS:EXT|-2 DMFS:-2 FR:-2 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OO:3|-6 IS:3|-6 ISPL:3|-6 RM:-6 OS:1|-4 DMFS:-4 FR:-4 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 RM:-7 OS:2|-6 DMFS:-6 FR:-6 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC --- ------- ------ ----------- ------------- --------- --------- --------- -------------------- ------- ----------- --------- -------- -------- ----------- ------------ ------- ---- ------ ----- ------- ------- ------ --------- ----------- --------- --------- --------- -------------------- ------- --------- --------- -------- ---------- --------- ---------- ---- ---- ------- ----- ------- ------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------- --------- --------- -------- ------- --------- ---------- ------- ---- ------- ----- ------- 2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 7 | False 4.6379 [] 4.6379 6.23003 6.14531 [6.037190468227884] 0 5.88534 4.6379 0.920429 0.25997 0 0 1.81979 0 0 0 1.81979 | False 4.6379 [] 4.6379 5.72284 6.03719 [5.722839301253794] 0 6.03719 4.44506 0.837486 -0.192839 0.192839 0 0 0 24.1488 0 24.1488 | False 4.6379 [] 4.6379 9.5262 6.88664 [4.888301709871232, 4.637898661600953] 0 5.72284 4.6379 0.861858 1.1638 0 0 2.3276 0 11.4457 0 13.7733 From 45540be795843661aca1635744496b3ab22a8aac Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 26 Apr 2024 10:13:09 -0400 Subject: [PATCH 41/94] Fixed RM allocation issue. All tests pass except a few edge cases --- src/stockpyl/policy.py | 175 ++++++++++++- src/stockpyl/sim.py | 233 ++++++++++++------ src/stockpyl/sim_io.py | 1 + src/stockpyl/supply_chain_node.py | 198 ++++++++++++++- src/stockpyl/supply_chain_product.py | 5 +- ..._TestSaveInstance_example_4_2_correct.json | 2 +- ..._TestSaveInstance_example_6_1_correct.json | 2 +- ...ample_6_1_with_order_capacity_correct.json | 2 +- ..._TestSaveInstance_example_9_5_correct.json | 2 +- ..._TestSaveInstance_figure_6_14_correct.json | 2 +- ...nstance_omit_state_vars_false_correct.json | 2 +- ...omit_state_vars_false_rosling_correct.json | 2 +- ...Instance_omit_state_vars_true_correct.json | 2 +- tests/test_instances.py | 1 + tests/test_sim.py | 10 +- tests/test_supply_chain_node.py | 8 +- 16 files changed, 535 insertions(+), 112 deletions(-) diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index c17dfd0..53b5013 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -349,7 +349,178 @@ def from_dict(cls, the_dict): # ORDER QUANTITY METHODS - def get_order_quantity(self, product_index=None, predecessor_index=None, rm_index=None, inventory_position=None, + def get_order_quantity(self, product_index=None, order_capacity=None, include_raw_materials=False, + inventory_position=None, echelon_inventory_position_adjusted=None): + """Calculate order quantity for the product using the policy type specified in ``type``. + If ``type`` is ``None``, return ``None``. + + If ``include_raw_materials`` is ``False`` (the default), returns a singleton that equals the order + quantity for ``product_index``. If ``include_raw_materials`` is ``True``, returns + a nested dict such that ``get_order_quantity[p][rm]`` is the order + quantity to place to predecessor ``p`` for product ``rm``, expressed in units of ``rm``. + The dict includes an entry in which ``pred`` and ``rm`` are both ``None``, which corresponds to the order quantity + of the product itself, expressed in units of the product. + + If ``order_capacity`` is provided, the FG order quantity returned will not exceed this capacity, + and the RM order quantities will be scaled accordingly. + + If there are multiple predecessors that supply the same raw material, this function will, in general, + order all required units of that raw material from a single supplier. The function can be overloaded to + specify an allocation rule. # TODO: Handle this differently? + + The method obtains the necessary state variables (typically inventory position, + and sometimes others) from ``self.node.network``. The order quantities are set using the + bill of materials structure for the node/product. + + If the policy's ``node`` attribute is ``None``, the returned dict only contains ``product_index`` itself, + no raw materials. + + If ``inventory_position`` (and ``echelon_inventory_position_adjusted``, for + balanced echelon base-stock policies) are provided, they will override the + values indicated by the node's current state variables. This allows the + policy to be queried for an order quantity even if no node/product or network are + provided or have no state variables objects. If ``inventory_position`` + and ``echelon_inventory_position_adjusted`` are ``None`` + (which is the typical use case), the current state variables will be used. + + Parameters + ---------- + product_index : int, optional + The index of the product for which the order quantity should be calculated. + If the node is single-product, either set ``product_index`` to the index of the single product, + or to ``None`` and the function will determine the index automatically. + order_capacity : float, optional + Maximum number of units of ``product_index`` that can be ordered in the current period. + include_raw_materials : bool, optional + If ``False``, the function will return the order quantity for ``product_index``, as a + singleton float. If ``True``, the function will return a dict indicating the order quantities + for all raw materials and predecessors. + inventory_position : float, optional + Inventory position immediately before order is placed (after demand is subtracted). + If provided, the policy will use this IP instead of the IP indicated by the + current state variables. + echelon_inventory_position_adjusted : float, optional + Adjusted echelon inventory position at node i+1, where i is the current node. + If provided, the policy will use this EIPA instead of the EIPA indicated by + current state variables. Used only for balanced echelon base-stock policies. + + Returns + ------- + order_quantity : float or dict + The order quantity for ``product_index`` if ``include_raw_materials`` is ``False``; or, if + ``include_raw_materials`` is ``True``, a nested + dict such that ``get_order_quantity[p][rm]`` is the order quantity to place to predecessor ``p`` + for product ``rm``, expressed in units of ``rm``. The dict includes an entry in which ``pred`` and ``rm`` + are both ``None``, which corresponds to the order quantity of the product itself, expressed in units of the product. + + Raises + ------ + AttributeError + If the policy's ``node`` attribute (or ``product`` attribute, if ``node`` is multi-product) + is ``None`` and ``inventory_position`` or other required state variables are ``None``. + """ + if self.type is None: + return None + + # Calculate IP. + if inventory_position is not None: + # inventory_position was provided -- use it. + IP = inventory_position + else: + if self.type == 'FQ': + # Fixed-quantity policy does not need inventory position. + IP = None + else: + # Make sure node attribute is set or inventory_position is provided. + if self.node is None: + raise AttributeError("You must either provide inventory_position or set the node attribute of the Policy object to the node that it refers to. (Usually this should be done when you first create the Policy object.)") + if self.node.is_multiproduct and self.product is None: + raise AttributeError("You must either provide inventory_position or set the product attribute of the Policy object to the product that it refers to (since the node is multi-product). (Usually this shoudl be done when you first creat the Policy object.)") + + # Calculate total demand (inbound orders), including successor nodes and + # external demand, in FG units. + demand = self.node._get_attribute_total('inbound_order', self.node.network.period, product_index=product_index) + + # Calculate (local or echelon) inventory position, before demand is subtracted. Exclude from pipeline + # RM units that are "earmarked" for other products at this node. + if self.type in ('EBS', 'BEBS'): + # TODO: handle this case (for now, just setting pred_index and rm_index to None) + # TODO: handle exclude_earmarked_units + IP_before_demand = \ + self.node.state_vars_current.echelon_inventory_position(prod_index=product_index, predecessor_index=None, rm_index=None) + else: + IP_before_demand = \ + self.node.state_vars_current.inventory_position(prod_index=product_index, exclude_earmarked_units=True) + + # Calculate current inventory position, after demand is subtracted. + IP = IP_before_demand - demand + + # Determine order quantity based on policy. This order quantity is in units of the product. + if self.type == 'BS': + OQ = self._get_order_quantity_base_stock(IP) + elif self.type == 'sS': + OQ = self._get_order_quantity_s_S(IP) + elif self.type == 'rQ': + OQ = self._get_order_quantity_r_Q(IP) + elif self.type == 'FQ': + OQ = self._get_order_quantity_fixed_quantity() + elif self.type == 'EBS': + OQ = self._get_order_quantity_echelon_base_stock(IP) + elif self.type == 'BEBS': + # Make sure node attribute is set or inventory_position is provided. + if self.node is None and echelon_inventory_position_adjusted is None: + raise AttributeError("You must either provide echelon_inventory_position_adjusted or set the node attribute of the Policy object to the node that it refers to. (Usually this should be done when you first create the Policy object.)") + + # Was EIPA provided? + if echelon_inventory_position_adjusted is not None: + EIPA = echelon_inventory_position_adjusted + else: + # Determine partner node and adjusted echelon inventory position. + if self.node.index == max(self.node.network.node_indices): + EIPA = np.inf + else: + partner_node = self.node.network.get_node_from_index(self.node.index + 1) + EIPA = partner_node.state_vars_current._echelon_inventory_position_adjusted() + + OQ = self._get_order_quantity_balanced_echelon_base_stock(IP, EIPA) + else: + OQ = None + + # Adjust OQ to account for capacity, if provided. + if order_capacity is not None: + OQ = min(OQ, order_capacity) + + # Include raw materials? + if not include_raw_materials: + return OQ + else: + # Initialize returned dict with FG order quantity. + OQ_dict = {None: {None: OQ}} + + # Loop through raw materials and predecessors, and calculate order quantities for each. + if OQ is not None: + for rm_index in self.node.raw_material_indices_by_product(product_index): + for pred_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index): + + # Calculate total orders that have already been placed by this node to this supplier for this RM + # in the current time period (for other products at the node that use the same RM). These units + # will be included in IP_before_demand and so must be added to the order quantity. +# units_already_ordered = self.node.state_vars_current.order_quantity[pred_index][rm_index] + + # Create key for pred in outer level of dict, if it doesn't already exist. + if pred_index not in OQ_dict: + OQ_dict[pred_index] = {} + + # Convert OQ to raw material units and add it to OQ_dict. + OQ_dict[pred_index][rm_index] = \ + OQ * self.node.NBOM(product=product_index, predecessor=pred_index, raw_material=rm_index) + # # Convert OQ to raw material units, adjust for units_already_ordered, and add it to OQ_dict. + # OQ_dict[pred_index][rm_index] = units_already_ordered + \ + # OQ * self.node.NBOM(product=product_index, predecessor=pred_index, raw_material=rm_index) + + return OQ_dict + + def _get_order_quantity_old(self, product_index=None, predecessor_index=None, rm_index=None, inventory_position=None, echelon_inventory_position_adjusted=None): """Calculate order quantity using the policy type specified in ``type``. If ``type`` is ``None``, return ``None``. Returns order quantity in the units of the upstream product @@ -446,6 +617,8 @@ def get_order_quantity(self, product_index=None, predecessor_index=None, rm_inde # # Convert to downstream units. # units_already_ordered /= NBOM + # TODO: should units_already_ordered and IP_before_demand really happen outside the policy? Policy should maybe just take IP as an input. + # Determine number of units of this raw material that are already spoken for (via pending_finished_goods) # for all products at this node. First in units of the raw material: units_already_ordered = 0 diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index cdd2991..f9b2c57 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -217,12 +217,12 @@ def step(network, order_quantity_override=None, consistency_checks='W'): String indicating whether to run consistency checks (backorder calculations) and what to do if check fails. See docstring for :func:`~stockpyl.sim.simulation` for list of currently supported strings. order_quantity_override : dict, optional - Nested dictionary such that order_quantity_override[node][rm] is an order quantity (or ``None``) - for each node in the network (specified as a |class_node| object) and for each raw material the node orders - (specified as a |class_product| object). + Nested dictionary such that order_quantity_override[node][pred][rm] is an order quantity (or ``None``) + for each node in the network (specified as a |class_node| object), each predecessor (specified as a |class_node| + object), and each raw material (specified as a |class_product| object) the node orders from that predecessor. If provided, these order quantities will override the order quantities that would otherwise be calculated for - the nodes/products. If the node has a single raw material, ``rm`` may be set to ``None`` and the - raw material will be determined automatically. + the nodes/products. If the node has a single predecessor and raw material, ``pred`` and ``rm`` may be set to ``None`` and + they will be determined automatically. If ``order_quantity_override`` is provided but its value is ``None`` for a given node, an order quantity will be calculated for that node as usual. (This option is mostly used when running the simulation from outside the package, e.g., in a reinforcement learning environment; @@ -341,16 +341,17 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan Dictionary indicating whether each node in network has already been visited by the depth-first search. order_quantity_override : dict, optional - Nested dictionary such that order_quantity_override[node][rm] is an order quantity (or ``None``) - for each node in the network (specified as a |class_node| object) and for each raw material the node orders - (specified as a |class_product| object). + Nested dictionary such that order_quantity_override[node][pred][rm] is an order quantity (or ``None``) + for each node in the network (specified as a |class_node| object), each predecessor (specified as a |class_node| + object), and each raw material (specified as a |class_product| object) the node orders from that predecessor. If provided, these order quantities will override the order quantities that would otherwise be calculated for - the nodes/products. If the node has a single raw material, ``rm`` may be set to ``None`` and the - raw material will be determined automatically. + the nodes/products. If the node has a single predecessor and raw material, ``pred`` and ``rm`` may be set to ``None`` and + they will be determined automatically. If ``order_quantity_override`` is provided but its value is ``None`` for a given node, an order quantity will be calculated for that node as usual. (This option is mostly used when running the simulation from outside the package, e.g., in a reinforcement learning environment; it is analogous to setting the action for the current time period.) + # TODO: Change this so that order_quantity_override only specifies the FG quantity? """ # Did we already visit this node? if visited[node_index]: @@ -385,73 +386,120 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan for prod in node.products: # Get lead times and product index (for convenience). + # TODO: LTs should live with the RM, not the FG. Otherwise, different RMs can't have different LTs. (But this doesn't mean interpret LT as applying to the outbound link instead of the inbound.) order_lead_time = node.get_attribute('order_lead_time', prod) or 0 shipment_lead_time = node.get_attribute('shipment_lead_time', prod) or 0 - # Determine order quantity. + # Determine order quantity, in FG units. # Is there an order-pausing disruption? if node.disrupted and node.disruption_process.disruption_type == 'OP': - order_quantity = 0 + # Do nothing. + pass else: - # Calculate order quantity. + # Shortcut to the policy. policy = node.get_attribute('inventory_policy', product=prod) # Determine node/product's order capacity. order_capac = node.get_attribute('order_capacity', product=prod) or BIG_FLOAT - # Place orders to all raw material suppliers (predecessors that provide this product/node with - # a raw material). - for p in node.raw_material_suppliers_by_product(product_index=prod.index): - p_index = p.index if p is not None else None - - # Loop through products at predecessor. - for rm in (p.products if p is not None else [node._external_supplier_dummy_product]): - rm_index = rm.index - - # Calculate NBOM. - NBOM = node.NBOM(product=prod, predecessor=p, raw_material=rm) - + # Get order quantities for all raw materials (expressed in units of RM). + # Dict returned also contains an order quantity for the FG, which will be used + # below to set pending_finished_goods. + order_quantity_dict = policy.get_order_quantity(product_index=prod.index, order_capacity=order_capac, include_raw_materials=True) + + # Update FG order quantity and pending finished goods. (Convert to downstream units.) + node.state_vars_current.order_quantity_fg[prod.index] += order_quantity_dict[None][None] + node.state_vars_current.pending_finished_goods[prod.index] += order_quantity_dict[None][None] + + # Place orders for all raw materials. + for rm in node.raw_materials_by_product(product_index=prod.index, network_BOM=True): + rm_index = rm.index + for p in node.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=True): + p_index = p.index if p is not None else None + # Was an override order quantity provided? try: - if None in order_quantity_override[node]: - qty_override = order_quantity_override[node][None] + if None in order_quantity_override[node] and None in order_quantity_override[node][None]: + qty_override = order_quantity_override[node][None][None] else: - qty_override = order_quantity_override[node][rm] + qty_override = order_quantity_override[node][p][rm] except: qty_override = None - if qty_override is not None: - rm_order_quantity = qty_override - if NBOM == 0: - NBOM = 1 # TODO: This is klugey. Basically we need to determine how many FG to make if order quantity override is provided but there's no NBOM; maybe just raise an error in this case? - fg_order_quantity = qty_override / NBOM - elif NBOM == 0: - rm_order_quantity = 0 - fg_order_quantity = 0 + + if qty_override is not None: + rm_OQ = qty_override else: - # Calculate order quantity from policy, expressed in units of the raw material. - rm_order_quantity = policy.get_order_quantity(product_index=prod.index, predecessor_index=p_index, rm_index=rm_index) - fg_order_quantity = rm_order_quantity / NBOM - - # Adjust to account for order capacity. - fg_order_quantity = min(fg_order_quantity, order_capac) - rm_order_quantity = fg_order_quantity * NBOM + rm_OQ = order_quantity_dict[p_index][rm_index] # Place order in predecessor's order pipeline (converting first to raw material units via BOM). # (Add to any existing inbound order, because multiple products at the node can order the same RM.) if p is not None: - p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] += rm_order_quantity + p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] += rm_OQ else: # Place order to external supplier. (For now, this just means adding to inbound shipment pipeline.) - node.state_vars_current.inbound_shipment_pipeline[None][rm_index][order_lead_time + shipment_lead_time] += rm_order_quantity + node.state_vars_current.inbound_shipment_pipeline[None][rm_index][order_lead_time + shipment_lead_time] += rm_OQ # Record order quantity. (Add to existing order quantity, since multiple products might order the same RM from # the same predecessor.) - node.state_vars_current.order_quantity[p_index][rm_index] += rm_order_quantity + node.state_vars_current.order_quantity[p_index][rm_index] += rm_OQ # Add order to on_order_by_predecessor. - node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += rm_order_quantity + node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += rm_OQ - # Update pending finished goods. (Convert to downstream units.) - node.state_vars_current.pending_finished_goods[prod.index] += fg_order_quantity + + + # # Place orders to all raw material suppliers (predecessors that provide this product/node with + # # a raw material). + # for p in node.raw_material_suppliers_by_product(product_index=prod.index): + # p_index = p.index if p is not None else None + + # # Loop through products at predecessor. + # for rm in (p.products if p is not None else [node._external_supplier_dummy_product]): + # rm_index = rm.index + + # # Calculate NBOM. + # NBOM = node.NBOM(product=prod, predecessor=p, raw_material=rm) + + # # Was an override order quantity provided? + # try: + # if None in order_quantity_override[node]: + # qty_override = order_quantity_override[node][None] + # else: + # qty_override = order_quantity_override[node][rm] + # except: + # qty_override = None + # if qty_override is not None: + # rm_order_quantity = qty_override + # if NBOM == 0: + # NBOM = 1 # TODO: This is klugey. Basically we need to determine how many FG to make if order quantity override is provided but there's no NBOM; maybe just raise an error in this case? + # fg_order_quantity = qty_override / NBOM + # elif NBOM == 0: + # rm_order_quantity = 0 + # fg_order_quantity = 0 + # else: + # # Calculate order quantity from policy, expressed in units of the raw material. + # rm_order_quantity = policy.get_order_quantity(product_index=prod.index, predecessor_index=p_index, rm_index=rm_index) + # fg_order_quantity = rm_order_quantity / NBOM + + # # Adjust to account for order capacity. + # fg_order_quantity = min(fg_order_quantity, order_capac) + # rm_order_quantity = fg_order_quantity * NBOM + + # # Place order in predecessor's order pipeline (converting first to raw material units via BOM). + # # (Add to any existing inbound order, because multiple products at the node can order the same RM.) + # if p is not None: + # p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] += rm_order_quantity + # else: + # # Place order to external supplier. (For now, this just means adding to inbound shipment pipeline.) + # node.state_vars_current.inbound_shipment_pipeline[None][rm_index][order_lead_time + shipment_lead_time] += rm_order_quantity + + # # Record order quantity. (Add to existing order quantity, since multiple products might order the same RM from + # # the same predecessor.) + # node.state_vars_current.order_quantity[p_index][rm_index] += rm_order_quantity + # # Add order to on_order_by_predecessor. + # node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += rm_order_quantity + + # # Update pending finished goods. (Convert to downstream units.) + # node.state_vars_current.pending_finished_goods[prod.index] += fg_order_quantity def _generate_downstream_shipments(node_index, network, period, visited, consistency_checks='W'): @@ -540,13 +588,7 @@ def _initialize_state_vars(network): init_IL = n.get_attribute('initial_inventory_level', prod) if init_IL is None: # Choose a supplier and RM to use when getting an order quantity to set the initial IL. - # This is klugey -- TODO: set this better - rm_index = n.raw_material_indices_by_product(prod.index)[0] - pred_index = n.raw_material_suppliers_by_raw_material(rm_index)[0] - init_IL = n.get_attribute('inventory_policy', prod).get_order_quantity( - product_index=prod.index, predecessor_index=pred_index, rm_index=rm_index, inventory_position=0) - # Now divide by the NBOM becuase result from get_order_quantity() will be in units of the RM. - init_IL /= n.NBOM(product=prod, predecessor=pred_index, raw_material=rm_index) + init_IL = n.get_attribute('inventory_policy', prod).get_order_quantity(product_index=prod.index, include_raw_materials=False, inventory_position=0) n.state_vars[0].inventory_level[prod.index] = init_IL # Initialize inbound order pipeline. (Exclude external demand.) @@ -830,36 +872,71 @@ def _raw_materials_to_finished_goods(node): # Make it an option to choose whether to allow this, or require integer multiples of the BOM number to # be available, i.e., require integer number of items to be processed. - # Determine number of units of each product that can be processed. - new_finished_goods = {} - for i, prod_index in enumerate(node.product_indices): - # Shortcut to product and BOM. - prod = node.products_by_index[prod_index] - BOM = {} - for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True): - BOM[rm_index] = prod.BOM(rm_index) - if BOM[rm_index] == 0: - # Raw material is a dummy product (it's not in the product's BOM). - # BOM always = 1 in this case. - BOM[rm_index] = 1 - - # Determine number of available units of each raw material for this product, - # in units of the product. - avail_rm = {rm_index: node.state_vars_current.raw_material_inventory[rm_index] / BOM[rm_index] - for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True)} + # Shortcut to period. + period = node.network.period + + # Allocate available raw materials to products in proportion to each product's share of + # the order for that raw material that was placed LT periods ago. + share = {} + for rm_index in node.raw_material_indices_by_product(product_index='all', network_BOM=True): + + # Shortcut to lead times. Note: This assumes that all products that use this RM have the + # same lead times. Currently no way to distinguish among products if they have different lead times. + # TODO: fix this + prod = node.products_by_raw_material(rm_index, network_BOM=True)[0] + OLT = node.get_attribute('order_lead_time', prod) or 0 + SLT = node.get_attribute('shipment_lead_time', prod) or 0 + + # Determine number of units of this raw material available (in units of the RM). + avail_rm = node.state_vars_current.raw_material_inventory[rm_index] + + # Shortcut to list of product indices for this RM. + prods_for_rm = node.product_indices_by_raw_material(rm_index, network_BOM=True) + + # If avail_rm > 0, then we know period >= OLT + SLT. + if avail_rm > 0: + # Determine total order placed for this raw material LT periods ago. + units_ordered = sum([node.state_vars[period - OLT - SLT].order_quantity[pred_index][rm_index] + for pred_index in node.raw_material_supplier_indices_by_raw_material(rm_index, network_BOM=True)]) + + # If units_ordered == 0, allocate into equal shares. (This can happen if the original + # order was backordered, or if there is initial RM at the start of the simulation.) + # TODO: allocate in a smarter way in this case? + if units_ordered == 0: + share_frac = {prod_index: 1 / len(prods_for_rm) for prod_index in prods_for_rm} + else: + # TODO: what if order_quantity_fg = 0 (e.g., because of backorders)? + share_frac = {prod_index: node.state_vars[period - OLT - SLT].order_quantity_fg[prod_index] \ + * node.NBOM(product=prod_index, predecessor=None, raw_material=rm_index) \ + / units_ordered for prod_index in prods_for_rm} + + # Determine each product's share of this raw material. + share[rm_index] = {prod_index: avail_rm * share_frac[prod_index] for prod_index in prods_for_rm} + else: + share[rm_index] = {prod_index: 0 for prod_index in prods_for_rm} - # Determine number of finished goods to make: min of min RM available and pending FG, - # unless this is the last product to process, in which case process as many RM as possible. + # If share doesn't sum to 1, allocate the remaining units to an arbitrary product. + # (I don't think this should ever happen, except maybe because of rounding.) + extra = avail_rm - sum([share[rm_index][prod_index] for prod_index in prods_for_rm]) + if extra > 0: + share[rm_index][prods_for_rm[0]] + extra + + # Determine number of units of each product that can be processed. + new_finished_goods = {} + for prod_index in node.product_indices: + # Determine number of FGunits that can be produced; it equals the min, over all + # RMs for the product, of the product's share of that RM, expressed in FG units. + avail_rm = {rm_index: share[rm_index][prod_index] / node.NBOM(product=prod_index, predecessor=None, raw_material=rm_index) + for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True)} num_to_make = min(avail_rm.values()) - if i < len(node.product_indices) - 1: - num_to_make = min(num_to_make, node.state_vars_current.pending_finished_goods[prod_index]) # Number of finished goods = min of min RM available and pending FG. new_finished_goods[prod_index] = num_to_make # Process units: remove from raw material and add to finished goods. for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True): - node.state_vars_current.raw_material_inventory[rm_index] -= num_to_make * BOM[rm_index] + node.state_vars_current.raw_material_inventory[rm_index] \ + -= num_to_make * node.NBOM(product=prod_index, predecessor=None, raw_material=rm_index) node.state_vars_current.inventory_level[prod_index] += num_to_make # Subtract units from pending_finished_goods. diff --git a/src/stockpyl/sim_io.py b/src/stockpyl/sim_io.py index 78b9ce3..166a85d 100644 --- a/src/stockpyl/sim_io.py +++ b/src/stockpyl/sim_io.py @@ -24,6 +24,7 @@ quantities arriving from succesor ``s`` in ``r`` periods from the period, for ``r`` = 1, ..., ``order_lead_time`` - ``OQ:p``: order quantity placed to predecessor ``p`` in the period + # TODO: OQFG - ``OO:p``: on-order quantity (items that have been ordered from successor ``p`` but not yet received) - ``IS:p``: inbound shipment received from predecessor ``p`` diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 44cb456..36fcb7d 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -535,14 +535,19 @@ def _external_supplier_dummy_product_index_from_node_index(cls, node_index): return SupplyChainNode._dummy_product_index_from_node_index(node_index) - 1 def get_network_bill_of_materials(self, product=None, predecessor=None, raw_material=None): - """Return the "network bill of materials," i.e., the number of units of ``raw_material`` + """Return the "network bill of materials" (NBOM) i.e., the number of units of ``raw_material`` from ``predecessor`` that are required to make one unit of ``product`` at this node, accounting for network structure. In particular, if _no_ raw materials at the predecessor have a BOM relationship with _any_ product at the node, then _every_ raw material at the predecessor is assigned a BOM number of 1 for _every_ product at the node. (In particular, this allows single-product networks to be constructed without adding any products to the network.) - ``product``, ``predecessor``, and ``raw_material`` may be indices or objects. + ``product``, ``predecessor``, and ``raw_material`` may be indices or objects. Set ``predecessor`` to ``None`` to + determine the predecessor automatically: Either the external supplier (if ``raw_material`` is + ``None`` or the index of the dummy product at the external supplier) or the unique predecessor that provides a given + dummy product (if ``raw_material`` is a dummy product), or an arbitrary predecessor (if ``raw_material`` is not a + dummy product, because in this case the NBOM equals the BOM--it is product-specific, not node-specific, so + the predecessor is irrelevant). # TODO: make sure this covers all the cases Raises a ``ValueError`` if ``product`` is not a product at the node, ``raw_material`` is not a product at ``predecessor``, or ``predecessor`` is not a predecessor of the node. @@ -588,12 +593,7 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate else: prod = self.network.products_by_index[product] prod_ind = product - if isinstance(predecessor, SupplyChainNode): - pred = predecessor - pred_ind = predecessor.index - else: - pred = None if predecessor is None else self.network.get_node_from_index(predecessor) - pred_ind = predecessor + if isinstance(raw_material, SupplyChainProduct): # rm = raw_material rm_ind = raw_material.index @@ -601,6 +601,24 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate # rm = None if raw_material is None else self.network.products_by_index[raw_material] rm_ind = raw_material + # TODO: unit tests for this part + if isinstance(predecessor, SupplyChainNode): + pred = predecessor + pred_ind = predecessor.index + elif predecessor is None: + if rm_ind == self._external_supplier_dummy_product.index: + pred = None + pred_ind = None + # elif rm.is_dummy: + # pred = rm.handling_nodes[0] + else: + # This works for the case in which rm is a dummy product or a regular product. + pred = self.raw_material_suppliers_by_raw_material(rm_ind, network_BOM=True)[0] + pred_ind = pred.index if pred is not None else None + else: + pred = self.network.get_node_from_index(predecessor) + pred_ind = predecessor + # Validate parameters. if prod_ind not in self.product_indices: raise ValueError(f'Product {prod_ind} is not a product in node {self.index}.') @@ -651,7 +669,7 @@ def raw_materials_by_product(self, product_index=None, network_BOM=True): Returns ------- list - List of all raw materials required to make all products at the node. + List of all raw materials required to make the product at the node. Raises ------ @@ -706,7 +724,7 @@ def raw_material_indices_by_product(self, product_index=None, network_BOM=True): Returns ------- list - List of indices of all raw materials required to make all products at the node. + List of indices of all raw materials required to make the product at the node. Raises ------ @@ -925,6 +943,81 @@ def raw_material_supplier_indices_by_raw_material(self, rm_index=None, network_B """ return [(s.index if s is not None else None) for s in self.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=network_BOM)] + def products_by_raw_material(self, rm_index=None, network_BOM=True): + """A list of all products that use raw material with index ``rm_index`` at the node, + as as |class_prod| objects. If the node has a single raw material (either dummy or real), either set + ``rm_index`` to the index of the single raw material, or to ``None`` and the function + will determine the index automatically. + + If ``network_BOM`` is ``True``, includes products that don't have a + BOM relationship specified but are implied by the network structure. + (See :func:`get_network_bill_of_materials`.) Read only. + + Parameters + ---------- + rm_index : int, optional + The raw material index, or ``None`` if the node has a single raw material. + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. + + Returns + ------- + list + List of all products that use the raw material at the node. + + Raises + ------ + ValueError + If ``rm_index`` is not found among the node's raw materials, and it's not the case that ``rm_index is None`` and + this node has a single raw material. + """ + # TODO: unit tests + + # If rm_index is not in raw material indices for node, AND it's not the case that this node has a single raw material + # and rm_index is None, raise exception. + all_rms = self.raw_material_indices_by_product('all', network_BOM=True) + if not (len(all_rms) == 1 and rm_index is None) and rm_index not in all_rms: + raise ValueError(f'{rm_index} is not a raw material index in this SupplyChainNode') + + # If rm_index is None, determine which rm_index to use. + if rm_index is None: + rm_index = all_rms[0] + + if network_BOM: + return [prod for prod in self.products if self.NBOM(product=prod, predecessor=None, raw_material=rm_index) > 0] + else: + return [prod for prod in self.products if prod.BOM(rm_index=rm_index) > 0] + + def product_indices_by_raw_material(self, rm_index=None, network_BOM=True): + """A list of indices of all products that use raw material with index ``rm_index`` at the node, + as as |class_prod| objects. If the node has a single raw material (either dummy or real), either set + ``rm_index`` to the index of the single raw material, or to ``None`` and the function + will determine the index automatically. + + If ``network_BOM`` is ``True``, includes products that don't have a + BOM relationship specified but are implied by the network structure. + (See :func:`get_network_bill_of_materials`.) Read only. + + Parameters + ---------- + rm_index : int, optional + The raw material index, or ``None`` if the node has a single raw material. + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. + + Returns + ------- + list + List of indices of all products that use the raw material at the node. + + Raises + ------ + ValueError + If ``rm_index`` is not found among the node's raw materials, and it's not the case that ``rm_index is None`` and + this node has a single raw material. + """ + return [prod.index for prod in self.products_by_raw_material(rm_index=rm_index, network_BOM=network_BOM)] + # Properties related to lead times. @property @@ -1717,8 +1810,10 @@ class NodeStateVars(object): If node is single product, ``prod=None``. order_quantity : dict ``order_quantity[p][prod]`` = order quantity for product ``prod`` placed by the node to - predecessor ``p`` in period. If ``p`` is ``None``, refers to external supplir. If ``p`` is external - supplier or single-product, ``prod=None``. + predecessor ``p`` in period. If ``p`` is ``None``, refers to external supplier. + order_quantity_fg : dict + ``order_quantity_fg[prod]`` = finished-goods order quantity for product ``prod`` at the + node in period. """ def __init__(self, node=None, period=None): @@ -1809,6 +1904,7 @@ def __init__(self, node=None, period=None): self.order_quantity = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} self.raw_material_inventory = {prod_index: 0 for prod_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True)} + self.order_quantity_fg = {prod_index: 0 for prod_index in self.node.product_indices} self.pending_finished_goods = {prod_index: 0 for prod_index in self.node.product_indices} # Fill rate quantities. @@ -1831,6 +1927,7 @@ def __init__(self, node=None, period=None): self.inbound_disrupted_items = {} self.order_quantity = {} self.raw_material_inventory = {} + self.order_quantity_fg = {} self.pending_finished_goods = {} # Remaining state variables. @@ -2165,7 +2262,78 @@ def inbound_disrupted_items_aggregate(self, prod_index=None): else: return total_disrupted_items / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) - def inventory_position(self, prod_index=None, predecessor_index=None, rm_index=None): + + def inventory_position(self, prod_index=None, exclude_earmarked_units=False): + """Current (local) inventory position at node for product with index ``prod_index``. + Equals inventory level plus pipeline inventory. (Pipeline inventory equals on-order inventory of the raw material, + raw material inventory that has not yet been processed, and inbound disrupted items of the + raw material due to type-RP disruptions). Inventory position is expressed in the units of the product + (not the raw materials). + + If the product uses multiple raw materials, the pipeline inventory is the maximum number + of units of the product that can be produced, given the quantities of raw materials in the pipeline. + For example, suppose product A requires 10 units of product B and 5 units of product C; there are + 4 units of product A on hand; and there are 20 units of product B and 15 units of product C in the pipeline. + The the inventory level is 4, and the pipeline inventory contains enough raw materials to make 2 units + of product A. So, the inventory position is 6. + + If ``exclude_earmarked_units`` is ``True``, raw materials that are already "earmarked" for a different + product at this node are excluded from the pipeline inventory. In particular, the pipeline of a given + raw material is reduced by the sum, over all _other_ products at the node, of the number of units + of that product that are pending times the NBOM for that product/raw material. + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. If the node is multi-product, ``prod_index`` must be + set to the index of a single product at the node. + + If the node has multiple products that use the same raw material, the inventory position returned by this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + + Returns + ------- + float + The inventory position. + """ + + # Determine product index. + prod_index = prod_index or self.node.product_indices[0] + + # Determine total units of each RM in the pipeline, converted to units of the downstream product. + pipeline = {} + for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True): + # Calculate pipeline, in upstream units. + pipeline[rm_index] = self.raw_material_inventory[rm_index] + for pred_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): + pipeline[rm_index] += (self.on_order_by_predecessor[pred_index][rm_index] \ + + self.inbound_disrupted_items[pred_index][rm_index]) + + # Subtract earmarked units, if requested. + if exclude_earmarked_units: + for other_prod_index in self.node.product_indices: + if other_prod_index != prod_index: + # Get any RM supplier to use for NBOM -- # TODO: handle this better + pred_index = self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True)[0] + # Calculate number of earmarked units. + earmarked_units = self.node.state_vars_current.pending_finished_goods[other_prod_index] \ + * self.node.NBOM(product=other_prod_index, predecessor=pred_index, raw_material=rm_index) + # Subtract earmarked units from pipeline. + # TODO: is it correct to take the max with 0? If it would be <0 should we treat it sort of like a backorder? Can this even happen? + pipeline[rm_index] = max(0, pipeline[rm_index] - earmarked_units) + + # Convert to downstream units. + pipeline[rm_index] /= self.node.NBOM(product=prod_index, predecessor=pred_index, raw_material=rm_index) + + # Determine number of units of FG that can be made from pipeline inventory. + units_from_pipeline = min(pipeline.values()) + + return self.inventory_level[prod_index] + units_from_pipeline + + def _inventory_position_old(self, prod_index=None, predecessor_index=None, rm_index=None): """Current local inventory position at node for product with index ``prod_index``. Equals inventory level plus on-order inventory. Returns the inventory position in the units of the downstream product, i.e., of ``prod_index``, not of ``rm_index``. @@ -2438,6 +2606,7 @@ def to_dict(self): sv_dict['outbound_disrupted_items'] = copy.deepcopy(self.outbound_disrupted_items) sv_dict['inbound_disrupted_items'] = copy.deepcopy(self.inbound_disrupted_items) sv_dict['order_quantity'] = copy.deepcopy(self.order_quantity) + sv_dict['order_quantity_fg'] = copy.deepcopy(self.order_quantity_fg) sv_dict['raw_material_inventory'] = copy.deepcopy(self.raw_material_inventory) sv_dict['pending_finished_goods'] = copy.deepcopy(self.pending_finished_goods) sv_dict['inventory_level'] = self.inventory_level @@ -2491,6 +2660,7 @@ def from_dict(cls, the_dict): nsv.outbound_disrupted_items = copy.deepcopy(the_dict['outbound_disrupted_items']) nsv.inbound_disrupted_items = copy.deepcopy(the_dict['inbound_disrupted_items']) nsv.order_quantity = copy.deepcopy(the_dict['order_quantity']) + nsv.order_quantity_fg = copy.deepcopy(the_dict['order_quantity_fg']) nsv.raw_material_inventory = copy.deepcopy(the_dict['raw_material_inventory']) nsv.pending_finished_goods = copy.deepcopy(the_dict['pending_finished_goods']) nsv.inventory_level = the_dict['inventory_level'] @@ -2531,6 +2701,7 @@ def reindex_state_variables(self, old_to_new_dict, old_to_new_prod_dict): old_rm_indices = list(self.raw_material_inventory.keys()) for rm_index in old_rm_indices: change_dict_key(self.raw_material_inventory, rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.order_quantity_fg, prod.index, old_to_new_prod_dict[prod.index]) change_dict_key(self.pending_finished_goods, prod.index, old_to_new_prod_dict[prod.index]) # State variables indexed by predecessor. @@ -2610,6 +2781,7 @@ def deep_equal_to(self, other, rel_tol=1e-8): if self.outbound_disrupted_items != other.outbound_disrupted_items: return False if self.inbound_disrupted_items != other.inbound_disrupted_items: return False if self.order_quantity != other.order_quantity: return False + if self.order_quantity_fg != other.order_quantity_fg: return False if self.raw_material_inventory != other.raw_material_inventory: return False if self.pending_finished_goods != other.pending_finished_goods: return False if self.inventory_level != other.inventory_level: return False diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 40b3ed0..ca8371a 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -351,9 +351,8 @@ def handling_nodes(self): """A list of all nodes in the network that handle this product, as |class_node| objects. Read only. """ - # TODO: -# return [node for node in self.network.nodes if .......] - pass + # TODO: unit tests + return [node for node in self.network.nodes if self in node.products] @property def handling_node_indices(self): diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json index 5e0a485..c638bbc 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-04-24 21:29:04.115019"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-04-25 12:11:06.214084"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json index 2b13166..8fcff78 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.123250"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.222480"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json index b84e544..4e98c7a 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.129012"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.228107"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json index 5dbc2d8..e1e56b1 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-04-24 21:29:04.117995"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-04-25 12:11:06.217605"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json index b5fff6f..9726d84 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.137151"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.236086"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json index d07b848..ff1b9d4 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.407469"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.516518"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json index d4cae67..fbae4c8 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 12.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 12.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 42.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 54.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 49.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 59.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 73.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 83.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 87.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 88.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 90.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 101.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 108.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 105.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 113.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 116.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 114.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 127.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 130.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 127.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 134.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 130.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 130.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 72.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 72.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "pending_finished_goods": {"-8": 76.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "pending_finished_goods": {"-8": 68.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 42.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 72.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 74.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 69.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 68.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 99.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 109.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 115.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 110.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 98.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 112.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 132.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 127.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 129.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 132.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 126.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 154.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 154.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 139.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 155.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 155.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 155.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.594193"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 9.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 16.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 6.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 5.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 18.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 23.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 12.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 11.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 2.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.716842"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json index 4219433..9060a30 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-24 21:29:04.345880"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.452089"} \ No newline at end of file diff --git a/tests/test_instances.py b/tests/test_instances.py index f400608..b860456 100644 --- a/tests/test_instances.py +++ b/tests/test_instances.py @@ -453,6 +453,7 @@ def test_omit_state_vars_false_rosling(self): del correct_json['last_updated'] # Compare. + self.maxDiff = None self.assertDictEqual(saved_json, correct_json) finally: diff --git a/tests/test_sim.py b/tests/test_sim.py index 52b7c7d..7b41e14 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -504,7 +504,7 @@ def test_assembly_3_stage_as_multiproduct(self): nodes[12].inventory_policy = Policy(type='BS', base_stock_level=100, node=nodes[12]) total_cost = simulation(network, 100, rand_seed=17, progress_bar=False, consistency_checks='E') -# write_results(network=network, num_periods=100, columns_to_print=['basic', 'costs'], write_txt=True, txt_filename='temp.txt') + write_results(network=network, num_periods=100, columns_to_print=['basic', 'costs'], write_txt=True, txt_filename='temp.txt') # Compare total cost. self.assertEqual(total_cost, 1884) @@ -558,7 +558,7 @@ def test_rosling_figure_1_as_multiproduct_LBS(self): T = 100 orig_cost = simulation(orig_network, T, rand_seed=17, progress_bar=False, consistency_checks='E') -# write_results(network=orig_network, num_periods=T, columns_to_print=['basic'], write_txt=True, txt_filename='temp_orig.txt') + # write_results(network=orig_network, num_periods=T, columns_to_print=['basic', 'RM'], write_txt=True, txt_filename='temp_orig.txt') # Next build multi-product version of system. network = serial_system( @@ -633,7 +633,7 @@ def test_rosling_figure_1_as_multiproduct_LBS(self): # Simulate multi-product network. cost = simulation(network, T, rand_seed=17, progress_bar=False, consistency_checks='E') -# write_results(network=network, num_periods=T, columns_to_print=['basic'], write_txt=True, txt_filename='temp_new.txt') +# write_results(network=network, num_periods=T, columns_to_print=['basic', 'RM'], write_txt=True, txt_filename='temp_new.txt') # Map (node, product, pred, rm) in original network to new network. rm_mapping = { @@ -725,8 +725,8 @@ def test_example_6_1_order_quantity_override(self): for t in range(T): if t == 40: step(network2, consistency_checks='E', order_quantity_override={ - nodes2[2]: {nodes2[3]._dummy_product: 33}, - nodes2[3]: {nodes2[3]._external_supplier_dummy_product: 77}, + nodes2[2]: {nodes2[3]: {nodes2[3]._dummy_product: 33}}, + nodes2[3]: {nodes2[3]: {nodes2[3]._external_supplier_dummy_product: 77}} }) else: step(network2, consistency_checks='E') diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 3ac884c..030524b 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -2529,8 +2529,8 @@ def test_assembly_3_stage_per_22(self): self.assertEqual(nodes[0].state_vars[22].raw_material_aggregate(), RM0) self.assertEqual(nodes[1].state_vars[22].raw_material_aggregate(), RM1) self.assertEqual(nodes[2].state_vars[22].raw_material_aggregate(), RM2) - self.assertEqual(nodes[0].state_vars[22].inventory_position(predecessor_index=1), IL0+OO01+RM01) - self.assertEqual(nodes[0].state_vars[22].inventory_position(predecessor_index=2), IL0+OO02+RM02) + # self.assertEqual(nodes[0].state_vars[22].inventory_position(predecessor_index=1), IL0+OO01+RM01) + # self.assertEqual(nodes[0].state_vars[22].inventory_position(predecessor_index=2), IL0+OO02+RM02) self.assertEqual(nodes[0].state_vars[22].inventory_position(), IL0+OO0+RM0) self.assertEqual(nodes[1].state_vars[22].inventory_position(), IL1+OO1+RM1) self.assertEqual(nodes[2].state_vars[22].inventory_position(), IL2+OO2+RM2) @@ -2601,8 +2601,8 @@ def test_assembly_3_stage_per_43(self): self.assertEqual(nodes[0].state_vars[per].raw_material_aggregate(), RM0) self.assertEqual(nodes[1].state_vars[per].raw_material_aggregate(), RM1) self.assertEqual(nodes[2].state_vars[per].raw_material_aggregate(), RM2) - self.assertEqual(nodes[0].state_vars[per].inventory_position(predecessor_index=1), IL0+OO01+RM01) - self.assertEqual(nodes[0].state_vars[per].inventory_position(predecessor_index=2), IL0+OO02+RM02) + # self.assertEqual(nodes[0].state_vars[per].inventory_position(predecessor_index=1), IL0+OO01+RM01) + # self.assertEqual(nodes[0].state_vars[per].inventory_position(predecessor_index=2), IL0+OO02+RM02) self.assertEqual(nodes[0].state_vars[per].inventory_position(), IL0+OO0+RM0) self.assertEqual(nodes[1].state_vars[per].inventory_position(), IL1+OO1+RM1) self.assertEqual(nodes[2].state_vars[per].inventory_position(), IL2+OO2+RM2) From 461a15381a35f0535f40ddce47b4e1559a14924d Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 27 Apr 2024 17:44:38 -0400 Subject: [PATCH 42/94] Bug fixes; all tests pass --- temp.txt | 102 ++++++++++++++++++ ..._TestSaveInstance_example_4_2_correct.json | 2 +- ..._TestSaveInstance_example_6_1_correct.json | 2 +- ...ample_6_1_with_order_capacity_correct.json | 2 +- ..._TestSaveInstance_example_9_5_correct.json | 2 +- ..._TestSaveInstance_figure_6_14_correct.json | 2 +- ...nstance_omit_state_vars_false_correct.json | 2 +- ...omit_state_vars_false_rosling_correct.json | 2 +- ...Instance_omit_state_vars_true_correct.json | 2 +- tests/test_instances.py | 1 + tests/test_sim.py | 2 +- 11 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 temp.txt diff --git a/temp.txt b/temp.txt new file mode 100644 index 0000000..083a809 --- /dev/null +++ b/temp.txt @@ -0,0 +1,102 @@ + t | i=0 IO:EXT|0 OQ:1|1 OQ:1|2 IS:1|1 IS:1|2 OS:EXT|0 IL:0 HC SC TC | i=1 IO:0|1 IO:0|2 OQ:11|11 OQ:12|12 IS:11|11 IS:12|12 OS:0|1 OS:0|2 IL:1 IL:2 HC SC TC | i=11 IO:1|11 OQ:EXT|-23 IS:EXT|-23 OS:1|11 IL:11 HC SC TC | i=12 IO:1|12 OQ:EXT|-25 IS:EXT|-25 OS:1|12 IL:12 HC SC TC +--- ------- ---------- -------- -------- -------- -------- ---------- ------ ---- ---- ---- ------- -------- -------- ---------- ---------- ---------- ---------- -------- -------- ------ ------ ---- ---- ---- -------- --------- ------------ ------------ --------- ------- ---- ---- ---- -------- --------- ------------ ------------ --------- ------- ---- ---- ---- + 0 | 5 5 5 0 0 5 2 4 0 4 | 5 5 5 5 0 0 5 5 8 6 14 0 24 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 1 | 3 3 3 5 5 3 4 8 0 8 | 3 3 3 3 0 0 3 3 5 3 8 0 14 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 + 2 | 6 6 6 3 3 6 1 2 0 2 | 6 6 6 6 5 5 6 6 4 2 6 0 18 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 3 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 3 3 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 4 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 5 | 7 7 7 6 6 6 -1 1 20 21 | 7 7 7 7 6 6 7 6 0 -2 0 0 13 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 + 6 | 5 5 5 7 6 6 0 2 0 2 | 5 5 5 5 6 6 5 6 1 -1 1 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 7 | 5 5 5 5 6 5 1 3 0 3 | 5 5 5 5 7 7 5 6 3 1 4 0 15 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 8 | 5 5 5 5 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 9 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 10 | 7 7 7 5 5 7 0 0 0 0 | 7 7 7 7 5 5 7 6 1 -1 1 0 14 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 + 11 | 6 6 6 7 6 6 0 1 0 1 | 6 6 6 6 5 5 6 5 0 -2 0 0 11 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 12 | 3 3 3 6 5 3 2 6 0 6 | 3 3 3 3 7 7 3 5 4 2 6 0 14 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 + 13 | 5 5 5 3 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 5 3 8 0 18 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 14 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 3 3 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 15 | 3 3 3 6 6 3 4 8 0 8 | 3 3 3 3 5 5 3 3 4 2 6 0 12 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 + 16 | 6 6 6 3 3 6 1 2 0 2 | 6 6 6 6 6 6 6 6 4 2 6 0 18 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 17 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 3 3 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 18 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 19 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 20 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 21 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 22 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 23 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 24 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 5 5 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 25 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 26 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 27 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 28 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 29 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 30 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 31 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 32 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 33 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 5 5 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 34 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 35 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 36 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 37 | 5 5 5 6 6 5 1 3 0 3 | 5 5 5 5 6 6 5 6 2 0 2 0 13 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 38 | 4 4 4 5 6 4 3 6 0 6 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 39 | 3 3 3 4 4 3 4 8 0 8 | 3 3 3 3 5 5 3 3 6 4 10 0 16 | 3 3 3 3 100 0 0 0 | 3 3 3 3 100 0 0 0 + 40 | 4 4 4 3 3 4 3 6 0 6 | 4 4 4 4 4 4 4 4 6 4 10 0 18 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 41 | 8 8 8 4 4 7 -1 0 20 20 | 8 8 8 8 3 3 8 7 1 -1 1 0 16 | 8 8 8 8 100 0 0 0 | 8 8 8 8 100 0 0 0 + 42 | 5 5 5 8 7 6 1 3 0 3 | 5 5 5 5 4 4 5 4 0 -2 0 0 9 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 43 | 4 4 4 5 4 4 1 4 0 4 | 4 4 4 4 8 8 4 6 4 2 6 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 44 | 6 6 6 4 6 6 1 2 0 2 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 45 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 46 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 6 6 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 47 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 48 | 4 4 4 6 5 4 2 5 0 5 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 49 | 4 4 4 4 5 4 3 6 0 6 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 50 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 4 4 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 51 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 4 4 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 52 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 53 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 4 4 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 54 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 5 5 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 55 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 56 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 5 5 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 57 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 6 6 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 58 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 4 4 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 59 | 4 4 4 4 4 4 3 6 0 6 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 60 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 61 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 4 4 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 62 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 5 5 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 63 | 2 2 2 4 4 2 5 10 0 10 | 2 2 2 2 5 5 2 2 7 5 12 0 16 | 2 2 2 2 100 0 0 0 | 2 2 2 2 100 0 0 0 + 64 | 4 4 4 2 2 4 3 6 0 6 | 4 4 4 4 4 4 4 4 7 5 12 0 20 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 65 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 2 2 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 66 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 4 4 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 67 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 68 | 8 8 8 5 5 7 -1 0 20 20 | 8 8 8 8 6 6 8 6 0 -2 0 0 14 | 8 8 8 8 100 0 0 0 | 8 8 8 8 100 0 0 0 + 69 | 6 6 6 8 6 6 -1 2 20 22 | 6 6 6 6 5 5 5 5 -1 -3 0 0 10 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 70 | 4 4 4 5 5 5 0 2 0 2 | 4 4 4 4 8 8 5 7 3 1 4 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 71 | 5 5 5 5 7 5 2 4 0 4 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 72 | 5 5 5 5 5 5 2 4 0 4 | 5 5 5 5 4 4 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 73 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 74 | 6 6 6 6 6 6 1 2 0 2 | 6 6 6 6 5 5 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 75 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 76 | 4 4 4 6 6 4 2 5 0 5 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 77 | 7 7 7 4 5 7 0 0 0 0 | 7 7 7 7 6 6 7 7 2 0 2 0 16 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 + 78 | 6 6 6 7 7 6 1 2 0 2 | 6 6 6 6 4 4 6 4 0 -2 0 0 10 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 79 | 5 5 5 6 4 5 0 2 0 2 | 5 5 5 5 7 7 5 7 2 0 2 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 80 | 5 5 5 5 7 5 2 4 0 4 | 5 5 5 5 6 6 5 5 3 1 4 0 14 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 81 | 6 6 6 5 5 6 1 2 0 2 | 6 6 6 6 5 5 6 6 2 0 2 0 14 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 82 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 5 5 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 83 | 4 4 4 5 5 4 3 6 0 6 | 4 4 4 4 6 6 4 4 4 2 6 0 14 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 84 | 6 6 6 4 4 6 1 2 0 2 | 6 6 6 6 5 5 6 6 3 1 4 0 16 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 85 | 5 5 5 6 6 5 2 4 0 4 | 5 5 5 5 4 4 5 5 2 0 2 0 12 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 86 | 7 7 7 5 5 7 0 0 0 0 | 7 7 7 7 6 6 7 6 1 -1 1 0 14 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 + 87 | 2 2 2 7 6 2 4 9 0 9 | 2 2 2 2 5 5 2 3 4 2 6 0 11 | 2 2 2 2 100 0 0 0 | 2 2 2 2 100 0 0 0 + 88 | 6 6 6 2 3 6 1 2 0 2 | 6 6 6 6 7 7 6 6 5 3 8 0 20 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 89 | 4 4 4 6 6 4 3 6 0 6 | 4 4 4 4 2 2 4 4 3 1 4 0 12 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 90 | 4 4 4 4 4 4 3 6 0 6 | 4 4 4 4 6 6 4 4 5 3 8 0 16 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 91 | 5 5 5 4 4 5 2 4 0 4 | 5 5 5 5 4 4 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 92 | 8 8 8 5 5 7 -1 0 20 20 | 8 8 8 8 4 4 8 6 0 -2 0 0 14 | 8 8 8 8 100 0 0 0 | 8 8 8 8 100 0 0 0 + 93 | 4 4 4 8 6 5 1 4 0 4 | 4 4 4 4 5 5 4 5 1 -1 1 0 10 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 94 | 6 6 6 4 5 6 0 1 0 1 | 6 6 6 6 8 8 6 7 3 1 4 0 17 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 95 | 6 6 6 6 7 6 1 2 0 2 | 6 6 6 6 4 4 6 5 1 -1 1 0 12 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 96 | 6 6 6 6 5 6 0 1 0 1 | 6 6 6 6 6 6 6 6 1 -1 1 0 13 | 6 6 6 6 100 0 0 0 | 6 6 6 6 100 0 0 0 + 97 | 4 4 4 6 6 4 2 5 0 5 | 4 4 4 4 6 6 4 5 3 1 4 0 13 | 4 4 4 4 100 0 0 0 | 4 4 4 4 100 0 0 0 + 98 | 5 5 5 4 5 5 2 4 0 4 | 5 5 5 5 6 6 5 5 4 2 6 0 16 | 5 5 5 5 100 0 0 0 | 5 5 5 5 100 0 0 0 + 99 | 7 7 7 5 5 7 0 0 0 0 | 7 7 7 7 4 4 7 6 1 -1 1 0 14 | 7 7 7 7 100 0 0 0 | 7 7 7 7 100 0 0 0 \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json index c638bbc..ec7cde9 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-04-25 12:11:06.214084"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-04-27 17:40:11.803530"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json index 8fcff78..d60f43e 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.222480"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:11.812669"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json index 4e98c7a..62b5708 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.228107"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:11.818495"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json index e1e56b1..356d61c 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-04-25 12:11:06.217605"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-04-27 17:40:11.807225"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json index 9726d84..6cbd3fc 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.236086"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:11.827168"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json index ff1b9d4..3444e0a 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.516518"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "order_quantity_fg": {"-10": 36.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "order_quantity_fg": {"-10": 25.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "order_quantity_fg": {"-10": 29.000000000000014}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "order_quantity_fg": {"-10": 27.999999999999986}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "order_quantity_fg": {"-10": 35.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "order_quantity_fg": {"-10": 24.000000000000007}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "order_quantity_fg": {"-10": 28.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "order_quantity_fg": {"-10": 43.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "order_quantity_fg": {"-10": 22.999999999999993}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "order_quantity_fg": {"-10": 18.99999999999998}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "order_quantity_fg": {"-8": 25.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "order_quantity_fg": {"-8": 29.000000000000014}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "order_quantity_fg": {"-8": 27.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "order_quantity_fg": {"-8": 35.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "order_quantity_fg": {"-8": 24.000000000000007}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "order_quantity_fg": {"-8": 28.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "order_quantity_fg": {"-8": 43.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "order_quantity_fg": {"-8": 22.999999999999993}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "order_quantity_fg": {"-8": 18.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "order_quantity_fg": {"-6": 36.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "order_quantity_fg": {"-6": 25.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "order_quantity_fg": {"-6": 29.000000000000007}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "order_quantity_fg": {"-6": 27.999999999999993}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "order_quantity_fg": {"-6": 35.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "order_quantity_fg": {"-6": 24.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "order_quantity_fg": {"-6": 28.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "order_quantity_fg": {"-6": 43.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "order_quantity_fg": {"-6": 23.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "order_quantity_fg": {"-6": 18.999999999999986}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "order_quantity_fg": {"-4": 36.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "order_quantity_fg": {"-4": 25.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "order_quantity_fg": {"-4": 29.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "order_quantity_fg": {"-4": 27.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "order_quantity_fg": {"-4": 35.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "order_quantity_fg": {"-4": 24.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "order_quantity_fg": {"-4": 28.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "order_quantity_fg": {"-4": 43.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "order_quantity_fg": {"-4": 22.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "order_quantity_fg": {"-4": 18.999999999999986}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "order_quantity_fg": {"-2": 36.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "order_quantity_fg": {"-2": 25.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "order_quantity_fg": {"-2": 29.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "order_quantity_fg": {"-2": 27.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "order_quantity_fg": {"-2": 35.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "order_quantity_fg": {"-2": 24.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "order_quantity_fg": {"-2": 28.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "order_quantity_fg": {"-2": 43.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "order_quantity_fg": {"-2": 22.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "order_quantity_fg": {"-2": 18.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:12.189006"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json index fbae4c8..15017a6 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 9.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 16.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 6.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 5.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 18.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 23.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 12.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 11.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 2.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.716842"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "order_quantity_fg": {"-2": 9.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 9.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "order_quantity_fg": {"-2": 0.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "order_quantity_fg": {"-4": 14.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "order_quantity_fg": {"-4": 11.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "order_quantity_fg": {"-4": 6.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "order_quantity_fg": {"-6": 14.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "order_quantity_fg": {"-6": 8.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "order_quantity_fg": {"-6": 0.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 16.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 6.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 5.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "order_quantity_fg": {"-8": 18.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 18.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 23.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "order_quantity_fg": {"-8": 12.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 12.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "order_quantity_fg": {"-8": 7.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "order_quantity_fg": {"-8": 10.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 11.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "order_quantity_fg": {"-8": 2.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 2.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "order_quantity_fg": {"-8": 8.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "order_quantity_fg": {"-10": 22.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "order_quantity_fg": {"-10": 3.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "order_quantity_fg": {"-10": 2.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "order_quantity_fg": {"-12": 44.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "order_quantity_fg": {"-12": 27.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "order_quantity_fg": {"-12": 22.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "order_quantity_fg": {"-12": 9.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "order_quantity_fg": {"-12": 14.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "order_quantity_fg": {"-12": 10.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "order_quantity_fg": {"-12": 4.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "order_quantity_fg": {"-12": 16.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "order_quantity_fg": {"-12": 6.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "order_quantity_fg": {"-14": 64.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "order_quantity_fg": {"-14": 21.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "order_quantity_fg": {"-14": 14.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "order_quantity_fg": {"-14": 10.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "order_quantity_fg": {"-14": 1.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "order_quantity_fg": {"-14": 2.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "order_quantity_fg": {"-14": 16.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "order_quantity_fg": {"-14": 6.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:12.459005"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json index 9060a30..8ef47de 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-25 12:11:06.452089"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:12.099526"} \ No newline at end of file diff --git a/tests/test_instances.py b/tests/test_instances.py index b860456..6f6e95c 100644 --- a/tests/test_instances.py +++ b/tests/test_instances.py @@ -412,6 +412,7 @@ def test_omit_state_vars_false(self): del correct_json['last_updated'] # Compare. + self.maxDiff = None self.assertDictEqual(saved_json, correct_json) finally: diff --git a/tests/test_sim.py b/tests/test_sim.py index 7b41e14..1dde45f 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -726,7 +726,7 @@ def test_example_6_1_order_quantity_override(self): if t == 40: step(network2, consistency_checks='E', order_quantity_override={ nodes2[2]: {nodes2[3]: {nodes2[3]._dummy_product: 33}}, - nodes2[3]: {nodes2[3]: {nodes2[3]._external_supplier_dummy_product: 77}} + nodes2[3]: {None: {nodes2[3]._external_supplier_dummy_product: 77}} }) else: step(network2, consistency_checks='E') From 9dbe11b3f3c951503b314e42bedb23e87e88aa64 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 28 Apr 2024 16:19:57 -0400 Subject: [PATCH 43/94] Added some unit tests --- requirements.txt | 4 +- src/stockpyl/demand_source.py | 1 - src/stockpyl/sim.py | 61 +----- src/stockpyl/sim_io.py | 42 ++-- src/stockpyl/supply_chain_node.py | 23 +-- ...riteResults_test_columns_to_print_none.csv | 22 +- ...riteResults_test_columns_to_print_none.txt | 24 +-- tests/test_demand_source.py | 38 ++++ tests/test_sim_io.py | 47 +++++ tests/test_supply_chain_node.py | 193 ++++++++++++++++++ 10 files changed, 334 insertions(+), 121 deletions(-) diff --git a/requirements.txt b/requirements.txt index 88f9efe..ab21765 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,9 @@ build==0.0.2 -jsonpickle==1.0 +jsonpickle==1.5.0 matplotlib==2.0 networkx==2.0 numpy==1.21 -scipy==1.6.0 +scipy==1.10.0 setuptools==49.6 sphinx==4.5.0 sphinx_rtd_theme==1.0.0 diff --git a/src/stockpyl/demand_source.py b/src/stockpyl/demand_source.py index 31e48cf..d11a14d 100644 --- a/src/stockpyl/demand_source.py +++ b/src/stockpyl/demand_source.py @@ -334,7 +334,6 @@ def is_discrete(self): ------- bool ``True`` if the distribution is discrete, ``False`` if it is continuous. -# TODO: unit tests """ return self.type in ('P', 'UD', 'CD', 'NB', 'D') diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index f9b2c57..eade5ce 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -351,7 +351,6 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan node, an order quantity will be calculated for that node as usual. (This option is mostly used when running the simulation from outside the package, e.g., in a reinforcement learning environment; it is analogous to setting the action for the current time period.) - # TODO: Change this so that order_quantity_override only specifies the FG quantity? """ # Did we already visit this node? if visited[node_index]: @@ -445,62 +444,6 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Add order to on_order_by_predecessor. node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += rm_OQ - - - # # Place orders to all raw material suppliers (predecessors that provide this product/node with - # # a raw material). - # for p in node.raw_material_suppliers_by_product(product_index=prod.index): - # p_index = p.index if p is not None else None - - # # Loop through products at predecessor. - # for rm in (p.products if p is not None else [node._external_supplier_dummy_product]): - # rm_index = rm.index - - # # Calculate NBOM. - # NBOM = node.NBOM(product=prod, predecessor=p, raw_material=rm) - - # # Was an override order quantity provided? - # try: - # if None in order_quantity_override[node]: - # qty_override = order_quantity_override[node][None] - # else: - # qty_override = order_quantity_override[node][rm] - # except: - # qty_override = None - # if qty_override is not None: - # rm_order_quantity = qty_override - # if NBOM == 0: - # NBOM = 1 # TODO: This is klugey. Basically we need to determine how many FG to make if order quantity override is provided but there's no NBOM; maybe just raise an error in this case? - # fg_order_quantity = qty_override / NBOM - # elif NBOM == 0: - # rm_order_quantity = 0 - # fg_order_quantity = 0 - # else: - # # Calculate order quantity from policy, expressed in units of the raw material. - # rm_order_quantity = policy.get_order_quantity(product_index=prod.index, predecessor_index=p_index, rm_index=rm_index) - # fg_order_quantity = rm_order_quantity / NBOM - - # # Adjust to account for order capacity. - # fg_order_quantity = min(fg_order_quantity, order_capac) - # rm_order_quantity = fg_order_quantity * NBOM - - # # Place order in predecessor's order pipeline (converting first to raw material units via BOM). - # # (Add to any existing inbound order, because multiple products at the node can order the same RM.) - # if p is not None: - # p.state_vars_current.inbound_order_pipeline[node_index][rm_index][order_lead_time] += rm_order_quantity - # else: - # # Place order to external supplier. (For now, this just means adding to inbound shipment pipeline.) - # node.state_vars_current.inbound_shipment_pipeline[None][rm_index][order_lead_time + shipment_lead_time] += rm_order_quantity - - # # Record order quantity. (Add to existing order quantity, since multiple products might order the same RM from - # # the same predecessor.) - # node.state_vars_current.order_quantity[p_index][rm_index] += rm_order_quantity - # # Add order to on_order_by_predecessor. - # node.state_vars_current.on_order_by_predecessor[p_index][rm_index] += rm_order_quantity - - # # Update pending finished goods. (Convert to downstream units.) - # node.state_vars_current.pending_finished_goods[prod.index] += fg_order_quantity - def _generate_downstream_shipments(node_index, network, period, visited, consistency_checks='W'): """Generate shipments to all downstream nodes using depth-first-search. @@ -883,7 +826,7 @@ def _raw_materials_to_finished_goods(node): # Shortcut to lead times. Note: This assumes that all products that use this RM have the # same lead times. Currently no way to distinguish among products if they have different lead times. # TODO: fix this - prod = node.products_by_raw_material(rm_index, network_BOM=True)[0] + prod = node.products_by_raw_material(rm_index)[0] OLT = node.get_attribute('order_lead_time', prod) or 0 SLT = node.get_attribute('shipment_lead_time', prod) or 0 @@ -891,7 +834,7 @@ def _raw_materials_to_finished_goods(node): avail_rm = node.state_vars_current.raw_material_inventory[rm_index] # Shortcut to list of product indices for this RM. - prods_for_rm = node.product_indices_by_raw_material(rm_index, network_BOM=True) + prods_for_rm = node.product_indices_by_raw_material(rm_index) # If avail_rm > 0, then we know period >= OLT + SLT. if avail_rm > 0: diff --git a/src/stockpyl/sim_io.py b/src/stockpyl/sim_io.py index 166a85d..e7229ae 100644 --- a/src/stockpyl/sim_io.py +++ b/src/stockpyl/sim_io.py @@ -15,34 +15,36 @@ * Each row corresponds to a period in the simulation. * Each node is represented by a group of columns. + * The node number is indicated in the first column in the group (i.e., i=1). + * (node, product) pairs are indicated by a vertical line, so '2|20' means node 2, product 20. * The columns for each node are as follows: - ``i=``: label for the column group - ``DISR``: was the node disrupted in the period? (True/False) - - ``IO:s``: inbound order received from successor ``s`` - - ``IOPL:s``: inbound order pipeline from successor ``s``: a list of order + - ``IO:s|prod``: inbound order for product ``prod`` received from successor ``s`` + - ``IOPL:s|prod``: inbound order pipeline for product ``prod`` from successor ``s``: a list of order quantities arriving from succesor ``s`` in ``r`` periods from the period, for ``r`` = 1, ..., ``order_lead_time`` - - ``OQ:p``: order quantity placed to predecessor ``p`` in the period - # TODO: OQFG - - ``OO:p``: on-order quantity (items that have been ordered from successor + - ``OQ:p|prod``: order quantity placed to predecessor ``p`` for product ``prod`` + - ``OQFG:prod``: order quantity of finished good ``prod`` (this "order" is never actually placed; + only the raw material orders in ``OQ`` are placed; but it is useful for debugging) + - ``OO:p:prod``: on-order quantity (items of product ``prod`` that have been ordered from successor ``p`` but not yet received) - - ``IS:p``: inbound shipment received from predecessor ``p`` - - ``ISPL:p``: inbound shipment pipeline from predecessor ``p``: a list of + - ``IS:p|prod``: inbound shipment of product ``prod`` received from predecessor ``p`` + - ``ISPL:p|prod``: inbound shipment pipeline for product ``prod`` from predecessor ``p``: a list of shipment quantities arriving from predecessor ``p`` in ``r`` periods from the period, for ``r`` = 1, ..., ``shipment_lead_time`` - - ``IDI:p``: inbound disrupted items: number of items from predecessor ``p`` + - ``IDI:p|prod``: inbound disrupted items: number of items of product ``prod`` from predecessor ``p`` that cannot be received due to a type-RP disruption at the node - - ``RM:p``: number of items from predecessor ``p`` in raw-material inventory - at node - - ``PFG:p``: number of items of product ``p`` that are pending, waiting to be + - ``RM:prod``: number of items of product ``prod`` in raw-material inventory at node + - ``PFG:prod``: number of items of product ``prod`` that are pending, waiting to be processed from raw materials - - ``OS:s``: outbound shipment to successor ``s`` - - ``DMFS``: demand met from stock at the node in the current period - - ``FR``: fill rate; cumulative from start of simulation to the current period - - ``IL``: inventory level (positive, negative, or zero) at node - - ``BO:s``: backorders owed to successor ``s`` - - ``ODI:s``: outbound disrupted items: number of items held for successor ``s`` due to + - ``OS:s|prod``: outbound shipment of product ``prod`` to successor ``s`` + - ``DMFS|prod``: demand of product ``prod`` met from stock at the node in the current period + - ``FR|prod``: fill rate of product ``prod``; cumulative from start of simulation to the current period + - ``IL|prod``: inventory level of product ``prod`` (positive, negative, or zero) at node + - ``BO:s|prod``: backorders of product ``prod`` owed to successor ``s`` + - ``ODI:s|prod``: outbound disrupted items of product ``prod``: number of items held for successor ``s`` due to a type-SP disruption at ``s`` - ``HC``: holding cost incurred at the node in the period - ``SC``: stockout cost incurred at the node in the period @@ -55,7 +57,7 @@ refers to the node's external customer * For state variables that are indexed by predecessor, if ``p`` = ``EXT``, the column refers to the node's external supplier - + * Negative product indices are "dummy products" .. admonition:: See Also @@ -137,7 +139,7 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= # Determine columns to print. if columns_to_print is None or columns_to_print == 'all' or 'all' in columns_to_print: - cols_to_print = ['DISR', 'IO', 'IOPL', 'OQ', 'OO', 'IS', 'ISPL', 'IDI', 'RM', 'PFG', 'OS', 'DMFS', 'FR', 'IL', 'BO', 'ODI', 'HC', 'SC', 'ITHC', 'REV', 'TC'] + cols_to_print = ['DISR', 'IO', 'IOPL', 'OQ', 'OQFG', 'OO', 'IS', 'ISPL', 'IDI', 'RM', 'PFG', 'OS', 'DMFS', 'FR', 'IL', 'BO', 'ODI', 'HC', 'SC', 'ITHC', 'REV', 'TC'] elif not is_list(columns_to_print) and isinstance(columns_to_print, str): # columns_to_print is a string; put it in a list. cols_to_print = [columns_to_print] @@ -172,6 +174,7 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= if 'IO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_order) if 'IOPL' in cols_to_print: temp += IOPL if 'OQ' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].order_quantity) + if 'OQFG' in cols_to_print: temp += sort_dict_by_keys(node.state_vars[t].order_quantity_fg) if 'OO' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].on_order_by_predecessor) if 'IS' in cols_to_print: temp += sort_nested_dict_by_keys(node.state_vars[t].inbound_shipment) if 'ISPL' in cols_to_print: temp += ISPL @@ -205,6 +208,7 @@ def write_results(network, num_periods, periods_to_print=None, columns_to_print= if 'IO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order, "IO") if 'IOPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_order_pipeline, "IOPL") if 'OQ' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].order_quantity, "OQ") + if 'OQFG' in cols_to_print: headers += _dict_to_header_list(node.state_vars[0].order_quantity_fg, "OQFG") if 'OO' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].on_order_by_predecessor, "OO") if 'IS' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment, "IS") if 'ISPL' in cols_to_print: headers += _nested_dict_to_header_list(node.state_vars[0].inbound_shipment_pipeline, "ISPL") diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 36fcb7d..ba06e97 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -233,7 +233,6 @@ def index(self, value): self._index = value # If node has a dummy product, replace it with a new one to update its index. - # TODO: this is clumsy -- do these values really need to change if index changes? and if so, is this really the way to do it? if self._dummy_product: self._remove_dummy_product() self._add_dummy_product() @@ -547,7 +546,7 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate ``None`` or the index of the dummy product at the external supplier) or the unique predecessor that provides a given dummy product (if ``raw_material`` is a dummy product), or an arbitrary predecessor (if ``raw_material`` is not a dummy product, because in this case the NBOM equals the BOM--it is product-specific, not node-specific, so - the predecessor is irrelevant). # TODO: make sure this covers all the cases + the predecessor is irrelevant). Raises a ``ValueError`` if ``product`` is not a product at the node, ``raw_material`` is not a product at ``predecessor``, or ``predecessor`` is not a predecessor of the node. @@ -601,7 +600,6 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate # rm = None if raw_material is None else self.network.products_by_index[raw_material] rm_ind = raw_material - # TODO: unit tests for this part if isinstance(predecessor, SupplyChainNode): pred = predecessor pred_ind = predecessor.index @@ -609,8 +607,6 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate if rm_ind == self._external_supplier_dummy_product.index: pred = None pred_ind = None - # elif rm.is_dummy: - # pred = rm.handling_nodes[0] else: # This works for the case in which rm is a dummy product or a regular product. pred = self.raw_material_suppliers_by_raw_material(rm_ind, network_BOM=True)[0] @@ -943,7 +939,7 @@ def raw_material_supplier_indices_by_raw_material(self, rm_index=None, network_B """ return [(s.index if s is not None else None) for s in self.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=network_BOM)] - def products_by_raw_material(self, rm_index=None, network_BOM=True): + def products_by_raw_material(self, rm_index=None): """A list of all products that use raw material with index ``rm_index`` at the node, as as |class_prod| objects. If the node has a single raw material (either dummy or real), either set ``rm_index`` to the index of the single raw material, or to ``None`` and the function @@ -957,8 +953,6 @@ def products_by_raw_material(self, rm_index=None, network_BOM=True): ---------- rm_index : int, optional The raw material index, or ``None`` if the node has a single raw material. - network_BOM : bool, optional - If ``True`` (default), function uses network BOM instead of product-only BOM. Returns ------- @@ -983,12 +977,9 @@ def products_by_raw_material(self, rm_index=None, network_BOM=True): if rm_index is None: rm_index = all_rms[0] - if network_BOM: - return [prod for prod in self.products if self.NBOM(product=prod, predecessor=None, raw_material=rm_index) > 0] - else: - return [prod for prod in self.products if prod.BOM(rm_index=rm_index) > 0] - - def product_indices_by_raw_material(self, rm_index=None, network_BOM=True): + return [prod for prod in self.products if self.NBOM(product=prod, predecessor=None, raw_material=rm_index) > 0] + + def product_indices_by_raw_material(self, rm_index=None): """A list of indices of all products that use raw material with index ``rm_index`` at the node, as as |class_prod| objects. If the node has a single raw material (either dummy or real), either set ``rm_index`` to the index of the single raw material, or to ``None`` and the function @@ -1002,8 +993,6 @@ def product_indices_by_raw_material(self, rm_index=None, network_BOM=True): ---------- rm_index : int, optional The raw material index, or ``None`` if the node has a single raw material. - network_BOM : bool, optional - If ``True`` (default), function uses network BOM instead of product-only BOM. Returns ------- @@ -1016,7 +1005,7 @@ def product_indices_by_raw_material(self, rm_index=None, network_BOM=True): If ``rm_index`` is not found among the node's raw materials, and it's not the case that ``rm_index is None`` and this node has a single raw material. """ - return [prod.index for prod in self.products_by_raw_material(rm_index=rm_index, network_BOM=network_BOM)] + return [prod.index for prod in self.products_by_raw_material(rm_index=rm_index)] # Properties related to lead times. diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv index 1145406..3c515cf 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.csv @@ -1,12 +1,12 @@ -t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,PFG:-2,OS:EXT|-2,DMFS:-2,FR:-2,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,PFG:-4,OS:1|-4,DMFS:-4,FR:-4,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,PFG:-6,OS:2|-6,DMFS:-6,FR:-6,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC -0,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,5.276265890021318,1.0,1.2137341099786818,0,0,8.496138769850774,0.0,0.0,0.0,8.496138769850774,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,5.276265890021318,1.0,0.25373410997868184,0,0,1.0149364399147274,0,21.105063560085274,0.0,22.12,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,0,"[0, 5.276265890021318]",0,0.0,5.276265890021318,5.276265890021318,5.276265890021318,1.0,5.413734109978681,0,0,10.827468219957362,0,10.552531780042637,0.0,21.38 -1,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,3.1453719211934947,1.0,3.3446280788065055,0,0,23.41239655164554,0.0,0.0,0.0,23.41239655164554,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,3.1453719211934947,1.0,2.3846280788065055,0,0,9.538512315226022,0,12.581487684773979,0.0,22.12,,False,3.1453719211934947,[],3.1453719211934947,8.421637811214813,0,"[5.276265890021318, 3.1453719211934947]",0,0.0,8.421637811214813,3.1453719211934947,3.1453719211934947,1.0,2.2683621887851864,0,0,4.536724377570373,0,6.2907438423869895,0.0,10.827468219957362 -2,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0,0.0,5.623901111326357,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0,0.0,5.623901111326357,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0,0.0,8.769273032519852,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 -3,,False,6.14531128957209,[],6.145311289572089,6.239212400898446,5.53,[5.623901111326356],0,0.0,6.239212400898446,6.14531128957209,6.14531128957209,1.0,0.250787599101554,0,0,1.755513193710878,0.0,0.0,0.0,1.755513193710878,,False,6.145311289572089,[],6.1453112895720885,6.14531128957209,5.623901111326356,[5.066098888673643],0,0.0,6.14531128957209,5.623901111326356,5.53,0.9648745647930684,-0.6153112895720891,0.6153112895720891,0,0.0,0.0,22.495604445305425,0.0,22.495604445305425,,False,6.1453112895720885,[],6.145311289572087,11.769212400898443,3.1453719211934947,"[5.623901111326356, 6.145311289572087]",0,0.0,11.769212400898443,5.066098888673643,5.066098888673643,0.9465494325617361,-1.0792124008984452,1.0792124008984452,0,0.0,0.0,10.132197777347287,0.0,10.132197777347287 -4,,False,6.037190468227883,[],6.037190468227883,6.652501757799973,5.623901111326356,[5.066098888673643],0,0.0,6.652501757799973,5.87468871042791,5.87468871042791,0.993804273838809,-0.16250175779997278,0.16250175779997278,0,0.0,6.032065249534989,0.0,0.0,6.032065249534989,,False,6.037190468227883,[],6.037190468227882,7.116402869126329,5.066098888673643,[5.623901111326356],0,0.0,7.116402869126329,5.066098888673643,4.450787599101554,0.9124747708758353,-1.5864028691263288,1.5864028691263288,0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227882,[],6.037190468227884,12.18250175779997,5.623901111326356,"[6.145311289572087, 6.037190468227884]",0,0.0,12.18250175779997,5.623901111326356,4.544688710427911,0.9019479117772604,-1.492501757799971,1.492501757799971,0,0.0,0.0,11.247802222652712,0.0,11.247802222652712 +t,i=1,DISR,IO:EXT|-2,IOPL:EXT|-2,OQ:2|-4,OQFG:-2,OO:2|-4,IS:2|-4,ISPL:2|-4,IDI:2|-4,RM:-4,PFG:-2,OS:EXT|-2,DMFS:-2,FR:-2,IL:-2,BO:EXT|-2,ODI:EXT|-2,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|-4,IOPL:1|-4,OQ:3|-6,OQFG:-4,OO:3|-6,IS:3|-6,ISPL:3|-6,IDI:3|-6,RM:-6,PFG:-4,OS:1|-4,DMFS:-4,FR:-4,IL:-4,BO:1|-4,ODI:1|-4,HC,SC,ITHC,REV,TC,i=3,DISR,IO:2|-6,IOPL:2|-6,OQ:EXT|-7,OQFG:-6,OO:EXT|-7,IS:EXT|-7,ISPL:EXT|-7,IDI:EXT|-7,RM:-7,PFG:-6,OS:2|-6,DMFS:-6,FR:-6,IL:-6,BO:2|-6,ODI:2|-6,HC,SC,ITHC,REV,TC +0,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,5.276265890021318,1.0,1.2137341099786818,0,0,8.496138769850774,0.0,0.0,0.0,8.496138769850774,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,5.276265890021318,0,[5.276265890021318],0,0.0,5.276265890021318,5.276265890021318,5.276265890021318,1.0,0.25373410997868184,0,0,1.0149364399147274,0,21.105063560085274,0.0,22.12,,False,5.276265890021318,[],5.276265890021318,5.276265890021318,5.276265890021318,0,"[0, 5.276265890021318]",0,0.0,5.276265890021318,5.276265890021318,5.276265890021318,1.0,5.413734109978681,0,0,10.827468219957362,0,10.552531780042637,0.0,21.38 +1,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,3.1453719211934947,1.0,3.3446280788065055,0,0,23.41239655164554,0.0,0.0,0.0,23.41239655164554,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,3.1453719211934947,5.276265890021318,[3.1453719211934947],0,0.0,3.1453719211934947,3.1453719211934947,3.1453719211934947,1.0,2.3846280788065055,0,0,9.538512315226022,0,12.581487684773979,0.0,22.12,,False,3.1453719211934947,[],3.1453719211934947,3.1453719211934947,8.421637811214813,0,"[5.276265890021318, 3.1453719211934947]",0,0.0,8.421637811214813,3.1453719211934947,3.1453719211934947,1.0,2.2683621887851864,0,0,4.536724377570373,0,6.2907438423869895,0.0,10.827468219957362 +2,,False,5.623901111326356,[],5.623901111326356,5.623901111326356,5.623901111326357,3.1453719211934947,[5.53],0,0.0,5.623901111326357,5.623901111326356,5.623901111326356,1.0,0.866098888673644,0,0,6.062692220715508,0.0,0.0,0.0,6.062692220715508,,False,5.623901111326356,[],5.623901111326356,5.623901111326356,5.623901111326357,3.1453719211934947,[5.623901111326356],0,0.0,5.623901111326357,5.53,5.53,0.9933145241457657,-0.09390111132635592,0.09390111132635592,0,0.0,0.0,22.12,0.0,22.12,,False,5.623901111326356,[],5.623901111326356,5.623901111326356,8.769273032519852,5.276265890021318,"[3.1453719211934947, 5.623901111326356]",0,0.0,8.769273032519852,5.623901111326356,5.623901111326356,1.0,1.9207269674801486,0,0,3.841453934960297,0,11.247802222652712,0.0,15.08925615761301 +3,,False,6.14531128957209,[],6.145311289572089,6.145311289572089,6.239212400898446,5.53,[5.623901111326356],0,0.0,6.239212400898446,6.14531128957209,6.14531128957209,1.0,0.250787599101554,0,0,1.755513193710878,0.0,0.0,0.0,1.755513193710878,,False,6.145311289572089,[],6.1453112895720885,6.1453112895720885,6.14531128957209,5.623901111326356,[5.066098888673643],0,0.0,6.14531128957209,5.623901111326356,5.53,0.9648745647930684,-0.6153112895720891,0.6153112895720891,0,0.0,0.0,22.495604445305425,0.0,22.495604445305425,,False,6.1453112895720885,[],6.145311289572087,6.145311289572087,11.769212400898443,3.1453719211934947,"[5.623901111326356, 6.145311289572087]",0,0.0,11.769212400898443,5.066098888673643,5.066098888673643,0.9465494325617361,-1.0792124008984452,1.0792124008984452,0,0.0,0.0,10.132197777347287,0.0,10.132197777347287 +4,,False,6.037190468227883,[],6.037190468227883,6.037190468227883,6.652501757799973,5.623901111326356,[5.066098888673643],0,0.0,6.652501757799973,5.87468871042791,5.87468871042791,0.993804273838809,-0.16250175779997278,0.16250175779997278,0,0.0,6.032065249534989,0.0,0.0,6.032065249534989,,False,6.037190468227883,[],6.037190468227882,6.037190468227882,7.116402869126329,5.066098888673643,[5.623901111326356],0,0.0,7.116402869126329,5.066098888673643,4.450787599101554,0.9124747708758353,-1.5864028691263288,1.5864028691263288,0,0.0,0.0,20.264395554694573,0.0,20.264395554694573,,False,6.037190468227882,[],6.037190468227884,6.037190468227884,12.18250175779997,5.623901111326356,"[6.145311289572087, 6.037190468227884]",0,0.0,12.18250175779997,5.623901111326356,4.544688710427911,0.9019479117772604,-1.492501757799971,1.492501757799971,0,0.0,0.0,11.247802222652712,0.0,11.247802222652712 ... -95,,False,6.130726446440085,[],6.130726446440086,7.57737086691143,5.4680702998326325,[6.976644420471352],0,0.0,7.57737086691143,5.4680702998326325,5.043355579528655,0.9665360502301662,-1.0873708669114297,1.0873708669114297,0,0.0,40.363206579752266,0.0,0.0,40.363206579752266,,False,6.130726446440086,[],6.130726446440086,6.130726446440084,6.976644420471352,[4.686396819846024],0,0.0,6.130726446440084,6.976644420471352,5.530000000000002,0.9139652719144801,-0.6007264464400839,0.6007264464400839,0,0.0,0.0,27.90657768188541,0.0,27.90657768188541,,False,6.130726446440086,[],6.130726446440088,12.134329626594061,3.7919143161941378,"[6.003603180153982, 6.130726446440088]",0,0.0,12.134329626594061,4.686396819846024,4.686396819846024,0.9263860172792653,-1.4443296265940617,1.4443296265940617,0,0.0,0.0,9.372793639692048,0.0,9.372793639692048 -96,,False,5.560039692192106,[],5.560039692192106,6.160766138632184,6.976644420471352,[4.686396819846024],0,0.0,6.160766138632184,6.647410559103536,5.560039692192106,0.9669120992580992,0.3292338613678165,0.0,0,2.3046370295747156,0.0,0.0,0.0,2.3046370295747156,,False,5.560039692192106,[],5.560039692192106,7.004369318786166,4.686396819846024,[6.003603180153982],0,0.0,7.004369318786166,4.686396819846024,4.08567037340594,0.9119522231043865,-1.4743693187861657,1.4743693187861657,0,0.0,0.0,18.745587279384097,0.0,18.745587279384097,,False,5.560039692192106,[],5.560039692192106,11.690766138632183,6.003603180153982,"[6.130726446440088, 5.560039692192106]",0,0.0,11.690766138632183,6.003603180153982,4.559273553559921,0.9251905939878785,-1.0007661386321853,1.0007661386321853,0,0.0,0.0,12.007206360307965,0.0,12.007206360307965 -97,,False,4.381602699335917,[],4.381602699335917,5.855972018122078,4.686396819846024,[5.855972018122083],0,0.0,5.855972018122078,4.381602699335917,4.381602699335917,0.9672025433462068,0.6340279818779235,0.0,0,4.438195873145465,0.0,0.0,0.0,4.438195873145465,,False,4.381602699335917,[],4.381602699335917,5.3823688379681,6.003603180153982,[5.3823688379681025],0,0.0,5.3823688379681,5.855972018122083,4.381602699335917,0.912725102486183,0.14763116203189952,0.0,0,0.5905246481275981,0,23.42388807248833,0.0,24.01441272061593,,False,4.381602699335917,[],4.381602699335919,9.941642391528015,6.130726446440088,"[5.560039692192106, 4.381602699335919]",0,0.0,9.941642391528015,5.3823688379681025,4.381602699335917,0.9258472675520476,0.7483576084719852,0.0,0,1.4967152169439704,0,10.764737675936205,0.0,12.261452892880175 -98,,False,4.775201280806586,[],4.775201280806585,4.775201280806579,5.855972018122083,[4.775201280806585],0,0.0,4.775201280806579,4.775201280806586,4.775201280806586,0.9675133263495452,1.7147987191934204,0.0,0,12.003591034353942,0.0,0.0,0.0,12.003591034353942,,False,4.775201280806585,[],4.775201280806586,4.775201280806583,5.3823688379681025,[4.775201280806586],0,0.0,4.775201280806583,4.775201280806585,4.775201280806585,0.9135521042580494,0.7547987191934169,0.0,0,3.0191948767736676,0,19.10080512322634,0.0,22.120000000000008,,False,4.775201280806586,[],4.775201280806584,9.156803980142493,5.560039692192106,"[4.381602699335919, 4.775201280806584]",0,0.0,9.156803980142493,4.775201280806586,4.775201280806586,0.9265499259666677,1.5331960198575052,0.0,0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182 -99,,False,7.215901450653069,[],7.21590145065307,7.215901450653063,4.775201280806585,[5.530000000000003],0,0.0,7.215901450653063,6.4900000000000055,6.4900000000000055,0.9665518084518686,-0.7259014506530637,0.7259014506530637,0,0.0,26.94546184824172,0.0,0.0,26.94546184824172,,False,7.21590145065307,[],7.21590145065307,7.215901450653067,4.775201280806586,[5.914798719193424],0,0.0,7.215901450653067,5.530000000000003,5.530000000000003,0.9114742407752131,-1.6859014506530672,1.6859014506530672,0,0.0,0.0,22.12000000000001,0.0,22.12000000000001,,False,7.21590145065307,[],7.215901450653072,11.991102731459648,4.381602699335919,"[4.775201280806584, 7.215901450653072]",0,0.0,11.991102731459648,5.914798719193424,5.914798719193424,0.9250413810029866,-1.301102731459646,1.301102731459646,0,0.0,0.0,11.829597438386848,0.0,11.829597438386848 +95,,False,6.130726446440085,[],6.130726446440086,6.130726446440086,7.57737086691143,5.4680702998326325,[6.976644420471352],0,0.0,7.57737086691143,5.4680702998326325,5.043355579528655,0.9665360502301662,-1.0873708669114297,1.0873708669114297,0,0.0,40.363206579752266,0.0,0.0,40.363206579752266,,False,6.130726446440086,[],6.130726446440086,6.130726446440086,6.130726446440084,6.976644420471352,[4.686396819846024],0,0.0,6.130726446440084,6.976644420471352,5.530000000000002,0.9139652719144801,-0.6007264464400839,0.6007264464400839,0,0.0,0.0,27.90657768188541,0.0,27.90657768188541,,False,6.130726446440086,[],6.130726446440088,6.130726446440088,12.134329626594061,3.7919143161941378,"[6.003603180153982, 6.130726446440088]",0,0.0,12.134329626594061,4.686396819846024,4.686396819846024,0.9263860172792653,-1.4443296265940617,1.4443296265940617,0,0.0,0.0,9.372793639692048,0.0,9.372793639692048 +96,,False,5.560039692192106,[],5.560039692192106,5.560039692192106,6.160766138632184,6.976644420471352,[4.686396819846024],0,0.0,6.160766138632184,6.647410559103536,5.560039692192106,0.9669120992580992,0.3292338613678165,0.0,0,2.3046370295747156,0.0,0.0,0.0,2.3046370295747156,,False,5.560039692192106,[],5.560039692192106,5.560039692192106,7.004369318786166,4.686396819846024,[6.003603180153982],0,0.0,7.004369318786166,4.686396819846024,4.08567037340594,0.9119522231043865,-1.4743693187861657,1.4743693187861657,0,0.0,0.0,18.745587279384097,0.0,18.745587279384097,,False,5.560039692192106,[],5.560039692192106,5.560039692192106,11.690766138632183,6.003603180153982,"[6.130726446440088, 5.560039692192106]",0,0.0,11.690766138632183,6.003603180153982,4.559273553559921,0.9251905939878785,-1.0007661386321853,1.0007661386321853,0,0.0,0.0,12.007206360307965,0.0,12.007206360307965 +97,,False,4.381602699335917,[],4.381602699335917,4.381602699335917,5.855972018122078,4.686396819846024,[5.855972018122083],0,0.0,5.855972018122078,4.381602699335917,4.381602699335917,0.9672025433462068,0.6340279818779235,0.0,0,4.438195873145465,0.0,0.0,0.0,4.438195873145465,,False,4.381602699335917,[],4.381602699335917,4.381602699335917,5.3823688379681,6.003603180153982,[5.3823688379681025],0,0.0,5.3823688379681,5.855972018122083,4.381602699335917,0.912725102486183,0.14763116203189952,0.0,0,0.5905246481275981,0,23.42388807248833,0.0,24.01441272061593,,False,4.381602699335917,[],4.381602699335919,4.381602699335919,9.941642391528015,6.130726446440088,"[5.560039692192106, 4.381602699335919]",0,0.0,9.941642391528015,5.3823688379681025,4.381602699335917,0.9258472675520476,0.7483576084719852,0.0,0,1.4967152169439704,0,10.764737675936205,0.0,12.261452892880175 +98,,False,4.775201280806586,[],4.775201280806585,4.775201280806585,4.775201280806579,5.855972018122083,[4.775201280806585],0,0.0,4.775201280806579,4.775201280806586,4.775201280806586,0.9675133263495452,1.7147987191934204,0.0,0,12.003591034353942,0.0,0.0,0.0,12.003591034353942,,False,4.775201280806585,[],4.775201280806586,4.775201280806586,4.775201280806583,5.3823688379681025,[4.775201280806586],0,0.0,4.775201280806583,4.775201280806585,4.775201280806585,0.9135521042580494,0.7547987191934169,0.0,0,3.0191948767736676,0,19.10080512322634,0.0,22.120000000000008,,False,4.775201280806586,[],4.775201280806584,4.775201280806584,9.156803980142493,5.560039692192106,"[4.381602699335919, 4.775201280806584]",0,0.0,9.156803980142493,4.775201280806586,4.775201280806586,0.9265499259666677,1.5331960198575052,0.0,0,3.0663920397150104,0,9.550402561613172,0.0,12.616794601328182 +99,,False,7.215901450653069,[],7.21590145065307,7.21590145065307,7.215901450653063,4.775201280806585,[5.530000000000003],0,0.0,7.215901450653063,6.4900000000000055,6.4900000000000055,0.9665518084518686,-0.7259014506530637,0.7259014506530637,0,0.0,26.94546184824172,0.0,0.0,26.94546184824172,,False,7.21590145065307,[],7.21590145065307,7.21590145065307,7.215901450653067,4.775201280806586,[5.914798719193424],0,0.0,7.215901450653067,5.530000000000003,5.530000000000003,0.9114742407752131,-1.6859014506530672,1.6859014506530672,0,0.0,0.0,22.12000000000001,0.0,22.12000000000001,,False,7.21590145065307,[],7.215901450653072,7.215901450653072,11.991102731459648,4.381602699335919,"[4.775201280806584, 7.215901450653072]",0,0.0,11.991102731459648,5.914798719193424,5.914798719193424,0.9250413810029866,-1.301102731459646,1.301102731459646,0,0.0,0.0,11.829597438386848,0.0,11.829597438386848 diff --git a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt index 010e3f7..708e510 100644 --- a/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt +++ b/tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none.txt @@ -1,13 +1,13 @@ -t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OO:2|-4 IS:2|-4 ISPL:2|-4 IDI:2|-4 RM:-4 PFG:-2 OS:EXT|-2 DMFS:-2 FR:-2 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OO:3|-6 IS:3|-6 ISPL:3|-6 IDI:3|-6 RM:-6 PFG:-4 OS:1|-4 DMFS:-4 FR:-4 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 IDI:EXT|-7 RM:-7 PFG:-6 OS:2|-6 DMFS:-6 FR:-6 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC ---- ------- ------ ----------- ------------- --------- --------- --------- -------------------- ---------- ------- -------- ----------- --------- -------- --------- ----------- ------------ -------- -------- ------ ----- -------- ------- ------ --------- ----------- --------- --------- --------- -------------------- ---------- ------- -------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------- ------ --------- ----------- ----------- ----------- ----------- --------------------------------------- ------------ ------- -------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- -0 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 0 [0, 5.276265890021318] 0 0 5.27627 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 -1 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 0 8.42164 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 -2 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.53] 0 0 5.6239 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 3.14537 [5.623901111326356] 0 0 5.6239 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 0 8.76927 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 -3 | False 6.14531 [] 6.14531 6.23921 5.53 [5.623901111326356] 0 0 6.23921 6.14531 6.14531 1 0.250788 0 0 1.75551 0 0 0 1.75551 | False 6.14531 [] 6.14531 6.14531 5.6239 [5.066098888673643] 0 0 6.14531 5.6239 5.53 0.964875 -0.615311 0.615311 0 0 0 22.4956 0 22.4956 | False 6.14531 [] 6.14531 11.7692 3.14537 [5.623901111326356, 6.145311289572087] 0 0 11.7692 5.0661 5.0661 0.946549 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 -4 | False 6.03719 [] 6.03719 6.6525 5.6239 [5.066098888673643] 0 0 6.6525 5.87469 5.87469 0.993804 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 7.1164 5.0661 [5.623901111326356] 0 0 7.1164 5.0661 4.45079 0.912475 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 12.1825 5.6239 [6.145311289572087, 6.037190468227884] 0 0 12.1825 5.6239 4.54469 0.901948 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 +t | i=1 DISR IO:EXT|-2 IOPL:EXT|-2 OQ:2|-4 OQFG:-2 OO:2|-4 IS:2|-4 ISPL:2|-4 IDI:2|-4 RM:-4 PFG:-2 OS:EXT|-2 DMFS:-2 FR:-2 IL:-2 BO:EXT|-2 ODI:EXT|-2 HC SC ITHC REV TC | i=2 DISR IO:1|-4 IOPL:1|-4 OQ:3|-6 OQFG:-4 OO:3|-6 IS:3|-6 ISPL:3|-6 IDI:3|-6 RM:-6 PFG:-4 OS:1|-4 DMFS:-4 FR:-4 IL:-4 BO:1|-4 ODI:1|-4 HC SC ITHC REV TC | i=3 DISR IO:2|-6 IOPL:2|-6 OQ:EXT|-7 OQFG:-6 OO:EXT|-7 IS:EXT|-7 ISPL:EXT|-7 IDI:EXT|-7 RM:-7 PFG:-6 OS:2|-6 DMFS:-6 FR:-6 IL:-6 BO:2|-6 ODI:2|-6 HC SC ITHC REV TC +--- ------- ------ ----------- ------------- --------- --------- --------- --------- -------------------- ---------- ------- -------- ----------- --------- -------- --------- ----------- ------------ -------- -------- ------ ----- -------- ------- ------ --------- ----------- --------- --------- --------- --------- -------------------- ---------- ------- -------- --------- --------- -------- ---------- --------- ---------- -------- ---- ------- ----- ------- ------- ------ --------- ----------- ----------- --------- ----------- ----------- --------------------------------------- ------------ ------- -------- --------- --------- -------- --------- --------- ---------- -------- ---- -------- ----- -------- +0 | False 5.27627 [] 5.27627 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 5.27627 1 1.21373 0 0 8.49614 0 0 0 8.49614 | False 5.27627 [] 5.27627 5.27627 5.27627 0 [5.276265890021318] 0 0 5.27627 5.27627 5.27627 1 0.253734 0 0 1.01494 0 21.1051 0 22.12 | False 5.27627 [] 5.27627 5.27627 5.27627 0 [0, 5.276265890021318] 0 0 5.27627 5.27627 5.27627 1 5.41373 0 0 10.8275 0 10.5525 0 21.38 +1 | False 3.14537 [] 3.14537 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 3.14537 1 3.34463 0 0 23.4124 0 0 0 23.4124 | False 3.14537 [] 3.14537 3.14537 3.14537 5.27627 [3.1453719211934947] 0 0 3.14537 3.14537 3.14537 1 2.38463 0 0 9.53851 0 12.5815 0 22.12 | False 3.14537 [] 3.14537 3.14537 8.42164 0 [5.276265890021318, 3.1453719211934947] 0 0 8.42164 3.14537 3.14537 1 2.26836 0 0 4.53672 0 6.29074 0 10.8275 +2 | False 5.6239 [] 5.6239 5.6239 5.6239 3.14537 [5.53] 0 0 5.6239 5.6239 5.6239 1 0.866099 0 0 6.06269 0 0 0 6.06269 | False 5.6239 [] 5.6239 5.6239 5.6239 3.14537 [5.623901111326356] 0 0 5.6239 5.53 5.53 0.993315 -0.0939011 0.0939011 0 0 0 22.12 0 22.12 | False 5.6239 [] 5.6239 5.6239 8.76927 5.27627 [3.1453719211934947, 5.623901111326356] 0 0 8.76927 5.6239 5.6239 1 1.92073 0 0 3.84145 0 11.2478 0 15.0893 +3 | False 6.14531 [] 6.14531 6.14531 6.23921 5.53 [5.623901111326356] 0 0 6.23921 6.14531 6.14531 1 0.250788 0 0 1.75551 0 0 0 1.75551 | False 6.14531 [] 6.14531 6.14531 6.14531 5.6239 [5.066098888673643] 0 0 6.14531 5.6239 5.53 0.964875 -0.615311 0.615311 0 0 0 22.4956 0 22.4956 | False 6.14531 [] 6.14531 6.14531 11.7692 3.14537 [5.623901111326356, 6.145311289572087] 0 0 11.7692 5.0661 5.0661 0.946549 -1.07921 1.07921 0 0 0 10.1322 0 10.1322 +4 | False 6.03719 [] 6.03719 6.03719 6.6525 5.6239 [5.066098888673643] 0 0 6.6525 5.87469 5.87469 0.993804 -0.162502 0.162502 0 0 6.03207 0 0 6.03207 | False 6.03719 [] 6.03719 6.03719 7.1164 5.0661 [5.623901111326356] 0 0 7.1164 5.0661 4.45079 0.912475 -1.5864 1.5864 0 0 0 20.2644 0 20.2644 | False 6.03719 [] 6.03719 6.03719 12.1825 5.6239 [6.145311289572087, 6.037190468227884] 0 0 12.1825 5.6239 4.54469 0.901948 -1.4925 1.4925 0 0 0 11.2478 0 11.2478 ... -95 | False 6.13073 [] 6.13073 7.57737 5.46807 [6.976644420471352] 0 0 7.57737 5.46807 5.04336 0.966536 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.97664 [4.686396819846024] 0 0 6.13073 6.97664 5.53 0.913965 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 0 12.1343 4.6864 4.6864 0.926386 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 -96 | False 5.56004 [] 5.56004 6.16077 6.97664 [4.686396819846024] 0 0 6.16077 6.64741 5.56004 0.966912 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 7.00437 4.6864 [6.003603180153982] 0 0 7.00437 4.6864 4.08567 0.911952 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 0 11.6908 6.0036 4.55927 0.925191 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 -97 | False 4.3816 [] 4.3816 5.85597 4.6864 [5.855972018122083] 0 0 5.85597 4.3816 4.3816 0.967203 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 5.38237 6.0036 [5.3823688379681025] 0 0 5.38237 5.85597 4.3816 0.912725 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 0 9.94164 5.38237 4.3816 0.925847 0.748358 0 0 1.49672 0 10.7647 0 12.2615 -98 | False 4.7752 [] 4.7752 4.7752 5.85597 [4.775201280806585] 0 0 4.7752 4.7752 4.7752 0.967513 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 5.38237 [4.775201280806586] 0 0 4.7752 4.7752 4.7752 0.913552 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 0 9.1568 4.7752 4.7752 0.92655 1.5332 0 0 3.06639 0 9.5504 0 12.6168 -99 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.530000000000003] 0 0 7.2159 6.49 6.49 0.966552 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 4.7752 [5.914798719193424] 0 0 7.2159 5.53 5.53 0.911474 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 0 11.9911 5.9148 5.9148 0.925041 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file +95 | False 6.13073 [] 6.13073 6.13073 7.57737 5.46807 [6.976644420471352] 0 0 7.57737 5.46807 5.04336 0.966536 -1.08737 1.08737 0 0 40.3632 0 0 40.3632 | False 6.13073 [] 6.13073 6.13073 6.13073 6.97664 [4.686396819846024] 0 0 6.13073 6.97664 5.53 0.913965 -0.600726 0.600726 0 0 0 27.9066 0 27.9066 | False 6.13073 [] 6.13073 6.13073 12.1343 3.79191 [6.003603180153982, 6.130726446440088] 0 0 12.1343 4.6864 4.6864 0.926386 -1.44433 1.44433 0 0 0 9.37279 0 9.37279 +96 | False 5.56004 [] 5.56004 5.56004 6.16077 6.97664 [4.686396819846024] 0 0 6.16077 6.64741 5.56004 0.966912 0.329234 0 0 2.30464 0 0 0 2.30464 | False 5.56004 [] 5.56004 5.56004 7.00437 4.6864 [6.003603180153982] 0 0 7.00437 4.6864 4.08567 0.911952 -1.47437 1.47437 0 0 0 18.7456 0 18.7456 | False 5.56004 [] 5.56004 5.56004 11.6908 6.0036 [6.130726446440088, 5.560039692192106] 0 0 11.6908 6.0036 4.55927 0.925191 -1.00077 1.00077 0 0 0 12.0072 0 12.0072 +97 | False 4.3816 [] 4.3816 4.3816 5.85597 4.6864 [5.855972018122083] 0 0 5.85597 4.3816 4.3816 0.967203 0.634028 0 0 4.4382 0 0 0 4.4382 | False 4.3816 [] 4.3816 4.3816 5.38237 6.0036 [5.3823688379681025] 0 0 5.38237 5.85597 4.3816 0.912725 0.147631 0 0 0.590525 0 23.4239 0 24.0144 | False 4.3816 [] 4.3816 4.3816 9.94164 6.13073 [5.560039692192106, 4.381602699335919] 0 0 9.94164 5.38237 4.3816 0.925847 0.748358 0 0 1.49672 0 10.7647 0 12.2615 +98 | False 4.7752 [] 4.7752 4.7752 4.7752 5.85597 [4.775201280806585] 0 0 4.7752 4.7752 4.7752 0.967513 1.7148 0 0 12.0036 0 0 0 12.0036 | False 4.7752 [] 4.7752 4.7752 4.7752 5.38237 [4.775201280806586] 0 0 4.7752 4.7752 4.7752 0.913552 0.754799 0 0 3.01919 0 19.1008 0 22.12 | False 4.7752 [] 4.7752 4.7752 9.1568 5.56004 [4.381602699335919, 4.775201280806584] 0 0 9.1568 4.7752 4.7752 0.92655 1.5332 0 0 3.06639 0 9.5504 0 12.6168 +99 | False 7.2159 [] 7.2159 7.2159 7.2159 4.7752 [5.530000000000003] 0 0 7.2159 6.49 6.49 0.966552 -0.725901 0.725901 0 0 26.9455 0 0 26.9455 | False 7.2159 [] 7.2159 7.2159 7.2159 4.7752 [5.914798719193424] 0 0 7.2159 5.53 5.53 0.911474 -1.6859 1.6859 0 0 0 22.12 0 22.12 | False 7.2159 [] 7.2159 7.2159 11.9911 4.3816 [4.775201280806584, 7.215901450653072] 0 0 11.9911 5.9148 5.9148 0.925041 -1.3011 1.3011 0 0 0 11.8296 0 11.8296 \ No newline at end of file diff --git a/tests/test_demand_source.py b/tests/test_demand_source.py index 5ff3d94..99809ac 100644 --- a/tests/test_demand_source.py +++ b/tests/test_demand_source.py @@ -149,6 +149,44 @@ def test_initialize(self): ds1.initialize() self.assertEqual(ds1, ds2) + +class TestIsDiscrete(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestIsDiscrete', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestIsDiscrete', 'tear_down_class()') + + def test_basic(self): + """Test that initialize() correctly initializes. + """ + print_status('TestIsDiscrete', 'test_copy()') + + ds = DemandSource(type='N') + self.assertFalse(ds.is_discrete) + + ds.type = 'P' + self.assertTrue(ds.is_discrete) + + ds.type = 'UD' + self.assertTrue(ds.is_discrete) + + ds.type = 'UC' + self.assertFalse(ds.is_discrete) + + ds.type = 'NB' + self.assertTrue(ds.is_discrete) + + ds.type = 'D' + self.assertTrue(ds.is_discrete) + + ds.type = 'CD' + self.assertTrue(ds.is_discrete) + class TestMean(unittest.TestCase): @classmethod def set_up_class(cls): diff --git a/tests/test_sim_io.py b/tests/test_sim_io.py index 33e193c..b0e5002 100644 --- a/tests/test_sim_io.py +++ b/tests/test_sim_io.py @@ -132,6 +132,53 @@ def test_periods_to_print(self): if os.path.exists(csv_filename): os.remove(csv_filename) + def test_columns_to_print_all(self): + """Test that write_results() function correctly writes results from + simulation of Example 6.1 when columns_to_print is 'all'. + """ + print_status('TestWriteResults', 'test_columns_to_print_all()') + + # Build network. + network = load_instance("example_6_1") + + # Simulate and write results. + simulation(network, 100, rand_seed=17, progress_bar=False) + filename_root = 'tests/additional_files/temp_TestWriteResults_test_columns_to_print_all' + txt_filename = filename_root + '.txt' + csv_filename = filename_root + '.csv' + + # Same correct file as for test_columns_to_print_none. + correct_filename_root = 'tests/additional_files/test_sim_io_TestWriteResults_test_columns_to_print_none' + correct_txt_filename = correct_filename_root + '.txt' + correct_csv_filename = correct_filename_root + '.csv' + + try: + sim_io.write_results(network=network, num_periods=100, periods_to_print=10, columns_to_print='all', + write_txt=True, txt_filename=txt_filename, write_csv=True, csv_filename=csv_filename) + + # Load TXT results and check them. + with open(txt_filename) as txtfile: + lines = txtfile.read().splitlines() + with open(correct_txt_filename) as correct_txtfile: + correct_lines = correct_txtfile.read().splitlines() + self.assertListEqual(lines, correct_lines) + + # Load CSV results and check them. + with open(csv_filename) as csvfile: + reader = csv.reader(csvfile) + rows = list(reader) + with open(correct_csv_filename) as correct_csvfile: + correct_reader = csv.reader(correct_csvfile) + correct_rows = list(correct_reader) + self.assertListEqual(rows, correct_rows) + + finally: + # Delete files. + if os.path.exists(txt_filename): + os.remove(txt_filename) + if os.path.exists(csv_filename): + os.remove(csv_filename) + def test_columns_to_print_none(self): """Test that write_results() function correctly writes results from simulation of Example 6.1 when columns_to_print is None. diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 030524b..2acfe2d 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -1108,6 +1108,7 @@ def test_mwor_no_product(self): _ = nodes[0].get_network_bill_of_materials(None, 1, 7) _ = nodes[1].get_network_bill_of_materials(1, 0, None) _ = nodes[0].NBOM(None, 1, 7) + _ = nodes[0].get_network_bill_of_materials(None, None, 1) def test_mwor_one_product(self): """Test that get_network_bill_of_materials and NBOM work correctly on MWOR network with one product added at retailer. @@ -1225,6 +1226,7 @@ def test_multiproduct_5_7(self): self.assertEqual(nodes[0].get_network_bill_of_materials(prods[0], 2, 2), 2.5) self.assertEqual(nodes[0].get_network_bill_of_materials(0, nodes[2], prods[3]), 7) + self.assertEqual(nodes[0].get_network_bill_of_materials(0, None, prods[3]), 7) self.assertEqual(nodes[1].get_network_bill_of_materials(prods[0], 2, 2), 2.5) self.assertEqual(nodes[1].get_network_bill_of_materials(0, nodes[2], prods[3]), 7) self.assertEqual(nodes[1].get_network_bill_of_materials(0, nodes[3], 4), 0) @@ -1232,6 +1234,7 @@ def test_multiproduct_5_7(self): self.assertEqual(nodes[1].get_network_bill_of_materials(1, 2, 4), 3.8) self.assertEqual(nodes[1].get_network_bill_of_materials(prods[1], nodes[3], prods[4]), 3.8) self.assertEqual(nodes[2].get_network_bill_of_materials(2, nodes[4], 5), 0.2) + self.assertEqual(nodes[2].get_network_bill_of_materials(2, None, 5), 0.2) self.assertEqual(nodes[2].get_network_bill_of_materials(2, 4, prods[6]), 0) self.assertEqual(nodes[2].get_network_bill_of_materials(3, 4, prods[5]), 2) self.assertEqual(nodes[3].get_network_bill_of_materials(prods[2], 4, 5), 0.2) @@ -1245,6 +1248,7 @@ def test_multiproduct_5_7(self): with self.assertRaises(ValueError): _ = nodes[0].get_network_bill_of_materials(3, 1, 1) _ = nodes[0].get_network_bill_of_materials(0, 2, 77) + _ = nodes[1].get_network_bill_of_materials(0, None, 4) class TestRawMaterials(unittest.TestCase): """This class tests all of the various raw material functions for SupplyChainNode. @@ -1721,6 +1725,195 @@ def test_multiproduct_5_7(self): _ = nodes[4].raw_material_supplier_indices_by_raw_material(rm_index=nodes[4]._external_supplier_dummy_product.index, network_BOM=False) +class TestProductsByRawMaterial(unittest.TestCase): + """This class tests all of the various raw material functions for SupplyChainNode. + """ + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestProductsByRawMaterial', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestProductsByRawMaterial', 'tear_down_class()') + + def test_mwor_no_product(self): + """Test that products_by_raw_materials and product_indices_by_raw_materials work correctly on MWOR network with no product added at retailer. + """ + print_status('TestProductsByRawMaterial', 'test_mwor_no_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=1), [nodes[0]._dummy_product.index]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=2), [nodes[0]._dummy_product.index]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=3), [nodes[0]._dummy_product.index]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=4), [nodes[0]._dummy_product.index]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=5), [nodes[0]._dummy_product.index]) + self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [1, 2]) + self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=None), [1, 2]) + self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [2, 3]) + self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=None), [2, 3]) + self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [4, 5]) + self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=None), [4, 5]) + + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=1), [nodes[0]._dummy_product]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=2), [nodes[0]._dummy_product]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=3), [nodes[0]._dummy_product]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=4), [nodes[0]._dummy_product]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=5), [nodes[0]._dummy_product]) + self.assertListEqual(nodes[1].products_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [prods[1], prods[2]]) + self.assertListEqual(nodes[1].products_by_raw_material(rm_index=None), [prods[1], prods[2]]) + self.assertListEqual(nodes[2].products_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [prods[2], prods[3]]) + self.assertListEqual(nodes[2].products_by_raw_material(rm_index=None), [prods[2], prods[3]]) + self.assertListEqual(nodes[3].products_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [prods[4], prods[5]]) + self.assertListEqual(nodes[3].products_by_raw_material(rm_index=None), [prods[4], prods[5]]) + + with self.assertRaises(ValueError): + _ = nodes[0].product_indices_by_raw_material(rm_index=77) + _ = nodes[0].product_indices_by_raw_material(rm_index=None) + + def test_mwor_one_product(self): + """Test that products_by_raw_materials and product_indices_by_raw_materials work correctly on MWOR network with one product added at retailer. + """ + print_status('TestProductsByRawMaterial', 'test_mwor_one_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + nodes[0].add_product(SupplyChainProduct(10)) + nodes[0].products[0].set_bill_of_materials(1, 5) + nodes[0].products[0].set_bill_of_materials(2, 7) + nodes[0].products[0].set_bill_of_materials(3, 3) + nodes[0].products[0].set_bill_of_materials(4, 15) + nodes[0].products[0].set_bill_of_materials(5, 6) + + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=1), [10]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=2), [10]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=3), [10]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=4), [10]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=5), [10]) + self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [1, 2]) + self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=None), [1, 2]) + self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [2, 3]) + self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=None), [2, 3]) + self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [4, 5]) + self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=None), [4, 5]) + + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=1), [nodes[0].products[0]]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=2), [nodes[0].products[0]]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=3), [nodes[0].products[0]]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=4), [nodes[0].products[0]]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=5), [nodes[0].products[0]]) + self.assertListEqual(nodes[1].products_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [prods[1], prods[2]]) + self.assertListEqual(nodes[1].products_by_raw_material(rm_index=None), [prods[1], prods[2]]) + self.assertListEqual(nodes[2].products_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [prods[2], prods[3]]) + self.assertListEqual(nodes[2].products_by_raw_material(rm_index=None), [prods[2], prods[3]]) + self.assertListEqual(nodes[3].products_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [prods[4], prods[5]]) + self.assertListEqual(nodes[3].products_by_raw_material(rm_index=None), [prods[4], prods[5]]) + + with self.assertRaises(ValueError): + _ = nodes[0].product_indices_by_raw_material(rm_index=77) + _ = nodes[0].product_indices_by_raw_material(rm_index=None) + + def test_mwor_multiple_products(self): + """Test that products_by_raw_materials and product_indices_by_raw_materials work correctly on MWOR network with multiple products added at retailer. + """ + print_status('TestProductsByRawMaterial', 'test_mwor_multiple_products()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + network.get_node_from_index(1).add_products([prods[1], prods[2]]) + network.get_node_from_index(2).add_products([prods[2], prods[3]]) + network.get_node_from_index(3).add_products([prods[4], prods[5]]) + + nodes[0].add_products([SupplyChainProduct(10), SupplyChainProduct(11), SupplyChainProduct(12)]) + + nodes[0].products_by_index[10].set_bill_of_materials(1, 5) + nodes[0].products_by_index[10].set_bill_of_materials(2, 7) + nodes[0].products_by_index[11].set_bill_of_materials(3, 3) + nodes[0].products_by_index[11].set_bill_of_materials(4, 15) + nodes[0].products_by_index[12].set_bill_of_materials(5, 6) + + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=1), [10]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=2), [10]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=3), [11]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=4), [11]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=5), [12]) + self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [1, 2]) + self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=None), [1, 2]) + self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [2, 3]) + self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=None), [2, 3]) + self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [4, 5]) + self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=None), [4, 5]) + + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=1), [nodes[0].products_by_index[10]]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=2), [nodes[0].products_by_index[10]]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=3), [nodes[0].products_by_index[11]]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=4), [nodes[0].products_by_index[11]]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=5), [nodes[0].products_by_index[12]]) + self.assertListEqual(nodes[1].products_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [prods[1], prods[2]]) + self.assertListEqual(nodes[1].products_by_raw_material(rm_index=None), [prods[1], prods[2]]) + self.assertListEqual(nodes[2].products_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [prods[2], prods[3]]) + self.assertListEqual(nodes[2].products_by_raw_material(rm_index=None), [prods[2], prods[3]]) + self.assertListEqual(nodes[3].products_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [prods[4], prods[5]]) + self.assertListEqual(nodes[3].products_by_raw_material(rm_index=None), [prods[4], prods[5]]) + + with self.assertRaises(ValueError): + _ = nodes[0].product_indices_by_raw_material(rm_index=77) + _ = nodes[0].product_indices_by_raw_material(rm_index=None) + + def test_multiproduct_5_7(self): + """Test that products_by_raw_materials and product_indices_by_raw_materials work correctly on 5-node, 7-product network. + """ + print_status('TestProductsByRawMaterial', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + prods = network.products_by_index + + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=2), [0]) + self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=3), [0]) + self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=2), [0]) + self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=3), [0, 1]) + self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=4), [1]) + self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=5), [2, 3]) + self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=6), [4]) + self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=5), [2]) + self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=6), [4]) + self.assertListEqual(nodes[4].product_indices_by_raw_material(rm_index=nodes[4]._external_supplier_dummy_product.index), [5, 6]) + + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=2), [prods[0]]) + self.assertListEqual(nodes[0].products_by_raw_material(rm_index=3), [prods[0]]) + self.assertListEqual(nodes[1].products_by_raw_material(rm_index=2), [prods[0]]) + self.assertListEqual(nodes[1].products_by_raw_material(rm_index=3), [prods[0], prods[1]]) + self.assertListEqual(nodes[1].products_by_raw_material(rm_index=4), [prods[1]]) + self.assertListEqual(nodes[2].products_by_raw_material(rm_index=5), [prods[2], prods[3]]) + self.assertListEqual(nodes[2].products_by_raw_material(rm_index=6), [prods[4]]) + self.assertListEqual(nodes[3].products_by_raw_material(rm_index=5), [prods[2]]) + self.assertListEqual(nodes[3].products_by_raw_material(rm_index=6), [prods[4]]) + self.assertListEqual(nodes[4].products_by_raw_material(rm_index=nodes[4]._external_supplier_dummy_product.index), [prods[5], prods[6]]) + + with self.assertRaises(ValueError): + _ = nodes[0].product_indices_by_raw_material(rm_index=77) + _ = nodes[0].product_indices_by_raw_material(rm_index=4) + _ = nodes[0].product_indices_by_raw_material(rm_index=5) + _ = nodes[0].product_indices_by_raw_material(rm_index=None) + + class TestLeadTime(unittest.TestCase): @classmethod def set_up_class(cls): From 54911b54daf1aae9e5891e1cb21af7bafb508d10 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 28 Apr 2024 16:33:22 -0400 Subject: [PATCH 44/94] Auto-detect product if = None in SCNode.get_attribute --- src/stockpyl/sim.py | 2 +- src/stockpyl/supply_chain_node.py | 22 ++++++++++++---------- tests/test_supply_chain_node.py | 3 +++ 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index eade5ce..cdbfc3f 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -536,7 +536,7 @@ def _initialize_state_vars(network): # Initialize inbound order pipeline. (Exclude external demand.) for s in n.successors(): - for l in range(s.get_attribute('order_lead_time') or 0): + for l in range(s.get_attribute('order_lead_time', prod) or 0): n.state_vars[0].inbound_order_pipeline[s.index][prod.index][l] = s.get_attribute('initial_orders', prod) or 0 # State variables indexed by product at predecessor nodes. diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index ba06e97..b291721 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -965,8 +965,6 @@ def products_by_raw_material(self, rm_index=None): If ``rm_index`` is not found among the node's raw materials, and it's not the case that ``rm_index is None`` and this node has a single raw material. """ - # TODO: unit tests - # If rm_index is not in raw material indices for node, AND it's not the case that this node has a single raw material # and rm_index is None, raise exception. all_rms = self.raw_material_indices_by_product('all', network_BOM=True) @@ -1228,8 +1226,6 @@ def deep_equal_to(self, other, rel_tol=1e-8): ------- bool ``True`` if the two nodes are equal, ``False`` otherwise. - - # TODO: check products """ # Initialize name of violating attribute (used for debugging) and equality flag. @@ -1549,20 +1545,27 @@ def get_attribute(self, attr, product=None): The name of the attribute to get. product : |class_product| or int, optional The product to get the attribute for, either as a |class_product| object or as an index. - Set to ``None`` or omit for single-product models. - + If the node has a single product, set ``product`` to its index, or to ``None`` (or omit it) + to determine the index automatically. + Returns ------- any The value of the attribute for the product (if any). + + Raises + ------ + ValueError + If ``product`` is ``None`` but the node has multiple products. """ - # TODO : allow product = None for single-product nodes. + if product is None and len(self.products) > 1: + raise ValueError(f'You cannot set product = None for a node that has multiple products (node = {self.index}).') # Get self.attr and the product and index. self_attr = getattr(self, attr) if product is None: - product_obj = None - product_ind = None + product_obj = self.products[0] + product_ind = self.products[0].index elif isinstance(product, SupplyChainProduct): product_obj = product product_ind = product.index @@ -1834,7 +1837,6 @@ def __init__(self, node=None, period=None): s_indices = {s: s.index if s is not None else None for s in self.node.successors(include_external=True)} rm_indices = {p: (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]) \ for p in self.node.predecessors(include_external=True)} - order_lead_time = self.node.get_attribute('order_lead_time') # Initialize dicts with appropriate keys. (inbound_shipment_pipeline gets # order_lead_time+shipment_lead_time slots for orders to external supplier) diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 2acfe2d..db63373 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -258,6 +258,9 @@ def test_multiproduct_node(self): self.assertEqual(node.get_attribute('stockout_cost', 1), None) self.assertEqual(node.get_attribute('stockout_cost', prod2), None) + with self.assertRaises(ValueError): + node.get_attribute('local_holding_cost', None) + class TestDescendants(unittest.TestCase): From 45ba1e791ac9b1f2655b1b646658da874fe8e645 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Thu, 2 May 2024 21:55:33 -0400 Subject: [PATCH 45/94] Fix Unnecessary external demand sources on non-retailer nodes in non-serial networks #142 --- CHANGELOG.md | 4 + src/stockpyl/helpers.py | 2 +- src/stockpyl/policy.py | 4 +- src/stockpyl/sim.py | 4 +- src/stockpyl/supply_chain_network.py | 42 +++++--- src/stockpyl/supply_chain_node.py | 140 +++++++++------------------ src/stockpyl/supply_chain_product.py | 4 - tests/test_supply_chain_network.py | 68 +++++++++++++ tests/test_supply_chain_product.py | 47 +++++++++ 9 files changed, 194 insertions(+), 121 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 996942f..b3a91b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,10 @@ a given number and return the corresponding value. - ``loss_functions.standard_normal_loss_dict()`` function, to build a dictionary of loss-function values. - Support for negative binomial demand distributions in ``DemandSource``. +### Changed +- ``supply_chain_network.network_from_edges()`` now only creates a ``DemandSource`` for sink nodes or if the +demand source parameters were provided specifically for that node in the input args. + ### Fixed - Bug in ``helpers.ensure_list_for_time_period()`` that caused it to handle numpy arrays improperly. - Bug in ``demand_source.py`` that sometimes caused infinite recursion when some attributes were ``None``. diff --git a/src/stockpyl/helpers.py b/src/stockpyl/helpers.py index 4c10ca1..f7b2f24 100644 --- a/src/stockpyl/helpers.py +++ b/src/stockpyl/helpers.py @@ -535,7 +535,7 @@ def build_node_data_dict(attribute_dict, node_order_in_lists, default_values={}) ``data_dict[n][a]`` is the value of attribute ``a``, where ``a`` is in a key in ``attribute_dict``. - :func:`~build_node_data_dict` is similar calling :func:`~ensure_dict_for_nodes` for multiple + :func:`~build_node_data_dict` is similar to calling :func:`~ensure_dict_for_nodes` for multiple attributes simultaneously. For each attribute ``a`` in ``attribute_dict`` keys, ``attribute_dict[a]`` diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index 53b5013..a528a67 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -439,7 +439,7 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra # Calculate total demand (inbound orders), including successor nodes and # external demand, in FG units. - demand = self.node._get_attribute_total('inbound_order', self.node.network.period, product_index=product_index) + demand = self.node._get_state_var_total('inbound_order', self.node.network.period, product_index=product_index) # Calculate (local or echelon) inventory position, before demand is subtracted. Exclude from pipeline # RM units that are "earmarked" for other products at this node. @@ -608,7 +608,7 @@ def _get_order_quantity_old(self, product_index=None, predecessor_index=None, rm # Calculate total demand (inbound orders), including successor nodes and # external demand. - demand = self.node._get_attribute_total('inbound_order', self.node.network.period, product_index=product_index) + demand = self.node._get_state_var_total('inbound_order', self.node.network.period, product_index=product_index) # Calculate total orders that have already been placed by this node to this supplier for this RM # in the current time period (for other products at the node that use the same RM). These units diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index cdbfc3f..f644bce 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -691,7 +691,7 @@ def _calculate_period_costs(network, period): for prod_index in n.product_indices: # Finished goods holding cost. items_held = max(0, n.state_vars[period].inventory_level[prod_index]) + \ - n._get_attribute_total('outbound_disrupted_items', period, product_index=prod_index) + n._get_state_var_total('outbound_disrupted_items', period, product_index=prod_index) try: n.state_vars[period].holding_cost_incurred += n.get_attribute('local_holding_cost_function', prod_index)(items_held) except TypeError: @@ -927,7 +927,7 @@ def _process_outbound_shipments(node, starting_inventory_level, new_finished_goo global issued_backorder_warning if consistency_checks in ('W', 'WF', 'E', 'EF') and not issued_backorder_warning: # Double-check BO calculations. - current_backorders_check = node._get_attribute_total('backorders_by_successor', node.network.period, product_index=prod_index) + current_backorders_check = node._get_state_var_total('backorders_by_successor', node.network.period, product_index=prod_index) if not np.isclose(current_backorders, current_backorders_check): if consistency_checks in ('WF', 'EF'): # Write instance and simulation data to file. diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 4b6b1af..0bb55cd 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -827,23 +827,33 @@ def network_from_edges(edges, node_order_in_lists=None, **kwargs): n.shipment_lead_time = data_dict[n.index].get('lead_time') n.order_lead_time = data_dict[n.index].get('order_lead_time') - # Demand source. - if data_dict[n.index].get('demand_source') is not None: - n.demand_source = data_dict[n.index]['demand_source'] + # Demand source. If this is a sink node OR if demand_source or demand_type were + # provided as a dict or list (not a singleton) and node was included in it, + # build demand_source as specified by kwargs. Otherwise (it's not a sink node + # and demand_source and demand_type are singletons or do not include node), + # create DemandSource of type None. + if n in network.sink_nodes or \ + (is_iterable(kwargs.get('demand_source')) and data_dict[n.index].get('demand_source') is not None) or \ + (is_iterable(kwargs.get('demand_type')) and data_dict[n.index].get('demand_type') is not None): + + if data_dict[n.index].get('demand_source') is not None: + n.demand_source = data_dict[n.index]['demand_source'] + else: + # Create DemandSource object. (Don't override default value for round_to_int + # with None.) + ds = DemandSource() + ds.type = data_dict[n.index].get('demand_type') + if data_dict[n.index].get('round_to_int') is not None: + ds.round_to_int = data_dict[n.index].get('round_to_int') + ds.mean = data_dict[n.index].get('mean') + ds.standard_deviation = data_dict[n.index].get('standard_deviation') + ds.demand_list = data_dict[n.index].get('demand_list') + ds.probabilities = data_dict[n.index].get('probabilities') + ds.lo = data_dict[n.index].get('lo') + ds.hi = data_dict[n.index].get('hi') + n.demand_source = ds else: - # Create DemandSource object. (Don't override default value for round_to_int - # with None.) - ds = DemandSource() - ds.type = data_dict[n.index].get('demand_type') - if data_dict[n.index].get('round_to_int') is not None: - ds.round_to_int = data_dict[n.index].get('round_to_int') - ds.mean = data_dict[n.index].get('mean') - ds.standard_deviation = data_dict[n.index].get('standard_deviation') - ds.demand_list = data_dict[n.index].get('demand_list') - ds.probabilities = data_dict[n.index].get('probabilities') - ds.lo = data_dict[n.index].get('lo') - ds.hi = data_dict[n.index].get('hi') - n.demand_source = ds + n.demand_source = DemandSource() # Inventory policy. if data_dict[n.index].get('inventory_policy') is not None: diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index b291721..77f950f 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -560,7 +560,7 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate the dummy product. predecessor : |class_node| or int, optional The predecessor to get the BOM for, as a |class_node| object or index. Set to - ``None`` (the default) for the external supplier. + ``None`` (the default) to determine the predecessor automatically. raw_material : |class_product| or int, optional The raw material to get the BOM for, as a |class_object| or index. Set to ``None`` (the default) for the dummy product at the external supplier. @@ -1596,7 +1596,6 @@ def get_attribute(self, attr, product=None): default_val = self._DEFAULT_VALUES['local_holding_cost'] elif attr == 'lead_time': default_val = self._DEFAULT_VALUES['shipment_lead_time'] - # TODO: '_' properties? else: default_val = self._DEFAULT_VALUES[attr] if product_obj is not None and ((default_val is None and self_attr is None) or (self_attr == default_val)): @@ -1605,7 +1604,7 @@ def get_attribute(self, attr, product=None): else: return self_attr - def _get_attribute_total(self, attribute, period, product_index=None, include_external=True): + def _get_state_var_total(self, attribute, period, product_index=None, include_external=True): """Return total (over all successors/predecessors) of ``attribute`` in the node's ``state_vars`` for the period and product specified, for an attribute that is indexed by successor or predecessor, i.e., @@ -1622,12 +1621,10 @@ def _get_attribute_total(self, attribute, period, product_index=None, include_ex If ``include_external`` is ``True``, includes the external supply or demand node (if any) in the total. - Example: ``_get_attribute_total('inbound_shipment', 5)`` returns the total + Example: ``_get_state_var_total('inbound_shipment', 5)`` returns the total inbound shipment, from all predecessor nodes (including the external supply, if any), in period 5. - # TODO: rename this to _get_state_var_total ? - Parameters ---------- attribute : str @@ -1870,12 +1867,6 @@ def __init__(self, node=None, period=None): for prod_index in self.node.product_indices: order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) self.inbound_order_pipeline[s_index][prod_index] = [0] * (order_lead_time + 1) - # self.inbound_order_pipeline = {s_indices[s]: - # {prod_index: - # # TODO: should we be getting order_lead_time for self.node instead of s? - # [0] * ((s.get_attribute('order_lead_time', product=prod_index) or 0) + 1) - # for prod_index in node.product_indices} - # for s in node.successors()} # Add external customer to inbound_order_pipeline. (Must be done # separately since external customer does not have its own node, @@ -2014,7 +2005,11 @@ def in_transit_to(self, successor, prod_index=None): float The current inventory in transit to the successor. """ - # Determine product index. # TODO: validate parameters + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. prod_index = prod_index or self.node._dummy_product.index return np.sum([successor.state_vars[self.period].inbound_shipment_pipeline[self.node.index][prod_index][:]]) @@ -2049,6 +2044,10 @@ def in_transit_from(self, predecessor=None, prod_index=None): if prod_index is None: prod_index = predecessor.products[0].index + # Validate parameters. + if prod_index is not None and prod_index not in self.inbound_shipment_pipeline[p_ind].keys(): + raise ValueError(f'{prod_index} is not a product at node {p_ind}.') + return np.sum(self.inbound_shipment_pipeline[p_ind][prod_index][:]) def in_transit(self, prod_index=None): @@ -2087,7 +2086,11 @@ def in_transit(self, prod_index=None): float The current inventory in transit from predecessors. """ - # Determine product index. # TODO: validate parameters + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. prod_index = prod_index or self.node.product_indices[0] total_in_transit = np.sum([ @@ -2136,7 +2139,11 @@ def on_order(self, prod_index=None): float The current inventory on order from predecessors. """ - # Determine product index. # TODO: validate parameters + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. prod_index = prod_index or self.node.product_indices[0] total_on_order = np.sum([ @@ -2185,7 +2192,11 @@ def raw_material_aggregate(self, prod_index=None): float The current raw material inventory. """ - # Determine product index. # TODO: validate parameters + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. prod_index = prod_index or self.node.product_indices[0] prod = self.node.products_by_index[prod_index] @@ -2238,7 +2249,11 @@ def inbound_disrupted_items_aggregate(self, prod_index=None): float The current disrupted inventory from predecessors. """ - # Determine product index. # TODO: validate parameters + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. prod_index = prod_index or self.node.product_indices[0] total_disrupted_items = np.sum([ @@ -2291,6 +2306,10 @@ def inventory_position(self, prod_index=None, exclude_earmarked_units=False): The inventory position. """ + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + # Determine product index. prod_index = prod_index or self.node.product_indices[0] @@ -2307,95 +2326,20 @@ def inventory_position(self, prod_index=None, exclude_earmarked_units=False): if exclude_earmarked_units: for other_prod_index in self.node.product_indices: if other_prod_index != prod_index: - # Get any RM supplier to use for NBOM -- # TODO: handle this better - pred_index = self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True)[0] # Calculate number of earmarked units. earmarked_units = self.node.state_vars_current.pending_finished_goods[other_prod_index] \ - * self.node.NBOM(product=other_prod_index, predecessor=pred_index, raw_material=rm_index) + * self.node.NBOM(product=other_prod_index, predecessor=None, raw_material=rm_index) # Subtract earmarked units from pipeline. - # TODO: is it correct to take the max with 0? If it would be <0 should we treat it sort of like a backorder? Can this even happen? pipeline[rm_index] = max(0, pipeline[rm_index] - earmarked_units) # Convert to downstream units. - pipeline[rm_index] /= self.node.NBOM(product=prod_index, predecessor=pred_index, raw_material=rm_index) + pipeline[rm_index] /= self.node.NBOM(product=prod_index, predecessor=None, raw_material=rm_index) # Determine number of units of FG that can be made from pipeline inventory. units_from_pipeline = min(pipeline.values()) return self.inventory_level[prod_index] + units_from_pipeline - def _inventory_position_old(self, prod_index=None, predecessor_index=None, rm_index=None): - """Current local inventory position at node for product with index ``prod_index``. - Equals inventory level plus on-order inventory. Returns the inventory position in the units of the - downstream product, i.e., of ``prod_index``, not of ``rm_index``. - - On-order includes raw material inventory that has not yet been processed, as - well as inbound disrupted items due to type-RP disruptions. - - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. If the node is multi-product, ``prod_index`` must be - set to the index of a single product at the node. - - If the node has a single predecessor, which provides a single raw material, either set ``predecessor_index`` - and ``rm_index`` to the appropriate indicies, or to ``None`` and the function will determine the indices - automatically. - If the node has multiple predecessors and/or raw materials, either set ``predecessor_index`` and ``rm_index`` - to the indices of a single predecessor and raw material (to get the raw-material-specific inventory position) - or set both to ``None`` to use the aggregate on-order and raw material inventory for all predecessors and - raw materials (counting such items using the "units" of the node itself; see documentation for :func:`on_order` for more details). - ``predecessor_index`` and ``rm_index`` must both either be ``None`` or not ``None``. # TODO: handle case where only one is None? - - If the node has multiple products that use the same raw material, this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. - - Parameters - ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. - predecessor_index : int, optional - Predecessor to consider in inventory position calculation (including all others), or ``None`` to - include all predecessors. - rm_index : int, optional - Raw material to consider in inventory position calculation (excluding all others), - or ``None`` to include all raw materials. - - Returns - ------- - float - The inventory position. - - Raises - ------ - ValueError - If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. - """ - # Validate parameters. # TODO: do this or not?? - # if predecessor_index is None and rm_index is not None: - # raise ValueError('If predecessor_index is None, then rm_index must also be None.') - # if predecessor_index is not None and rm_index is None: - # raise ValueError('If rm_index is None, then predecessor_index must also be None.') - - # Determine product and RM index. # TODO: validate parameters - prod_index = prod_index or self.node.product_indices[0] - if rm_index is None: - if predecessor_index is not None: - pred = self.node.network.get_node_from_index(predecessor_index) - rm_index = pred.product_indices[0] - - # Determine total units of RM in the pipeline, converted to units of the downstream product. - if predecessor_index is not None: - pipeline = (self.on_order_by_predecessor[predecessor_index][rm_index] \ - + self.raw_material_inventory[rm_index] \ - + self.inbound_disrupted_items[predecessor_index][rm_index]) \ - / self.node.NBOM(product=prod_index, predecessor=predecessor_index, raw_material=rm_index) - else: - # These functions already convert to units of the downstream product. - pipeline = self.on_order(prod_index=prod_index) \ - + self.raw_material_aggregate(prod_index=prod_index) \ - + self.inbound_disrupted_items_aggregate(prod_index=prod_index) - - return self.inventory_level[prod_index] + pipeline - @property def echelon_on_hand_inventory(self): """Current echelon on-hand inventory at node. Equals on-hand inventory at node @@ -2469,7 +2413,7 @@ def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm to the indices of a single predecessor and raw material (to get the raw-material-specific inventory position) or set both to ``None`` to use the aggregate on-order and raw material inventory for all predecessors and raw materials (counting such items using the "units" of the node itself; see documentation for :func:`on_order` for more details). - ``predecessor_index`` and ``rm_index`` must both either be ``None`` or not ``None``. # TODO: handle case where only one is None? + ``predecessor_index`` and ``rm_index`` must both either be ``None`` or not ``None``. If the node has multiple products that use the same raw material, this function includes all units of that raw material, even though some of them may wind up being used to make products other than ``prod_index``. @@ -2501,7 +2445,11 @@ def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm # if predecessor_index is not None and rm_index is None: # raise ValueError('If rm_index is None, then predecessor_index must also be None.') - # Determine product index. # TODO: validate parameters + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. prod_index = prod_index or self.node.product_indices[0] # Calculate echelon inventory level. diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index ca8371a..68be8af 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -45,10 +45,6 @@ This is true whether the node or predecessor have an actual product loaded, or a dummy product. - To set the BOM number to something other than 1, both the product and the RM must be actual products, not dummy. -- If a node or its predecessor has more than one product, a BOM relationship must be specified for - at least one product at the node and at least one RM at the predecessor (otherwise no items will be - ordered/shipped even though there is an edge between the nodes) - # TODO: add a check and warning for this - If a node has supply_type 'U', the external supplier is assumed to provide a dummy raw material, which is not loaded into the external supplier (since a node doesn't exist for that supplier), but raw material inventory is allocated at the node for the external supplier's dummy product at diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index 19aaefa..690f2cd 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -1304,6 +1304,74 @@ def test_4_node_4(self): # n.inventory_policy.node = n self.assertTrue(network.deep_equal_to(correct_network)) + def test_demand_source(self): + """Test different ways to specify demand_source. + """ + print_status('TestNetworkFromEdges', 'test_demand_source()') + + # Correct network. + correct_network = self.get_correct_network() + + # Specify type as singleton, other attributes as list. + network = network_from_edges( + edges=[(3, 1), (3, 2), (4, 1)], + node_order_in_lists=[1, 2, 3, 4], + local_holding_cost=[4, 7, 2, 1], + stockout_cost=[20, 50, None, None], + demand_type='N', + mean=[50, 20, None, None], + standard_deviation=[5, 3, None, None], + inventory_policy=[ + Policy(type='BS', base_stock_level=70), + Policy(type='BS', base_stock_level=25), + Policy(type='BS', base_stock_level=100), + Policy(type='rQ', reorder_point=20, order_quantity=60), + ], + shipment_lead_time=[2, 6, 0, 1] + ) + self.assertTrue(network.deep_equal_to(correct_network)) + + # Specify type as singleton, other attributes as dict. + network = network_from_edges( + edges=[(3, 1), (3, 2), (4, 1)], + node_order_in_lists=[1, 2, 3, 4], + local_holding_cost=[4, 7, 2, 1], + stockout_cost=[20, 50, None, None], + demand_type='N', + mean={1: 50, 2: 20}, + standard_deviation={1: 5, 2: 3}, + inventory_policy=[ + Policy(type='BS', base_stock_level=70), + Policy(type='BS', base_stock_level=25), + Policy(type='BS', base_stock_level=100), + Policy(type='rQ', reorder_point=20, order_quantity=60), + ], + shipment_lead_time=[2, 6, 0, 1] + ) + self.assertTrue(network.deep_equal_to(correct_network)) + + # Specify type and other attributes as singleton. + network = network_from_edges( + edges=[(3, 1), (3, 2), (4, 1)], + node_order_in_lists=[1, 2, 3, 4], + local_holding_cost=[4, 7, 2, 1], + stockout_cost=[20, 50, None, None], + demand_type='N', + mean=50, + standard_deviation=5, + inventory_policy=[ + Policy(type='BS', base_stock_level=70), + Policy(type='BS', base_stock_level=25), + Policy(type='BS', base_stock_level=100), + Policy(type='rQ', reorder_point=20, order_quantity=60), + ], + shipment_lead_time=[2, 6, 0, 1] + ) + # Change correct_network to account for same means/SDs. + correct_network.get_node_from_index(2).demand_source.mean = 50 + correct_network.get_node_from_index(2).demand_source.standard_deviation = 5 + self.assertTrue(network.deep_equal_to(correct_network)) + def test_single_node(self): """Test network_from_edges() for building a single-node network. """ diff --git a/tests/test_supply_chain_product.py b/tests/test_supply_chain_product.py index 3a52130..c7edbf2 100644 --- a/tests/test_supply_chain_product.py +++ b/tests/test_supply_chain_product.py @@ -173,6 +173,53 @@ def test_basic(self): self.assertDictEqual(prod[5].bill_of_materials_dict, {}) self.assertDictEqual(prod[6].bill_of_materials_dict, {}) +class TestHandlingNodes(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestRawMaterials', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestRawMaterials', 'tear_down_class()') + + def test_basic(self): + """Basic test of raw_materials and raw_material_indices. + """ + print_status('TestRawMaterials', 'test_basic()') + + prod = {i: SupplyChainProduct(index=i) for i in range(7)} + + prod[0].set_bill_of_materials(2, 2.5) + prod[0].set_bill_of_materials(3, 7) + prod[1].set_bill_of_materials(3, 10) + prod[1].set_bill_of_materials(4, 3.8) + prod[2].set_bill_of_materials(5, 0.2) + prod[3].set_bill_of_materials(5, 2) + prod[4].set_bill_of_materials(6, 50) + + network = SupplyChainNetwork() + for i in range(7): + network.add_product(prod[i]) + + self.assertListEqual(prod[0].raw_materials, [prod[2], prod[3]]) + self.assertListEqual(prod[1].raw_materials, [prod[3], prod[4]]) + self.assertListEqual(prod[2].raw_materials, [prod[5]]) + self.assertListEqual(prod[3].raw_materials, [prod[5]]) + self.assertListEqual(prod[4].raw_materials, [prod[6]]) + self.assertListEqual(prod[5].raw_materials, []) + self.assertListEqual(prod[6].raw_materials, []) + + self.assertListEqual(prod[0].raw_material_indices, [2, 3]) + self.assertListEqual(prod[1].raw_material_indices, [3, 4]) + self.assertListEqual(prod[2].raw_material_indices, [5]) + self.assertListEqual(prod[3].raw_material_indices, [5]) + self.assertListEqual(prod[4].raw_material_indices, [6]) + self.assertListEqual(prod[5].raw_material_indices, []) + self.assertListEqual(prod[6].raw_material_indices, []) + + class TestRawMaterials(unittest.TestCase): @classmethod def set_up_class(cls): From d9ade9887ff3779e04922d19499691d9ebf163b8 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 3 May 2024 07:24:03 -0400 Subject: [PATCH 46/94] Add parse_node, parse_product functions --- CHANGELOG.md | 1 + docs/globals.inc | 1 + src/stockpyl/node_state_vars.py | 1096 ++++++++++++++++++++++++++ src/stockpyl/supply_chain_network.py | 81 ++ src/stockpyl/supply_chain_node.py | 1037 +----------------------- tests/test_node_state_vars.py | 598 ++++++++++++++ tests/test_supply_chain_network.py | 103 +++ tests/test_supply_chain_node.py | 565 ------------- 8 files changed, 1881 insertions(+), 1601 deletions(-) create mode 100644 src/stockpyl/node_state_vars.py create mode 100644 tests/test_node_state_vars.py diff --git a/CHANGELOG.md b/CHANGELOG.md index b3a91b4..5234395 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ a given number and return the corresponding value. - Support for negative binomial demand distributions in ``DemandSource``. ### Changed +- ``NodeStateVars`` object is now in its own module, ``node_state_vars.py``, rather than in ``supply_chain_node.py``. - ``supply_chain_network.network_from_edges()`` now only creates a ``DemandSource`` for sink nodes or if the demand source parameters were provided specifically for that node in the input args. diff --git a/docs/globals.inc b/docs/globals.inc index 92c5e44..6563422 100644 --- a/docs/globals.inc +++ b/docs/globals.inc @@ -25,6 +25,7 @@ .. |mod_ssm_serial| replace:: :mod:`~stockpyl.ssm_serial` .. |mod_supply_chain_network| replace:: :mod:`~stockpyl.supply_chain_network` .. |mod_supply_chain_node| replace:: :mod:`~stockpyl.supply_chain_node` +.. |mod_node_state_vars| replace:: :mod:`~stockpyl.node_state_vars` .. |mod_supply_uncertainty| replace:: :mod:`~stockpyl.supply_uncertainty` .. |mod_wagner_whitin| replace:: :mod:`~stockpyl.wagner_whitin` diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py new file mode 100644 index 0000000..16c4992 --- /dev/null +++ b/src/stockpyl/node_state_vars.py @@ -0,0 +1,1096 @@ +# =============================================================================== +# stockpyl - NodeStateVars Class +# ------------------------------------------------------------------------------- +# Author: Larry Snyder +# License: GPLv3 +# =============================================================================== + +""" +.. include:: ../../globals.inc + +Overview +-------- + +This module contains the |class_state_vars| class, which keeps track of the state variables +for a node during a simulation. + +.. note:: |node_stage| + +.. note:: |fosct_notation| + + +API Reference +------------- + + +""" + +# =============================================================================== +# Imports +# =============================================================================== + +import numpy as np +import copy + +from stockpyl.helpers import change_dict_key, is_integer + + +# =============================================================================== +# NodeStateVars Class +# =============================================================================== + +class NodeStateVars(object): + """The |class_state_vars| class contains values of the state variables + for a supply chain node during a :ref:`simulation `. + All state variables refer to their values at the + end of a period (except during the period itself, in which case the + values might be intermediate until the period is complete). + + Attributes + ---------- + node : |class_node| + The node the state variables refer to. + period : int + The period of the simulation that the state variables refer to. + inbound_shipment_pipeline : dict + ``inbound_shipment_pipeline[p][prod][r]`` = shipment quantity of product ``prod`` + arriving from predecessor node ``p`` in ``r`` periods from the current period. + If ``p`` is ``None``, refers to external supplier. If ``p`` is single-product or + external supplier, ``prod=None``. + inbound_shipment : dict + ``inbound_shipment[p][prod]`` = shipment quantity of product ``prod`` arriving at node from + predecessor node ``p`` in the current period. If ``p`` is ``None``, + refers to external supplier. If ``p`` is single-product or + external supplier, ``prod=None``. + inbound_order_pipeline : dict + ``inbound_order_pipeline[s][prod][r]`` = order quantity for product ``prod`` arriving from + successor node ``s`` in ``r`` periods from the current period. + If ``s`` is ``None``, refers to external demand. If ``s`` is single-product or external + demand, ``prod=None``. + inbound_order : dict + ``inbound_order[s][prod]`` = order quantity for product ``prod`` arriving at node from successor + node ``s`` in the current period. If ``s`` is ``None``, refers to + external demand. If ``s`` is single-product or external + demand, ``prod=None``. + demand_cumul : float + ``demand_cumul[prod]`` = cumulative demand (from all sources, internal and external) for product ``prod`` + from period 0 through the current period. If node is single-product, ``prod=None``. + (Used for ``fill_rate`` calculation.) + outbound_shipment : dict + ``outbound_shipment[s][prod]`` = outbound shipment of product ``prod`` to successor node ``s``. + If ``s`` is ``None``, refers to external demand. If node is single-product, ``prod=None``. + on_order_by_predecessor : dict + ``on_order_by_predecessor[p][prod]`` = on-order quantity (items that have been + ordered from successor node ``p`` but not yet received) for product ``prod`` at node. If ``p`` is ``None``, + refers to external supply. If ``p`` is single-product or external supplier, ``prod=None``. + inventory_level : float + ``inventory_level[prod]`` = inventory level (positive, negative, or zero) of product ``prod`` at node. + If node is single-product, ``prod=None``. + backorders_by_successor : dict + ``backorders_by_successor[s][prod]`` = number of backorders of product ``prod`` for successor + ``s``. If ``s`` is ``None``, refers to external demand. If node is single-product, ``prod=None``. + outbound_disrupted_items : dict + ``outbound_disrupted_items[s][prod]`` = number of items of product ``prod`` held for successor ``s`` + due to a type-SP disruption at ``s``. (Since external demand cannot be + disrupted, ``outbound_disrupted_items[None][prod]`` always = 0.) If node is single-product, ``prod=None``. + Items held for successor are not included in ``backorders_by_successor``. + Sum over all successors of ``backorders_by_successor + outbound_disrupted_items`` + should always equal max{0, -``inventory_level``}. + inbound_disrupted_items : dict + ``inbound_disrupted_items[p][prod]`` = number of items of product ``prod`` from predecessor ``p`` that are + being held before receipt due to a type-RP disruption at the node. If ``p`` is external supplier or + single-product, ``prod=None``. + raw_material_inventory : dict + ``raw_material_inventory[prod]`` = number of units of product ``prod`` from _all_ predecessors + in raw-material inventory at node. + # TODO: note: this is a change, used to be indexed by predecessor + pending_finished_goods : dict + ``pending_finished_goods[prod]`` = number of units of product ``prod`` that are waiting to be + produced from raw materials. (This is used internally to ensure that raw materials are used to produce + the finished goods that they were originally ordered for.) + disrupted : bool + ``True`` if the node was disrupted in the period, ``False`` otherwise. + holding_cost_incurred : float + Holding cost incurred at the node in the period. + stockout_cost_incurred : float + Stockout cost incurred at the node in the period. + in_transit_holding_cost_incurred : float + In-transit holding cost incurred at the node in the period. + revenue_earned : float + Revenue earned at the node in the period. + total_cost_incurred : float + Total cost (less revenue) incurred at the node in the period. + demand_met_from_stock : float + ``demand_met_from_stock[prod]`` = demand for product ``prod`` met from stock at the node in the period. + If node is single-product, ``prod=None``. + demand_met_from_stock_cumul : float + ``demand_met_from_stock_cumul[prod]`` = cumulative demand for product ``prod`` met from stock from + period 0 through the current period. If node is single-product, ``prod=None``. + (Used for ``fill_rate`` calculation.) + fill_rate : float + ``fill_rate[prod]`` = cumulative fill rate for product ``prod`` in periods 0, ..., period. + If node is single product, ``prod=None``. + order_quantity : dict + ``order_quantity[p][prod]`` = order quantity for product ``prod`` placed by the node to + predecessor ``p`` in period. If ``p`` is ``None``, refers to external supplier. + order_quantity_fg : dict + ``order_quantity_fg[prod]`` = finished-goods order quantity for product ``prod`` at the + node in period. + """ + + def __init__(self, node=None, period=None): + """NodeStateVars constructor method. + + If ``node`` is provided, the state variable dicts (``inbound_shipment``, + ``inbound_order``, etc.) are initialized with the appropriate keys. + Otherwise, they are set to empty dicts and must be initialized before + using. + + Parameters + ---------- + node : |class_node|, optional + The node to which these state variables refer. + period : int, optional + The period to which these state variables refer. + """ + # --- Node --- # + self.node = node + self.period = period + + # --- Primary State Variables --- # + # These are set explicitly during the simulation. + + if node: + + # Build some shortcuts. + p_indices = {p: p.index if p is not None else None for p in self.node.predecessors(include_external=True)} + s_indices = {s: s.index if s is not None else None for s in self.node.successors(include_external=True)} + rm_indices = {p: (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]) \ + for p in self.node.predecessors(include_external=True)} + + # Initialize dicts with appropriate keys. (inbound_shipment_pipeline gets + # order_lead_time+shipment_lead_time slots for orders to external supplier) + self.inventory_level = {prod_index: 0 for prod_index in self.node.product_indices} + self.inbound_shipment_pipeline = {} + for p_index in self.node.predecessor_indices(include_external=True): + self.inbound_shipment_pipeline[p_index] = {} + for rm_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True): + # Find a product at this node that uses raw material rm_index from predecessor p_index, + # and use its lead times. If there is more than one such product, use the last one found. + # This is a little klugey. # TODO: improve? should LTs be an attribute of the RM, not the product? + for prod_index in self.node.product_indices: + if rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) and \ + p_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): + # Get lead times for this product. + order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) + shipment_lead_time = (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) + self.inbound_shipment_pipeline[p_index][rm_index] = [0] * (order_lead_time + shipment_lead_time + 1) + # self.inbound_shipment_pipeline = {p_indices[p]: + # {prod_index: + # [0] * ((self.node.get_attribute('order_lead_time', product=prod_index) or 0) + + # (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) + 1) + # for prod_index in rm_indices[p]} + # for p in self.node.predecessors(include_external=True)} + self.inbound_shipment = {p_indices[p]: + {prod_index: 0 for prod_index in rm_indices[p]} + for p in self.node.predecessors(include_external=True)} + self.inbound_order_pipeline = {} + for s_index in self.node.successor_indices(include_external=False): + self.inbound_order_pipeline[s_index] = {} + for prod_index in self.node.product_indices: + order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) + self.inbound_order_pipeline[s_index][prod_index] = [0] * (order_lead_time + 1) + + # Add external customer to inbound_order_pipeline. (Must be done + # separately since external customer does not have its own node, + # or its own order lead time.) + if node.demand_source is not None and node.demand_source.type is not None: + self.inbound_order_pipeline[None] = {prod_index: [0] for prod_index in node.product_indices} + self.inbound_order = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} + self.outbound_shipment = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} + self.on_order_by_predecessor = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} + for p in self.node.predecessors(include_external=True)} + self.backorders_by_successor = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} + for s in self.node.successors(include_external=True)} + self.outbound_disrupted_items = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} + for s in self.node.successors(include_external=True)} + self.inbound_disrupted_items = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} + for p in self.node.predecessors(include_external=True)} + self.order_quantity = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} + for p in self.node.predecessors(include_external=True)} + self.raw_material_inventory = {prod_index: 0 for prod_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True)} + self.order_quantity_fg = {prod_index: 0 for prod_index in self.node.product_indices} + self.pending_finished_goods = {prod_index: 0 for prod_index in self.node.product_indices} + + # Fill rate quantities. + self.demand_cumul = {prod_index: 0 for prod_index in self.node.product_indices} + self.demand_met_from_stock = {prod_index: 0 for prod_index in self.node.product_indices} + self.demand_met_from_stock_cumul = {prod_index: 0 for prod_index in self.node.product_indices} + self.fill_rate = {prod_index: 0 for prod_index in self.node.product_indices} + + else: + + # Initialize dicts to empty dicts. + self.inbound_shipment_pipeline = {} + self.inbound_shipment = {} + self.inbound_order_pipeline = {} + self.inbound_order = {} + self.outbound_shipment = {} + self.on_order_by_predecessor = {} + self.backorders_by_successor = {} + self.outbound_disrupted_items = {} + self.inbound_disrupted_items = {} + self.order_quantity = {} + self.raw_material_inventory = {} + self.order_quantity_fg = {} + self.pending_finished_goods = {} + + # Remaining state variables. + self.disrupted = False + + # Costs: each refers to a component of the cost (or the total cost) + # incurred at the node in the period. + self.holding_cost_incurred = 0 + self.stockout_cost_incurred = 0 + self.in_transit_holding_cost_incurred = 0 + self.revenue_earned = 0 + self.total_cost_incurred = 0 + + # --- Special Methods --- # + + def __eq__(self, other): + """Determine whether ``other`` is equal to the state variables object. Two objects are + considered equal if they are deeply-equal to each other. + + Parameters + ---------- + other : |class_state_vars| + The state variables object to compare to. + + Returns + ------- + bool + True if the state variables objects are equal, False otherwise. + + """ + return self.deep_equal_to(other) + + def __ne__(self, other): + """Determine whether ``other`` is not equal to the state variables object. Two objects are + considered equal if they are deeply-equal to each other. + + Parameters + ---------- + other : |class_state_vars| + The state variables object to compare to. + + Returns + ------- + bool + True if the state variables objects are not equal, False otherwise. + + """ + return not self.__eq__(other) + + # --- State Variable Functions --- # + # These are basically shortcuts to the individual attributes that offer more flexibility + # in how products are specified (or not). + + def get_inbound_shipment_pipeline(predecessor, periods_from_now, product=None): + """Shortcut to ``self.inbound_shipment_pipeline[predecessor][product][periods_from_now]``. + + Parameters + ---------- + predecessor : |class_node| or int + Predecessor node (as a |class_node|) or its index. + periods_away : int + Get pipeline inventory arriving this many periods into the future. + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` to detect + product automatically for single-product nodes. + + Returns + ------- + float + Inbound shipment pipeline. + """ + _, pred_index = parse_node(predecessor) + _, prod_index = parse_product(product) + + + # --- Calculated State Variables --- # + # These are calculated based on the primary state variables. + + @property + def on_hand(self): + """Current on-hand inventory at node. If node is single-product, returns the on-hand inventory as a singleton. + If node is multi-product, returns dict whose + keys are product indices and whose values are the corresponding on-hand inventory levels. Read only. + """ + if self.node.is_multiproduct: + return {prod_index: max(0, self.inventory_level[prod_index]) for prod_index in self.node.product_indices} + else: + return max(0, self.inventory_level[self.node._dummy_product.index]) + + @property + def backorders(self): + """Current number of backorders. Should always equal sum over all successors ``s`` + of ``backorders_by_successor[s]`` + ``outbound_disrupted_items[s]``. If node is single-product, + returns the backorders as a singleton. If node is + multi-product, returns dict whose keys are product indices and whose values are the + corresponding numbers of backorders. Read only. + """ + if self.node.is_multiproduct: + return {prod_index: max(0, -self.inventory_level[prod_index]) for prod_index in self.node.product_indices} + else: + return max(0, -self.inventory_level[self.node._dummy_product.index]) + + def in_transit_to(self, successor, prod_index=None): + """Return current total inventory of product ``prod_index`` in transit to a given successor. + Includes items that will be/have been delivered during the current period. + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + + Parameters + ---------- + successor : |class_node| + The successor node. + prod_index : int, optional + The outbound product index, or ``None`` if ``successor`` is single-product. + + Returns + ------- + float + The current inventory in transit to the successor. + """ + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. + prod_index = prod_index or self.node._dummy_product.index + + return np.sum([successor.state_vars[self.period].inbound_shipment_pipeline[self.node.index][prod_index][:]]) + + def in_transit_from(self, predecessor=None, prod_index=None): + """Return current total inventory of product ``prod_index`` in transit from a given predecessor. + Includes items that will be/have been delivered during the current period. + + Set ``predecessor`` to ``None`` if the predecessor is the external supplier. + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + + Parameters + ---------- + predecessor : |class_node| + The predecessor node. + prod_index : int, optional + The inbound product index, or ``None`` if ``predecessor`` is single-product or external supplier. + + Returns + ------- + float + The current inventory in transit from the predecessor. + """ + # Get predecessor index. Also get prod_index if it's None. + if predecessor is None: + p_ind = None + if prod_index is None: + prod_index = self.node._external_supplier_dummy_product.index + else: + p_ind = predecessor.index + if prod_index is None: + prod_index = predecessor.products[0].index + + # Validate parameters. + if prod_index is not None and prod_index not in self.inbound_shipment_pipeline[p_ind].keys(): + raise ValueError(f'{prod_index} is not a product at node {p_ind}.') + + return np.sum(self.inbound_shipment_pipeline[p_ind][prod_index][:]) + + def in_transit(self, prod_index=None): + """Current inventory of raw materials for product ``prod_index`` that is in transit to the node. Read only. + + In-transit items are counted using the "units" of the node (or node-product pair) itself. + That is, each in-transit quantity is divided by the number of units of the inbound item + required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). + + For example, if the bill of materials specifies that to make one unit at the node requires + 2 units from predecessor node A and 6 units from predecessor node B, and if there are + 10 in-transit units from A and 18 from B, then ``in_transit`` equals + + .. math:: + + \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + + If the node has multiple products that use the same raw material, this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + To get the number of units in transit by predecessor and/or product, use :func:`in_transit_from`. + + **Note:** This was a property prior to version [VERSION] and is now a function. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + + Returns + ------- + float + The current inventory in transit from predecessors. + """ + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. + prod_index = prod_index or self.node.product_indices[0] + + total_in_transit = np.sum([ + self.in_transit_from(p, rm_index) + * self.node.NBOM(product=prod_index, predecessor=p.index if p is not None else None, raw_material=rm_index) + for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) + for p in self.node.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=True) + ]) + + if total_in_transit == 0: + return 0 + else: + return total_in_transit / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + + def on_order(self, prod_index=None): + """Current inventory of raw materials for product ``prod_index`` that is on order to the node. Read only. + + On-order items are counted using the "units" of the node (or node-product pair) itself. + That is, each on-order quantity is divided by the number of units of the inbound item + required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). + + For example, if the bill of materials specifies that to make one unit at the node requires + 2 units from predecessor node A and 6 units from predecessor node B, and if there are + 10 on-order units from A and 18 from B, then ``on_order`` equals + + .. math:: + + \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + + If the node has multiple products that use the same raw material, this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + **Note:** This was a property prior to version [VERSION] and is now a function. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + + Returns + ------- + float + The current inventory on order from predecessors. + """ + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. + prod_index = prod_index or self.node.product_indices[0] + + total_on_order = np.sum([ + self.on_order_by_predecessor[p][rm_index] + / self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) + for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) + for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) + ]) + + if total_on_order == 0: + return 0 + else: + return total_on_order / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + + def raw_material_aggregate(self, prod_index=None): + """Current raw materials for product ``prod_index`` that are in raw-material inventory at the node. Read only. + + Raw materials are counted using the "units" of the node (or node-product pair) itself. + That is, each raw material quantity is divided by the number of units of the raw material + required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). + + For example, if the bill of materials specifies that to make one unit at the node requires + 2 units from predecessor node A and 6 units from predecessor node B, and if there are + 10 node-A units and 18 node-B units in raw material inventory at the node, then ``raw_material_aggregate`` equals + + .. math:: + + \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + + If the node has multiple products that use the same raw material, this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + **Note:** This was a property prior to version [VERSION] and is now a function. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + + Returns + ------- + float + The current raw material inventory. + """ + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. + prod_index = prod_index or self.node.product_indices[0] + prod = self.node.products_by_index[prod_index] + + total_raw_material = 0 + for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True): + BOM = prod.BOM(rm_index) + if BOM == 0: + # rm_index has no BOM relationship, so it is only in the network BOM; therefore, + # its BOM number is 1. + BOM = 1 + + total_raw_material += self.raw_material_inventory[rm_index] * BOM + + if total_raw_material == 0: + return 0 + else: + return total_raw_material / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + + def inbound_disrupted_items_aggregate(self, prod_index=None): + """Current total inbound disrupted inventory of raw materials for product ``prod_index``. Read only. + + Inbound items are counted using the "units" of the node (or node-product pair) itself. + That is, each inbound quantity is divided by the number of units of the inbound item + required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). + + For example, if the bill of materials specifies that to make one unit at the node requires + 2 units from predecessor node A and 6 units from predecessor node B, and if there are + 10 inbound disrupted units from A and 18 from B, then ``inbound_disrupted_items_aggregate`` equals + + .. math:: + + \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. + + If the node has multiple products that use the same raw material, this function includes all disrupted units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + **Note:** This was a property prior to version [VERSION] and is now a function. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + + Returns + ------- + float + The current disrupted inventory from predecessors. + """ + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. + prod_index = prod_index or self.node.product_indices[0] + + total_disrupted_items = np.sum([ + self.inbound_disrupted_items[p][rm_index] + * self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) + for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) + for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) + ]) + + if total_disrupted_items == 0: + return 0 + else: + return total_disrupted_items / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + + def inventory_position(self, prod_index=None, exclude_earmarked_units=False): + """Current (local) inventory position at node for product with index ``prod_index``. + Equals inventory level plus pipeline inventory. (Pipeline inventory equals on-order inventory of the raw material, + raw material inventory that has not yet been processed, and inbound disrupted items of the + raw material due to type-RP disruptions). Inventory position is expressed in the units of the product + (not the raw materials). + + If the product uses multiple raw materials, the pipeline inventory is the maximum number + of units of the product that can be produced, given the quantities of raw materials in the pipeline. + For example, suppose product A requires 10 units of product B and 5 units of product C; there are + 4 units of product A on hand; and there are 20 units of product B and 15 units of product C in the pipeline. + The the inventory level is 4, and the pipeline inventory contains enough raw materials to make 2 units + of product A. So, the inventory position is 6. + + If ``exclude_earmarked_units`` is ``True``, raw materials that are already "earmarked" for a different + product at this node are excluded from the pipeline inventory. In particular, the pipeline of a given + raw material is reduced by the sum, over all _other_ products at the node, of the number of units + of that product that are pending times the NBOM for that product/raw material. + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. If the node is multi-product, ``prod_index`` must be + set to the index of a single product at the node. + + If the node has multiple products that use the same raw material, the inventory position returned by this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + + Returns + ------- + float + The inventory position. + """ + + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. + prod_index = prod_index or self.node.product_indices[0] + + # Determine total units of each RM in the pipeline, converted to units of the downstream product. + pipeline = {} + for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True): + # Calculate pipeline, in upstream units. + pipeline[rm_index] = self.raw_material_inventory[rm_index] + for pred_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): + pipeline[rm_index] += (self.on_order_by_predecessor[pred_index][rm_index] \ + + self.inbound_disrupted_items[pred_index][rm_index]) + + # Subtract earmarked units, if requested. + if exclude_earmarked_units: + for other_prod_index in self.node.product_indices: + if other_prod_index != prod_index: + # Calculate number of earmarked units. + earmarked_units = self.node.state_vars_current.pending_finished_goods[other_prod_index] \ + * self.node.NBOM(product=other_prod_index, predecessor=None, raw_material=rm_index) + # Subtract earmarked units from pipeline. + pipeline[rm_index] = max(0, pipeline[rm_index] - earmarked_units) + + # Convert to downstream units. + pipeline[rm_index] /= self.node.NBOM(product=prod_index, predecessor=None, raw_material=rm_index) + + # Determine number of units of FG that can be made from pipeline inventory. + units_from_pipeline = min(pipeline.values()) + + return self.inventory_level[prod_index] + units_from_pipeline + + @property + def echelon_on_hand_inventory(self): + """Current echelon on-hand inventory at node. Equals on-hand inventory at node + and at or in transit to all of its downstream nodes. If node is single-product, + returns the echelon on-hand inventory as a singleton. If node is multi-product, returns dict + whose keys are product indices and whose values are the corresponding echelon on-hand inventory levels. Read only. + """ + EOHI = self.on_hand + + if self.node.is_singleproduct: + for d in self.node.descendants: + # Add on-hand inventory at descendant. + EOHI += d.state_vars[self.period].on_hand + # Add in-transit quantity from predecessors that are descendents + # of self (or equal to self). + for p in d.predecessors(): + if p.index == self.node.index or p in self.node.descendants: + EOHI += d.state_vars[self.period].in_transit_from(predecessor=p, prod_index=None) + else: + for d in self.node.descendants: + # Add on-hand inventory at descendant. + on_hand = d.state_vars[self.period].on_hand + for prod_index in self.node.product_indices: + EOHI[prod_index] += on_hand[prod_index] + # Add in-transit quantity from predecessors that are descendants + # of self (or equal to self). + for p in d.predecessors(): + if p.index == self.node.index or p in self.node.descendants: + EOHI[prod_index] += d.state_vars[self.period].in_transit_from(predecessor=p, prod_index=prod_index) + + return EOHI + + @property + def echelon_inventory_level(self): + """Current echelon inventory level at node. Equals echelon on-hand inventory + minus backorders at terminal node(s) downstream from node. If node is single-product, + returns the echelon inventory level as a singleton. If node is multi-product, returns dict + whose keys are product indices and whose values are the corresponding echelon inventory levels. Read only. + """ + EIL = self.echelon_on_hand_inventory + + if self.node.is_singleproduct: + for d in self.node.descendants + [self.node]: + if d in self.node.network.sink_nodes: + EIL -= d.state_vars[self.period].backorders + else: + for d in self.node.descendants + [self.node]: + backorders = d.state_vars[self.periods].backorders + for prod_index in self.node.product_indices: + if d in self.node.network.sink_nodes: + EIL[prod_index] -= backorders[prod_index] + + return EIL + + def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm_index=None): + """Current echelon inventory position at node for product with index ``prod_index``. + Equals echelon inventory level plus + on order items. + + On-order includes raw material inventory that has not yet been processed, as well as + inbound disrupted items due to type-RP disruptions. + + If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` + and the function will determine the index automatically. If the node is multi-product, ``prod_index`` must be + set to the index of a single product at the node. + + If the node has a single predecessor, which provides a single raw material, either set ``predecessor_index`` + and ``rm_index`` to the appropriate indicies, or to ``None`` and the function will determine the indices + automatically. + If the node has multiple predecessors and/or raw materials, either set ``predecessor_index`` and ``rm_index`` + to the indices of a single predecessor and raw material (to get the raw-material-specific inventory position) + or set both to ``None`` to use the aggregate on-order and raw material inventory for all predecessors and + raw materials (counting such items using the "units" of the node itself; see documentation for :func:`on_order` for more details). + ``predecessor_index`` and ``rm_index`` must both either be ``None`` or not ``None``. + + If the node has multiple products that use the same raw material, this function includes all units of that + raw material, even though some of them may wind up being used to make products other than ``prod_index``. + + Parameters + ---------- + prod_index : int, optional + The product index, or ``None`` to set the product automatically if node is single-product. + predecessor_index : int, optional + Predecessor to consider in inventory position calculation (including all others), or ``None`` to + include all predecessors. + rm_index : int, optional + Raw material to consider in inventory position calculation (excluding all others), + or ``None`` to include all raw materials. + + Returns + ------- + float + The echelon inventory position. + + Raises + ------ + ValueError + If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. + """ + # Validate parameters. # TODO: figure out what's going on here + # if predecessor_index is None and rm_index is not None: + # raise ValueError('If predecessor_index is None, then rm_index must also be None.') + # if predecessor_index is not None and rm_index is None: + # raise ValueError('If rm_index is None, then predecessor_index must also be None.') + + # Validate parameters. + if prod_index is not None and prod_index not in self.node.product_indices: + raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + + # Determine product index. + prod_index = prod_index or self.node.product_indices[0] + + # Calculate echelon inventory level. + if self.node.is_singleproduct: + EIL = self.echelon_inventory_level + else: + EIL = self.echelon_inventory_level[prod_index] + # Calculate on-order, raw material inventory, and inbound disrupted items. + if rm_index is not None: + OO = self.on_order_by_predecessor[predecessor_index][rm_index] + RMI = self.raw_material_inventory[rm_index] + IDI = self.inbound_disrupted_items[predecessor_index][rm_index] + else: + # Note: If <=1 predecessor, raw_material_inventory should always = 0 + # (because raw materials are processed right away). + OO = self.on_order(prod_index=prod_index) + RMI = self.raw_material_aggregate(prod_index=prod_index) + IDI = self.inbound_disrupted_items_aggregate(prod_index=prod_index) + + return EIL + OO + RMI + IDI + + def _echelon_inventory_position_adjusted(self): + # TODO: not updated for multi-product + """Calculate the adjusted echelon inventory position. Equals the current echelon inventory position + including only items ordered :math:`L_i` periods ago or earlier, where :math:`L_i` is the + forward echelon lead time for the node. That is, equals current echelon inventory level + plus items ordered :math:`L_i` periods ago or earlier. + + Rosling (1989) calls this :math:`X^L_{it}`; Zipkin (2000) calls it :math:`IN^+_j(t)`. + + Assumes there are no order lead times. + + This quantity is used (only?) for balanced echelon base-stock policies. + Nodes are assumed to be indexed consecutively in non-decreasing order of + forward echelon lead time. + + Note: Balanced echelon base-stock policy assumes a node never orders + more than its predecessor can ship; therefore, # of items shipped in a + given interval is the same as # of items ordered. In addition, there + are no raw-material inventories. + + Returns + ------- + float + The adjusted echelon inventory position. + """ + # Calculate portion of in-transit inventory that was ordered L_i periods + # ago or earlier. + # Since order quantity to all predecessors is the same, choose one arbitrarily + # and get order quantities for that predecessor. + in_transit_adjusted = 0 + pred = self.node.get_one_predecessor() + if pred is None: + pred_index = None + rm_index = self.node._external_supplier_dummy_product.index + else: + pred_index = pred.index + rm_index = pred.product_indices[0] + for t in range(self.node.equivalent_lead_time, self.node.shipment_lead_time): + if self.node.network.period - t >= 0: + in_transit_adjusted += self.node.state_vars[self.node.network.period - t].order_quantity[pred_index][rm_index] + # np.sum([self.node.state_vars[self.node.network.period-t].order_quantity[predecessor_index] + # for t in range(self.node.equivalent_lead_time, self.node.shipment_lead_time)]) + # Calculate adjusted echelon inventory position. + return self.echelon_inventory_level + in_transit_adjusted + + # --- Conversion to/from Dicts --- # + + def to_dict(self): + """Convert the |class_state_vars| object to a dict. List and dict attributes + are deep-copied so changes to the original object do not get propagated to the dict. + The ``node`` attribute is set to the index of the node (if any), rather than to the object. + + Returns + ------- + dict + The dict representation of the object. + """ + # Initialize dict. + sv_dict = {} + + # Attributes. + sv_dict['node'] = self.node.index + sv_dict['period'] = self.period + sv_dict['inbound_shipment_pipeline'] = copy.deepcopy(self.inbound_shipment_pipeline) + sv_dict['inbound_shipment'] = copy.deepcopy(self.inbound_shipment) + sv_dict['inbound_order_pipeline'] = copy.deepcopy(self.inbound_order_pipeline) + sv_dict['inbound_order'] = copy.deepcopy(self.inbound_order) + sv_dict['outbound_shipment'] = copy.deepcopy(self.outbound_shipment) + sv_dict['on_order_by_predecessor'] = copy.deepcopy(self.on_order_by_predecessor) + sv_dict['backorders_by_successor'] = copy.deepcopy(self.backorders_by_successor) + sv_dict['outbound_disrupted_items'] = copy.deepcopy(self.outbound_disrupted_items) + sv_dict['inbound_disrupted_items'] = copy.deepcopy(self.inbound_disrupted_items) + sv_dict['order_quantity'] = copy.deepcopy(self.order_quantity) + sv_dict['order_quantity_fg'] = copy.deepcopy(self.order_quantity_fg) + sv_dict['raw_material_inventory'] = copy.deepcopy(self.raw_material_inventory) + sv_dict['pending_finished_goods'] = copy.deepcopy(self.pending_finished_goods) + sv_dict['inventory_level'] = self.inventory_level + sv_dict['disrupted'] = self.disrupted + sv_dict['holding_cost_incurred'] = self.holding_cost_incurred + sv_dict['stockout_cost_incurred'] = self.stockout_cost_incurred + sv_dict['in_transit_holding_cost_incurred'] = self.in_transit_holding_cost_incurred + sv_dict['revenue_earned'] = self.revenue_earned + sv_dict['total_cost_incurred'] = self.total_cost_incurred + sv_dict['demand_cumul'] = self.demand_cumul + sv_dict['demand_met_from_stock'] = self.demand_met_from_stock + sv_dict['demand_met_from_stock_cumul'] = self.demand_met_from_stock_cumul + sv_dict['fill_rate'] = self.fill_rate + + return sv_dict + + @classmethod + def from_dict(cls, the_dict): + """Return a new |class_state_vars| object with attributes copied from the + values in ``the_dict``. List and dict attributes + are deep-copied so changes to the original dict do not get propagated to the object. + + The ``node`` attribute is set to the index of the node, + like it is in the dict, but should be converted to a node object if this + function is called recursively from a |class_node|'s ``from_dict()`` method. + + Parameters + ---------- + the_dict : dict + Dict representation of a |class_state_vars|, typically created using ``to_dict()``. + + Returns + ------- + NodeStateVars + The object converted from the dict. + """ + if the_dict is None: + nsv = None + else: + nsv = NodeStateVars() + + nsv.node = the_dict['node'] + nsv.period = the_dict['period'] + nsv.inbound_shipment_pipeline = copy.deepcopy(the_dict['inbound_shipment_pipeline']) + nsv.inbound_shipment = copy.deepcopy(the_dict['inbound_shipment']) + nsv.inbound_order_pipeline = copy.deepcopy(the_dict['inbound_order_pipeline']) + nsv.inbound_order = copy.deepcopy(the_dict['inbound_order']) + nsv.outbound_shipment = copy.deepcopy(the_dict['outbound_shipment']) + nsv.on_order_by_predecessor = copy.deepcopy(the_dict['on_order_by_predecessor']) + nsv.backorders_by_successor = copy.deepcopy(the_dict['backorders_by_successor']) + nsv.outbound_disrupted_items = copy.deepcopy(the_dict['outbound_disrupted_items']) + nsv.inbound_disrupted_items = copy.deepcopy(the_dict['inbound_disrupted_items']) + nsv.order_quantity = copy.deepcopy(the_dict['order_quantity']) + nsv.order_quantity_fg = copy.deepcopy(the_dict['order_quantity_fg']) + nsv.raw_material_inventory = copy.deepcopy(the_dict['raw_material_inventory']) + nsv.pending_finished_goods = copy.deepcopy(the_dict['pending_finished_goods']) + nsv.inventory_level = the_dict['inventory_level'] + nsv.disrupted = the_dict['disrupted'] + nsv.holding_cost_incurred = the_dict['holding_cost_incurred'] + nsv.stockout_cost_incurred = the_dict['stockout_cost_incurred'] + nsv.in_transit_holding_cost_incurred = the_dict['in_transit_holding_cost_incurred'] + nsv.revenue_earned = the_dict['revenue_earned'] + nsv.total_cost_incurred = the_dict['total_cost_incurred'] + nsv.demand_cumul = the_dict['demand_cumul'] + nsv.demand_met_from_stock = the_dict['demand_met_from_stock'] + nsv.demand_met_from_stock_cumul = the_dict['demand_met_from_stock_cumul'] + nsv.fill_rate = the_dict['fill_rate'] + + return nsv + + # --- Utility Functions --- # + + def reindex_state_variables(self, old_to_new_dict, old_to_new_prod_dict): + """Change indices of node-based state variable dict keys using ``old_to_new_dict`` + and indices of product-based state variable dict keys using ``old_to_new_prod_dict``. + + Parameters + ---------- + old_to_new_dict : dict + Dict in which keys are old node indices and values are new node indices. + old_to_new_prod_dict : dict + Dict in which keys are old product indices and values are new product indices. + + """ + # State variables indexed by product only. + for prod in self.node.products: + change_dict_key(self.demand_cumul, prod.index, old_to_new_prod_dict[prod.index]) + change_dict_key(self.inventory_level, prod.index, old_to_new_prod_dict[prod.index]) + change_dict_key(self.demand_met_from_stock, prod.index, old_to_new_prod_dict[prod.index]) + change_dict_key(self.demand_met_from_stock_cumul, prod.index, old_to_new_prod_dict[prod.index]) + change_dict_key(self.fill_rate, prod.index, old_to_new_prod_dict[prod.index]) + old_rm_indices = list(self.raw_material_inventory.keys()) + for rm_index in old_rm_indices: + change_dict_key(self.raw_material_inventory, rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.order_quantity_fg, prod.index, old_to_new_prod_dict[prod.index]) + change_dict_key(self.pending_finished_goods, prod.index, old_to_new_prod_dict[prod.index]) + + # State variables indexed by predecessor. + for p in self.node.predecessors(include_external=True): + p_index = p.index if p is not None else None + rm_indices = p.product_indices if p is not None else [self.node._external_supplier_dummy_product.index] + # Change rm index (inner level of nested dict). + for rm_index in rm_indices: + change_dict_key(self.inbound_shipment_pipeline[p_index], rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.inbound_shipment[p_index], rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.on_order_by_predecessor[p_index], rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.order_quantity[p_index], rm_index, old_to_new_prod_dict[rm_index]) + change_dict_key(self.inbound_disrupted_items[p_index], rm_index, old_to_new_prod_dict[rm_index]) + # Change predecessor index (outer level of nested dict). + if p is not None: + # We don't need to change the node index for external supplier (only the rm index). + change_dict_key(self.inbound_shipment_pipeline, p_index, old_to_new_dict[p_index]) + change_dict_key(self.inbound_shipment, p_index, old_to_new_dict[p_index]) + change_dict_key(self.on_order_by_predecessor, p_index, old_to_new_dict[p_index]) + change_dict_key(self.order_quantity, p_index, old_to_new_dict[p_index]) + change_dict_key(self.inbound_disrupted_items, p_index, old_to_new_dict[p_index]) + + # State variables indexed by successor. + for s in self.node.successors(include_external=False): + # Change prod index (inner level of nested dict). + for prod_index in self.node.product_indices: + change_dict_key(self.inbound_order_pipeline[s.index], prod_index, old_to_new_prod_dict[prod_index]) + change_dict_key(self.inbound_order[s.index], prod_index, old_to_new_prod_dict[prod_index]) + change_dict_key(self.outbound_shipment[s.index], prod_index, old_to_new_prod_dict[prod_index]) + change_dict_key(self.backorders_by_successor[s.index], prod_index, old_to_new_prod_dict[prod_index]) + change_dict_key(self.outbound_disrupted_items[s.index], prod_index, old_to_new_prod_dict[prod_index]) + # Change successor index (outer level of nested dict). + change_dict_key(self.inbound_order_pipeline, s.index, old_to_new_dict[s.index]) + change_dict_key(self.inbound_order, s.index, old_to_new_dict[s.index]) + change_dict_key(self.outbound_shipment, s.index, old_to_new_dict[s.index]) + change_dict_key(self.backorders_by_successor, s.index, old_to_new_dict[s.index]) + change_dict_key(self.outbound_disrupted_items, s.index, old_to_new_dict[s.index]) + + def deep_equal_to(self, other, rel_tol=1e-8): + """Check whether object "deeply equals" ``other``, i.e., if all attributes are + equal, including attributes that are lists or dicts. + + Note the following caveats: + + * Checks the equality of ``node.index`` but not the entire ``node`` object. + + Parameters + ---------- + other : |class_state_vars| + The state variables to compare this one to. + rel_tol : float, optional + Relative tolerance to use when comparing equality of float attributes. + + Returns + ------- + bool + ``True`` if the two state variables objects are equal, ``False`` otherwise. + """ + + if (self.node is not None and other.node is None) or ( + self.node is None and other.node is not None): return False + if self.node is not None and other.node is not None: + if is_integer(self.node) and is_integer(other.node): + if self.node != other.node: return False + elif not is_integer(self.node) and not is_integer(other.node): + if self.node.index != other.node.index: return False + else: + return False + if self.period != other.period: return False + if self.inbound_shipment_pipeline != other.inbound_shipment_pipeline: return False + if self.inbound_shipment != other.inbound_shipment: return False + if self.inbound_order_pipeline != other.inbound_order_pipeline: return False + if self.inbound_order != other.inbound_order: return False + if self.outbound_shipment != other.outbound_shipment: return False + if self.on_order_by_predecessor != other.on_order_by_predecessor: return False + if self.backorders_by_successor != other.backorders_by_successor: return False + if self.outbound_disrupted_items != other.outbound_disrupted_items: return False + if self.inbound_disrupted_items != other.inbound_disrupted_items: return False + if self.order_quantity != other.order_quantity: return False + if self.order_quantity_fg != other.order_quantity_fg: return False + if self.raw_material_inventory != other.raw_material_inventory: return False + if self.pending_finished_goods != other.pending_finished_goods: return False + if self.inventory_level != other.inventory_level: return False + if self.disrupted != other.disrupted: return False + if self.holding_cost_incurred != other.holding_cost_incurred: return False + if self.stockout_cost_incurred != other.stockout_cost_incurred: return False + if self.in_transit_holding_cost_incurred != other.in_transit_holding_cost_incurred: return False + if self.revenue_earned != other.revenue_earned: return False + if self.total_cost_incurred != other.total_cost_incurred: return False + if self.demand_cumul != other.demand_cumul: return False + if self.demand_met_from_stock != other.demand_met_from_stock: return False + if self.demand_met_from_stock_cumul != other.demand_met_from_stock_cumul: return False + if self.fill_rate != other.fill_rate: return False + + return True + diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 0bb55cd..3a6ebed 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -673,6 +673,87 @@ def remove_product(self, product): # Remove product from network. self._products.remove(product) + # Utility functions. + + def parse_node(self, node): + """Return the node and node index as a tuple, whether ``node`` is a |class_node| + object or an int. + + Parameters + ---------- + node : |class_node| or int + The node itself (as a |class_node|) or its index (as an int). + + Returns + ------- + |class_node| + The node object. + int + The node index. + + Raises + ------ + TypeError + If ``node`` is not a |class_node| or an int. + ValueError + if ``node`` is not a node in the network. + """ + + if isinstance(node, SupplyChainNode): + node_obj = node + node_ind = node.index + if node_obj not in self.nodes: + raise ValueError(f'Node {node_ind} is not a node in the network.') + elif isinstance(node, int): + try: + node_obj = self.get_node_from_index(node) + except: + raise ValueError(f'Node {node} is not a node in the network.') + node_ind = node + else: + raise TypeError('node must be a SupplyChainNode or an int.') + + return node_obj, node_ind + + def parse_product(self, product): + """Return the product and product index as a tuple, whether ``product`` is a |class_product| + object or an int. + + Parameters + ---------- + product : |class_product| or int + The product itself (as a |class_product|) or its index (as an int). + + Returns + ------- + |class_product| + The product object. + int + The product index. + + Raises + ------ + TypeError + If ``product`` is not a |class_product| or an int. + ValueError + if ``product`` is not a product in the network. + """ + + if isinstance(product, SupplyChainProduct): + product_obj = product + product_ind = product.index + if product_obj not in self.products: + raise ValueError(f'Product {product_ind} is not a product in the network.') + elif isinstance(product, int): + try: + product_obj = self.products_by_index[product] + except: + raise ValueError(f'product {product} is not a product in the network.') + product_ind = product + else: + raise TypeError('product must be a SupplyChainProduct or an int.') + + return product_obj, product_ind # =============================================================================== # Network-Creation Methods diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 77f950f..8188823 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -62,6 +62,7 @@ import copy import math +from stockpyl.node_state_vars import NodeStateVars from stockpyl import policy from stockpyl.supply_chain_product import SupplyChainProduct from stockpyl import demand_source @@ -1701,1039 +1702,3 @@ def reindex_all_state_variables(self, old_to_new_dict, old_to_new_prod_dict): for i in range(len(self.state_vars)): self.state_vars[i].reindex_state_variables(old_to_new_dict, old_to_new_prod_dict) - -# =============================================================================== -# NodeStateVars Class -# =============================================================================== - -class NodeStateVars(object): - """The |class_state_vars| class contains values of the state variables - for a supply chain node during a :ref:`simulation `. - All state variables refer to their values at the - end of a period (except during the period itself, in which case the - values might be intermediate until the period is complete). - - Attributes - ---------- - node : |class_node| - The node the state variables refer to. - period : int - The period of the simulation that the state variables refer to. - inbound_shipment_pipeline : dict - ``inbound_shipment_pipeline[p][prod][r]`` = shipment quantity of product ``prod`` - arriving from predecessor node ``p`` in ``r`` periods from the current period. - If ``p`` is ``None``, refers to external supplier. If ``p`` is single-product or - external supplier, ``prod=None``. - inbound_shipment : dict - ``inbound_shipment[p][prod]`` = shipment quantity of product ``prod`` arriving at node from - predecessor node ``p`` in the current period. If ``p`` is ``None``, - refers to external supplier. If ``p`` is single-product or - external supplier, ``prod=None``. - inbound_order_pipeline : dict - ``inbound_order_pipeline[s][prod][r]`` = order quantity for product ``prod`` arriving from - successor node ``s`` in ``r`` periods from the current period. - If ``s`` is ``None``, refers to external demand. If ``s`` is single-product or external - demand, ``prod=None``. - inbound_order : dict - ``inbound_order[s][prod]`` = order quantity for product ``prod`` arriving at node from successor - node ``s`` in the current period. If ``s`` is ``None``, refers to - external demand. If ``s`` is single-product or external - demand, ``prod=None``. - demand_cumul : float - ``demand_cumul[prod]`` = cumulative demand (from all sources, internal and external) for product ``prod`` - from period 0 through the current period. If node is single-product, ``prod=None``. - (Used for ``fill_rate`` calculation.) - outbound_shipment : dict - ``outbound_shipment[s][prod]`` = outbound shipment of product ``prod`` to successor node ``s``. - If ``s`` is ``None``, refers to external demand. If node is single-product, ``prod=None``. - on_order_by_predecessor : dict - ``on_order_by_predecessor[p][prod]`` = on-order quantity (items that have been - ordered from successor node ``p`` but not yet received) for product ``prod`` at node. If ``p`` is ``None``, - refers to external supply. If ``p`` is single-product or external supplier, ``prod=None``. - inventory_level : float - ``inventory_level[prod]`` = inventory level (positive, negative, or zero) of product ``prod`` at node. - If node is single-product, ``prod=None``. - backorders_by_successor : dict - ``backorders_by_successor[s][prod]`` = number of backorders of product ``prod`` for successor - ``s``. If ``s`` is ``None``, refers to external demand. If node is single-product, ``prod=None``. - outbound_disrupted_items : dict - ``outbound_disrupted_items[s][prod]`` = number of items of product ``prod`` held for successor ``s`` - due to a type-SP disruption at ``s``. (Since external demand cannot be - disrupted, ``outbound_disrupted_items[None][prod]`` always = 0.) If node is single-product, ``prod=None``. - Items held for successor are not included in ``backorders_by_successor``. - Sum over all successors of ``backorders_by_successor + outbound_disrupted_items`` - should always equal max{0, -``inventory_level``}. - inbound_disrupted_items : dict - ``inbound_disrupted_items[p][prod]`` = number of items of product ``prod`` from predecessor ``p`` that are - being held before receipt due to a type-RP disruption at the node. If ``p`` is external supplier or - single-product, ``prod=None``. - raw_material_inventory : dict - ``raw_material_inventory[prod]`` = number of units of product ``prod`` from _all_ predecessors - in raw-material inventory at node. - # TODO: note: this is a change, used to be indexed by predecessor - pending_finished_goods : dict - ``pending_finished_goods[prod]`` = number of units of product ``prod`` that are waiting to be - produced from raw materials. (This is used internally to ensure that raw materials are used to produce - the finished goods that they were originally ordered for.) - disrupted : bool - ``True`` if the node was disrupted in the period, ``False`` otherwise. - holding_cost_incurred : float - Holding cost incurred at the node in the period. - stockout_cost_incurred : float - Stockout cost incurred at the node in the period. - in_transit_holding_cost_incurred : float - In-transit holding cost incurred at the node in the period. - revenue_earned : float - Revenue earned at the node in the period. - total_cost_incurred : float - Total cost (less revenue) incurred at the node in the period. - demand_met_from_stock : float - ``demand_met_from_stock[prod]`` = demand for product ``prod`` met from stock at the node in the period. - If node is single-product, ``prod=None``. - demand_met_from_stock_cumul : float - ``demand_met_from_stock_cumul[prod]`` = cumulative demand for product ``prod`` met from stock from - period 0 through the current period. If node is single-product, ``prod=None``. - (Used for ``fill_rate`` calculation.) - fill_rate : float - ``fill_rate[prod]`` = cumulative fill rate for product ``prod`` in periods 0, ..., period. - If node is single product, ``prod=None``. - order_quantity : dict - ``order_quantity[p][prod]`` = order quantity for product ``prod`` placed by the node to - predecessor ``p`` in period. If ``p`` is ``None``, refers to external supplier. - order_quantity_fg : dict - ``order_quantity_fg[prod]`` = finished-goods order quantity for product ``prod`` at the - node in period. - """ - - def __init__(self, node=None, period=None): - """NodeStateVars constructor method. - - If ``node`` is provided, the state variable dicts (``inbound_shipment``, - ``inbound_order``, etc.) are initialized with the appropriate keys. - Otherwise, they are set to empty dicts and must be initialized before - using. - - Parameters - ---------- - node : |class_node|, optional - The node to which these state variables refer. - period : int, optional - The period to which these state variables refer. - """ - # --- Node --- # - self.node = node - self.period = period - - # --- Primary State Variables --- # - # These are set explicitly during the simulation. - - if node: - - # Build some shortcuts. - p_indices = {p: p.index if p is not None else None for p in self.node.predecessors(include_external=True)} - s_indices = {s: s.index if s is not None else None for s in self.node.successors(include_external=True)} - rm_indices = {p: (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]) \ - for p in self.node.predecessors(include_external=True)} - - # Initialize dicts with appropriate keys. (inbound_shipment_pipeline gets - # order_lead_time+shipment_lead_time slots for orders to external supplier) - self.inventory_level = {prod_index: 0 for prod_index in self.node.product_indices} - self.inbound_shipment_pipeline = {} - for p_index in self.node.predecessor_indices(include_external=True): - self.inbound_shipment_pipeline[p_index] = {} - for rm_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True): - # Find a product at this node that uses raw material rm_index from predecessor p_index, - # and use its lead times. If there is more than one such product, use the last one found. - # This is a little klugey. # TODO: improve? should LTs be an attribute of the RM, not the product? - for prod_index in self.node.product_indices: - if rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) and \ - p_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): - # Get lead times for this product. - order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) - shipment_lead_time = (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) - self.inbound_shipment_pipeline[p_index][rm_index] = [0] * (order_lead_time + shipment_lead_time + 1) - # self.inbound_shipment_pipeline = {p_indices[p]: - # {prod_index: - # [0] * ((self.node.get_attribute('order_lead_time', product=prod_index) or 0) + - # (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) + 1) - # for prod_index in rm_indices[p]} - # for p in self.node.predecessors(include_external=True)} - self.inbound_shipment = {p_indices[p]: - {prod_index: 0 for prod_index in rm_indices[p]} - for p in self.node.predecessors(include_external=True)} - self.inbound_order_pipeline = {} - for s_index in self.node.successor_indices(include_external=False): - self.inbound_order_pipeline[s_index] = {} - for prod_index in self.node.product_indices: - order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) - self.inbound_order_pipeline[s_index][prod_index] = [0] * (order_lead_time + 1) - - # Add external customer to inbound_order_pipeline. (Must be done - # separately since external customer does not have its own node, - # or its own order lead time.) - if node.demand_source is not None and node.demand_source.type is not None: - self.inbound_order_pipeline[None] = {prod_index: [0] for prod_index in node.product_indices} - self.inbound_order = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.outbound_shipment = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.on_order_by_predecessor = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} - for p in self.node.predecessors(include_external=True)} - self.backorders_by_successor = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} - for s in self.node.successors(include_external=True)} - self.outbound_disrupted_items = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} - for s in self.node.successors(include_external=True)} - self.inbound_disrupted_items = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} - for p in self.node.predecessors(include_external=True)} - self.order_quantity = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} - for p in self.node.predecessors(include_external=True)} - self.raw_material_inventory = {prod_index: 0 for prod_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True)} - self.order_quantity_fg = {prod_index: 0 for prod_index in self.node.product_indices} - self.pending_finished_goods = {prod_index: 0 for prod_index in self.node.product_indices} - - # Fill rate quantities. - self.demand_cumul = {prod_index: 0 for prod_index in self.node.product_indices} - self.demand_met_from_stock = {prod_index: 0 for prod_index in self.node.product_indices} - self.demand_met_from_stock_cumul = {prod_index: 0 for prod_index in self.node.product_indices} - self.fill_rate = {prod_index: 0 for prod_index in self.node.product_indices} - - else: - - # Initialize dicts to empty dicts. - self.inbound_shipment_pipeline = {} - self.inbound_shipment = {} - self.inbound_order_pipeline = {} - self.inbound_order = {} - self.outbound_shipment = {} - self.on_order_by_predecessor = {} - self.backorders_by_successor = {} - self.outbound_disrupted_items = {} - self.inbound_disrupted_items = {} - self.order_quantity = {} - self.raw_material_inventory = {} - self.order_quantity_fg = {} - self.pending_finished_goods = {} - - # Remaining state variables. - self.disrupted = False - - # Costs: each refers to a component of the cost (or the total cost) - # incurred at the node in the period. - self.holding_cost_incurred = 0 - self.stockout_cost_incurred = 0 - self.in_transit_holding_cost_incurred = 0 - self.revenue_earned = 0 - self.total_cost_incurred = 0 - - # --- Special Methods --- # - - def __eq__(self, other): - """Determine whether ``other`` is equal to the state variables object. Two objects are - considered equal if they are deeply-equal to each other. - - Parameters - ---------- - other : |class_state_vars| - The state variables object to compare to. - - Returns - ------- - bool - True if the state variables objects are equal, False otherwise. - - """ - return self.deep_equal_to(other) - - def __ne__(self, other): - """Determine whether ``other`` is not equal to the state variables object. Two objects are - considered equal if they are deeply-equal to each other. - - Parameters - ---------- - other : |class_state_vars| - The state variables object to compare to. - - Returns - ------- - bool - True if the state variables objects are not equal, False otherwise. - - """ - return not self.__eq__(other) - - # --- Calculated State Variables --- # - # These are calculated based on the primary state variables. - - @property - def on_hand(self): - """Current on-hand inventory at node. If node is single-product, returns the on-hand inventory as a singleton. - If node is multi-product, returns dict whose - keys are product indices and whose values are the corresponding on-hand inventory levels. Read only. - """ - if self.node.is_multiproduct: - return {prod_index: max(0, self.inventory_level[prod_index]) for prod_index in self.node.product_indices} - else: - return max(0, self.inventory_level[self.node._dummy_product.index]) - - @property - def backorders(self): - """Current number of backorders. Should always equal sum over all successors ``s`` - of ``backorders_by_successor[s]`` + ``outbound_disrupted_items[s]``. If node is single-product, - returns the backorders as a singleton. If node is - multi-product, returns dict whose keys are product indices and whose values are the - corresponding numbers of backorders. Read only. - """ - if self.node.is_multiproduct: - return {prod_index: max(0, -self.inventory_level[prod_index]) for prod_index in self.node.product_indices} - else: - return max(0, -self.inventory_level[self.node._dummy_product.index]) - - def in_transit_to(self, successor, prod_index=None): - """Return current total inventory of product ``prod_index`` in transit to a given successor. - Includes items that will be/have been delivered during the current period. - - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. - - Parameters - ---------- - successor : |class_node| - The successor node. - prod_index : int, optional - The outbound product index, or ``None`` if ``successor`` is single-product. - - Returns - ------- - float - The current inventory in transit to the successor. - """ - # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - - # Determine product index. - prod_index = prod_index or self.node._dummy_product.index - - return np.sum([successor.state_vars[self.period].inbound_shipment_pipeline[self.node.index][prod_index][:]]) - - def in_transit_from(self, predecessor=None, prod_index=None): - """Return current total inventory of product ``prod_index`` in transit from a given predecessor. - Includes items that will be/have been delivered during the current period. - - Set ``predecessor`` to ``None`` if the predecessor is the external supplier. - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. - - Parameters - ---------- - predecessor : |class_node| - The predecessor node. - prod_index : int, optional - The inbound product index, or ``None`` if ``predecessor`` is single-product or external supplier. - - Returns - ------- - float - The current inventory in transit from the predecessor. - """ - # Get predecessor index. Also get prod_index if it's None. - if predecessor is None: - p_ind = None - if prod_index is None: - prod_index = self.node._external_supplier_dummy_product.index - else: - p_ind = predecessor.index - if prod_index is None: - prod_index = predecessor.products[0].index - - # Validate parameters. - if prod_index is not None and prod_index not in self.inbound_shipment_pipeline[p_ind].keys(): - raise ValueError(f'{prod_index} is not a product at node {p_ind}.') - - return np.sum(self.inbound_shipment_pipeline[p_ind][prod_index][:]) - - def in_transit(self, prod_index=None): - """Current inventory of raw materials for product ``prod_index`` that is in transit to the node. Read only. - - In-transit items are counted using the "units" of the node (or node-product pair) itself. - That is, each in-transit quantity is divided by the number of units of the inbound item - required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then - the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). - - For example, if the bill of materials specifies that to make one unit at the node requires - 2 units from predecessor node A and 6 units from predecessor node B, and if there are - 10 in-transit units from A and 18 from B, then ``in_transit`` equals - - .. math:: - - \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 - - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. - - If the node has multiple products that use the same raw material, this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. - - To get the number of units in transit by predecessor and/or product, use :func:`in_transit_from`. - - **Note:** This was a property prior to version [VERSION] and is now a function. - - Parameters - ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. - - Returns - ------- - float - The current inventory in transit from predecessors. - """ - # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] - - total_in_transit = np.sum([ - self.in_transit_from(p, rm_index) - * self.node.NBOM(product=prod_index, predecessor=p.index if p is not None else None, raw_material=rm_index) - for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) - for p in self.node.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=True) - ]) - - if total_in_transit == 0: - return 0 - else: - return total_in_transit / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) - - def on_order(self, prod_index=None): - """Current inventory of raw materials for product ``prod_index`` that is on order to the node. Read only. - - On-order items are counted using the "units" of the node (or node-product pair) itself. - That is, each on-order quantity is divided by the number of units of the inbound item - required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then - the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). - - For example, if the bill of materials specifies that to make one unit at the node requires - 2 units from predecessor node A and 6 units from predecessor node B, and if there are - 10 on-order units from A and 18 from B, then ``on_order`` equals - - .. math:: - - \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 - - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. - - If the node has multiple products that use the same raw material, this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. - - **Note:** This was a property prior to version [VERSION] and is now a function. - - Parameters - ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. - - Returns - ------- - float - The current inventory on order from predecessors. - """ - # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] - - total_on_order = np.sum([ - self.on_order_by_predecessor[p][rm_index] - / self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) - for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) - for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) - ]) - - if total_on_order == 0: - return 0 - else: - return total_on_order / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) - - def raw_material_aggregate(self, prod_index=None): - """Current raw materials for product ``prod_index`` that are in raw-material inventory at the node. Read only. - - Raw materials are counted using the "units" of the node (or node-product pair) itself. - That is, each raw material quantity is divided by the number of units of the raw material - required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then - the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). - - For example, if the bill of materials specifies that to make one unit at the node requires - 2 units from predecessor node A and 6 units from predecessor node B, and if there are - 10 node-A units and 18 node-B units in raw material inventory at the node, then ``raw_material_aggregate`` equals - - .. math:: - - \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 - - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. - - If the node has multiple products that use the same raw material, this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. - - **Note:** This was a property prior to version [VERSION] and is now a function. - - Parameters - ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. - - Returns - ------- - float - The current raw material inventory. - """ - # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] - prod = self.node.products_by_index[prod_index] - - total_raw_material = 0 - for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True): - BOM = prod.BOM(rm_index) - if BOM == 0: - # rm_index has no BOM relationship, so it is only in the network BOM; therefore, - # its BOM number is 1. - BOM = 1 - - total_raw_material += self.raw_material_inventory[rm_index] * BOM - - if total_raw_material == 0: - return 0 - else: - return total_raw_material / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) - - def inbound_disrupted_items_aggregate(self, prod_index=None): - """Current total inbound disrupted inventory of raw materials for product ``prod_index``. Read only. - - Inbound items are counted using the "units" of the node (or node-product pair) itself. - That is, each inbound quantity is divided by the number of units of the inbound item - required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then - the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). - - For example, if the bill of materials specifies that to make one unit at the node requires - 2 units from predecessor node A and 6 units from predecessor node B, and if there are - 10 inbound disrupted units from A and 18 from B, then ``inbound_disrupted_items_aggregate`` equals - - .. math:: - - \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 - - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. - - If the node has multiple products that use the same raw material, this function includes all disrupted units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. - - **Note:** This was a property prior to version [VERSION] and is now a function. - - Parameters - ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. - - Returns - ------- - float - The current disrupted inventory from predecessors. - """ - # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] - - total_disrupted_items = np.sum([ - self.inbound_disrupted_items[p][rm_index] - * self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) - for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) - for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) - ]) - - if total_disrupted_items == 0: - return 0 - else: - return total_disrupted_items / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) - - - def inventory_position(self, prod_index=None, exclude_earmarked_units=False): - """Current (local) inventory position at node for product with index ``prod_index``. - Equals inventory level plus pipeline inventory. (Pipeline inventory equals on-order inventory of the raw material, - raw material inventory that has not yet been processed, and inbound disrupted items of the - raw material due to type-RP disruptions). Inventory position is expressed in the units of the product - (not the raw materials). - - If the product uses multiple raw materials, the pipeline inventory is the maximum number - of units of the product that can be produced, given the quantities of raw materials in the pipeline. - For example, suppose product A requires 10 units of product B and 5 units of product C; there are - 4 units of product A on hand; and there are 20 units of product B and 15 units of product C in the pipeline. - The the inventory level is 4, and the pipeline inventory contains enough raw materials to make 2 units - of product A. So, the inventory position is 6. - - If ``exclude_earmarked_units`` is ``True``, raw materials that are already "earmarked" for a different - product at this node are excluded from the pipeline inventory. In particular, the pipeline of a given - raw material is reduced by the sum, over all _other_ products at the node, of the number of units - of that product that are pending times the NBOM for that product/raw material. - - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. If the node is multi-product, ``prod_index`` must be - set to the index of a single product at the node. - - If the node has multiple products that use the same raw material, the inventory position returned by this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. - - Parameters - ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. - - Returns - ------- - float - The inventory position. - """ - - # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] - - # Determine total units of each RM in the pipeline, converted to units of the downstream product. - pipeline = {} - for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True): - # Calculate pipeline, in upstream units. - pipeline[rm_index] = self.raw_material_inventory[rm_index] - for pred_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): - pipeline[rm_index] += (self.on_order_by_predecessor[pred_index][rm_index] \ - + self.inbound_disrupted_items[pred_index][rm_index]) - - # Subtract earmarked units, if requested. - if exclude_earmarked_units: - for other_prod_index in self.node.product_indices: - if other_prod_index != prod_index: - # Calculate number of earmarked units. - earmarked_units = self.node.state_vars_current.pending_finished_goods[other_prod_index] \ - * self.node.NBOM(product=other_prod_index, predecessor=None, raw_material=rm_index) - # Subtract earmarked units from pipeline. - pipeline[rm_index] = max(0, pipeline[rm_index] - earmarked_units) - - # Convert to downstream units. - pipeline[rm_index] /= self.node.NBOM(product=prod_index, predecessor=None, raw_material=rm_index) - - # Determine number of units of FG that can be made from pipeline inventory. - units_from_pipeline = min(pipeline.values()) - - return self.inventory_level[prod_index] + units_from_pipeline - - @property - def echelon_on_hand_inventory(self): - """Current echelon on-hand inventory at node. Equals on-hand inventory at node - and at or in transit to all of its downstream nodes. If node is single-product, - returns the echelon on-hand inventory as a singleton. If node is multi-product, returns dict - whose keys are product indices and whose values are the corresponding echelon on-hand inventory levels. Read only. - """ - EOHI = self.on_hand - - if self.node.is_singleproduct: - for d in self.node.descendants: - # Add on-hand inventory at descendant. - EOHI += d.state_vars[self.period].on_hand - # Add in-transit quantity from predecessors that are descendents - # of self (or equal to self). - for p in d.predecessors(): - if p.index == self.node.index or p in self.node.descendants: - EOHI += d.state_vars[self.period].in_transit_from(predecessor=p, prod_index=None) - else: - for d in self.node.descendants: - # Add on-hand inventory at descendant. - on_hand = d.state_vars[self.period].on_hand - for prod_index in self.node.product_indices: - EOHI[prod_index] += on_hand[prod_index] - # Add in-transit quantity from predecessors that are descendants - # of self (or equal to self). - for p in d.predecessors(): - if p.index == self.node.index or p in self.node.descendants: - EOHI[prod_index] += d.state_vars[self.period].in_transit_from(predecessor=p, prod_index=prod_index) - - return EOHI - - @property - def echelon_inventory_level(self): - """Current echelon inventory level at node. Equals echelon on-hand inventory - minus backorders at terminal node(s) downstream from node. If node is single-product, - returns the echelon inventory level as a singleton. If node is multi-product, returns dict - whose keys are product indices and whose values are the corresponding echelon inventory levels. Read only. - """ - EIL = self.echelon_on_hand_inventory - - if self.node.is_singleproduct: - for d in self.node.descendants + [self.node]: - if d in self.node.network.sink_nodes: - EIL -= d.state_vars[self.period].backorders - else: - for d in self.node.descendants + [self.node]: - backorders = d.state_vars[self.periods].backorders - for prod_index in self.node.product_indices: - if d in self.node.network.sink_nodes: - EIL[prod_index] -= backorders[prod_index] - - return EIL - - def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm_index=None): - """Current echelon inventory position at node for product with index ``prod_index``. - Equals echelon inventory level plus - on order items. - - On-order includes raw material inventory that has not yet been processed, as well as - inbound disrupted items due to type-RP disruptions. - - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. If the node is multi-product, ``prod_index`` must be - set to the index of a single product at the node. - - If the node has a single predecessor, which provides a single raw material, either set ``predecessor_index`` - and ``rm_index`` to the appropriate indicies, or to ``None`` and the function will determine the indices - automatically. - If the node has multiple predecessors and/or raw materials, either set ``predecessor_index`` and ``rm_index`` - to the indices of a single predecessor and raw material (to get the raw-material-specific inventory position) - or set both to ``None`` to use the aggregate on-order and raw material inventory for all predecessors and - raw materials (counting such items using the "units" of the node itself; see documentation for :func:`on_order` for more details). - ``predecessor_index`` and ``rm_index`` must both either be ``None`` or not ``None``. - - If the node has multiple products that use the same raw material, this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. - - Parameters - ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. - predecessor_index : int, optional - Predecessor to consider in inventory position calculation (including all others), or ``None`` to - include all predecessors. - rm_index : int, optional - Raw material to consider in inventory position calculation (excluding all others), - or ``None`` to include all raw materials. - - Returns - ------- - float - The echelon inventory position. - - Raises - ------ - ValueError - If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. - """ - # Validate parameters. # TODO: figure out what's going on here - # if predecessor_index is None and rm_index is not None: - # raise ValueError('If predecessor_index is None, then rm_index must also be None.') - # if predecessor_index is not None and rm_index is None: - # raise ValueError('If rm_index is None, then predecessor_index must also be None.') - - # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] - - # Calculate echelon inventory level. - if self.node.is_singleproduct: - EIL = self.echelon_inventory_level - else: - EIL = self.echelon_inventory_level[prod_index] - # Calculate on-order, raw material inventory, and inbound disrupted items. - if rm_index is not None: - OO = self.on_order_by_predecessor[predecessor_index][rm_index] - RMI = self.raw_material_inventory[rm_index] - IDI = self.inbound_disrupted_items[predecessor_index][rm_index] - else: - # Note: If <=1 predecessor, raw_material_inventory should always = 0 - # (because raw materials are processed right away). - OO = self.on_order(prod_index=prod_index) - RMI = self.raw_material_aggregate(prod_index=prod_index) - IDI = self.inbound_disrupted_items_aggregate(prod_index=prod_index) - - return EIL + OO + RMI + IDI - - - def _echelon_inventory_position_adjusted(self): - # TODO: not updated for multi-product - """Calculate the adjusted echelon inventory position. Equals the current echelon inventory position - including only items ordered :math:`L_i` periods ago or earlier, where :math:`L_i` is the - forward echelon lead time for the node. That is, equals current echelon inventory level - plus items ordered :math:`L_i` periods ago or earlier. - - Rosling (1989) calls this :math:`X^L_{it}`; Zipkin (2000) calls it :math:`IN^+_j(t)`. - - Assumes there are no order lead times. - - This quantity is used (only?) for balanced echelon base-stock policies. - Nodes are assumed to be indexed consecutively in non-decreasing order of - forward echelon lead time. - - Note: Balanced echelon base-stock policy assumes a node never orders - more than its predecessor can ship; therefore, # of items shipped in a - given interval is the same as # of items ordered. In addition, there - are no raw-material inventories. - - Returns - ------- - float - The adjusted echelon inventory position. - """ - # Calculate portion of in-transit inventory that was ordered L_i periods - # ago or earlier. - # Since order quantity to all predecessors is the same, choose one arbitrarily - # and get order quantities for that predecessor. - in_transit_adjusted = 0 - pred = self.node.get_one_predecessor() - if pred is None: - pred_index = None - rm_index = self.node._external_supplier_dummy_product.index - else: - pred_index = pred.index - rm_index = pred.product_indices[0] - for t in range(self.node.equivalent_lead_time, self.node.shipment_lead_time): - if self.node.network.period - t >= 0: - in_transit_adjusted += self.node.state_vars[self.node.network.period - t].order_quantity[pred_index][rm_index] - # np.sum([self.node.state_vars[self.node.network.period-t].order_quantity[predecessor_index] - # for t in range(self.node.equivalent_lead_time, self.node.shipment_lead_time)]) - # Calculate adjusted echelon inventory position. - return self.echelon_inventory_level + in_transit_adjusted - - # --- Conversion to/from Dicts --- # - - def to_dict(self): - """Convert the |class_state_vars| object to a dict. List and dict attributes - are deep-copied so changes to the original object do not get propagated to the dict. - The ``node`` attribute is set to the index of the node (if any), rather than to the object. - - Returns - ------- - dict - The dict representation of the object. - """ - # Initialize dict. - sv_dict = {} - - # Attributes. - sv_dict['node'] = self.node.index - sv_dict['period'] = self.period - sv_dict['inbound_shipment_pipeline'] = copy.deepcopy(self.inbound_shipment_pipeline) - sv_dict['inbound_shipment'] = copy.deepcopy(self.inbound_shipment) - sv_dict['inbound_order_pipeline'] = copy.deepcopy(self.inbound_order_pipeline) - sv_dict['inbound_order'] = copy.deepcopy(self.inbound_order) - sv_dict['outbound_shipment'] = copy.deepcopy(self.outbound_shipment) - sv_dict['on_order_by_predecessor'] = copy.deepcopy(self.on_order_by_predecessor) - sv_dict['backorders_by_successor'] = copy.deepcopy(self.backorders_by_successor) - sv_dict['outbound_disrupted_items'] = copy.deepcopy(self.outbound_disrupted_items) - sv_dict['inbound_disrupted_items'] = copy.deepcopy(self.inbound_disrupted_items) - sv_dict['order_quantity'] = copy.deepcopy(self.order_quantity) - sv_dict['order_quantity_fg'] = copy.deepcopy(self.order_quantity_fg) - sv_dict['raw_material_inventory'] = copy.deepcopy(self.raw_material_inventory) - sv_dict['pending_finished_goods'] = copy.deepcopy(self.pending_finished_goods) - sv_dict['inventory_level'] = self.inventory_level - sv_dict['disrupted'] = self.disrupted - sv_dict['holding_cost_incurred'] = self.holding_cost_incurred - sv_dict['stockout_cost_incurred'] = self.stockout_cost_incurred - sv_dict['in_transit_holding_cost_incurred'] = self.in_transit_holding_cost_incurred - sv_dict['revenue_earned'] = self.revenue_earned - sv_dict['total_cost_incurred'] = self.total_cost_incurred - sv_dict['demand_cumul'] = self.demand_cumul - sv_dict['demand_met_from_stock'] = self.demand_met_from_stock - sv_dict['demand_met_from_stock_cumul'] = self.demand_met_from_stock_cumul - sv_dict['fill_rate'] = self.fill_rate - - return sv_dict - - @classmethod - def from_dict(cls, the_dict): - """Return a new |class_state_vars| object with attributes copied from the - values in ``the_dict``. List and dict attributes - are deep-copied so changes to the original dict do not get propagated to the object. - - The ``node`` attribute is set to the index of the node, - like it is in the dict, but should be converted to a node object if this - function is called recursively from a |class_node|'s ``from_dict()`` method. - - Parameters - ---------- - the_dict : dict - Dict representation of a |class_state_vars|, typically created using ``to_dict()``. - - Returns - ------- - NodeStateVars - The object converted from the dict. - """ - if the_dict is None: - nsv = None - else: - nsv = NodeStateVars() - - nsv.node = the_dict['node'] - nsv.period = the_dict['period'] - nsv.inbound_shipment_pipeline = copy.deepcopy(the_dict['inbound_shipment_pipeline']) - nsv.inbound_shipment = copy.deepcopy(the_dict['inbound_shipment']) - nsv.inbound_order_pipeline = copy.deepcopy(the_dict['inbound_order_pipeline']) - nsv.inbound_order = copy.deepcopy(the_dict['inbound_order']) - nsv.outbound_shipment = copy.deepcopy(the_dict['outbound_shipment']) - nsv.on_order_by_predecessor = copy.deepcopy(the_dict['on_order_by_predecessor']) - nsv.backorders_by_successor = copy.deepcopy(the_dict['backorders_by_successor']) - nsv.outbound_disrupted_items = copy.deepcopy(the_dict['outbound_disrupted_items']) - nsv.inbound_disrupted_items = copy.deepcopy(the_dict['inbound_disrupted_items']) - nsv.order_quantity = copy.deepcopy(the_dict['order_quantity']) - nsv.order_quantity_fg = copy.deepcopy(the_dict['order_quantity_fg']) - nsv.raw_material_inventory = copy.deepcopy(the_dict['raw_material_inventory']) - nsv.pending_finished_goods = copy.deepcopy(the_dict['pending_finished_goods']) - nsv.inventory_level = the_dict['inventory_level'] - nsv.disrupted = the_dict['disrupted'] - nsv.holding_cost_incurred = the_dict['holding_cost_incurred'] - nsv.stockout_cost_incurred = the_dict['stockout_cost_incurred'] - nsv.in_transit_holding_cost_incurred = the_dict['in_transit_holding_cost_incurred'] - nsv.revenue_earned = the_dict['revenue_earned'] - nsv.total_cost_incurred = the_dict['total_cost_incurred'] - nsv.demand_cumul = the_dict['demand_cumul'] - nsv.demand_met_from_stock = the_dict['demand_met_from_stock'] - nsv.demand_met_from_stock_cumul = the_dict['demand_met_from_stock_cumul'] - nsv.fill_rate = the_dict['fill_rate'] - - return nsv - - # --- Utility Functions --- # - - def reindex_state_variables(self, old_to_new_dict, old_to_new_prod_dict): - """Change indices of node-based state variable dict keys using ``old_to_new_dict`` - and indices of product-based state variable dict keys using ``old_to_new_prod_dict``. - - Parameters - ---------- - old_to_new_dict : dict - Dict in which keys are old node indices and values are new node indices. - old_to_new_prod_dict : dict - Dict in which keys are old product indices and values are new product indices. - - """ - # State variables indexed by product only. - for prod in self.node.products: - change_dict_key(self.demand_cumul, prod.index, old_to_new_prod_dict[prod.index]) - change_dict_key(self.inventory_level, prod.index, old_to_new_prod_dict[prod.index]) - change_dict_key(self.demand_met_from_stock, prod.index, old_to_new_prod_dict[prod.index]) - change_dict_key(self.demand_met_from_stock_cumul, prod.index, old_to_new_prod_dict[prod.index]) - change_dict_key(self.fill_rate, prod.index, old_to_new_prod_dict[prod.index]) - old_rm_indices = list(self.raw_material_inventory.keys()) - for rm_index in old_rm_indices: - change_dict_key(self.raw_material_inventory, rm_index, old_to_new_prod_dict[rm_index]) - change_dict_key(self.order_quantity_fg, prod.index, old_to_new_prod_dict[prod.index]) - change_dict_key(self.pending_finished_goods, prod.index, old_to_new_prod_dict[prod.index]) - - # State variables indexed by predecessor. - for p in self.node.predecessors(include_external=True): - p_index = p.index if p is not None else None - rm_indices = p.product_indices if p is not None else [self.node._external_supplier_dummy_product.index] - # Change rm index (inner level of nested dict). - for rm_index in rm_indices: - change_dict_key(self.inbound_shipment_pipeline[p_index], rm_index, old_to_new_prod_dict[rm_index]) - change_dict_key(self.inbound_shipment[p_index], rm_index, old_to_new_prod_dict[rm_index]) - change_dict_key(self.on_order_by_predecessor[p_index], rm_index, old_to_new_prod_dict[rm_index]) - change_dict_key(self.order_quantity[p_index], rm_index, old_to_new_prod_dict[rm_index]) - change_dict_key(self.inbound_disrupted_items[p_index], rm_index, old_to_new_prod_dict[rm_index]) - # Change predecessor index (outer level of nested dict). - if p is not None: - # We don't need to change the node index for external supplier (only the rm index). - change_dict_key(self.inbound_shipment_pipeline, p_index, old_to_new_dict[p_index]) - change_dict_key(self.inbound_shipment, p_index, old_to_new_dict[p_index]) - change_dict_key(self.on_order_by_predecessor, p_index, old_to_new_dict[p_index]) - change_dict_key(self.order_quantity, p_index, old_to_new_dict[p_index]) - change_dict_key(self.inbound_disrupted_items, p_index, old_to_new_dict[p_index]) - - # State variables indexed by successor. - for s in self.node.successors(include_external=False): - # Change prod index (inner level of nested dict). - for prod_index in self.node.product_indices: - change_dict_key(self.inbound_order_pipeline[s.index], prod_index, old_to_new_prod_dict[prod_index]) - change_dict_key(self.inbound_order[s.index], prod_index, old_to_new_prod_dict[prod_index]) - change_dict_key(self.outbound_shipment[s.index], prod_index, old_to_new_prod_dict[prod_index]) - change_dict_key(self.backorders_by_successor[s.index], prod_index, old_to_new_prod_dict[prod_index]) - change_dict_key(self.outbound_disrupted_items[s.index], prod_index, old_to_new_prod_dict[prod_index]) - # Change successor index (outer level of nested dict). - change_dict_key(self.inbound_order_pipeline, s.index, old_to_new_dict[s.index]) - change_dict_key(self.inbound_order, s.index, old_to_new_dict[s.index]) - change_dict_key(self.outbound_shipment, s.index, old_to_new_dict[s.index]) - change_dict_key(self.backorders_by_successor, s.index, old_to_new_dict[s.index]) - change_dict_key(self.outbound_disrupted_items, s.index, old_to_new_dict[s.index]) - - def deep_equal_to(self, other, rel_tol=1e-8): - """Check whether object "deeply equals" ``other``, i.e., if all attributes are - equal, including attributes that are lists or dicts. - - Note the following caveats: - - * Checks the equality of ``node.index`` but not the entire ``node`` object. - - Parameters - ---------- - other : |class_state_vars| - The state variables to compare this one to. - rel_tol : float, optional - Relative tolerance to use when comparing equality of float attributes. - - Returns - ------- - bool - ``True`` if the two state variables objects are equal, ``False`` otherwise. - """ - - if (self.node is not None and other.node is None) or ( - self.node is None and other.node is not None): return False - if self.node is not None and other.node is not None: - if is_integer(self.node) and is_integer(other.node): - if self.node != other.node: return False - elif not is_integer(self.node) and not is_integer(other.node): - if self.node.index != other.node.index: return False - else: - return False - if self.period != other.period: return False - if self.inbound_shipment_pipeline != other.inbound_shipment_pipeline: return False - if self.inbound_shipment != other.inbound_shipment: return False - if self.inbound_order_pipeline != other.inbound_order_pipeline: return False - if self.inbound_order != other.inbound_order: return False - if self.outbound_shipment != other.outbound_shipment: return False - if self.on_order_by_predecessor != other.on_order_by_predecessor: return False - if self.backorders_by_successor != other.backorders_by_successor: return False - if self.outbound_disrupted_items != other.outbound_disrupted_items: return False - if self.inbound_disrupted_items != other.inbound_disrupted_items: return False - if self.order_quantity != other.order_quantity: return False - if self.order_quantity_fg != other.order_quantity_fg: return False - if self.raw_material_inventory != other.raw_material_inventory: return False - if self.pending_finished_goods != other.pending_finished_goods: return False - if self.inventory_level != other.inventory_level: return False - if self.disrupted != other.disrupted: return False - if self.holding_cost_incurred != other.holding_cost_incurred: return False - if self.stockout_cost_incurred != other.stockout_cost_incurred: return False - if self.in_transit_holding_cost_incurred != other.in_transit_holding_cost_incurred: return False - if self.revenue_earned != other.revenue_earned: return False - if self.total_cost_incurred != other.total_cost_incurred: return False - if self.demand_cumul != other.demand_cumul: return False - if self.demand_met_from_stock != other.demand_met_from_stock: return False - if self.demand_met_from_stock_cumul != other.demand_met_from_stock_cumul: return False - if self.fill_rate != other.fill_rate: return False - - return True - diff --git a/tests/test_node_state_vars.py b/tests/test_node_state_vars.py new file mode 100644 index 0000000..cf46832 --- /dev/null +++ b/tests/test_node_state_vars.py @@ -0,0 +1,598 @@ +import unittest + +# import numpy as np +# from scipy.stats import norm +# from scipy.stats import poisson +# from scipy.stats import lognorm + +#from supply_chain_node import * +from stockpyl.supply_chain_network import * +from stockpyl.supply_chain_product import * +from stockpyl.demand_source import DemandSource +from stockpyl.policy import Policy +from stockpyl.instances import * +from stockpyl.sim import * + +from stockpyl.supply_chain_node import _INDEX_BUMP + +# Module-level functions. + +def print_status(class_name, function_name): + """Print status message.""" + print("module : test_supply_chain_node class : {:30s} function : {:30s}".format(class_name, function_name)) + + +def set_up_module(): + """Called once, before anything else in this module.""" + print_status('---', 'set_up_module()') + + +def tear_down_module(): + """Called once, after everything else in this module.""" + print_status('---', 'tear_down_module()') + + +class TestStateVariables(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestStateVariables', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestStateVariables', 'tear_down_class()') + + def test_example_6_1_per_22(self): + """Test state variables for simulation of 3-node serial system in + Example 6.1 at end of period 22. + """ + print_status('TestStateVariables', 'test_example_6_1_per_22()') + + network = load_instance("example_6_1") + + # Set initial inventory levels to local BS levels. + for n in network.nodes: + n.initial_inventory_level = n.inventory_policy.base_stock_level + + # Strategy for these tests: run sim for a few periods, test state + # variables. + simulation(network, 23, rand_seed=17, progress_bar=False) + + nodes = {i: network.get_node_from_index(i) for i in range(1, 4)} + dps = {n.index: n._dummy_product.index for n in network.nodes} + + self.assertAlmostEqual(nodes[1].state_vars[22].inventory_level[dps[1]], 0.497397132, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].inventory_level[dps[2]], 0.038666224, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].inventory_level[dps[3]], -0.832602868, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].on_hand, 0.497397132, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].on_hand, 0.038666224, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].on_hand, 0, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].backorders, 0, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].backorders, 0, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].backorders, 0.832602868, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].in_transit_to(nodes[1]), 5.992602868, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].in_transit_to(nodes[2]), 4.658730908, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].in_transit_from(nodes[2]), 5.992602868, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].in_transit_from(nodes[3]), 4.658730908, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].in_transit_from(None), 6.031269092479092+5.491333775514212, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].in_transit(), 5.992602868, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].in_transit(), 4.658730908, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].in_transit(), 6.031269092479092+5.491333775514212, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].on_order(), 5.992602868, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].on_order(), 5.491333776, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].on_order(), 6.031269092479092+5.491333775514212, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].raw_material_aggregate(), 0, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].raw_material_aggregate(), 0, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].raw_material_aggregate(), 0, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].inventory_position(), 6.49, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].inventory_position(), 5.53, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].inventory_position(), 10.69, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].echelon_on_hand_inventory, 0.497397132, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].echelon_on_hand_inventory, 0.497397132+5.992602868+0.038666224, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].echelon_on_hand_inventory, 0.497397132+5.992602868+0.038666224+4.658730908, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].echelon_inventory_level, 0.497397132, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].echelon_inventory_level, 0.497397132+5.992602868+0.038666224, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].echelon_inventory_level, 0.497397132+5.992602868+0.038666224+4.658730908, places=6) + self.assertAlmostEqual(nodes[1].state_vars[22].echelon_inventory_position(), 0.497397132+5.992602868, places=6) + self.assertAlmostEqual(nodes[2].state_vars[22].echelon_inventory_position(), 0.497397132+5.992602868+0.038666224+5.491333776, places=6) + self.assertAlmostEqual(nodes[3].state_vars[22].echelon_inventory_position(), 0.497397132+5.992602868+0.038666224+4.658730908+6.031269092479092+5.491333775514212, places=6) + + def test_example_6_1_per_37(self): + """Test state variables for simulation of 3-node serial system in + Example 6.1 at end of period 37. + """ + print_status('TestStateVariables', 'test_example_6_1_per_37()') + + network = load_instance("example_6_1") + + # Set initial inventory levels to local BS levels. + for n in network.nodes: + n.initial_inventory_level = n.inventory_policy.base_stock_level + + # Strategy for these tests: run sim for a few periods, test state + # variables. + simulation(network, 38, rand_seed=17, progress_bar=False) + + # Shortcuts to correct values. + [IL1, IL2, IL3] = [-0.16089457,-0.682689274,-0.343065432] + [OH1, OH2, OH3] = np.maximum([IL1, IL2, IL3], 0) + [BO1, BO2, BO3] = np.maximum([-IL1, -IL2, -IL3], 0) + [IT1, IT2, IT3] = [5.968205296, 5.869623842, 5.567783088742498+5.465282343506053] + [OO1, OO2, OO3] = [6.65089457, 6.212689274, 11.03306543] + + nodes = {i: network.get_node_from_index(i) for i in range(1, 4)} + dps = {n.index: n._dummy_product.index for n in network.nodes} + + self.assertAlmostEqual(nodes[1].state_vars[37].inventory_level[dps[1]], IL1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].inventory_level[dps[2]], IL2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].inventory_level[dps[3]], IL3, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].on_hand, OH1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].on_hand, OH2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].on_hand, OH3, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].backorders, BO1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].backorders, BO2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].backorders, BO3, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].in_transit_to(nodes[1]), IT1, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].in_transit_to(nodes[2]), IT2, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].in_transit_from(nodes[2]), IT1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].in_transit_from(nodes[3]), IT2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].in_transit_from(None), IT3, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].in_transit(), IT1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].in_transit(), IT2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].in_transit(), IT3, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].on_order(), OO1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].on_order(), OO2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].on_order(), OO3, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].raw_material_aggregate(), 0, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].raw_material_aggregate(), 0, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].raw_material_aggregate(), 0, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].inventory_position(), IL1+OO1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].inventory_position(), IL2+OO2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].inventory_position(), IL3+OO3, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].echelon_on_hand_inventory, OH1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].echelon_on_hand_inventory, OH1+IT1+OH2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].echelon_on_hand_inventory, OH1+IT1+OH2+IT2+OH3, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].echelon_inventory_level, IL1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].echelon_inventory_level, OH1+IT1+OH2-BO1, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].echelon_inventory_level, OH1+IT1+OH2+IT2+OH3-BO1, places=6) + self.assertAlmostEqual(nodes[1].state_vars[37].echelon_inventory_position(), IL1+OO1, places=6) + self.assertAlmostEqual(nodes[2].state_vars[37].echelon_inventory_position(), OH1+IT1+OH2-BO1+OO2, places=6) + self.assertAlmostEqual(nodes[3].state_vars[37].echelon_inventory_position(), OH1+IT1+OH2+IT2+OH3-BO1+OO3, places=6) + + def test_assembly_3_stage_per_22(self): + """Test state variables for simulation of 3-node assembly system at end of period 22. + """ + print_status('TestStateVariables', 'test_assembly_3_stage_per_22()') + + network = load_instance("assembly_3_stage") + + # Set initial inventory levels to local BS levels. + for n in network.nodes: + n.initial_inventory_level = n.inventory_policy.base_stock_level + + # Strategy for these tests: run sim for a few periods, test state + # variables. + simulation(network, 23, rand_seed=17, progress_bar=False) + + # Shortcuts to correct values. + [IL0, IL1, IL2] = [2, 2, 0] + [OH0, OH1, OH2] = np.maximum([IL0, IL1, IL2], 0) + [BO0, BO1, BO2] = np.maximum([-IL0, -IL1, -IL2], 0) + [IT10, IT20, IT0, IT1, IT2] = [5, 5, 5, 11, 11] + [OO01, OO02, OO0, OO1, OO2] = [5, 5, 5, 11, 11] + [RM01, RM02, RM0, RM1, RM2] = [0, 0, 0, 0, 0] + + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + dps = {n.index: n._dummy_product.index for n in network.nodes} + + self.assertEqual(nodes[0].state_vars[22].inventory_level[dps[0]], IL0) + self.assertEqual(nodes[1].state_vars[22].inventory_level[dps[1]], IL1) + self.assertEqual(nodes[2].state_vars[22].inventory_level[dps[2]], IL2) + self.assertEqual(nodes[0].state_vars[22].on_hand, OH0) + self.assertEqual(nodes[1].state_vars[22].on_hand, OH1) + self.assertEqual(nodes[2].state_vars[22].on_hand, OH2) + self.assertEqual(nodes[0].state_vars[22].backorders, BO0) + self.assertEqual(nodes[1].state_vars[22].backorders, BO1) + self.assertEqual(nodes[2].state_vars[22].backorders, BO2) + self.assertEqual(nodes[1].state_vars[22].in_transit_to(nodes[0]), IT10) + self.assertEqual(nodes[2].state_vars[22].in_transit_to(nodes[0]), IT20) + self.assertEqual(nodes[0].state_vars[22].in_transit_from(nodes[1]), IT10) + self.assertEqual(nodes[0].state_vars[22].in_transit_from(nodes[2]), IT20) + self.assertEqual(nodes[1].state_vars[22].in_transit_from(None), IT1) + self.assertEqual(nodes[2].state_vars[22].in_transit_from(None), IT2) + self.assertEqual(nodes[0].state_vars[22].in_transit(), IT0) + self.assertEqual(nodes[1].state_vars[22].in_transit(), IT1) + self.assertEqual(nodes[2].state_vars[22].in_transit(), IT2) + self.assertEqual(nodes[0].state_vars[22].on_order_by_predecessor[1][dps[1]], OO01) + self.assertEqual(nodes[0].state_vars[22].on_order_by_predecessor[2][dps[2]], OO02) + self.assertEqual(nodes[0].state_vars[22].on_order(), OO0) + self.assertEqual(nodes[1].state_vars[22].on_order(), OO1) + self.assertEqual(nodes[2].state_vars[22].on_order(), OO2) + self.assertEqual(nodes[0].state_vars[22].raw_material_inventory[dps[1]], RM01) + self.assertEqual(nodes[0].state_vars[22].raw_material_inventory[dps[2]], RM02) + self.assertEqual(nodes[0].state_vars[22].raw_material_aggregate(), RM0) + self.assertEqual(nodes[1].state_vars[22].raw_material_aggregate(), RM1) + self.assertEqual(nodes[2].state_vars[22].raw_material_aggregate(), RM2) + # self.assertEqual(nodes[0].state_vars[22].inventory_position(predecessor_index=1), IL0+OO01+RM01) + # self.assertEqual(nodes[0].state_vars[22].inventory_position(predecessor_index=2), IL0+OO02+RM02) + self.assertEqual(nodes[0].state_vars[22].inventory_position(), IL0+OO0+RM0) + self.assertEqual(nodes[1].state_vars[22].inventory_position(), IL1+OO1+RM1) + self.assertEqual(nodes[2].state_vars[22].inventory_position(), IL2+OO2+RM2) + self.assertEqual(nodes[0].state_vars[22].echelon_on_hand_inventory, OH0) + self.assertEqual(nodes[1].state_vars[22].echelon_on_hand_inventory, OH0+IT10+OH1) + self.assertEqual(nodes[2].state_vars[22].echelon_on_hand_inventory, OH0+IT20+OH2) + self.assertEqual(nodes[0].state_vars[22].echelon_inventory_level, IL0) + self.assertEqual(nodes[1].state_vars[22].echelon_inventory_level, OH0+IT10+OH1-BO0) + self.assertEqual(nodes[2].state_vars[22].echelon_inventory_level, OH0+IT20+OH2-BO0) + self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(predecessor_index=1), IL0+OO01+RM01) + self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(predecessor_index=2), IL0+OO02+RM02) + self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(), IL0+OO0+RM0) + self.assertEqual(nodes[1].state_vars[22].echelon_inventory_position(), OH0+IT10+OH1-BO0+OO1+RM1) + self.assertEqual(nodes[2].state_vars[22].echelon_inventory_position(), OH0+IT20+OH2-BO0+OO2+RM2) + + def test_assembly_3_stage_per_43(self): + """Test state variables for simulation of 3-node assembly system at end of period 43. + """ + print_status('TestStateVariables', 'test_assembly_3_stage_per_43()') + + network = load_instance("assembly_3_stage") + + # Set initial inventory levels to local BS levels. + for n in network.nodes: + n.initial_inventory_level = n.inventory_policy.base_stock_level + + # Strategy for these tests: run sim for a few periods, test state + # variables. + simulation(network, 44, rand_seed=17, progress_bar=False) + + # Shortcuts to correct values. + per = 43 + [IL0, IL1, IL2] = [1, 4, 2] + [OH0, OH1, OH2] = np.maximum([IL0, IL1, IL2], 0) + [BO0, BO1, BO2] = np.maximum([-IL0, -IL1, -IL2], 0) + [IT01, IT02, IT0, IT1, IT2] = [4, 6, 5, 9, 9] + [OO01, OO02, OO0, OO1, OO2] = [4, 6, 5, 9, 9] + [RM01, RM02, RM0, RM1, RM2] = [2, 0, 1, 0, 0] + + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + dps = {n.index: n._dummy_product.index for n in network.nodes} + + self.assertEqual(nodes[0].state_vars[per].inventory_level[dps[0]], IL0) + self.assertEqual(nodes[1].state_vars[per].inventory_level[dps[1]], IL1) + self.assertEqual(nodes[2].state_vars[per].inventory_level[dps[2]], IL2) + self.assertEqual(nodes[0].state_vars[per].on_hand, OH0) + self.assertEqual(nodes[1].state_vars[per].on_hand, OH1) + self.assertEqual(nodes[2].state_vars[per].on_hand, OH2) + self.assertEqual(nodes[0].state_vars[per].backorders, BO0) + self.assertEqual(nodes[1].state_vars[per].backorders, BO1) + self.assertEqual(nodes[2].state_vars[per].backorders, BO2) + self.assertEqual(nodes[1].state_vars[per].in_transit_to(nodes[0]), IT01) + self.assertEqual(nodes[2].state_vars[per].in_transit_to(nodes[0]), IT02) + self.assertEqual(nodes[0].state_vars[per].in_transit_from(nodes[1]), IT01) + self.assertEqual(nodes[0].state_vars[per].in_transit_from(nodes[2]), IT02) + self.assertEqual(nodes[1].state_vars[per].in_transit_from(None), IT1) + self.assertEqual(nodes[2].state_vars[per].in_transit_from(None), IT2) + self.assertEqual(nodes[0].state_vars[per].in_transit(), IT0) + self.assertEqual(nodes[1].state_vars[per].in_transit(), IT1) + self.assertEqual(nodes[2].state_vars[per].in_transit(), IT2) + self.assertEqual(nodes[0].state_vars[per].on_order_by_predecessor[1][dps[1]], OO01) + self.assertEqual(nodes[0].state_vars[per].on_order_by_predecessor[2][dps[2]], OO02) + self.assertEqual(nodes[0].state_vars[per].on_order(), OO0) + self.assertEqual(nodes[1].state_vars[per].on_order(), OO1) + self.assertEqual(nodes[2].state_vars[per].on_order(), OO2) + self.assertEqual(nodes[0].state_vars[per].raw_material_inventory[dps[1]], RM01) + self.assertEqual(nodes[0].state_vars[per].raw_material_inventory[dps[2]], RM02) + self.assertEqual(nodes[0].state_vars[per].raw_material_aggregate(), RM0) + self.assertEqual(nodes[1].state_vars[per].raw_material_aggregate(), RM1) + self.assertEqual(nodes[2].state_vars[per].raw_material_aggregate(), RM2) + # self.assertEqual(nodes[0].state_vars[per].inventory_position(predecessor_index=1), IL0+OO01+RM01) + # self.assertEqual(nodes[0].state_vars[per].inventory_position(predecessor_index=2), IL0+OO02+RM02) + self.assertEqual(nodes[0].state_vars[per].inventory_position(), IL0+OO0+RM0) + self.assertEqual(nodes[1].state_vars[per].inventory_position(), IL1+OO1+RM1) + self.assertEqual(nodes[2].state_vars[per].inventory_position(), IL2+OO2+RM2) + self.assertEqual(nodes[0].state_vars[per].echelon_on_hand_inventory, OH0) + self.assertEqual(nodes[1].state_vars[per].echelon_on_hand_inventory, OH0+IT01+OH1) + self.assertEqual(nodes[2].state_vars[per].echelon_on_hand_inventory, OH0+IT02+OH2) + self.assertEqual(nodes[0].state_vars[per].echelon_inventory_level, IL0) + self.assertEqual(nodes[1].state_vars[per].echelon_inventory_level, OH0+IT01+OH1-BO0) + self.assertEqual(nodes[2].state_vars[per].echelon_inventory_level, OH0+IT02+OH2-BO0) + self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(predecessor_index=1), IL0+OO01+RM01) + self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(predecessor_index=2), IL0+OO02+RM02) + self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(), IL0+OO0+RM0) + self.assertEqual(nodes[1].state_vars[per].echelon_inventory_position(), OH0+IT01+OH1-BO0+OO1+RM1) + self.assertEqual(nodes[2].state_vars[per].echelon_inventory_position(), OH0+IT02+OH2-BO0+OO2+RM2) + + # def test_rosling_figure_1_per_22(self): + # """Test state variables for simulation of system in Rosling (1989), Figure 1, + # at end of period 22. + # """ + # print_status('TestStateVariables', 'test_rosling_figure_1_per_22()') + # + # network = load_instance("rosling_figure_1") + # + # # Strategy for these tests: run sim for a few periods, test state + # # variables. + # simulation(network, 23, rand_seed=17, progress_bar=False) + # + # # Shortcuts to correct values. + # per = 22 + # IL = {1: -33, 2: -25, 3: -39, 4: -24, 5: -60, 6: 7, 7: -6} + # OH = {i: max(IL[i], 0) for i in range(1, 8)} + # BO = {i: max(-IL[i], 0) for i in range(1, 8)} + # IT = {(1, 2): 2, (1, 3): 2, (2, 5): 0, (3, 4): 15, (4, 6): 10, (4, 7): 18, (5, None): 84, (6, None): 8, (7, None): 6} + # OO = {(1, 2): 27, (1, 3): 41, (2, 5): 60, (3, 4): 39, (4, 6): 10, (4, 7): 24, (5, None): 84, (6, None): 8, (7, None): 6} + # RM = {(1, 2): 14, (1, 3): 0, (2, 5): 0, (3, 4): 0, (4, 6): 14, (4, 7): 0, (5, None): 0, (6, None): 0, (7, None): 0} + # + # IT_agg = {} + # OO_agg = {} + # RM_agg = {} + # ech_OH = {} + # for n_ind in range(1, 8): + # node = network.get_node_from_index(n_ind) + # IT_agg[n_ind] = np.sum([IT[(n_ind, p_ind)] for (m_ind, p_ind) in IT if m_ind == n_ind]) / \ + # len(node.predecessors(include_external=True)) + # OO_agg[n_ind] = np.sum([OO[(n_ind, p_ind)] for (m_ind, p_ind) in OO if m_ind == n_ind]) / \ + # len(node.predecessors(include_external=True)) + # RM_agg[n_ind] = np.sum([RM[(n_ind, p_ind)] for (m_ind, p_ind) in RM if m_ind == n_ind]) / \ + # len(node.predecessors(include_external=True)) + # ech_OH[n_ind] = OH[n_ind] + np.sum([IT[(s_ind, n_ind)] + ech_OH[s_ind] for s_ind in node.successor_indices()]) + # EIPA = {(1, 2): ech_OH[1] - BO[1] + 0, + # (1, 3): ech_OH[1] - BO[1] + 0, + # (2, 5): ech_OH[2] - BO[1] + 0, + # (3, 4): ech_OH[3] - BO[1] + 9, + # (4, 6): ech_OH[4] - BO[1] + 0, + # (4, 7): ech_OH[4] - BO[1] + 0, + # (5, None): ech_OH[5] - BO[1] + 84, + # (6, None): ech_OH[6] - BO[1] + 0, + # (7, None): ech_OH[7] - BO[1] + 1} + # + # for n_ind in range(1, 8): + # node = network.get_node_from_index(n_ind) + # self.assertEqual(node.state_vars[per].inventory_level, IL[n_ind]) + # self.assertEqual(node.state_vars[per].on_hand, OH[n_ind]) + # self.assertEqual(node.state_vars[per].backorders, BO[n_ind]) + # for s in node.successors(include_external=False): + # self.assertEqual(node.state_vars[per].in_transit_to(s), IT[(s.index, n_ind)]) + # for p in node.predecessors(include_external=True): + # p_ind = None if p is None else p.index + # self.assertEqual(node.state_vars[per].in_transit_from(p), IT[(n_ind, p_ind)]) + # self.assertEqual(node.state_vars[per].on_order_by_predecessor[p_ind], OO[(n_ind, p_ind)]) + # self.assertEqual(node.state_vars[per].raw_material_inventory[p_ind], RM[(n_ind, p_ind)]) + # self.assertEqual(node.state_vars[per].inventory_position(p_ind), + # IL[n_ind] + OO[(n_ind, p_ind)] + RM[(n_ind, p_ind)]) + # self.assertEqual(node.state_vars[per].echelon_inventory_position(p_ind), + # ech_OH[n_ind] - BO[1] + OO[(n_ind, p_ind)] + RM[(n_ind, p_ind)]) + # self.assertEqual(node.state_vars[per].echelon_inventory_position_adjusted(p_ind), EIPA[(n_ind, p_ind)]) + # self.assertEqual(node.state_vars[per].in_transit, IT_agg[n_ind]) + # self.assertEqual(node.state_vars[per].on_order, OO_agg[n_ind]) + # self.assertEqual(node.state_vars[per].raw_material_aggregate, RM_agg[n_ind]) + # self.assertEqual(node.state_vars[per].inventory_position(), IL[n_ind] + OO_agg[n_ind] + RM_agg[n_ind]) + # self.assertEqual(node.state_vars[per].echelon_on_hand_inventory, ech_OH[n_ind]) + # self.assertEqual(node.state_vars[per].echelon_inventory_level, ech_OH[n_ind] - BO[1]) + # self.assertEqual(node.state_vars[per].echelon_inventory_position(), ech_OH[n_ind] - BO[1] + OO_agg[n_ind] + RM_agg[n_ind]) + # + + +class TestNodeStateVarsToFromDict(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestNodeStateVarsToFromDict', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestNodeStateVarsToFromDict', 'tear_down_class()') + + def test_example_6_1_per_22(self): + """Test that to_dict() and from_dict() correctly convert NodeStateVars object to and from dict + in Example 6.1 per 22. + """ + print_status('TestNodeStateVarsToFromDict', 'test_example_6_1_per_22()') + + network = load_instance("example_6_1") + + # Set initial inventory levels to local BS levels. + for n in network.nodes: + n.initial_inventory_level = n.inventory_policy.base_stock_level + + # Strategy for these tests: run sim for a few periods, convert state vars + # to dict and back, compare to original. + simulation(network, 23, rand_seed=17, progress_bar=False) + + # Original NodeStateVars. + original_nsv_lists = {n.index: n.state_vars for n in network.nodes} + + # Convert to dicts. + nsv_dict_lists = {} + for ind, nsv_list in original_nsv_lists.items(): + nsv_dict_lists[ind] = [nsv.to_dict() for nsv in nsv_list] + + # Convert back. + nsv_lists_converted = {} + for ind, nsv_dict_list in nsv_dict_lists.items(): + nsv_lists_converted[ind] = [NodeStateVars.from_dict(nsv_dict) for nsv_dict in nsv_dict_list] + + # Set node attributes to in original_nsv_lists to the node's indices + # (otherwise deep_equal_to() will get confused since from_dict() will only + # set node to the node's index). + for ind, nsv_list in original_nsv_lists.items(): + for t in range(len(nsv_list)): + nsv_list[t].node = nsv_list[t].node.index + + # Check for equality. + for ind, nsv_list in original_nsv_lists.items(): + self.assertListEqual(nsv_list, nsv_lists_converted[ind]) + + def test_assembly_3_stage_per_22(self): + """Test that to_dict() and from_dict() correctly convert NodeStateVars object to and from dict + in Example 6.1 per 22. + """ + print_status('TestNodeStateVarsToFromDict', 'test_assembly_3_stage_per_22()') + + network = load_instance("assembly_3_stage") + + # Set initial inventory levels to local BS levels. + for n in network.nodes: + n.initial_inventory_level = n.inventory_policy.base_stock_level + + # Strategy for these tests: run sim for a few periods, test state + # variables. + simulation(network, 23, rand_seed=17, progress_bar=False) + + # Original NodeStateVars. + original_nsv_lists = {n.index: n.state_vars for n in network.nodes} + + # Convert to dicts. + nsv_dict_lists = {} + for ind, nsv_list in original_nsv_lists.items(): + nsv_dict_lists[ind] = [nsv.to_dict() for nsv in nsv_list] + + # Convert back. + nsv_lists_converted = {} + for ind, nsv_dict_list in nsv_dict_lists.items(): + nsv_lists_converted[ind] = [NodeStateVars.from_dict(nsv_dict) for nsv_dict in nsv_dict_list] + + # Set node attributes to in original_nsv_lists to the node's indices + # (otherwise deep_equal_to() will get confused since from_dict() will only + # set node to the node's index). + for ind, nsv_list in original_nsv_lists.items(): + for t in range(len(nsv_list)): + nsv_list[t].node = nsv_list[t].node.index + + # Check for equality. + for ind, nsv_list in original_nsv_lists.items(): + self.assertListEqual(nsv_list, nsv_lists_converted[ind]) + + +class TestNodeStateVarsEq(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestNodeStateVarsEq', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestNodeStateVarsEq', 'tear_down_class()') + + def test_equal(self): + """Test that __eq__() and __ne__() work when state variables are equal. + """ + print_status('TestNodeStateVarsEq', 'test_equal()') + + network = load_instance("example_6_1") + + # Set initial inventory levels to local BS levels. + for n in network.nodes: + n.initial_inventory_level = n.inventory_policy.base_stock_level + + # Strategy for these tests: run sim for a few periods, make copies of + # state vars, check that they are equal. + simulation(network, 23, rand_seed=17, progress_bar=False) + + # Original NodeStateVars. + original_nsv_lists = {n.index: n.state_vars for n in network.nodes} + + # Copies + copy_nsv_lists = {ind: copy.deepcopy(nsv_list) for ind, nsv_list in original_nsv_lists.items()} + + # Check equality. + for ind, nsv_list in original_nsv_lists.items(): + for t in range(len(nsv_list)): + self.assertTrue(copy_nsv_lists[ind][t] == nsv_list[t]) + self.assertFalse(copy_nsv_lists[ind][t] != nsv_list[t]) + + def test_not_equal(self): + """Test that __eq__() and __ne()__ work when state variables are not equal. + """ + print_status('TestNodeStateVarsEq', 'test_not_equal()') + + network = load_instance("example_6_1") + + # Set initial inventory levels to local BS levels. + for n in network.nodes: + n.initial_inventory_level = n.inventory_policy.base_stock_level + + # Strategy for these tests: run sim for a few periods, make copies of + # state vars, check that they are equal. + simulation(network, 23, rand_seed=17, progress_bar=False) + + # Original NodeStateVars. + original_nsv_lists = {n.index: n.state_vars for n in network.nodes} + + # Copies + copy_nsv_lists = {ind: copy.deepcopy(nsv_list) for ind, nsv_list in original_nsv_lists.items()} + + # Modify one object. + copy_nsv_lists[1][12].inventory_level = 77 + + # Check inequality. + self.assertTrue(copy_nsv_lists[1][12] != original_nsv_lists[1][12]) + self.assertFalse(copy_nsv_lists[1][12] == original_nsv_lists[1][12]) + + +class TestNodeStateVarsDeepEqualTo(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestNodeStateVarsDeepEqualTo', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestNodeStateVarsDeepEqualTo', 'tear_down_class()') + + def test_equal(self): + """Test that deep_equal_to() works when state variables are equal. + """ + print_status('TestNodeStateVarsDeepEqualTo', 'test_equal()') + + network = load_instance("example_6_1") + + # Set initial inventory levels to local BS levels. + for n in network.nodes: + n.initial_inventory_level = n.inventory_policy.base_stock_level + + # Strategy for these tests: run sim for a few periods, make copies of + # state vars, check that they are equal. + simulation(network, 23, rand_seed=17, progress_bar=False) + + # Original NodeStateVars. + original_nsv_lists = {n.index: n.state_vars for n in network.nodes} + + # Copies + copy_nsv_lists = {ind: copy.deepcopy(nsv_list) for ind, nsv_list in original_nsv_lists.items()} + + # Check equality. + for ind, nsv_list in original_nsv_lists.items(): + for t in range(len(nsv_list)): + self.assertTrue(copy_nsv_lists[ind][t].deep_equal_to(nsv_list[t])) + + def test_not_equal(self): + """Test that deep_equal_to() works when state variables are not equal. + """ + print_status('TestNodeStateVarsDeepEqualTo', 'test_not_equal()') + + network = load_instance("example_6_1") + + # Set initial inventory levels to local BS levels. + for n in network.nodes: + n.initial_inventory_level = n.inventory_policy.base_stock_level + + # Strategy for these tests: run sim for a few periods, make copies of + # state vars, check that they are equal. + simulation(network, 23, rand_seed=17, progress_bar=False) + + # Original NodeStateVars. + original_nsv_lists = {n.index: n.state_vars for n in network.nodes} + + # Copies + copy_nsv_lists = {ind: copy.deepcopy(nsv_list) for ind, nsv_list in original_nsv_lists.items()} + + # Modify one object. + copy_nsv_lists[1][12].inventory_level = 77 + + # Check inequality. + self.assertFalse(copy_nsv_lists[1][12].deep_equal_to(original_nsv_lists[1][12])) diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index 690f2cd..906d66c 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -652,6 +652,109 @@ def test_4_node_owmr(self): self.assertEqual(node3succ, []) +class TestParseNode(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestParseNode', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestParseNode', 'tear_down_class()') + + def test_example_6_1(self): + """Test parse_node() on 3-node serial system. + """ + print_status('TestParseNode', 'test_example_6_1()') + + network = load_instance("example_6_1") # 3 -> 2 -> 1 + nodes = {n.index: n for n in network.nodes} + + node_obj, node_ind = network.parse_node(nodes[1]) + self.assertEqual(node_obj, nodes[1]) + self.assertEqual(node_ind, 1) + + node_obj, node_ind = network.parse_node(nodes[3]) + self.assertEqual(node_obj, nodes[3]) + self.assertEqual(node_ind, 3) + + node_obj, node_ind = network.parse_node(1) + self.assertEqual(node_obj, nodes[1]) + self.assertEqual(node_ind, 1) + + node_obj, node_ind = network.parse_node(3) + self.assertEqual(node_obj, nodes[3]) + self.assertEqual(node_ind, 3) + + def test_bad_param(self): + """Test that parse_node() raises errors correctly on bad parameters. + """ + print_status('TestParseNode', 'test_bad_param()') + + network = load_instance("example_6_1") # 3 -> 2 -> 1 + + with self.assertRaises(TypeError): + _, _ = network.parse_node(6.5) + _, _ = network.parse_node(network.products[0]) + + with self.assertRaises(ValueError): + _, _ = network.parse_node(5) + _, _ = network.parse_node(SupplyChainNode(5)) + + +class TestParseProduct(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestParseProduct', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestParseProduct', 'tear_down_class()') + + def test_multiproduct_5_7(self): + """Test parse_product() on 5-node, 7-product system. + """ + print_status('TestParseProduct', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + products = {n.index: n for n in network.products} + + product_obj, product_ind = network.parse_product(products[1]) + self.assertEqual(product_obj, products[1]) + self.assertEqual(product_ind, 1) + + product_obj, product_ind = network.parse_product(products[3]) + self.assertEqual(product_obj, products[3]) + self.assertEqual(product_ind, 3) + + product_obj, product_ind = network.parse_product(1) + self.assertEqual(product_obj, products[1]) + self.assertEqual(product_ind, 1) + + product_obj, product_ind = network.parse_product(3) + self.assertEqual(product_obj, products[3]) + self.assertEqual(product_ind, 3) + + def test_bad_param(self): + """Test that parse_product() raises errors correctly on bad parameters. + """ + print_status('TestParseProduct', 'test_bad_param()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + + with self.assertRaises(TypeError): + _, _ = network.parse_product(6.5) + _, _ = network.parse_product(network.nodes[0]) + + with self.assertRaises(ValueError): + _, _ = network.parse_product(55) + _, _ = network.parse_product(SupplyChainProduct(55)) + + + class TestAddRemoveProduct(unittest.TestCase): @classmethod def set_up_class(cls): diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index db63373..4d55275 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -2543,348 +2543,6 @@ def test_multiproduct_5_7(self): self.assertTrue(network.nodes[i].deep_equal_to(dict_nodes[i])) -class TestStateVariables(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestStateVariables', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestStateVariables', 'tear_down_class()') - - def test_example_6_1_per_22(self): - """Test state variables for simulation of 3-node serial system in - Example 6.1 at end of period 22. - """ - print_status('TestStateVariables', 'test_example_6_1_per_22()') - - network = load_instance("example_6_1") - - # Set initial inventory levels to local BS levels. - for n in network.nodes: - n.initial_inventory_level = n.inventory_policy.base_stock_level - - # Strategy for these tests: run sim for a few periods, test state - # variables. - simulation(network, 23, rand_seed=17, progress_bar=False) - - nodes = {i: network.get_node_from_index(i) for i in range(1, 4)} - dps = {n.index: n._dummy_product.index for n in network.nodes} - - self.assertAlmostEqual(nodes[1].state_vars[22].inventory_level[dps[1]], 0.497397132, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].inventory_level[dps[2]], 0.038666224, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].inventory_level[dps[3]], -0.832602868, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].on_hand, 0.497397132, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].on_hand, 0.038666224, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].on_hand, 0, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].backorders, 0, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].backorders, 0, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].backorders, 0.832602868, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].in_transit_to(nodes[1]), 5.992602868, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].in_transit_to(nodes[2]), 4.658730908, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].in_transit_from(nodes[2]), 5.992602868, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].in_transit_from(nodes[3]), 4.658730908, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].in_transit_from(None), 6.031269092479092+5.491333775514212, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].in_transit(), 5.992602868, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].in_transit(), 4.658730908, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].in_transit(), 6.031269092479092+5.491333775514212, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].on_order(), 5.992602868, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].on_order(), 5.491333776, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].on_order(), 6.031269092479092+5.491333775514212, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].raw_material_aggregate(), 0, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].raw_material_aggregate(), 0, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].raw_material_aggregate(), 0, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].inventory_position(), 6.49, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].inventory_position(), 5.53, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].inventory_position(), 10.69, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].echelon_on_hand_inventory, 0.497397132, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].echelon_on_hand_inventory, 0.497397132+5.992602868+0.038666224, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].echelon_on_hand_inventory, 0.497397132+5.992602868+0.038666224+4.658730908, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].echelon_inventory_level, 0.497397132, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].echelon_inventory_level, 0.497397132+5.992602868+0.038666224, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].echelon_inventory_level, 0.497397132+5.992602868+0.038666224+4.658730908, places=6) - self.assertAlmostEqual(nodes[1].state_vars[22].echelon_inventory_position(), 0.497397132+5.992602868, places=6) - self.assertAlmostEqual(nodes[2].state_vars[22].echelon_inventory_position(), 0.497397132+5.992602868+0.038666224+5.491333776, places=6) - self.assertAlmostEqual(nodes[3].state_vars[22].echelon_inventory_position(), 0.497397132+5.992602868+0.038666224+4.658730908+6.031269092479092+5.491333775514212, places=6) - - def test_example_6_1_per_37(self): - """Test state variables for simulation of 3-node serial system in - Example 6.1 at end of period 37. - """ - print_status('TestStateVariables', 'test_example_6_1_per_37()') - - network = load_instance("example_6_1") - - # Set initial inventory levels to local BS levels. - for n in network.nodes: - n.initial_inventory_level = n.inventory_policy.base_stock_level - - # Strategy for these tests: run sim for a few periods, test state - # variables. - simulation(network, 38, rand_seed=17, progress_bar=False) - - # Shortcuts to correct values. - [IL1, IL2, IL3] = [-0.16089457,-0.682689274,-0.343065432] - [OH1, OH2, OH3] = np.maximum([IL1, IL2, IL3], 0) - [BO1, BO2, BO3] = np.maximum([-IL1, -IL2, -IL3], 0) - [IT1, IT2, IT3] = [5.968205296, 5.869623842, 5.567783088742498+5.465282343506053] - [OO1, OO2, OO3] = [6.65089457, 6.212689274, 11.03306543] - - nodes = {i: network.get_node_from_index(i) for i in range(1, 4)} - dps = {n.index: n._dummy_product.index for n in network.nodes} - - self.assertAlmostEqual(nodes[1].state_vars[37].inventory_level[dps[1]], IL1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].inventory_level[dps[2]], IL2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].inventory_level[dps[3]], IL3, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].on_hand, OH1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].on_hand, OH2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].on_hand, OH3, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].backorders, BO1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].backorders, BO2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].backorders, BO3, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].in_transit_to(nodes[1]), IT1, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].in_transit_to(nodes[2]), IT2, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].in_transit_from(nodes[2]), IT1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].in_transit_from(nodes[3]), IT2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].in_transit_from(None), IT3, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].in_transit(), IT1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].in_transit(), IT2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].in_transit(), IT3, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].on_order(), OO1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].on_order(), OO2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].on_order(), OO3, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].raw_material_aggregate(), 0, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].raw_material_aggregate(), 0, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].raw_material_aggregate(), 0, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].inventory_position(), IL1+OO1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].inventory_position(), IL2+OO2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].inventory_position(), IL3+OO3, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].echelon_on_hand_inventory, OH1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].echelon_on_hand_inventory, OH1+IT1+OH2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].echelon_on_hand_inventory, OH1+IT1+OH2+IT2+OH3, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].echelon_inventory_level, IL1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].echelon_inventory_level, OH1+IT1+OH2-BO1, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].echelon_inventory_level, OH1+IT1+OH2+IT2+OH3-BO1, places=6) - self.assertAlmostEqual(nodes[1].state_vars[37].echelon_inventory_position(), IL1+OO1, places=6) - self.assertAlmostEqual(nodes[2].state_vars[37].echelon_inventory_position(), OH1+IT1+OH2-BO1+OO2, places=6) - self.assertAlmostEqual(nodes[3].state_vars[37].echelon_inventory_position(), OH1+IT1+OH2+IT2+OH3-BO1+OO3, places=6) - - def test_assembly_3_stage_per_22(self): - """Test state variables for simulation of 3-node assembly system at end of period 22. - """ - print_status('TestStateVariables', 'test_assembly_3_stage_per_22()') - - network = load_instance("assembly_3_stage") - - # Set initial inventory levels to local BS levels. - for n in network.nodes: - n.initial_inventory_level = n.inventory_policy.base_stock_level - - # Strategy for these tests: run sim for a few periods, test state - # variables. - simulation(network, 23, rand_seed=17, progress_bar=False) - - # Shortcuts to correct values. - [IL0, IL1, IL2] = [2, 2, 0] - [OH0, OH1, OH2] = np.maximum([IL0, IL1, IL2], 0) - [BO0, BO1, BO2] = np.maximum([-IL0, -IL1, -IL2], 0) - [IT10, IT20, IT0, IT1, IT2] = [5, 5, 5, 11, 11] - [OO01, OO02, OO0, OO1, OO2] = [5, 5, 5, 11, 11] - [RM01, RM02, RM0, RM1, RM2] = [0, 0, 0, 0, 0] - - nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - dps = {n.index: n._dummy_product.index for n in network.nodes} - - self.assertEqual(nodes[0].state_vars[22].inventory_level[dps[0]], IL0) - self.assertEqual(nodes[1].state_vars[22].inventory_level[dps[1]], IL1) - self.assertEqual(nodes[2].state_vars[22].inventory_level[dps[2]], IL2) - self.assertEqual(nodes[0].state_vars[22].on_hand, OH0) - self.assertEqual(nodes[1].state_vars[22].on_hand, OH1) - self.assertEqual(nodes[2].state_vars[22].on_hand, OH2) - self.assertEqual(nodes[0].state_vars[22].backorders, BO0) - self.assertEqual(nodes[1].state_vars[22].backorders, BO1) - self.assertEqual(nodes[2].state_vars[22].backorders, BO2) - self.assertEqual(nodes[1].state_vars[22].in_transit_to(nodes[0]), IT10) - self.assertEqual(nodes[2].state_vars[22].in_transit_to(nodes[0]), IT20) - self.assertEqual(nodes[0].state_vars[22].in_transit_from(nodes[1]), IT10) - self.assertEqual(nodes[0].state_vars[22].in_transit_from(nodes[2]), IT20) - self.assertEqual(nodes[1].state_vars[22].in_transit_from(None), IT1) - self.assertEqual(nodes[2].state_vars[22].in_transit_from(None), IT2) - self.assertEqual(nodes[0].state_vars[22].in_transit(), IT0) - self.assertEqual(nodes[1].state_vars[22].in_transit(), IT1) - self.assertEqual(nodes[2].state_vars[22].in_transit(), IT2) - self.assertEqual(nodes[0].state_vars[22].on_order_by_predecessor[1][dps[1]], OO01) - self.assertEqual(nodes[0].state_vars[22].on_order_by_predecessor[2][dps[2]], OO02) - self.assertEqual(nodes[0].state_vars[22].on_order(), OO0) - self.assertEqual(nodes[1].state_vars[22].on_order(), OO1) - self.assertEqual(nodes[2].state_vars[22].on_order(), OO2) - self.assertEqual(nodes[0].state_vars[22].raw_material_inventory[dps[1]], RM01) - self.assertEqual(nodes[0].state_vars[22].raw_material_inventory[dps[2]], RM02) - self.assertEqual(nodes[0].state_vars[22].raw_material_aggregate(), RM0) - self.assertEqual(nodes[1].state_vars[22].raw_material_aggregate(), RM1) - self.assertEqual(nodes[2].state_vars[22].raw_material_aggregate(), RM2) - # self.assertEqual(nodes[0].state_vars[22].inventory_position(predecessor_index=1), IL0+OO01+RM01) - # self.assertEqual(nodes[0].state_vars[22].inventory_position(predecessor_index=2), IL0+OO02+RM02) - self.assertEqual(nodes[0].state_vars[22].inventory_position(), IL0+OO0+RM0) - self.assertEqual(nodes[1].state_vars[22].inventory_position(), IL1+OO1+RM1) - self.assertEqual(nodes[2].state_vars[22].inventory_position(), IL2+OO2+RM2) - self.assertEqual(nodes[0].state_vars[22].echelon_on_hand_inventory, OH0) - self.assertEqual(nodes[1].state_vars[22].echelon_on_hand_inventory, OH0+IT10+OH1) - self.assertEqual(nodes[2].state_vars[22].echelon_on_hand_inventory, OH0+IT20+OH2) - self.assertEqual(nodes[0].state_vars[22].echelon_inventory_level, IL0) - self.assertEqual(nodes[1].state_vars[22].echelon_inventory_level, OH0+IT10+OH1-BO0) - self.assertEqual(nodes[2].state_vars[22].echelon_inventory_level, OH0+IT20+OH2-BO0) - self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(predecessor_index=1), IL0+OO01+RM01) - self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(predecessor_index=2), IL0+OO02+RM02) - self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(), IL0+OO0+RM0) - self.assertEqual(nodes[1].state_vars[22].echelon_inventory_position(), OH0+IT10+OH1-BO0+OO1+RM1) - self.assertEqual(nodes[2].state_vars[22].echelon_inventory_position(), OH0+IT20+OH2-BO0+OO2+RM2) - - def test_assembly_3_stage_per_43(self): - """Test state variables for simulation of 3-node assembly system at end of period 43. - """ - print_status('TestStateVariables', 'test_assembly_3_stage_per_43()') - - network = load_instance("assembly_3_stage") - - # Set initial inventory levels to local BS levels. - for n in network.nodes: - n.initial_inventory_level = n.inventory_policy.base_stock_level - - # Strategy for these tests: run sim for a few periods, test state - # variables. - simulation(network, 44, rand_seed=17, progress_bar=False) - - # Shortcuts to correct values. - per = 43 - [IL0, IL1, IL2] = [1, 4, 2] - [OH0, OH1, OH2] = np.maximum([IL0, IL1, IL2], 0) - [BO0, BO1, BO2] = np.maximum([-IL0, -IL1, -IL2], 0) - [IT01, IT02, IT0, IT1, IT2] = [4, 6, 5, 9, 9] - [OO01, OO02, OO0, OO1, OO2] = [4, 6, 5, 9, 9] - [RM01, RM02, RM0, RM1, RM2] = [2, 0, 1, 0, 0] - - nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - dps = {n.index: n._dummy_product.index for n in network.nodes} - - self.assertEqual(nodes[0].state_vars[per].inventory_level[dps[0]], IL0) - self.assertEqual(nodes[1].state_vars[per].inventory_level[dps[1]], IL1) - self.assertEqual(nodes[2].state_vars[per].inventory_level[dps[2]], IL2) - self.assertEqual(nodes[0].state_vars[per].on_hand, OH0) - self.assertEqual(nodes[1].state_vars[per].on_hand, OH1) - self.assertEqual(nodes[2].state_vars[per].on_hand, OH2) - self.assertEqual(nodes[0].state_vars[per].backorders, BO0) - self.assertEqual(nodes[1].state_vars[per].backorders, BO1) - self.assertEqual(nodes[2].state_vars[per].backorders, BO2) - self.assertEqual(nodes[1].state_vars[per].in_transit_to(nodes[0]), IT01) - self.assertEqual(nodes[2].state_vars[per].in_transit_to(nodes[0]), IT02) - self.assertEqual(nodes[0].state_vars[per].in_transit_from(nodes[1]), IT01) - self.assertEqual(nodes[0].state_vars[per].in_transit_from(nodes[2]), IT02) - self.assertEqual(nodes[1].state_vars[per].in_transit_from(None), IT1) - self.assertEqual(nodes[2].state_vars[per].in_transit_from(None), IT2) - self.assertEqual(nodes[0].state_vars[per].in_transit(), IT0) - self.assertEqual(nodes[1].state_vars[per].in_transit(), IT1) - self.assertEqual(nodes[2].state_vars[per].in_transit(), IT2) - self.assertEqual(nodes[0].state_vars[per].on_order_by_predecessor[1][dps[1]], OO01) - self.assertEqual(nodes[0].state_vars[per].on_order_by_predecessor[2][dps[2]], OO02) - self.assertEqual(nodes[0].state_vars[per].on_order(), OO0) - self.assertEqual(nodes[1].state_vars[per].on_order(), OO1) - self.assertEqual(nodes[2].state_vars[per].on_order(), OO2) - self.assertEqual(nodes[0].state_vars[per].raw_material_inventory[dps[1]], RM01) - self.assertEqual(nodes[0].state_vars[per].raw_material_inventory[dps[2]], RM02) - self.assertEqual(nodes[0].state_vars[per].raw_material_aggregate(), RM0) - self.assertEqual(nodes[1].state_vars[per].raw_material_aggregate(), RM1) - self.assertEqual(nodes[2].state_vars[per].raw_material_aggregate(), RM2) - # self.assertEqual(nodes[0].state_vars[per].inventory_position(predecessor_index=1), IL0+OO01+RM01) - # self.assertEqual(nodes[0].state_vars[per].inventory_position(predecessor_index=2), IL0+OO02+RM02) - self.assertEqual(nodes[0].state_vars[per].inventory_position(), IL0+OO0+RM0) - self.assertEqual(nodes[1].state_vars[per].inventory_position(), IL1+OO1+RM1) - self.assertEqual(nodes[2].state_vars[per].inventory_position(), IL2+OO2+RM2) - self.assertEqual(nodes[0].state_vars[per].echelon_on_hand_inventory, OH0) - self.assertEqual(nodes[1].state_vars[per].echelon_on_hand_inventory, OH0+IT01+OH1) - self.assertEqual(nodes[2].state_vars[per].echelon_on_hand_inventory, OH0+IT02+OH2) - self.assertEqual(nodes[0].state_vars[per].echelon_inventory_level, IL0) - self.assertEqual(nodes[1].state_vars[per].echelon_inventory_level, OH0+IT01+OH1-BO0) - self.assertEqual(nodes[2].state_vars[per].echelon_inventory_level, OH0+IT02+OH2-BO0) - self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(predecessor_index=1), IL0+OO01+RM01) - self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(predecessor_index=2), IL0+OO02+RM02) - self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(), IL0+OO0+RM0) - self.assertEqual(nodes[1].state_vars[per].echelon_inventory_position(), OH0+IT01+OH1-BO0+OO1+RM1) - self.assertEqual(nodes[2].state_vars[per].echelon_inventory_position(), OH0+IT02+OH2-BO0+OO2+RM2) - - # def test_rosling_figure_1_per_22(self): - # """Test state variables for simulation of system in Rosling (1989), Figure 1, - # at end of period 22. - # """ - # print_status('TestStateVariables', 'test_rosling_figure_1_per_22()') - # - # network = load_instance("rosling_figure_1") - # - # # Strategy for these tests: run sim for a few periods, test state - # # variables. - # simulation(network, 23, rand_seed=17, progress_bar=False) - # - # # Shortcuts to correct values. - # per = 22 - # IL = {1: -33, 2: -25, 3: -39, 4: -24, 5: -60, 6: 7, 7: -6} - # OH = {i: max(IL[i], 0) for i in range(1, 8)} - # BO = {i: max(-IL[i], 0) for i in range(1, 8)} - # IT = {(1, 2): 2, (1, 3): 2, (2, 5): 0, (3, 4): 15, (4, 6): 10, (4, 7): 18, (5, None): 84, (6, None): 8, (7, None): 6} - # OO = {(1, 2): 27, (1, 3): 41, (2, 5): 60, (3, 4): 39, (4, 6): 10, (4, 7): 24, (5, None): 84, (6, None): 8, (7, None): 6} - # RM = {(1, 2): 14, (1, 3): 0, (2, 5): 0, (3, 4): 0, (4, 6): 14, (4, 7): 0, (5, None): 0, (6, None): 0, (7, None): 0} - # - # IT_agg = {} - # OO_agg = {} - # RM_agg = {} - # ech_OH = {} - # for n_ind in range(1, 8): - # node = network.get_node_from_index(n_ind) - # IT_agg[n_ind] = np.sum([IT[(n_ind, p_ind)] for (m_ind, p_ind) in IT if m_ind == n_ind]) / \ - # len(node.predecessors(include_external=True)) - # OO_agg[n_ind] = np.sum([OO[(n_ind, p_ind)] for (m_ind, p_ind) in OO if m_ind == n_ind]) / \ - # len(node.predecessors(include_external=True)) - # RM_agg[n_ind] = np.sum([RM[(n_ind, p_ind)] for (m_ind, p_ind) in RM if m_ind == n_ind]) / \ - # len(node.predecessors(include_external=True)) - # ech_OH[n_ind] = OH[n_ind] + np.sum([IT[(s_ind, n_ind)] + ech_OH[s_ind] for s_ind in node.successor_indices()]) - # EIPA = {(1, 2): ech_OH[1] - BO[1] + 0, - # (1, 3): ech_OH[1] - BO[1] + 0, - # (2, 5): ech_OH[2] - BO[1] + 0, - # (3, 4): ech_OH[3] - BO[1] + 9, - # (4, 6): ech_OH[4] - BO[1] + 0, - # (4, 7): ech_OH[4] - BO[1] + 0, - # (5, None): ech_OH[5] - BO[1] + 84, - # (6, None): ech_OH[6] - BO[1] + 0, - # (7, None): ech_OH[7] - BO[1] + 1} - # - # for n_ind in range(1, 8): - # node = network.get_node_from_index(n_ind) - # self.assertEqual(node.state_vars[per].inventory_level, IL[n_ind]) - # self.assertEqual(node.state_vars[per].on_hand, OH[n_ind]) - # self.assertEqual(node.state_vars[per].backorders, BO[n_ind]) - # for s in node.successors(include_external=False): - # self.assertEqual(node.state_vars[per].in_transit_to(s), IT[(s.index, n_ind)]) - # for p in node.predecessors(include_external=True): - # p_ind = None if p is None else p.index - # self.assertEqual(node.state_vars[per].in_transit_from(p), IT[(n_ind, p_ind)]) - # self.assertEqual(node.state_vars[per].on_order_by_predecessor[p_ind], OO[(n_ind, p_ind)]) - # self.assertEqual(node.state_vars[per].raw_material_inventory[p_ind], RM[(n_ind, p_ind)]) - # self.assertEqual(node.state_vars[per].inventory_position(p_ind), - # IL[n_ind] + OO[(n_ind, p_ind)] + RM[(n_ind, p_ind)]) - # self.assertEqual(node.state_vars[per].echelon_inventory_position(p_ind), - # ech_OH[n_ind] - BO[1] + OO[(n_ind, p_ind)] + RM[(n_ind, p_ind)]) - # self.assertEqual(node.state_vars[per].echelon_inventory_position_adjusted(p_ind), EIPA[(n_ind, p_ind)]) - # self.assertEqual(node.state_vars[per].in_transit, IT_agg[n_ind]) - # self.assertEqual(node.state_vars[per].on_order, OO_agg[n_ind]) - # self.assertEqual(node.state_vars[per].raw_material_aggregate, RM_agg[n_ind]) - # self.assertEqual(node.state_vars[per].inventory_position(), IL[n_ind] + OO_agg[n_ind] + RM_agg[n_ind]) - # self.assertEqual(node.state_vars[per].echelon_on_hand_inventory, ech_OH[n_ind]) - # self.assertEqual(node.state_vars[per].echelon_inventory_level, ech_OH[n_ind] - BO[1]) - # self.assertEqual(node.state_vars[per].echelon_inventory_position(), ech_OH[n_ind] - BO[1] + OO_agg[n_ind] + RM_agg[n_ind]) - # - - class TestInitialize(unittest.TestCase): @classmethod def set_up_class(cls): @@ -2918,226 +2576,3 @@ def test_initialize(self): n1.index = None n1.initialize(index=None) - -class TestNodeStateVarsToFromDict(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestNodeStateVarsToFromDict', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestNodeStateVarsToFromDict', 'tear_down_class()') - - def test_example_6_1_per_22(self): - """Test that to_dict() and from_dict() correctly convert NodeStateVars object to and from dict - in Example 6.1 per 22. - """ - print_status('TestNodeStateVarsToFromDict', 'test_example_6_1_per_22()') - - network = load_instance("example_6_1") - - # Set initial inventory levels to local BS levels. - for n in network.nodes: - n.initial_inventory_level = n.inventory_policy.base_stock_level - - # Strategy for these tests: run sim for a few periods, convert state vars - # to dict and back, compare to original. - simulation(network, 23, rand_seed=17, progress_bar=False) - - # Original NodeStateVars. - original_nsv_lists = {n.index: n.state_vars for n in network.nodes} - - # Convert to dicts. - nsv_dict_lists = {} - for ind, nsv_list in original_nsv_lists.items(): - nsv_dict_lists[ind] = [nsv.to_dict() for nsv in nsv_list] - - # Convert back. - nsv_lists_converted = {} - for ind, nsv_dict_list in nsv_dict_lists.items(): - nsv_lists_converted[ind] = [NodeStateVars.from_dict(nsv_dict) for nsv_dict in nsv_dict_list] - - # Set node attributes to in original_nsv_lists to the node's indices - # (otherwise deep_equal_to() will get confused since from_dict() will only - # set node to the node's index). - for ind, nsv_list in original_nsv_lists.items(): - for t in range(len(nsv_list)): - nsv_list[t].node = nsv_list[t].node.index - - # Check for equality. - for ind, nsv_list in original_nsv_lists.items(): - self.assertListEqual(nsv_list, nsv_lists_converted[ind]) - - def test_assembly_3_stage_per_22(self): - """Test that to_dict() and from_dict() correctly convert NodeStateVars object to and from dict - in Example 6.1 per 22. - """ - print_status('TestNodeStateVarsToFromDict', 'test_assembly_3_stage_per_22()') - - network = load_instance("assembly_3_stage") - - # Set initial inventory levels to local BS levels. - for n in network.nodes: - n.initial_inventory_level = n.inventory_policy.base_stock_level - - # Strategy for these tests: run sim for a few periods, test state - # variables. - simulation(network, 23, rand_seed=17, progress_bar=False) - - # Original NodeStateVars. - original_nsv_lists = {n.index: n.state_vars for n in network.nodes} - - # Convert to dicts. - nsv_dict_lists = {} - for ind, nsv_list in original_nsv_lists.items(): - nsv_dict_lists[ind] = [nsv.to_dict() for nsv in nsv_list] - - # Convert back. - nsv_lists_converted = {} - for ind, nsv_dict_list in nsv_dict_lists.items(): - nsv_lists_converted[ind] = [NodeStateVars.from_dict(nsv_dict) for nsv_dict in nsv_dict_list] - - # Set node attributes to in original_nsv_lists to the node's indices - # (otherwise deep_equal_to() will get confused since from_dict() will only - # set node to the node's index). - for ind, nsv_list in original_nsv_lists.items(): - for t in range(len(nsv_list)): - nsv_list[t].node = nsv_list[t].node.index - - # Check for equality. - for ind, nsv_list in original_nsv_lists.items(): - self.assertListEqual(nsv_list, nsv_lists_converted[ind]) - - -class TestNodeStateVarsEq(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestNodeStateVarsEq', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestNodeStateVarsEq', 'tear_down_class()') - - def test_equal(self): - """Test that __eq__() and __ne__() work when state variables are equal. - """ - print_status('TestNodeStateVarsEq', 'test_equal()') - - network = load_instance("example_6_1") - - # Set initial inventory levels to local BS levels. - for n in network.nodes: - n.initial_inventory_level = n.inventory_policy.base_stock_level - - # Strategy for these tests: run sim for a few periods, make copies of - # state vars, check that they are equal. - simulation(network, 23, rand_seed=17, progress_bar=False) - - # Original NodeStateVars. - original_nsv_lists = {n.index: n.state_vars for n in network.nodes} - - # Copies - copy_nsv_lists = {ind: copy.deepcopy(nsv_list) for ind, nsv_list in original_nsv_lists.items()} - - # Check equality. - for ind, nsv_list in original_nsv_lists.items(): - for t in range(len(nsv_list)): - self.assertTrue(copy_nsv_lists[ind][t] == nsv_list[t]) - self.assertFalse(copy_nsv_lists[ind][t] != nsv_list[t]) - - def test_not_equal(self): - """Test that __eq__() and __ne()__ work when state variables are not equal. - """ - print_status('TestNodeStateVarsEq', 'test_not_equal()') - - network = load_instance("example_6_1") - - # Set initial inventory levels to local BS levels. - for n in network.nodes: - n.initial_inventory_level = n.inventory_policy.base_stock_level - - # Strategy for these tests: run sim for a few periods, make copies of - # state vars, check that they are equal. - simulation(network, 23, rand_seed=17, progress_bar=False) - - # Original NodeStateVars. - original_nsv_lists = {n.index: n.state_vars for n in network.nodes} - - # Copies - copy_nsv_lists = {ind: copy.deepcopy(nsv_list) for ind, nsv_list in original_nsv_lists.items()} - - # Modify one object. - copy_nsv_lists[1][12].inventory_level = 77 - - # Check inequality. - self.assertTrue(copy_nsv_lists[1][12] != original_nsv_lists[1][12]) - self.assertFalse(copy_nsv_lists[1][12] == original_nsv_lists[1][12]) - - -class TestNodeStateVarsDeepEqualTo(unittest.TestCase): - @classmethod - def set_up_class(cls): - """Called once, before any tests.""" - print_status('TestNodeStateVarsDeepEqualTo', 'set_up_class()') - - @classmethod - def tear_down_class(cls): - """Called once, after all tests, if set_up_class successful.""" - print_status('TestNodeStateVarsDeepEqualTo', 'tear_down_class()') - - def test_equal(self): - """Test that deep_equal_to() works when state variables are equal. - """ - print_status('TestNodeStateVarsDeepEqualTo', 'test_equal()') - - network = load_instance("example_6_1") - - # Set initial inventory levels to local BS levels. - for n in network.nodes: - n.initial_inventory_level = n.inventory_policy.base_stock_level - - # Strategy for these tests: run sim for a few periods, make copies of - # state vars, check that they are equal. - simulation(network, 23, rand_seed=17, progress_bar=False) - - # Original NodeStateVars. - original_nsv_lists = {n.index: n.state_vars for n in network.nodes} - - # Copies - copy_nsv_lists = {ind: copy.deepcopy(nsv_list) for ind, nsv_list in original_nsv_lists.items()} - - # Check equality. - for ind, nsv_list in original_nsv_lists.items(): - for t in range(len(nsv_list)): - self.assertTrue(copy_nsv_lists[ind][t].deep_equal_to(nsv_list[t])) - - def test_not_equal(self): - """Test that deep_equal_to() works when state variables are not equal. - """ - print_status('TestNodeStateVarsDeepEqualTo', 'test_not_equal()') - - network = load_instance("example_6_1") - - # Set initial inventory levels to local BS levels. - for n in network.nodes: - n.initial_inventory_level = n.inventory_policy.base_stock_level - - # Strategy for these tests: run sim for a few periods, make copies of - # state vars, check that they are equal. - simulation(network, 23, rand_seed=17, progress_bar=False) - - # Original NodeStateVars. - original_nsv_lists = {n.index: n.state_vars for n in network.nodes} - - # Copies - copy_nsv_lists = {ind: copy.deepcopy(nsv_list) for ind, nsv_list in original_nsv_lists.items()} - - # Modify one object. - copy_nsv_lists[1][12].inventory_level = 77 - - # Check inequality. - self.assertFalse(copy_nsv_lists[1][12].deep_equal_to(original_nsv_lists[1][12])) From c99c0911ba2ec8d7b1a37d03bf45576318049a08 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 3 May 2024 08:34:41 -0400 Subject: [PATCH 47/94] Add SupplyChainNode.validate_predecessor() --- src/stockpyl/node_state_vars.py | 28 ++++++++++--- src/stockpyl/supply_chain_network.py | 26 ++++++++++-- src/stockpyl/supply_chain_node.py | 52 ++++++++++++++++++++++++ tests/test_supply_chain_network.py | 11 +++++- tests/test_supply_chain_node.py | 59 ++++++++++++++++++++++++++++ 5 files changed, 165 insertions(+), 11 deletions(-) diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index 16c4992..7acd3f2 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -296,26 +296,42 @@ def __ne__(self, other): # These are basically shortcuts to the individual attributes that offer more flexibility # in how products are specified (or not). - def get_inbound_shipment_pipeline(predecessor, periods_from_now, product=None): - """Shortcut to ``self.inbound_shipment_pipeline[predecessor][product][periods_from_now]``. + def get_inbound_shipment_pipeline(periods_from_now, predecessor=None, product=None): + """Shortcut to ``self.inbound_shipment_pipeline[predecessor][product][periods_from_now]`` + that does not require predecessor or product if they are inferrable. Parameters ---------- - predecessor : |class_node| or int - Predecessor node (as a |class_node|) or its index. periods_away : int Get pipeline inventory arriving this many periods into the future. + predecessor : |class_node| or int, optional + Predecessor node (as a |class_node|) or its index, or ``None`` (the default) + to detect predecessor automatically for a single-predecessor node. If node has + both an external supplier and a predecessor node and ``predecessor`` is ``None``, + returns the external supplier. product : |class_product| or int, optional - Product (as a |class_product|) or its index, or ``None`` to detect - product automatically for single-product nodes. + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). Returns ------- float Inbound shipment pipeline. """ + # Handle predecessor = None. + if predecessor is None: + if len(self.node.predecessors()) == 1: + predecessor = self.node.predecessors()[0] + elif len(self.node.predcessors()) > 1: + raise ValueError('predecessor cannot be None for nodes with multiple predecessors.') + + # Parse predecessor. _, pred_index = parse_node(predecessor) _, prod_index = parse_product(product) + + + + # --- Calculated State Variables --- # diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 3a6ebed..24fdba1 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -675,7 +675,7 @@ def remove_product(self, product): # Utility functions. - def parse_node(self, node): + def parse_node(self, node, allow_none=True): """Return the node and node index as a tuple, whether ``node`` is a |class_node| object or an int. @@ -683,6 +683,9 @@ def parse_node(self, node): ---------- node : |class_node| or int The node itself (as a |class_node|) or its index (as an int). + allow_none : bool, optional + If ``True`` (the default), ``node`` may be ``None``, in which case the + function returns ``None, None``. If ``False``, raises an exception. Returns ------- @@ -699,7 +702,13 @@ def parse_node(self, node): if ``node`` is not a node in the network. """ - if isinstance(node, SupplyChainNode): + if node is None: + if allow_none: + node_obj = None + node_ind = None + else: + raise ValueError('node may not be None if allow_none is False.') + elif isinstance(node, SupplyChainNode): node_obj = node node_ind = node.index if node_obj not in self.nodes: @@ -715,7 +724,7 @@ def parse_node(self, node): return node_obj, node_ind - def parse_product(self, product): + def parse_product(self, product, allow_none=True): """Return the product and product index as a tuple, whether ``product`` is a |class_product| object or an int. @@ -723,6 +732,9 @@ def parse_product(self, product): ---------- product : |class_product| or int The product itself (as a |class_product|) or its index (as an int). + allow_none : bool, optional + If ``True`` (the default), ``product`` may be ``None``, in which case the + function returns ``None, None``. If ``False``, raises an exception. Returns ------- @@ -739,7 +751,13 @@ def parse_product(self, product): if ``product`` is not a product in the network. """ - if isinstance(product, SupplyChainProduct): + if product is None: + if allow_none: + product_obj = None + product_ind = None + else: + raise TypeError('product may not be None if allow_none is False.') + elif isinstance(product, SupplyChainProduct): product_obj = product product_ind = product.index if product_obj not in self.products: diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 8188823..34df536 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -389,7 +389,59 @@ def neighbor_indices(self): Read only. """ return [n.index for n in self.neighbors] + + def validate_predecessor(self, predecessor): + """Confirm that ``predecessor`` is a valid predecessor of node: + + * If ``predecessor`` is a |class_node| object, confirms that it is a + predecessor of the node, and returns the predecessor node and its index. + * If ``predecessor`` is an int, confirms that it is the index of a predecessor + of the node, and returns the predecessor node and its index. + * If ``predecessor`` is ``None`` and the node has a single predecessor node + (regardless of whether it also has an external supplier), returns the predecessor node and its index. + * If ``predecessor`` is ``None`` and the node has 0 or more than 1 predecessor node and has + an external supplier, returns ``None, None``. (This represents the external supplier.) + * Raises a ``ValueError`` in most other cases. + + Parameters + ---------- + predecessor : |class_node|, int, or ``None`` + The predecessor to validate. + + Returns + ------- + |class_node| + The node object. + int + The node index. + Raises + ------ + TypeError + If ``predecessor`` is not a |class_node|, int, or ``None``. + ValueError + If ``predecessor`` is not a predecessor of the node. + ValueError + If ``predecessor`` is ``None`` and the node has no external supplier + and has 0 or >1 predecessor nodes. + """ + + preds = self.predecessors(include_external=False) + if predecessor is None: + if len(preds) == 1: + return self.network.parse_node(preds[0]) + elif None in self.predecessors(include_external=True): + return None, None + else: + raise ValueError(f'predecessor cannot be None if the node has no external supplier and 0 or >1 predecessor nodes.') + else: + pred_node, pred_ind = self.network.parse_node(predecessor) # raises TypeError on bad type + if pred_node not in preds: + raise ValueError(f'Node {pred_ind} is not a predecessor of node {self.index}.') + else: + return pred_node, pred_ind + + # Properties and functions related to products and bill of materials. @property diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index 906d66c..3e04d2f 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -687,6 +687,10 @@ def test_example_6_1(self): self.assertEqual(node_obj, nodes[3]) self.assertEqual(node_ind, 3) + node_obj, node_ind = network.parse_node(None) + self.assertIsNone(node_obj) + self.assertIsNone(node_ind) + def test_bad_param(self): """Test that parse_node() raises errors correctly on bad parameters. """ @@ -697,6 +701,7 @@ def test_bad_param(self): with self.assertRaises(TypeError): _, _ = network.parse_node(6.5) _, _ = network.parse_node(network.products[0]) + _, _ = network.parse_node(None, allow_none=False) with self.assertRaises(ValueError): _, _ = network.parse_node(5) @@ -738,6 +743,10 @@ def test_multiproduct_5_7(self): self.assertEqual(product_obj, products[3]) self.assertEqual(product_ind, 3) + product_obj, product_ind = network.parse_product(None) + self.assertIsNone(product_obj) + self.assertIsNone(product_ind) + def test_bad_param(self): """Test that parse_product() raises errors correctly on bad parameters. """ @@ -748,11 +757,11 @@ def test_bad_param(self): with self.assertRaises(TypeError): _, _ = network.parse_product(6.5) _, _ = network.parse_product(network.nodes[0]) + _, _ = network.parse_product(None, allow_none=False) with self.assertRaises(ValueError): _, _ = network.parse_product(55) _, _ = network.parse_product(SupplyChainProduct(55)) - class TestAddRemoveProduct(unittest.TestCase): diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 4d55275..74e0176 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -400,6 +400,65 @@ def test_multiproduct_5_7(self): self.assertEqual(anc[4], []) +class TestValidatePredecessor(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestValidatePredecessor', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestValidatePredecessor', 'tear_down_class()') + + def test_example_6_1(self): + """Test validate_predecessor for 3-node serial system in Example 6.1. + """ + print_status('TestValidatePredecessor', 'test_example_6_1()') + + network = load_instance("example_6_1") + nodes = {n.index: n for n in network.nodes} + + pred_obj, pred_ind = nodes[1].validate_predecessor(2) + self.assertEqual(pred_obj, nodes[2]) + self.assertEqual(pred_ind, 2) + + pred_obj, pred_ind = nodes[1].validate_predecessor(nodes[2]) + self.assertEqual(pred_obj, nodes[2]) + self.assertEqual(pred_ind, 2) + + pred_obj, pred_ind = nodes[1].validate_predecessor(None) + self.assertEqual(pred_obj, nodes[2]) + self.assertEqual(pred_ind, 2) + + pred_obj, pred_ind = nodes[3].validate_predecessor(None) + self.assertIsNone(pred_obj) + self.assertIsNone(pred_ind) + + def test_bad_param(self): + """Test that validate_predecessor correctly raises exceptions on bad parameters. + """ + print_status('TestValidatePredecessor', 'test_example_6_1()') + + network = load_instance("example_6_1") + nodes = {n.index: n for n in network.nodes} + + with self.assertRaises(TypeError): + _, _ = nodes[1].validate_predecessor(5.6) + _, _ = nodes[1].validate_predecessor(SupplyChainProduct(1)) + + with self.assertRaises(ValueError): + _, _ = nodes[1].validate_predecessor(nodes[3]) + _, _ = nodes[1].validate_predecessor(3) + + network.add_predecessor(nodes[2], SupplyChainNode(4)) + with self.assertRaises(ValueError): + _, _ = nodes[2].validate_predecessor(None) + + + + + class TestAddProduct(unittest.TestCase): @classmethod def set_up_class(cls): From d13849d74d1c7c302f5cea11d8c236686f850eca Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 4 May 2024 11:35:36 -0400 Subject: [PATCH 48/94] Fixed bug in saving/loading nodes that have attributes that are product-keyed dicts --- CHANGELOG.md | 1 + src/stockpyl/demand_source.py | 2 - src/stockpyl/node_state_vars.py | 464 ++++++++- src/stockpyl/policy.py | 20 +- src/stockpyl/sim.py | 12 +- src/stockpyl/supply_chain_network.py | 3 + src/stockpyl/supply_chain_node.py | 310 +++++- ..._TestSaveInstance_example_4_2_correct.json | 2 +- ..._TestSaveInstance_example_6_1_correct.json | 2 +- ...ample_6_1_with_order_capacity_correct.json | 2 +- ..._TestSaveInstance_example_9_5_correct.json | 2 +- ..._TestSaveInstance_figure_6_14_correct.json | 2 +- ...nstance_omit_state_vars_false_correct.json | 2 +- ...omit_state_vars_false_rosling_correct.json | 2 +- ...Instance_omit_state_vars_true_correct.json | 2 +- .../test_multiproduct_5_7.json | 907 +----------------- tests/test_node_state_vars.py | 192 ++++ tests/test_supply_chain_network.py | 6 +- tests/test_supply_chain_node.py | 580 ++++++----- 19 files changed, 1226 insertions(+), 1287 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5234395..bd9f3f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 a given number and return the corresponding value. - ``loss_functions.standard_normal_loss_dict()`` function, to build a dictionary of loss-function values. - Support for negative binomial demand distributions in ``DemandSource``. +- Functions to validate and parse nodes and products within a network or node. (Mostly used internally for simulation.) ### Changed - ``NodeStateVars`` object is now in its own module, ``node_state_vars.py``, rather than in ``supply_chain_node.py``. diff --git a/src/stockpyl/demand_source.py b/src/stockpyl/demand_source.py index d11a14d..a1cc0ae 100644 --- a/src/stockpyl/demand_source.py +++ b/src/stockpyl/demand_source.py @@ -508,8 +508,6 @@ def from_dict(cls, the_dict): # Set the property/attribute. setattr(ds, prop, value) - - return ds # DEMAND GENERATION diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index 7acd3f2..8dac134 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -53,15 +53,13 @@ class NodeStateVars(object): period : int The period of the simulation that the state variables refer to. inbound_shipment_pipeline : dict - ``inbound_shipment_pipeline[p][prod][r]`` = shipment quantity of product ``prod`` + ``inbound_shipment_pipeline[p][rm][r]`` = shipment quantity of raw material ``rm`` arriving from predecessor node ``p`` in ``r`` periods from the current period. - If ``p`` is ``None``, refers to external supplier. If ``p`` is single-product or - external supplier, ``prod=None``. + If ``p`` is ``None``, refers to external supplier. inbound_shipment : dict - ``inbound_shipment[p][prod]`` = shipment quantity of product ``prod`` arriving at node from + ``inbound_shipment[p][rm]`` = shipment quantity of raw material ``rm`` arriving at node from predecessor node ``p`` in the current period. If ``p`` is ``None``, - refers to external supplier. If ``p`` is single-product or - external supplier, ``prod=None``. + refers to external supplier. inbound_order_pipeline : dict ``inbound_order_pipeline[s][prod][r]`` = order quantity for product ``prod`` arriving from successor node ``s`` in ``r`` periods from the current period. @@ -80,28 +78,26 @@ class NodeStateVars(object): ``outbound_shipment[s][prod]`` = outbound shipment of product ``prod`` to successor node ``s``. If ``s`` is ``None``, refers to external demand. If node is single-product, ``prod=None``. on_order_by_predecessor : dict - ``on_order_by_predecessor[p][prod]`` = on-order quantity (items that have been - ordered from successor node ``p`` but not yet received) for product ``prod`` at node. If ``p`` is ``None``, - refers to external supply. If ``p`` is single-product or external supplier, ``prod=None``. + ``on_order_by_predecessor[p][rm]`` = on-order quantity (items that have been + ordered from predecessor node ``p`` but not yet received) for raw material ``rm`` at node. If ``p`` is ``None``, + refers to external supply. inventory_level : float ``inventory_level[prod]`` = inventory level (positive, negative, or zero) of product ``prod`` at node. - If node is single-product, ``prod=None``. backorders_by_successor : dict ``backorders_by_successor[s][prod]`` = number of backorders of product ``prod`` for successor - ``s``. If ``s`` is ``None``, refers to external demand. If node is single-product, ``prod=None``. + ``s``. If ``s`` is ``None``, refers to external demand. outbound_disrupted_items : dict ``outbound_disrupted_items[s][prod]`` = number of items of product ``prod`` held for successor ``s`` due to a type-SP disruption at ``s``. (Since external demand cannot be - disrupted, ``outbound_disrupted_items[None][prod]`` always = 0.) If node is single-product, ``prod=None``. + disrupted, ``outbound_disrupted_items[None][prod]`` always = 0.) Items held for successor are not included in ``backorders_by_successor``. Sum over all successors of ``backorders_by_successor + outbound_disrupted_items`` should always equal max{0, -``inventory_level``}. inbound_disrupted_items : dict - ``inbound_disrupted_items[p][prod]`` = number of items of product ``prod`` from predecessor ``p`` that are - being held before receipt due to a type-RP disruption at the node. If ``p`` is external supplier or - single-product, ``prod=None``. + ``inbound_disrupted_items[p][rm]`` = number of items of raw material ``rm`` from predecessor ``p`` that are + being held before receipt due to a type-RP disruption at the node. raw_material_inventory : dict - ``raw_material_inventory[prod]`` = number of units of product ``prod`` from _all_ predecessors + ``raw_material_inventory[rm]`` = number of units of raw material ``rm`` from _all_ predecessors in raw-material inventory at node. # TODO: note: this is a change, used to be indexed by predecessor pending_finished_goods : dict @@ -131,7 +127,7 @@ class NodeStateVars(object): ``fill_rate[prod]`` = cumulative fill rate for product ``prod`` in periods 0, ..., period. If node is single product, ``prod=None``. order_quantity : dict - ``order_quantity[p][prod]`` = order quantity for product ``prod`` placed by the node to + ``order_quantity[p][rm]`` = order quantity for raw material ``rm`` placed by the node to predecessor ``p`` in period. If ``p`` is ``None``, refers to external supplier. order_quantity_fg : dict ``order_quantity_fg[prod]`` = finished-goods order quantity for product ``prod`` at the @@ -181,31 +177,13 @@ def __init__(self, node=None, period=None): for prod_index in self.node.product_indices: if rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) and \ p_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): - # Get lead times for this product. + # Get lead times for this product. # TODO: shouldn't inbound shipment pipeline only use shipment LT, not order LT? order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) shipment_lead_time = (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) self.inbound_shipment_pipeline[p_index][rm_index] = [0] * (order_lead_time + shipment_lead_time + 1) - # self.inbound_shipment_pipeline = {p_indices[p]: - # {prod_index: - # [0] * ((self.node.get_attribute('order_lead_time', product=prod_index) or 0) + - # (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) + 1) - # for prod_index in rm_indices[p]} - # for p in self.node.predecessors(include_external=True)} self.inbound_shipment = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.inbound_order_pipeline = {} - for s_index in self.node.successor_indices(include_external=False): - self.inbound_order_pipeline[s_index] = {} - for prod_index in self.node.product_indices: - order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) - self.inbound_order_pipeline[s_index][prod_index] = [0] * (order_lead_time + 1) - - # Add external customer to inbound_order_pipeline. (Must be done - # separately since external customer does not have its own node, - # or its own order lead time.) - if node.demand_source is not None and node.demand_source.type is not None: - self.inbound_order_pipeline[None] = {prod_index: [0] for prod_index in node.product_indices} self.inbound_order = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} self.outbound_shipment = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} self.on_order_by_predecessor = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} @@ -222,6 +200,21 @@ def __init__(self, node=None, period=None): self.order_quantity_fg = {prod_index: 0 for prod_index in self.node.product_indices} self.pending_finished_goods = {prod_index: 0 for prod_index in self.node.product_indices} + # inbound_order_pipeline needs some special handling -- external customer must be added + # separately since it does not have its own node, or its own order lead time. + self.inbound_order_pipeline = {} + for s_index in self.node.successor_indices(include_external=False): + self.inbound_order_pipeline[s_index] = {} + for prod_index in self.node.product_indices: + order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) + self.inbound_order_pipeline[s_index][prod_index] = [0] * (order_lead_time + 1) + for prod_index in node.product_indices: + ds = node.get_attribute('demand_source', prod_index) + if ds is not None and ds.type is not None: + if None not in self.inbound_order_pipeline: + self.inbound_order_pipeline[None] = {} + self.inbound_order_pipeline[None][prod_index] = [0] + # Fill rate quantities. self.demand_cumul = {prod_index: 0 for prod_index in self.node.product_indices} self.demand_met_from_stock = {prod_index: 0 for prod_index in self.node.product_indices} @@ -296,19 +289,71 @@ def __ne__(self, other): # These are basically shortcuts to the individual attributes that offer more flexibility # in how products are specified (or not). - def get_inbound_shipment_pipeline(periods_from_now, predecessor=None, product=None): - """Shortcut to ``self.inbound_shipment_pipeline[predecessor][product][periods_from_now]`` - that does not require predecessor or product if they are inferrable. + def get_inbound_shipment_pipeline(self, periods_from_now, predecessor=None, raw_material=None): + """Shortcut to ``self.inbound_shipment_pipeline[predecessor][raw_material][periods_from_now]`` + that does not require ``predecessor`` or ``raw_material`` to be specified if they are inferrable. Parameters ---------- - periods_away : int + periods_from_now : int Get pipeline inventory arriving this many periods into the future. predecessor : |class_node| or int, optional Predecessor node (as a |class_node|) or its index, or ``None`` (the default) to detect predecessor automatically for a single-predecessor node. If node has both an external supplier and a predecessor node and ``predecessor`` is ``None``, returns the external supplier. + raw_material : |class_product| or int, optional + Raw material (as a |class_product|) or its index, or ``None`` (the default) to detect + raw material automatically for a single-raw material node (including a dummy product). + + Returns + ------- + float + Inbound shipment pipeline. + """ + _, pred_ind = self.node.validate_predecessor(predecessor) + _, rm_ind = self.node.validate_raw_material(raw_material=raw_material, predecessor=predecessor) + + return self.inbound_shipment_pipeline[pred_ind][rm_ind][periods_from_now] + + def get_inbound_shipment(self, predecessor=None, raw_material=None): + """Shortcut to ``self.inbound_shipment[predecessor][raw_material]`` + that does not require ``predecessor`` or ``raw_material`` to be specified if they are inferrable. + + Parameters + ---------- + predecessor : |class_node| or int, optional + Predecessor node (as a |class_node|) or its index, or ``None`` (the default) + to detect predecessor automatically for a single-predecessor node. If node has + both an external supplier and a predecessor node and ``predecessor`` is ``None``, + returns the external supplier. + raw_material : |class_product| or int, optional + Raw material (as a |class_product|) or its index, or ``None`` (the default) to detect + raw material automatically for a single-raw material node (including a dummy product). + + Returns + ------- + float + Inbound shipment. + """ + _, pred_ind = self.node.validate_predecessor(predecessor) + _, rm_ind = self.node.validate_raw_material(raw_material=raw_material, predecessor=predecessor) + + return self.inbound_shipment[pred_ind][rm_ind] + + def get_inbound_order_pipeline(self, periods_from_now, successor=None, product=None): + """Shortcut to ``self.inbound_order_pipeline[successor][product][periods_from_now]`` + that does not require ``successor`` or ``product`` to be specified if they are inferrable. + + Parameters + ---------- + periods_from_now : int + Get pipeline order arriving this many periods into the future. + successor : |class_node| or int, optional + Successor node (as a |class_node|) or its index, or ``None`` (the default) + to detect successor automatically for a single-successor node. If node has + both an external customer and a successor node and ``successor`` is ``None``, + returns the external customer. product : |class_product| or int, optional Product (as a |class_product|) or its index, or ``None`` (the default) to detect product automatically for a single-product node (including a dummy product). @@ -316,20 +361,339 @@ def get_inbound_shipment_pipeline(periods_from_now, predecessor=None, product=No Returns ------- float - Inbound shipment pipeline. + Inbound order pipeline. """ - # Handle predecessor = None. - if predecessor is None: - if len(self.node.predecessors()) == 1: - predecessor = self.node.predecessors()[0] - elif len(self.node.predcessors()) > 1: - raise ValueError('predecessor cannot be None for nodes with multiple predecessors.') + _, succ_ind = self.node.validate_successor(successor) + _, prod_ind = self.node.validate_product(product=product) + + return self.inbound_order_pipeline[succ_ind][prod_ind][periods_from_now] - # Parse predecessor. - _, pred_index = parse_node(predecessor) - _, prod_index = parse_product(product) + def get_inbound_order(self, successor=None, product=None): + """Shortcut to ``self.inbound_order[successor][product]`` + that does not require ``successor`` or ``product`` to be specified if they are inferrable. + + Parameters + ---------- + successor : |class_node| or int, optional + Successor node (as a |class_node|) or its index, or ``None`` (the default) + to detect successor automatically for a single-successor node. If node has + both an external customer and a successor node and ``successor`` is ``None``, + returns the external customer. + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Inbound order. + """ + _, succ_ind = self.node.validate_successor(successor) + _, rm_ind = self.node.validate_product(product=product) + + return self.inbound_order[succ_ind][rm_ind] + def get_demand_cumul(self, product=None): + """Shortcut to ``self.demand_cumul[product]`` + that does not require ``product`` to be specified if it is inferrable. + + Parameters + ---------- + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Cumulative demand. + """ + _, prod_ind = self.node.validate_product(product=product) + + return self.demand_cumul[prod_ind] + + def get_outbound_shipment(self, successor=None, product=None): + """Shortcut to ``self.outbound_shipment[successor][product]`` + that does not require ``successor`` or ``product`` to be specified if they are inferrable. + + Parameters + ---------- + successor : |class_node| or int, optional + Successor node (as a |class_node|) or its index, or ``None`` (the default) + to detect successor automatically for a single-successor node. If node has + both an external customer and a successor node and ``successor`` is ``None``, + returns the external customer. + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Outbound shipment. + """ + _, succ_ind = self.node.validate_successor(successor) + _, prod_ind = self.node.validate_product(product=product) + + return self.outbound_shipment[succ_ind][prod_ind] + + def get_on_order_by_predecessor(self, predecessor=None, raw_material=None): + """Shortcut to ``self.on_order_by_predecessor[predecessor][raw_material]`` + that does not require ``predecessor`` or ``raw_material`` to be specified if they are inferrable. + + Parameters + ---------- + predecessor : |class_node| or int, optional + Predecessor node (as a |class_node|) or its index, or ``None`` (the default) + to detect predecessor automatically for a single-predecessor node. If node has + both an external supplier and a predecessor node and ``predecessor`` is ``None``, + returns the external supplier. + raw_material : |class_product| or int, optional + Raw material (as a |class_product|) or its index, or ``None`` (the default) to detect + raw material automatically for a single-raw material node (including a dummy product). + Returns + ------- + float + On order by predecessor. + """ + _, pred_ind = self.node.validate_predecessor(predecessor) + _, rm_ind = self.node.validate_raw_material(raw_material=raw_material, predecessor=predecessor) + + return self.on_order_by_predecessor[pred_ind][rm_ind] + + def get_inventory_level(self, product=None): + """Shortcut to ``self.inventory_level[product]`` + that does not require ``product`` to be specified if it is inferrable. + + Parameters + ---------- + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Inventory level. + """ + _, prod_ind = self.node.validate_product(product=product) + + return self.inventory_level[prod_ind] + + def get_backorders_by_successor(self, successor=None, product=None): + """Shortcut to ``self.backorders_by_successor[successor][product]`` + that does not require ``successor`` or ``product`` to be specified if they are inferrable. + + Parameters + ---------- + successor : |class_node| or int, optional + Successor node (as a |class_node|) or its index, or ``None`` (the default) + to detect successor automatically for a single-successor node. If node has + both an external customer and a successor node and ``successor`` is ``None``, + returns the external customer. + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Backorders by successor. + """ + _, succ_ind = self.node.validate_successor(successor) + _, prod_ind = self.node.validate_product(product=product) + + return self.backorders_by_successor[succ_ind][prod_ind] + + def get_outbound_disrupted_items(self, successor=None, product=None): + """Shortcut to ``self.outbound_disrupted_items[successor][product]`` + that does not require ``successor`` or ``product`` to be specified if they are inferrable. + + Parameters + ---------- + successor : |class_node| or int, optional + Successor node (as a |class_node|) or its index, or ``None`` (the default) + to detect successor automatically for a single-successor node. If node has + both an external customer and a successor node and ``successor`` is ``None``, + returns the external customer. + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Outbound disrupted items. + """ + _, succ_ind = self.node.validate_successor(successor) + _, prod_ind = self.node.validate_product(product=product) + + return self.outbound_disrupted_items[succ_ind][prod_ind] + + def get_inbound_disrupted_items(self, predecessor=None, raw_material=None): + """Shortcut to ``self.inbound_disrupted_items[predecessor][raw_material]`` + that does not require ``predecessor`` or ``raw_material`` to be specified if they are inferrable. + + Parameters + ---------- + predecessor : |class_node| or int, optional + Predecessor node (as a |class_node|) or its index, or ``None`` (the default) + to detect predecessor automatically for a single-predecessor node. If node has + both an external supplier and a predecessor node and ``predecessor`` is ``None``, + returns the external supplier. + raw_material : |class_product| or int, optional + Raw material (as a |class_product|) or its index, or ``None`` (the default) to detect + raw material automatically for a single-raw material node (including a dummy product). + + Returns + ------- + float + Inbound disrupted items. + """ + _, pred_ind = self.node.validate_predecessor(predecessor) + _, rm_ind = self.node.validate_raw_material(raw_material=raw_material, predecessor=predecessor) + + return self.inbound_disrupted_items[pred_ind][rm_ind] + + def get_raw_material_inventory(self, raw_material=None): + """Shortcut to ``self.raw_material_inventory[raw_material]`` + that does not require ``raw_material`` to be specified if it is inferrable. + + Parameters + ---------- + raw_material : |class_product| or int, optional + Raw material (as a |class_product|) or its index, or ``None`` (the default) to detect + raw material automatically for a single-raw material node (including a dummy product). + + Returns + ------- + float + Raw material inventory. + """ + _, rm_ind = self.node.validate_raw_material(raw_material=raw_material) + + return self.raw_material_inventory[rm_ind] + + def get_pending_finished_goods(self, product=None): + """Shortcut to ``self.pending_finished_goods[product]`` + that does not require ``product`` to be specified if it is inferrable. + + Parameters + ---------- + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Pending finished goods. + """ + _, prod_ind = self.node.validate_product(product=product) + + return self.pending_finished_goods[prod_ind] + + def get_demand_met_from_stock(self, product=None): + """Shortcut to ``self.demand_met_from_stock[product]`` + that does not require ``product`` to be specified if it is inferrable. + + Parameters + ---------- + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Demand met from stock. + """ + _, prod_ind = self.node.validate_product(product=product) + + return self.demand_met_from_stock[prod_ind] + + def get_demand_met_from_stock_cumul(self, product=None): + """Shortcut to ``self.demand_met_from_stock_cumul[product]`` + that does not require ``product`` to be specified if it is inferrable. + + Parameters + ---------- + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Cumulative demand met from stock. + """ + _, prod_ind = self.node.validate_product(product=product) + + return self.demand_met_from_stock_cumul[prod_ind] + + def get_fill_rate(self, product=None): + """Shortcut to ``self.fill_rate[product]`` + that does not require ``product`` to be specified if it is inferrable. + + Parameters + ---------- + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Fill rate. + """ + _, prod_ind = self.node.validate_product(product=product) + + return self.fill_rate[prod_ind] + + def get_order_quantity(self, predecessor=None, raw_material=None): + """Shortcut to ``self.order_quantity[predecessor][raw_material]`` + that does not require ``predecessor`` or ``raw_material`` to be specified if they are inferrable. + + Parameters + ---------- + predecessor : |class_node| or int, optional + Predecessor node (as a |class_node|) or its index, or ``None`` (the default) + to detect predecessor automatically for a single-predecessor node. If node has + both an external supplier and a predecessor node and ``predecessor`` is ``None``, + returns the external supplier. + raw_material : |class_product| or int, optional + Raw material (as a |class_product|) or its index, or ``None`` (the default) to detect + raw material automatically for a single-raw material node (including a dummy product). + + Returns + ------- + float + Order quantity. + """ + _, pred_ind = self.node.validate_predecessor(predecessor) + _, rm_ind = self.node.validate_raw_material(raw_material=raw_material, predecessor=predecessor) + + return self.order_quantity[pred_ind][rm_ind] + + def get_order_quantity_fg(self, product=None): + """Shortcut to ``self.order_quantity_fg[product]`` + that does not require ``product`` to be specified if it is inferrable. + + Parameters + ---------- + product : |class_product| or int, optional + Product (as a |class_product|) or its index, or ``None`` (the default) to detect + product automatically for a single-product node (including a dummy product). + + Returns + ------- + float + Finished-goods order quantity. + """ + _, prod_ind = self.node.validate_product(product=product) + + return self.order_quantity_fg[prod_ind] diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index a528a67..a4e64e5 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -70,8 +70,8 @@ class Policy(object): node : |class_node| The node the policy refers to. - product : |class_product|, optional - The product the policy refers to. The product must be handled by ``node``. Set to ``None`` + product_index : int, optional + The index of the product the policy refers to. The product must be handled by ``node``. May set to ``None`` for single-product models. base_stock_level : float, optional The base-stock level used by the policy, if applicable. Required if ``type`` == 'BS', @@ -288,8 +288,8 @@ def validate_parameters(self): # CONVERTING TO/FROM DICTS def to_dict(self): - """Convert the |class_policy| object to a dict. The ``node`` and ``product`` attributes are set - to the indices of the node and product (if any), rather than to the objects. + """Convert the |class_policy| object to a dict. The ``node`` attribute is set + to the indices of the node, rather than to the object. Returns ------- @@ -304,9 +304,9 @@ def to_dict(self): if attr == '_node': # Use index only. pol_dict['node'] = None if self.node is None else self.node.index - elif attr == '_product': - # Use index only. - pol_dict['product'] = None if self.product is None else self.product.index + # elif attr == '_product': + # # Use index only. + # pol_dict['product'] = None if self.product is None else self.product.index else: # Remove leading '_' to get property names. prop = attr[1:] if attr[0] == '_' else attr @@ -317,9 +317,9 @@ def to_dict(self): @classmethod def from_dict(cls, the_dict): """Return a new |class_policy| object with attributes copied from the - values in ``the_dict``. The ``node`` and ``product'' attributes are set to the indices - of the node and product, like they are in the dict, but should be converted to |class_node| - and |class_product| objects if this function is called recursively from a |class_node|'s + values in ``the_dict``. The ``node`` attribute is set to the index + of the node, like it is in the dict, but should be converted to |class_node| + objecs if this function is called recursively from a |class_node|'s ``from_dict()`` method. Parameters diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index f644bce..c7680ee 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -540,14 +540,16 @@ def _initialize_state_vars(network): n.state_vars[0].inbound_order_pipeline[s.index][prod.index][l] = s.get_attribute('initial_orders', prod) or 0 # State variables indexed by product at predecessor nodes. - for p in n.predecessors(include_external=True): - p_index = p.index if p is not None else None - for prod_index in p.product_indices if p is not None else [n._external_supplier_dummy_product.index]: + for rm_index in n.raw_material_indices_by_product('all', network_BOM=True): + for p_index in n.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): + # for p in n.predecessors(include_external=True): + # p_index = p.index if p is not None else None + # for rm_index in p.product_indices if p is not None else [n._external_supplier_dummy_product.index]: # Initialize inbound shipment pipeline and on-order quantities. for l in range(n.shipment_lead_time or 0): - n.state_vars[0].inbound_shipment_pipeline[p_index][prod_index][l] = n.get_attribute('initial_shipments', prod) or 0 - n.state_vars[0].on_order_by_predecessor[p_index][prod_index] = \ + n.state_vars[0].inbound_shipment_pipeline[p_index][rm_index][l] = n.get_attribute('initial_shipments', prod) or 0 + n.state_vars[0].on_order_by_predecessor[p_index][rm_index] = \ (n.get_attribute('initial_shipments', prod) or 0) * (n.get_attribute('shipment_lead_time', prod) or 0) \ + (n.get_attribute('initial_orders', prod) or 0) * (n.get_attribute('order_lead_time', prod) or 0) diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 24fdba1..302575d 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -368,6 +368,9 @@ def from_dict(cls, the_dict): node._products_by_index = {} for prod_ind in prod_indices: node.add_product(network.products_by_index[prod_ind]) + # Replace product attribute in inventory_policy with product object (SupplyChainNode.to_dict() + # stores it as int.) + node # Replace dummy-product indices with product objects. if node._dummy_product is not None: node._dummy_product = network.products_by_index[node._dummy_product] diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 34df536..4d3d40d 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -279,6 +279,33 @@ def inventory_policy(self, value): self._inventory_policy.node = self # Properties and functions related to network structure. + + @property + def has_external_supplier(self): + """``True`` if the node has an external supplier (i.e., if its ``supply_type`` is not ``None``), + ``False`` otherwise. + """ + has_ext_supp = False + for product in self.products: + if self.get_attribute('supply_type', product=product) is not None: + has_ext_supp = True + break + + return has_ext_supp + + @property + def has_external_customer(self): + """``True`` if the node has an external customer (i.e., if its ``demand_source`` is not ``None``), + ``False`` otherwise. + """ + has_ext_cust = False + for product in self.products: + ds = self.get_attribute('demand_source', product=product) + if ds is not None and ds.type is not None: + has_ext_cust = True + break + + return has_ext_cust def predecessors(self, include_external=False): """Return a list of all predecessors of the node, as |class_node| objects. @@ -293,15 +320,7 @@ def predecessors(self, include_external=False): list List of all predecessors, as |class_node| objects. """ - # Set supply_type to not None if the node or any products have it set to not None. - # TODO: handle this more elegantly (node supply_type property sets based on products too) - supply_type = self.supply_type - if not supply_type: - for prod in self.products: - if prod is not None and not is_integer(prod) and prod.supply_type is not None: - supply_type = prod.supply_type - # Include external supplier if include_external and supply_type is not None. - if include_external and supply_type is not None: + if include_external and self.has_external_supplier: return self._predecessors + [None] else: return self._predecessors @@ -319,8 +338,7 @@ def successors(self, include_external=False): list List of all successors, as |class_node| objects. """ - if include_external and \ - (self.demand_source is not None and self.demand_source.type is not None): + if include_external and self.has_external_customer: return self._successors + [None] else: return self._successors @@ -433,7 +451,7 @@ def validate_predecessor(self, predecessor): elif None in self.predecessors(include_external=True): return None, None else: - raise ValueError(f'predecessor cannot be None if the node has no external supplier and 0 or >1 predecessor nodes.') + raise ValueError(f'predecessor cannot be None if the node has no external supplier and has 0 or >1 predecessor nodes.') else: pred_node, pred_ind = self.network.parse_node(predecessor) # raises TypeError on bad type if pred_node not in preds: @@ -441,6 +459,56 @@ def validate_predecessor(self, predecessor): else: return pred_node, pred_ind + def validate_successor(self, successor): + """Confirm that ``successor`` is a valid successor of node: + + * If ``successor`` is a |class_node| object, confirms that it is a + successor of the node, and returns the successor node and its index. + * If ``successor`` is an int, confirms that it is the index of a successor + of the node, and returns the successor node and its index. + * If ``successor`` is ``None`` and the node has a single successor node + (regardless of whether it also has an external customer), returns the successor node and its index. + * If ``successor`` is ``None`` and the node has 0 or more than 1 successor node and has + an external customer, returns ``None, None``. (This represents the external customer.) + * Raises a ``ValueError`` in most other cases. + + Parameters + ---------- + successor : |class_node|, int, or ``None`` + The successor to validate. + + Returns + ------- + |class_node| + The node object. + int + The node index. + + Raises + ------ + TypeError + If ``successor`` is not a |class_node|, int, or ``None``. + ValueError + If ``successor`` is not a successor of the node. + ValueError + If ``successor`` is ``None`` and the node has no external customer + and has 0 or >1 successor nodes. + """ + + succs = self.successors(include_external=False) + if successor is None: + if len(succs) == 1: + return self.network.parse_node(succs[0]) + elif None in self.successors(include_external=True): + return None, None + else: + raise ValueError(f'successor cannot be None if the node has no external customer and has 0 or >1 successor nodes.') + else: + succ_node, succ_ind = self.network.parse_node(successor) # raises TypeError on bad type + if succ_node not in succs: + raise ValueError(f'Node {succ_ind} is not a successor of node {self.index}.') + else: + return succ_node, succ_ind # Properties and functions related to products and bill of materials. @@ -1058,6 +1126,112 @@ def product_indices_by_raw_material(self, rm_index=None): """ return [prod.index for prod in self.products_by_raw_material(rm_index=rm_index)] + def validate_product(self, product): + """Confirm that ``product`` is a valid product of node: + + * If ``product`` is a |class_product| object, confirms that it is a + product of the node, and returns the product object and its index. + * If ``product`` is an int, confirms that it is the index of a product + of the node, and returns the product object and its index. + * If ``product`` is ``None`` and the node has a single product + (including a dummy product), returns the product node and its index. + * Raises a ``ValueError`` in most other cases. + + Parameters + ---------- + product : |class_product|, int, or ``None`` + The product to validate. + + Returns + ------- + |class_product| + The product object. + int + The product index. + + Raises + ------ + TypeError + If ``product`` is not a |class_product|, int, or ``None``. + ValueError + If ``product`` is not a product of the node. + ValueError + If ``product`` is ``None`` and the node has more than 1 product (including + the dummy product). + """ + + prods = self.products + if product is None: + if len(prods) == 1: + return self.network.parse_product(prods[0]) + else: + raise ValueError(f'product cannot be None if the node has more than 1 product.') + else: + prod_obj, prod_ind = self.network.parse_product(product) # raises TypeError on bad type + if prod_obj not in prods: + raise ValueError(f'Product {prod_ind} is not a product of node {self.index}.') + else: + return prod_obj, prod_ind + + def validate_raw_material(self, raw_material, predecessor=None): + """Confirm that ``raw_material`` is a valid raw material used by the node: + + * If ``raw_material`` is a |class_product| object, confirms that it is a + raw material of the node, and returns the raw material's |class_product| object and its index. + * If ``raw_material`` is an int, confirms that it is the index of a raw material + of the node, and returns the raw material's |class_product| object and its index. + * If ``raw_material`` is ``None`` and the node has a single raw material + (including an external supplier dummy raw material), returns the raw material node and its index. + * Raises a ``ValueError`` in most other cases. + * If ``predecessor`` is not ``None``, also checks that the raw material is provided by that + predecessor, and raises an exception if not. (This only works if ``raw_material`` is not ``None``.) + + Parameters + ---------- + raw_material : |class_product|, int, or ``None`` + The raw material to validate. + predecessor : |class_node| or int, optional + If not ``None`` and ``raw_material`` is not ``None``, the function will check that + ``raw_material`` is provided by ``predecessor`` and raise an exception if not. + + Returns + ------- + |class_product| + The raw material as an object. + int + The raw material index. + + Raises + ------ + TypeError + If ``raw_material`` is not a |class_product|, int, or ``None``. + ValueError + If ``raw_material`` is not a raw material of the node. + ValueError + If ``raw_material`` is ``None`` and the node has more than 1 raw material (including + the dummy raw materials). + ValueError + If ``raw_material`` and ``predecessor`` are both not ``None`` and ``predecessor`` + does not supply this node with ``raw_material``. + """ + + rms = self.raw_materials_by_product(product_index='all', network_BOM=True) + if raw_material is None: + if len(rms) == 1: + return self.network.parse_product(rms[0]) + else: + raise ValueError(f'raw_material cannot be None if the node has more than 1 raw material.') + else: + rm_obj, rm_ind = self.network.parse_product(raw_material) # raises TypeError on bad type + _, pred_ind = self.network.parse_node(predecessor) + if rm_obj not in rms: + raise ValueError(f'Product {rm_ind} is not a raw material of node {self.index}.') + elif pred_ind is not None and \ + pred_ind not in self.raw_material_supplier_indices_by_raw_material(rm_ind, network_BOM=True): + raise ValueError(f'Node {pred_ind} does not provide product {rm_ind} as a raw material to node {self.index}') + else: + return rm_obj, rm_ind + # Properties related to lead times. @property @@ -1312,8 +1486,19 @@ def deep_equal_to(self, other, rel_tol=1e-8): 'stockout_cost', 'revenue', 'initial_inventory_level', 'initial_orders', 'initial_shipments','demand_bound_constant', 'units_required', 'net_demand_mean', 'net_demand_standard_deviation', 'order_capacity'): - # These attributes need approximate comparisons. - if not isclose(getattr(self, attr) or 0, getattr(other, attr) or 0, rel_tol=rel_tol): + # These attributes need approximate comparisons. Check first whether it's a dict or singleton. + self_attr = getattr(self, attr) + other_attr = getattr(other, attr) + if (is_dict(self_attr) and not is_dict(other_attr)) or (not is_dict(self_attr) and is_dict(other_attr)) \ + or (is_dict(self_attr) and set(self_attr.keys()) != set(other_attr.keys())): + viol_attr = attr + eq = False + elif is_dict(self_attr): + for k, v in self_attr.items(): + if not isclose(v or 0, other_attr[k] or 0, rel_tol=rel_tol): + viol_attr = attr + eq = False + elif not isclose(self_attr or 0, other_attr or 0, rel_tol=rel_tol): viol_attr = attr eq = False elif attr in ('demand_source', 'disruption_process'): @@ -1372,7 +1557,17 @@ def to_dict(self): elif attr == '_products_by_index': node_dict[attr] = {prod.index: prod.to_dict() for prod in self.products} elif attr in ('demand_source', 'disruption_process', '_inventory_policy'): - node_dict[attr] = None if getattr(self, attr) is None else getattr(self, attr).to_dict() + # Determine whether attr is a singleton or a dict (for node-product-level attribute). + # Leave a note to the decoder indicating which type of dict this is. + the_attr = None if getattr(self, attr) is None else getattr(self, attr) + if is_dict(the_attr): + node_dict[attr] = {k: v.to_dict() for k, v in the_attr.items()} + node_dict[attr]['dict_type'] = 'product_keyed_attribute' + elif the_attr is None: + node_dict[attr] = None + else: + node_dict[attr] = the_attr.to_dict() + node_dict[attr]['dict_type'] = 'singleton_attribute' elif attr == 'state_vars': node_dict[attr] = None if self.state_vars is None else [sv.to_dict() for sv in self.state_vars] else: @@ -1409,6 +1604,7 @@ def from_dict(cls, the_dict): |class_product| The object converted from the dict. """ + if the_dict is None: node = cls() else: @@ -1419,57 +1615,71 @@ def from_dict(cls, the_dict): # Build empty SupplyChainNode. node = cls(index) # Fill attributes. - for attr in cls._DEFAULT_VALUES.keys(): - # Some attributes require special handling. - if attr == '_index': + for attr_name in cls._DEFAULT_VALUES.keys(): + # Some attributes require special handling. For attributes that are objects (which will have + # been saved as dicts), read 'dict_type' to determine whether this is a product-keyed dict + # or a singleton; also, don't include 'dict_type' in the decoded object. + if attr_name == '_index': # This has no effect--we already set the index--but is needed for setattr() below. value = index - elif attr in ('_products_by_index', '_predecessors', '_successors'): - if attr in the_dict: - value = copy.deepcopy(the_dict[attr]) + elif attr_name in ('_products_by_index', '_predecessors', '_successors'): + if attr_name in the_dict: + value = copy.deepcopy(the_dict[attr_name]) else: - value = copy.deepcopy(cls._DEFAULT_VALUES[attr]) - # elif attr == '_products_by_index': - # if attr not in the_dict: - # value = copy.deepcopy(cls._DEFAULT_VALUES['_products_by_index']) - # else: - # value = copy. - # for prod_dict in (the_dict['_products_by_index'].values() or []): - # value[prod_dict['index']] = SupplyChainProduct.from_dict(prod_dict) - elif attr == 'demand_source': - if attr in the_dict: - value = demand_source.DemandSource.from_dict(the_dict[attr]) + value = copy.deepcopy(cls._DEFAULT_VALUES[attr_name]) + elif attr_name == 'demand_source': + if attr_name in the_dict: + if 'dict_type' in the_dict[attr_name] and the_dict[attr_name]['dict_type'] == 'product_keyed_attribute': + # Attribute is product-keyed dict; convert keys to int (they were probably + # saved as strings) and undictify objects. + value = {int(k): demand_source.DemandSource.from_dict(v) for k, v in the_dict[attr_name].items() if k != 'dict_type'} + else: + value = demand_source.DemandSource.from_dict(the_dict[attr_name]) else: value = demand_source.DemandSource.from_dict(None) - elif attr == 'disruption_process': - if attr in the_dict: - value = disruption_process.DisruptionProcess.from_dict(the_dict[attr]) + elif attr_name == 'disruption_process': + if attr_name in the_dict: + if 'dict_type' in the_dict[attr_name] and the_dict[attr_name]['dict_type'] == 'product_keyed_attribute': + value = {int(k): disruption_process.DisruptionProcess.from_dict(v) for k, v in the_dict[attr_name].items() if k != 'dict_type'} + else: + value = disruption_process.DisruptionProcess.from_dict(the_dict[attr_name]) else: value = disruption_process.DisruptionProcess.from_dict(None) - elif attr == '_inventory_policy': - if attr in the_dict: - value = policy.Policy.from_dict(the_dict[attr]) + elif attr_name == '_inventory_policy': + if attr_name in the_dict: + if 'dict_type' in the_dict[attr_name] and the_dict[attr_name]['dict_type'] == 'product_keyed_attribute': + value = {int(k): policy.Policy.from_dict(v) for k, v in the_dict[attr_name].items() if k != 'dict_type'} + for k in value: + value[k].node = node + else: + value = policy.Policy.from_dict(the_dict[attr_name]) + value.node = node else: value = policy.Policy.from_dict(None) - value.node = node - # Remove "_" from attr so we are setting the property, not the attribute. - attr = 'inventory_policy' - elif attr == 'state_vars': - if attr in the_dict: - if the_dict[attr] is None: + value.node = node + # Remove "_" from attr_name so we are setting the property, not the attribute. + attr_name = 'inventory_policy' + elif attr_name == 'state_vars': + if attr_name in the_dict: + if the_dict[attr_name] is None: value = None else: - value = [NodeStateVars.from_dict(sv) for sv in the_dict[attr]] + value = [NodeStateVars.from_dict(sv) for sv in the_dict[attr_name]] for sv in value: sv.node = node else: - value = cls._DEFAULT_VALUES[attr] + value = cls._DEFAULT_VALUES[attr_name] else: - if attr in the_dict: - value = the_dict[attr] + if attr_name in the_dict: + value = the_dict[attr_name] + if is_dict(the_dict[attr_name]) and 'dict_type' in the_dict[attr_name]: + if the_dict[attr_name]['dict_type'] == 'product_keyed_attribute': + # Keys (products) may have been saved as strings -- replace with ints. + value = replace_dict_numeric_string_keys(value) + del the_dict[attr_name]['dict_type'] else: - value = cls._DEFAULT_VALUES[attr] - setattr(node, attr, value) + value = cls._DEFAULT_VALUES[attr_name] + setattr(node, attr_name, value) return node diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json index ec7cde9..59c0afb 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-04-27 17:40:11.803530"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-05-04 11:24:40.947146"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json index d60f43e..ab47c00 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:11.812669"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.955647"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json index 62b5708..ee27404 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:11.818495"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.960625"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json index 356d61c..3cc7d3f 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-04-27 17:40:11.807225"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-05-04 11:24:40.950419"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json index 6cbd3fc..bc14611 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:11.827168"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.968723"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json index 3444e0a..e37f50b 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "order_quantity_fg": {"-10": 36.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "order_quantity_fg": {"-10": 25.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "order_quantity_fg": {"-10": 29.000000000000014}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "order_quantity_fg": {"-10": 27.999999999999986}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "order_quantity_fg": {"-10": 35.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "order_quantity_fg": {"-10": 24.000000000000007}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "order_quantity_fg": {"-10": 28.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "order_quantity_fg": {"-10": 43.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "order_quantity_fg": {"-10": 22.999999999999993}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "order_quantity_fg": {"-10": 18.99999999999998}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "order_quantity_fg": {"-8": 25.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "order_quantity_fg": {"-8": 29.000000000000014}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "order_quantity_fg": {"-8": 27.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "order_quantity_fg": {"-8": 35.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "order_quantity_fg": {"-8": 24.000000000000007}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "order_quantity_fg": {"-8": 28.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "order_quantity_fg": {"-8": 43.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "order_quantity_fg": {"-8": 22.999999999999993}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "order_quantity_fg": {"-8": 18.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "order_quantity_fg": {"-6": 36.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "order_quantity_fg": {"-6": 25.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "order_quantity_fg": {"-6": 29.000000000000007}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "order_quantity_fg": {"-6": 27.999999999999993}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "order_quantity_fg": {"-6": 35.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "order_quantity_fg": {"-6": 24.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "order_quantity_fg": {"-6": 28.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "order_quantity_fg": {"-6": 43.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "order_quantity_fg": {"-6": 23.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "order_quantity_fg": {"-6": 18.999999999999986}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "order_quantity_fg": {"-4": 36.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "order_quantity_fg": {"-4": 25.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "order_quantity_fg": {"-4": 29.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "order_quantity_fg": {"-4": 27.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "order_quantity_fg": {"-4": 35.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "order_quantity_fg": {"-4": 24.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "order_quantity_fg": {"-4": 28.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "order_quantity_fg": {"-4": 43.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "order_quantity_fg": {"-4": 22.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "order_quantity_fg": {"-4": 18.999999999999986}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "order_quantity_fg": {"-2": 36.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "order_quantity_fg": {"-2": 25.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "order_quantity_fg": {"-2": 29.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "order_quantity_fg": {"-2": 27.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "order_quantity_fg": {"-2": 35.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "order_quantity_fg": {"-2": 24.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "order_quantity_fg": {"-2": 28.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "order_quantity_fg": {"-2": 43.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "order_quantity_fg": {"-2": 22.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "order_quantity_fg": {"-2": 18.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:12.189006"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "order_quantity_fg": {"-10": 36.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "order_quantity_fg": {"-10": 25.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "order_quantity_fg": {"-10": 29.000000000000014}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "order_quantity_fg": {"-10": 27.999999999999986}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "order_quantity_fg": {"-10": 35.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "order_quantity_fg": {"-10": 24.000000000000007}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "order_quantity_fg": {"-10": 28.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "order_quantity_fg": {"-10": 43.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "order_quantity_fg": {"-10": 22.999999999999993}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "order_quantity_fg": {"-10": 18.99999999999998}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "order_quantity_fg": {"-8": 25.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "order_quantity_fg": {"-8": 29.000000000000014}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "order_quantity_fg": {"-8": 27.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "order_quantity_fg": {"-8": 35.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "order_quantity_fg": {"-8": 24.000000000000007}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "order_quantity_fg": {"-8": 28.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "order_quantity_fg": {"-8": 43.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "order_quantity_fg": {"-8": 22.999999999999993}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "order_quantity_fg": {"-8": 18.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "order_quantity_fg": {"-6": 36.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "order_quantity_fg": {"-6": 25.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "order_quantity_fg": {"-6": 29.000000000000007}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "order_quantity_fg": {"-6": 27.999999999999993}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "order_quantity_fg": {"-6": 35.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "order_quantity_fg": {"-6": 24.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "order_quantity_fg": {"-6": 28.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "order_quantity_fg": {"-6": 43.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "order_quantity_fg": {"-6": 23.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "order_quantity_fg": {"-6": 18.999999999999986}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "order_quantity_fg": {"-4": 36.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "order_quantity_fg": {"-4": 25.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "order_quantity_fg": {"-4": 29.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "order_quantity_fg": {"-4": 27.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "order_quantity_fg": {"-4": 35.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "order_quantity_fg": {"-4": 24.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "order_quantity_fg": {"-4": 28.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "order_quantity_fg": {"-4": 43.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "order_quantity_fg": {"-4": 22.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "order_quantity_fg": {"-4": 18.999999999999986}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "order_quantity_fg": {"-2": 36.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "order_quantity_fg": {"-2": 25.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "order_quantity_fg": {"-2": 29.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "order_quantity_fg": {"-2": 27.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "order_quantity_fg": {"-2": 35.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "order_quantity_fg": {"-2": 24.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "order_quantity_fg": {"-2": 28.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "order_quantity_fg": {"-2": 43.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "order_quantity_fg": {"-2": 22.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "order_quantity_fg": {"-2": 18.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.340322"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json index 15017a6..bfc224b 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "order_quantity_fg": {"-2": 9.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 9.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "order_quantity_fg": {"-2": 0.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "order_quantity_fg": {"-4": 14.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "order_quantity_fg": {"-4": 11.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "order_quantity_fg": {"-4": 6.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "order_quantity_fg": {"-6": 14.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "order_quantity_fg": {"-6": 8.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "order_quantity_fg": {"-6": 0.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 16.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 6.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 5.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "order_quantity_fg": {"-8": 18.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 18.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 23.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "order_quantity_fg": {"-8": 12.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 12.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "order_quantity_fg": {"-8": 7.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "order_quantity_fg": {"-8": 10.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 11.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "order_quantity_fg": {"-8": 2.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 2.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "order_quantity_fg": {"-8": 8.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "order_quantity_fg": {"-10": 22.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "order_quantity_fg": {"-10": 3.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "order_quantity_fg": {"-10": 2.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "order_quantity_fg": {"-12": 44.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "order_quantity_fg": {"-12": 27.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "order_quantity_fg": {"-12": 22.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "order_quantity_fg": {"-12": 9.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "order_quantity_fg": {"-12": 14.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "order_quantity_fg": {"-12": 10.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "order_quantity_fg": {"-12": 4.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "order_quantity_fg": {"-12": 16.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "order_quantity_fg": {"-12": 6.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "order_quantity_fg": {"-14": 64.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "order_quantity_fg": {"-14": 21.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "order_quantity_fg": {"-14": 14.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "order_quantity_fg": {"-14": 10.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "order_quantity_fg": {"-14": 1.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "order_quantity_fg": {"-14": 2.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "order_quantity_fg": {"-14": 16.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "order_quantity_fg": {"-14": 6.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:12.459005"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "order_quantity_fg": {"-2": 9.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 9.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "order_quantity_fg": {"-2": 0.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "order_quantity_fg": {"-4": 14.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "order_quantity_fg": {"-4": 11.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "order_quantity_fg": {"-4": 6.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "order_quantity_fg": {"-6": 14.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "order_quantity_fg": {"-6": 8.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "order_quantity_fg": {"-6": 0.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 16.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 6.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 5.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "order_quantity_fg": {"-8": 18.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 18.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 23.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "order_quantity_fg": {"-8": 12.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 12.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "order_quantity_fg": {"-8": 7.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "order_quantity_fg": {"-8": 10.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 11.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "order_quantity_fg": {"-8": 2.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 2.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "order_quantity_fg": {"-8": 8.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "order_quantity_fg": {"-10": 22.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "order_quantity_fg": {"-10": 3.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "order_quantity_fg": {"-10": 2.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "order_quantity_fg": {"-12": 44.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "order_quantity_fg": {"-12": 27.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "order_quantity_fg": {"-12": 22.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "order_quantity_fg": {"-12": 9.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "order_quantity_fg": {"-12": 14.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "order_quantity_fg": {"-12": 10.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "order_quantity_fg": {"-12": 4.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "order_quantity_fg": {"-12": 16.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "order_quantity_fg": {"-12": 6.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "order_quantity_fg": {"-14": 64.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "order_quantity_fg": {"-14": 21.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "order_quantity_fg": {"-14": 14.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "order_quantity_fg": {"-14": 10.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "order_quantity_fg": {"-14": 1.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "order_quantity_fg": {"-14": 2.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "order_quantity_fg": {"-14": 16.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "order_quantity_fg": {"-14": 6.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.609999"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json index 8ef47de..6bf2c1e 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-27 17:40:12.099526"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.240524"} \ No newline at end of file diff --git a/tests/additional_files/test_multiproduct_5_7.json b/tests/additional_files/test_multiproduct_5_7.json index 437b1d3..9035f23 100644 --- a/tests/additional_files/test_multiproduct_5_7.json +++ b/tests/additional_files/test_multiproduct_5_7.json @@ -1,906 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "bom_structure", - "description": "", - "data": { - "nodes": [ - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "5": 5, - "6": 6 - }, - "_dummy_product": null, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - null - ], - "_successors": [ - 2, - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "2": 2, - "3": 3, - "4": 4 - }, - "_dummy_product": null, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 4 - ], - "_successors": [ - 0, - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "2": 2, - "4": 4 - }, - "_dummy_product": null, - "_external_supplier_dummy_product": -4, - "_predecessors": [ - 4 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "0": 0 - }, - "_dummy_product": null, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - 2 - ], - "_successors": [], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 0, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "0": 0, - "1": 1 - }, - "_dummy_product": null, - "_external_supplier_dummy_product": -2, - "_predecessors": [ - 2, - 3 - ], - "_successors": [], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_products": [ - { - "_index": 1, - "name": null, - "network": null, - "is_dummy": false, - "_bill_of_materials": { - "3": 10, - "4": 3.8 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": 2, - "name": null, - "network": null, - "is_dummy": false, - "_bill_of_materials": { - "5": 0.2 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": 3, - "name": null, - "network": null, - "is_dummy": false, - "_bill_of_materials": { - "5": 2 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": 4, - "name": null, - "network": null, - "is_dummy": false, - "_bill_of_materials": { - "6": 50 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": 5, - "name": null, - "network": null, - "is_dummy": false, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": 6, - "name": null, - "network": null, - "is_dummy": false, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": 0, - "name": null, - "network": null, - "is_dummy": false, - "_bill_of_materials": { - "2": 2.5, - "3": 7 - }, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2024-04-15 21:15:04.243666" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"5": {"type": "BS", "node": 4, "product": 5, "base_stock_level": 1500, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "6": {"type": "BS", "node": 4, "product": 6, "base_stock_level": 7500, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product": -5, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": {"2": 6, "3": 5, "4": 4}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"2": {"type": "BS", "node": 2, "product": 2, "base_stock_level": 50, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "3": {"type": "BS", "node": 2, "product": 3, "base_stock_level": 300, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "4": {"type": "BS", "node": 2, "product": 4, "base_stock_level": 60, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": {"2": 5, "4": 4}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"2": {"type": "BS", "node": 3, "product": 2, "base_stock_level": 20, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "4": {"type": "BS", "node": 3, "product": 4, "base_stock_level": 20, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product": -1001, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 5, "standard_deviation": 2.23606797749979, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": 0, "base_stock_level": 5, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": {"0": 12, "1": 20}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"0": {"type": "P", "mean": 4, "standard_deviation": 2.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "1": {"type": "P", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "dict_type": "product_keyed_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"0": {"type": "BS", "node": 1, "product": 0, "base_stock_level": 4, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "1": {"type": "BS", "node": 1, "product": 1, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": 0.3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": 10, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 350, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 08:54:50.372064"} \ No newline at end of file diff --git a/tests/test_node_state_vars.py b/tests/test_node_state_vars.py index cf46832..ee2bfdb 100644 --- a/tests/test_node_state_vars.py +++ b/tests/test_node_state_vars.py @@ -374,6 +374,198 @@ def test_assembly_3_stage_per_43(self): # +class TestGetStateVariables(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestGetStateVariables', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestGetStateVariables', 'tear_down_class()') + + def test_example_6_1_per_22(self): + """Test state variables for simulation of 3-node serial system in + Example 6.1 at end of period 22. + """ + print_status('TestGetStateVariables', 'test_example_6_1_per_22()') + + network = load_instance("example_6_1") + + # Strategy for these tests: run sim for a few periods, test state + # variable shortcuts against dicts. + simulation(network, 23, rand_seed=17, progress_bar=False) + + nodes = {i: network.get_node_from_index(i) for i in range(1, 4)} + + for n in nodes.values(): + # Indexed by predecessor and raw material. + for rm in n.raw_materials_by_product('all', network_BOM=True): + rm_ind = rm.index + for pred_ind in n.raw_material_supplier_indices_by_raw_material(rm_ind, network_BOM=True): + self.assertEqual(n.state_vars[22].inbound_shipment[pred_ind][rm_ind], + n.state_vars[22].get_inbound_shipment(predecessor=pred_ind, raw_material=rm_ind)) + self.assertEqual(n.state_vars[22].on_order_by_predecessor[pred_ind][rm_ind], + n.state_vars[22].get_on_order_by_predecessor(predecessor=pred_ind, raw_material=rm_ind)) + self.assertEqual(n.state_vars[22].inbound_disrupted_items[pred_ind][rm_ind], + n.state_vars[22].get_inbound_disrupted_items(predecessor=pred_ind, raw_material=rm_ind)) + self.assertEqual(n.state_vars[22].order_quantity[pred_ind][rm_ind], + n.state_vars[22].get_order_quantity(predecessor=pred_ind, raw_material=rm_ind)) + for r in range(len(n.state_vars[22].inbound_shipment_pipeline[pred_ind][rm_ind])): + self.assertEqual(n.state_vars[22].inbound_shipment_pipeline[pred_ind][rm_ind][r], + n.state_vars[22].get_inbound_shipment_pipeline(periods_from_now=r, predecessor=pred_ind, raw_material=rm_ind)) + + # Indexed by successor and product. + for product in n.products: + prod_ind = product.index + for succ_ind in n.successor_indices(include_external=True): + self.assertEqual(n.state_vars[22].inbound_order[succ_ind][prod_ind], + n.state_vars[22].get_inbound_order(successor=succ_ind, product=prod_ind)) + self.assertEqual(n.state_vars[22].outbound_shipment[succ_ind][prod_ind], + n.state_vars[22].get_outbound_shipment(successor=succ_ind, product=prod_ind)) + self.assertEqual(n.state_vars[22].backorders_by_successor[succ_ind][prod_ind], + n.state_vars[22].get_backorders_by_successor(successor=succ_ind, product=prod_ind)) + self.assertEqual(n.state_vars[22].outbound_disrupted_items[succ_ind][prod_ind], + n.state_vars[22].get_outbound_disrupted_items(successor=succ_ind, product=prod_ind)) + for r in range(len(n.state_vars[22].inbound_order_pipeline[succ_ind][prod_ind])): + self.assertEqual(n.state_vars[22].inbound_order_pipeline[succ_ind][prod_ind][r], + n.state_vars[22].get_inbound_order_pipeline(periods_from_now=r, successor=succ_ind, product=prod_ind)) + + # Indexed by product. + for prod_ind in n.product_indices: + self.assertEqual(n.state_vars[22].demand_cumul[prod_ind], n.state_vars[22].get_demand_cumul(product=prod_ind)) + self.assertEqual(n.state_vars[22].inventory_level[prod_ind], n.state_vars[22].get_inventory_level(product=prod_ind)) + self.assertEqual(n.state_vars[22].pending_finished_goods[prod_ind], n.state_vars[22].get_pending_finished_goods(product=prod_ind)) + self.assertEqual(n.state_vars[22].demand_met_from_stock[prod_ind], n.state_vars[22].get_demand_met_from_stock(product=prod_ind)) + self.assertEqual(n.state_vars[22].demand_met_from_stock_cumul[prod_ind], n.state_vars[22].get_demand_met_from_stock_cumul(product=prod_ind)) + self.assertEqual(n.state_vars[22].fill_rate[prod_ind], n.state_vars[22].get_fill_rate(product=prod_ind)) + self.assertEqual(n.state_vars[22].order_quantity_fg[prod_ind], n.state_vars[22].get_order_quantity_fg(product=prod_ind)) + + # Indexed by raw material. + for rm_ind in n.raw_material_indices_by_product('all', network_BOM=True): + self.assertEqual(n.state_vars[22].raw_material_inventory[rm_ind], n.state_vars[22].get_raw_material_inventory(raw_material=rm_ind)) + + def test_assembly_3_stage_per_43(self): + """Test state variables for simulation of 3-node assembly system at end of period 43. + """ + print_status('TestGetStateVariables', 'test_assembly_3_stage_per_43()') + + network = load_instance("assembly_3_stage") + + # Strategy for these tests: run sim for a few periods, test state + # variable shortcuts against dicts. + simulation(network, 44, rand_seed=17, progress_bar=False) + nodes = {n.index: n for n in network.nodes} + + for n in nodes.values(): + # Indexed by predecessor and raw material. + for rm in n.raw_materials_by_product('all', network_BOM=True): + rm_ind = rm.index + for pred_ind in n.raw_material_supplier_indices_by_raw_material(rm_ind, network_BOM=True): + self.assertEqual(n.state_vars[43].inbound_shipment[pred_ind][rm_ind], + n.state_vars[43].get_inbound_shipment(predecessor=pred_ind, raw_material=rm_ind)) + self.assertEqual(n.state_vars[43].on_order_by_predecessor[pred_ind][rm_ind], + n.state_vars[43].get_on_order_by_predecessor(predecessor=pred_ind, raw_material=rm_ind)) + self.assertEqual(n.state_vars[43].inbound_disrupted_items[pred_ind][rm_ind], + n.state_vars[43].get_inbound_disrupted_items(predecessor=pred_ind, raw_material=rm_ind)) + self.assertEqual(n.state_vars[43].order_quantity[pred_ind][rm_ind], + n.state_vars[43].get_order_quantity(predecessor=pred_ind, raw_material=rm_ind)) + for r in range(len(n.state_vars[43].inbound_shipment_pipeline[pred_ind][rm_ind])): + self.assertEqual(n.state_vars[43].inbound_shipment_pipeline[pred_ind][rm_ind][r], + n.state_vars[43].get_inbound_shipment_pipeline(periods_from_now=r, predecessor=pred_ind, raw_material=rm_ind)) + + # Indexed by successor and product. + for product in n.products: + prod_ind = product.index + for succ_ind in n.successor_indices(include_external=True): + self.assertEqual(n.state_vars[43].inbound_order[succ_ind][prod_ind], + n.state_vars[43].get_inbound_order(successor=succ_ind, product=prod_ind)) + self.assertEqual(n.state_vars[43].outbound_shipment[succ_ind][prod_ind], + n.state_vars[43].get_outbound_shipment(successor=succ_ind, product=prod_ind)) + self.assertEqual(n.state_vars[43].backorders_by_successor[succ_ind][prod_ind], + n.state_vars[43].get_backorders_by_successor(successor=succ_ind, product=prod_ind)) + self.assertEqual(n.state_vars[43].outbound_disrupted_items[succ_ind][prod_ind], + n.state_vars[43].get_outbound_disrupted_items(successor=succ_ind, product=prod_ind)) + for r in range(len(n.state_vars[43].inbound_order_pipeline[succ_ind][prod_ind])): + self.assertEqual(n.state_vars[43].inbound_order_pipeline[succ_ind][prod_ind][r], + n.state_vars[43].get_inbound_order_pipeline(periods_from_now=r, successor=succ_ind, product=prod_ind)) + + # Indexed by product. + for prod_ind in n.product_indices: + self.assertEqual(n.state_vars[43].demand_cumul[prod_ind], n.state_vars[43].get_demand_cumul(product=prod_ind)) + self.assertEqual(n.state_vars[43].inventory_level[prod_ind], n.state_vars[43].get_inventory_level(product=prod_ind)) + self.assertEqual(n.state_vars[43].pending_finished_goods[prod_ind], n.state_vars[43].get_pending_finished_goods(product=prod_ind)) + self.assertEqual(n.state_vars[43].demand_met_from_stock[prod_ind], n.state_vars[43].get_demand_met_from_stock(product=prod_ind)) + self.assertEqual(n.state_vars[43].demand_met_from_stock_cumul[prod_ind], n.state_vars[43].get_demand_met_from_stock_cumul(product=prod_ind)) + self.assertEqual(n.state_vars[43].fill_rate[prod_ind], n.state_vars[43].get_fill_rate(product=prod_ind)) + self.assertEqual(n.state_vars[43].order_quantity_fg[prod_ind], n.state_vars[43].get_order_quantity_fg(product=prod_ind)) + + # Indexed by raw material. + for rm_ind in n.raw_material_indices_by_product('all', network_BOM=True): + self.assertEqual(n.state_vars[43].raw_material_inventory[rm_ind], n.state_vars[43].get_raw_material_inventory(raw_material=rm_ind)) + + def test_multiproduct_5_7_per_43(self): + """Test state variables for simulation of 5-node, 7-product system at end of period 43. + """ + print_status('TestGetStateVariables', 'test_multiproduct_5_7_per_43()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + + # Strategy for these tests: run sim for a few periods, test state + # variable shortcuts against dicts. + simulation(network, 44, rand_seed=17, progress_bar=False) + nodes = {n.index: n for n in network.nodes} + + for n in nodes.values(): + # Indexed by predecessor and raw material. + for rm in n.raw_materials_by_product('all', network_BOM=True): + rm_ind = rm.index + for pred_ind in n.raw_material_supplier_indices_by_raw_material(rm_ind, network_BOM=True): + self.assertEqual(n.state_vars[43].inbound_shipment[pred_ind][rm_ind], + n.state_vars[43].get_inbound_shipment(predecessor=pred_ind, raw_material=rm_ind)) + self.assertEqual(n.state_vars[43].on_order_by_predecessor[pred_ind][rm_ind], + n.state_vars[43].get_on_order_by_predecessor(predecessor=pred_ind, raw_material=rm_ind)) + self.assertEqual(n.state_vars[43].inbound_disrupted_items[pred_ind][rm_ind], + n.state_vars[43].get_inbound_disrupted_items(predecessor=pred_ind, raw_material=rm_ind)) + self.assertEqual(n.state_vars[43].order_quantity[pred_ind][rm_ind], + n.state_vars[43].get_order_quantity(predecessor=pred_ind, raw_material=rm_ind)) + for r in range(len(n.state_vars[43].inbound_shipment_pipeline[pred_ind][rm_ind])): + self.assertEqual(n.state_vars[43].inbound_shipment_pipeline[pred_ind][rm_ind][r], + n.state_vars[43].get_inbound_shipment_pipeline(periods_from_now=r, predecessor=pred_ind, raw_material=rm_ind)) + + # Indexed by successor and product. + for product in n.products: + prod_ind = product.index + for succ_ind in n.successor_indices(include_external=True): + self.assertEqual(n.state_vars[43].inbound_order[succ_ind][prod_ind], + n.state_vars[43].get_inbound_order(successor=succ_ind, product=prod_ind)) + self.assertEqual(n.state_vars[43].outbound_shipment[succ_ind][prod_ind], + n.state_vars[43].get_outbound_shipment(successor=succ_ind, product=prod_ind)) + self.assertEqual(n.state_vars[43].backorders_by_successor[succ_ind][prod_ind], + n.state_vars[43].get_backorders_by_successor(successor=succ_ind, product=prod_ind)) + self.assertEqual(n.state_vars[43].outbound_disrupted_items[succ_ind][prod_ind], + n.state_vars[43].get_outbound_disrupted_items(successor=succ_ind, product=prod_ind)) + for r in range(len(n.state_vars[43].inbound_order_pipeline[succ_ind][prod_ind])): + self.assertEqual(n.state_vars[43].inbound_order_pipeline[succ_ind][prod_ind][r], + n.state_vars[43].get_inbound_order_pipeline(periods_from_now=r, successor=succ_ind, product=prod_ind)) + + # Indexed by product. + for prod_ind in n.product_indices: + self.assertEqual(n.state_vars[43].demand_cumul[prod_ind], n.state_vars[43].get_demand_cumul(product=prod_ind)) + self.assertEqual(n.state_vars[43].inventory_level[prod_ind], n.state_vars[43].get_inventory_level(product=prod_ind)) + self.assertEqual(n.state_vars[43].pending_finished_goods[prod_ind], n.state_vars[43].get_pending_finished_goods(product=prod_ind)) + self.assertEqual(n.state_vars[43].demand_met_from_stock[prod_ind], n.state_vars[43].get_demand_met_from_stock(product=prod_ind)) + self.assertEqual(n.state_vars[43].demand_met_from_stock_cumul[prod_ind], n.state_vars[43].get_demand_met_from_stock_cumul(product=prod_ind)) + self.assertEqual(n.state_vars[43].fill_rate[prod_ind], n.state_vars[43].get_fill_rate(product=prod_ind)) + self.assertEqual(n.state_vars[43].order_quantity_fg[prod_ind], n.state_vars[43].get_order_quantity_fg(product=prod_ind)) + + # Indexed by raw material. + for rm_ind in n.raw_material_indices_by_product('all', network_BOM=True): + self.assertEqual(n.state_vars[43].raw_material_inventory[rm_ind], n.state_vars[43].get_raw_material_inventory(raw_material=rm_ind)) + + + class TestNodeStateVarsToFromDict(unittest.TestCase): @classmethod def set_up_class(cls): diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index 3e04d2f..4a2de02 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -803,7 +803,7 @@ def test_multiproduct_5_7(self): network.remove_product(network.products_by_index[10]) - self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 11, -1001, -9, -7, -5, -4, -3, -2])) + self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 11, -1001, -9, -7, -5, -3])) class TestProductLists(unittest.TestCase): @@ -842,9 +842,9 @@ def test_multiproduct_5_7(self): network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") network.add_product(SupplyChainProduct(10)) network.add_product(SupplyChainProduct(11)) - products = {i: network.products_by_index[i] for i in [0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -9, -7, -5, -4, -3, -2]} + products = {prod.index: prod for prod in network.products} - self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -9, -7, -5, -4, -3, -2])) + self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -9, -7, -5, -3])) self.assertSetEqual(set(network.products), set(products.values())) self.assertDictEqual(network.products_by_index, {i: products[i] for i in products.keys()}) diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 74e0176..5e5d1c4 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -262,7 +262,105 @@ def test_multiproduct_node(self): node.get_attribute('local_holding_cost', None) - +class TestHasExternalSupplierCustomer(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestHasExternalSupplierCustomer', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestHasExternalSupplierCustomer', 'tear_down_class()') + + def test_example_6_1(self): + """Test external supplier/customer checks in Example 6.1. + """ + print_status('TestHasExternalSupplierCustomer', 'test_example_6_1()') + + network = load_instance("example_6_1") + nodes = {n.index: n for n in network.nodes} + + self.assertTrue(nodes[3].has_external_supplier) + self.assertFalse(nodes[3].has_external_customer) + self.assertFalse(nodes[2].has_external_supplier) + self.assertFalse(nodes[2].has_external_customer) + self.assertFalse(nodes[1].has_external_supplier) + self.assertTrue(nodes[1].has_external_customer) + + def test_example_6_1(self): + """Test external supplier/customer checks in Example 6.1. + """ + print_status('TestHasExternalSupplierCustomer', 'test_example_6_1()') + + network = load_instance("example_6_1") + nodes = {n.index: n for n in network.nodes} + + self.assertTrue(nodes[3].has_external_supplier) + self.assertFalse(nodes[3].has_external_customer) + self.assertFalse(nodes[2].has_external_supplier) + self.assertFalse(nodes[2].has_external_customer) + self.assertFalse(nodes[1].has_external_supplier) + self.assertTrue(nodes[1].has_external_customer) + + def test_assembly_3_stage(self): + """Test external supplier/customer checks in assembly 3 stage. + """ + print_status('TestHasExternalSupplierCustomer', 'test_assembly_3_stage()') + + network = load_instance("assembly_3_stage") + nodes = {n.index: n for n in network.nodes} + + self.assertTrue(nodes[1].has_external_supplier) + self.assertFalse(nodes[1].has_external_customer) + self.assertTrue(nodes[2].has_external_supplier) + self.assertFalse(nodes[2].has_external_customer) + self.assertFalse(nodes[0].has_external_supplier) + self.assertTrue(nodes[0].has_external_customer) + + def test_rosling_figure_1(self): + """Test external supplier/customer checks in Rosling Figure 1. + """ + print_status('TestHasExternalSupplierCustomer', 'test_rosling_figure_1()') + + network = load_instance("rosling_figure_1") + nodes = {n.index: n for n in network.nodes} + + self.assertFalse(nodes[1].has_external_supplier) + self.assertTrue(nodes[1].has_external_customer) + self.assertFalse(nodes[2].has_external_supplier) + self.assertFalse(nodes[2].has_external_customer) + self.assertFalse(nodes[3].has_external_supplier) + self.assertFalse(nodes[3].has_external_customer) + self.assertFalse(nodes[4].has_external_supplier) + self.assertFalse(nodes[4].has_external_customer) + self.assertTrue(nodes[5].has_external_supplier) + self.assertFalse(nodes[5].has_external_customer) + self.assertTrue(nodes[6].has_external_supplier) + self.assertFalse(nodes[6].has_external_customer) + self.assertTrue(nodes[7].has_external_supplier) + self.assertFalse(nodes[7].has_external_customer) + + def test_multiproduct_5_7(self): + """Test external supplier/customer checks in 5-node, 7-product system. + """ + print_status('TestHasExternalSupplierCustomer', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + nodes = {n.index: n for n in network.nodes} + + self.assertFalse(nodes[0].has_external_supplier) + self.assertTrue(nodes[0].has_external_customer) + self.assertFalse(nodes[1].has_external_supplier) + self.assertTrue(nodes[1].has_external_customer) + self.assertFalse(nodes[2].has_external_supplier) + self.assertFalse(nodes[2].has_external_customer) + self.assertFalse(nodes[3].has_external_supplier) + self.assertFalse(nodes[3].has_external_customer) + self.assertTrue(nodes[4].has_external_supplier) + self.assertFalse(nodes[4].has_external_customer) + + class TestDescendants(unittest.TestCase): @classmethod def set_up_class(cls): @@ -438,7 +536,7 @@ def test_example_6_1(self): def test_bad_param(self): """Test that validate_predecessor correctly raises exceptions on bad parameters. """ - print_status('TestValidatePredecessor', 'test_example_6_1()') + print_status('TestValidatePredecessor', 'test_bad_param()') network = load_instance("example_6_1") nodes = {n.index: n for n in network.nodes} @@ -456,7 +554,60 @@ def test_bad_param(self): _, _ = nodes[2].validate_predecessor(None) +class TestValidateSuccessor(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestValidateSuccessor', 'set_up_class()') + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestValidateSuccessor', 'tear_down_class()') + + def test_example_6_1(self): + """Test validate_successor for 3-node serial system in Example 6.1. + """ + print_status('TestValidateSuccessor', 'test_example_6_1()') + + network = load_instance("example_6_1") + nodes = {n.index: n for n in network.nodes} + + succ_obj, succ_ind = nodes[2].validate_successor(1) + self.assertEqual(succ_obj, nodes[1]) + self.assertEqual(succ_ind, 1) + + succ_obj, succ_ind = nodes[2].validate_successor(nodes[1]) + self.assertEqual(succ_obj, nodes[1]) + self.assertEqual(succ_ind, 1) + + succ_obj, succ_ind = nodes[3].validate_successor(None) + self.assertEqual(succ_obj, nodes[2]) + self.assertEqual(succ_ind, 2) + + succ_obj, succ_ind = nodes[1].validate_successor(None) + self.assertIsNone(succ_obj) + self.assertIsNone(succ_ind) + + def test_bad_param(self): + """Test that validate_successor correctly raises exceptions on bad parameters. + """ + print_status('TestValidateSuccessor', 'test_bad_param()') + + network = load_instance("example_6_1") + nodes = {n.index: n for n in network.nodes} + + with self.assertRaises(TypeError): + _, _ = nodes[1].validate_successor(5.6) + _, _ = nodes[1].validate_successor(SupplyChainProduct(1)) + + with self.assertRaises(ValueError): + _, _ = nodes[3].validate_successor(nodes[1]) + _, _ = nodes[3].validate_successor(1) + + network.add_successor(nodes[2], SupplyChainNode(4)) + with self.assertRaises(ValueError): + _, _ = nodes[2].validate_successor(None) class TestAddProduct(unittest.TestCase): @@ -750,257 +901,6 @@ def test_multiproduct_5_7(self): self.assertTrue(network.get_node_from_index(20).is_singleproduct) - - - -# class TestGetProductFromIndex(unittest.TestCase): -# @classmethod -# def set_up_class(cls): -# """Called once, before any tests.""" -# print_status('TestGetProductFromIndex', 'set_up_class()') - -# @classmethod -# def tear_down_class(cls): -# """Called once, after all tests, if set_up_class successful.""" -# print_status('TestGetProductFromIndex', 'tear_down_class()') - -# def test_basic(self): -# """Basic test. -# """ -# print_status('TestGetProductFromIndex', 'test_basic()') - -# prod1 = SupplyChainProduct(index=0, local_holding_cost=1, stockout_cost=10) -# prod2 = SupplyChainProduct(index=1, local_holding_cost=2, stockout_cost=50) -# node = SupplyChainNode(index=0, products=[prod1, prod2]) - -# self.assertEqual(node.products[0].index, 0) -# self.assertEqual(node.products[1].index, 1) - -# def test_multi_product_network7(self): -# """Test 7-node multiproduct instance. -# """ -# print_status('TestGetProductFromIndex', 'test_multi_product_network7()') - -# network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") - -# self.assertIsNone(network.get_node_from_index(0).products[None]) -# self.assertIsNone(network.get_node_from_index(0).products[44]) -# self.assertEqual(network.get_node_from_index(1).products[1].index, 1) -# self.assertEqual(network.get_node_from_index(2).products[2].index, 2) -# self.assertEqual(network.get_node_from_index(2).products[3].index, 3) -# self.assertIsNone(network.get_node_from_index(2).products[44]) - - -# class TestSetGetBillOfMaterials(unittest.TestCase): -# @classmethod -# def set_up_class(cls): -# """Called once, before any tests.""" -# print_status('TestSetGetBillOfMaterials', 'set_up_class()') - -# @classmethod -# def tear_down_class(cls): -# """Called once, after all tests, if set_up_class successful.""" -# print_status('TestSetGetBillOfMaterials', 'tear_down_class()') - -# def test_single_product(self): -# """Test that set_ and get_bill_of_materials() work correctly when the node is single-product. -# """ -# print_status('TestSetGetBillOfMaterials', 'test_single_product()') - -# network = mwor_system(3) - -# network.nodes[1].add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) -# network.nodes[2].add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) -# network.nodes[3].add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) - -# network.nodes[0].set_bill_of_materials( 5, None, 1, 1) -# network.nodes[0].set_bill_of_materials( 7, None, 1, 2) -# network.nodes[0].set_bill_of_materials( 3, None, 2, 2) -# network.nodes[0].set_bill_of_materials(15, None, 2, 3) -# network.nodes[0].set_bill_of_materials( 6, None, 3, 4) -# network.nodes[0].set_bill_of_materials(16, None, 3, 5) - -# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 1, 1), 5) -# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 1, 2), 7) -# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 2, 2), 3) -# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 2, 3), 15) -# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 3, 4), 6) -# self.assertEqual(network.nodes[0].get_bill_of_materials(None, 3, 5), 16) - -# def test_multi_product(self): -# """Test that set_ and get_bill_of_materials() work correctly when the node is multi-product. -# """ -# print_status('TestSetGetBillOfMaterials', 'test_multi_product()') - -# network = mwor_system(3) - -# network.nodes[0].add_products([SupplyChainProduct(10), SupplyChainProduct(11)]) -# network.nodes[1].add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) -# network.nodes[2].add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) -# network.nodes[3].add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) - -# network.nodes[0].set_bill_of_materials(5, 10, 1, 1) -# network.nodes[0].set_bill_of_materials(7, 10, 1, 2) -# network.nodes[0].set_bill_of_materials(3, 11, 2, 2) -# network.nodes[0].set_bill_of_materials(15, 10, 2, 3) -# network.nodes[0].set_bill_of_materials(6, 11, 3, 4) -# network.nodes[0].set_bill_of_materials(16, 11, 3, 5) - -# self.assertEqual(network.nodes[0].get_bill_of_materials(10, 1, 1), 5) -# self.assertEqual(network.nodes[0].get_bill_of_materials(10, 1, 2), 7) -# self.assertEqual(network.nodes[0].get_bill_of_materials(11, 2, 2), 3) -# self.assertEqual(network.nodes[0].get_bill_of_materials(10, 2, 3), 15) -# self.assertEqual(network.nodes[0].get_bill_of_materials(11, 3, 4), 6) -# self.assertEqual(network.nodes[0].get_bill_of_materials(11, 3, 5), 16) - -# def test_multi_product_network7(self): -# """Test that set_ and get_bill_of_materials() work correctly on 7-node multi-product instance. -# """ -# print_status('TestSetGetBillOfMaterials', 'test_multi_product_network7()') - -# network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") - -# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 3, None), 4) -# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 4, None), 1) -# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 5, 4), 2.6) -# self.assertEqual(network.get_node_from_index(2).get_bill_of_materials(3, 5, 5), 6) -# self.assertEqual(network.get_node_from_index(2).get_bill_of_materials(3, None, None), 5) -# self.assertEqual(network.get_node_from_index(6).get_bill_of_materials(None, None, None), 1) - -# network.get_node_from_index(0).set_bill_of_materials(500, None, 6, None) -# network.get_node_from_index(0).set_bill_of_materials(600, None, 5, 4) -# network.get_node_from_index(1).set_bill_of_materials(700, 1, 6, None) -# network.get_node_from_index(1).set_bill_of_materials(800, 1, None, None) - -# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 6, None), 500) -# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(None, 5, 4), 600) -# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, 6, None), 700) -# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(1, None, None), 800) - -# def test_default_value_1node(self): -# """Test that get_bill_of_materials() works correctly in a single-node system -# with a single product, in which case the BOM number for the node and the external -# supplier defaults to 1. -# """ -# print_status('TestSetGetBillOfMaterials', 'test_default_value()') - -# network = single_stage_system() - -# self.assertEqual(network.nodes[0].get_bill_of_materials(), 1) - -# # Now set BOM number explicitly. -# network.nodes[0].set_bill_of_materials(num_needed=6.3) -# self.assertEqual(network.nodes[0].get_bill_of_materials(), 6.3) - -# def test_default_value_2node(self): -# """Test that get_bill_of_materials() works correctly in a 2-node system -# when both the node and its predecessor are single product, in which case the -# BOM number defaults to 1. -# """ -# print_status('TestSetGetBillOfMaterials', 'test_default_value()') - -# network = serial_system(2) - -# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(predecessor_index=0), 1) - -# # Now set BOM number explicitly. -# network.get_node_from_index(1).set_bill_of_materials(predecessor_index=0, num_needed=6.3) -# self.assertEqual(network.get_node_from_index(1).get_bill_of_materials(predecessor_index=0), 6.3) - -# def test_default_value_mwor(self): -# """Test that get_bill_of_materials() works correctly in a MWOR system -# when both the downstream node and one of its predecessors are single product, in which case the -# BOM number defaults to 1. -# """ -# print_status('TestSetGetBillOfMaterials', 'test_default_value()') - -# network = mwor_system(3) - -# network.get_node_from_index(1).add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) -# network.get_node_from_index(2).add_products([SupplyChainProduct(2)]) - -# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=1), 0) -# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=2), 1) -# self.assertEqual(network.get_node_from_index(0).get_bill_of_materials(predecessor_index=3), 1) - - -# class TestBillOfMaterialsList(unittest.TestCase): -# @classmethod -# def set_up_class(cls): -# """Called once, before any tests.""" -# print_status('TestBillOfMaterialsList', 'set_up_class()') - -# @classmethod -# def tear_down_class(cls): -# """Called once, after all tests, if set_up_class successful.""" -# print_status('TestBillOfMaterialsList', 'tear_down_class()') - -# def test_mwor(self): -# """Test that bill_of_materials works correctly on MWOR network. -# """ -# print_status('TestBillOfMaterialsList', 'test_mwor()') - -# network = mwor_system(3) - -# network.get_node_from_index(1).add_products([SupplyChainProduct(1), SupplyChainProduct(2)]) -# network.get_node_from_index(2).add_products([SupplyChainProduct(2), SupplyChainProduct(3)]) -# network.get_node_from_index(3).add_products([SupplyChainProduct(4), SupplyChainProduct(5)]) - -# node0 = network.get_node_from_index(0) - -# node0.set_bill_of_materials( 5, None, 1, 1) -# node0.set_bill_of_materials( 7, None, 1, 2) -# node0.set_bill_of_materials( 3, None, 2, 2) -# node0.set_bill_of_materials(15, None, 2, 3) -# node0.set_bill_of_materials( 6, None, 3, 4) -# node0.set_bill_of_materials(16, None, 3, 5) - -# bom0 = node0.bill_of_materials -# self.assertListEqual(bom0, [(5, 0, None, 1, 1), (7, 0, None, 1, 2), (3, 0, None, 2, 2), (15, 0, None, 2, 3), (6, 0, None, 3, 4), (16, 0, None, 3, 5)]) -# bom1 = network.get_node_from_index(1).bill_of_materials -# self.assertListEqual(bom1, [(1, 1, 1, None, None), (1, 1, 2, None, None)]) -# bom2 = network.get_node_from_index(2).bill_of_materials -# self.assertListEqual(bom2, [(1, 2, 2, None, None), (1, 2, 3, None, None)]) -# bom3 = network.get_node_from_index(3).bill_of_materials -# self.assertListEqual(bom3, [(1, 3, 4, None, None), (1, 3, 5, None, None)]) - -# def test_multi_product_network7(self): -# """Test that bill_of_materials works correctly on 5-node, 7-product network. -# """ -# print_status('TestBillOfMaterialsList', 'test_multi_product()') - -# network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") - -# self.assertSetEqual( -# set(network.get_node_from_index(0).bill_of_materials), -# {(1, 0, None, 4, None), (4, 0, None, 3, None)} -# ) -# self.assertSetEqual( -# set(network.get_node_from_index(1).bill_of_materials), -# {(1, 1, 1, 4, None), (2.6, 1, 1, 5, 4), (5.1, 1, 1, 5, 5)} -# ) -# self.assertSetEqual( -# set(network.get_node_from_index(2).bill_of_materials), -# {(3.8, 2, 2, 5, 5), (6, 2, 3, 5, 5), (1, 2, 3, 6, None), (5, 2, 3, None, None)} -# ) -# self.assertSetEqual( -# set(network.get_node_from_index(3).bill_of_materials), -# {(1, 3, None, None, None)} -# ) -# self.assertSetEqual( -# set(network.get_node_from_index(4).bill_of_materials), -# {(3, 4, None, None, None)} -# ) -# self.assertSetEqual( -# set(network.get_node_from_index(5).bill_of_materials), -# {(16, 5, 5, None, None), (1, 5, 4, None, None)} -# ) -# self.assertSetEqual( -# set(network.get_node_from_index(6).bill_of_materials), -# {(1, 6, None, None, None)} -# ) - - class TestRawMaterialSuppliers(unittest.TestCase): @classmethod def set_up_class(cls): @@ -1976,6 +1876,180 @@ def test_multiproduct_5_7(self): _ = nodes[0].product_indices_by_raw_material(rm_index=None) +class TestValidateProduct(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestValidateProduct', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestValidateProduct', 'tear_down_class()') + + def test_example_6_1(self): + """Test validate_product for 3-node serial system in Example 6.1. + """ + print_status('TestValidateProduct', 'test_example_6_1()') + + network = load_instance("example_6_1") + nodes = {n.index: n for n in network.nodes} + + prod_obj, prod_ind = nodes[1].validate_product(nodes[1]._dummy_product) + self.assertEqual(prod_obj, nodes[1]._dummy_product) + self.assertEqual(prod_ind, nodes[1]._dummy_product.index) + + prod_obj, prod_ind = nodes[2].validate_product(nodes[2]._dummy_product.index) + self.assertEqual(prod_obj, nodes[2]._dummy_product) + self.assertEqual(prod_ind, nodes[2]._dummy_product.index) + + prod_obj, prod_ind = nodes[3].validate_product(None) + self.assertEqual(prod_obj, nodes[3]._dummy_product) + self.assertEqual(prod_ind, nodes[3]._dummy_product.index) + + def test_multiproduct_5_7(self): + """Test validate_product for 5-node, 7-product system. + """ + print_status('TestValidateProduct', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + nodes = {n.index: n for n in network.nodes} + products = {prod.index: prod for prod in network.products} + + prod_obj, prod_ind = nodes[2].validate_product(2) + self.assertEqual(prod_obj, products[2]) + self.assertEqual(prod_ind, 2) + + prod_obj, prod_ind = nodes[2].validate_product(products[4]) + self.assertEqual(prod_obj, products[4]) + self.assertEqual(prod_ind, 4) + + prod_obj, prod_ind = nodes[0].validate_product(None) + self.assertEqual(prod_obj, products[0]) + self.assertEqual(prod_ind, 0) + + # prod_obj, prod_ind = nodes[1].validate_product(None) + # self.assertIsNone(prod_obj) + # self.assertIsNone(prod_ind) + + def test_bad_param(self): + """Test that validate_product correctly raises exceptions on bad parameters. + """ + print_status('TestValidateProduct', 'test_bad_param()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + nodes = {n.index: n for n in network.nodes} + products = {prod.index: prod for prod in network.products} + + with self.assertRaises(TypeError): + _, _ = nodes[2].validate_product(5.6) + _, _ = nodes[2].validate_product(SupplyChainNode(10)) + + with self.assertRaises(ValueError): + _, _ = nodes[3].validate_product(products[5]) + _, _ = nodes[3].validate_product(5) + _, _ = nodes[2].validate_product(None) + +class TestValidateRawMaterial(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestValidateRawMaterial', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestValidateRawMaterial', 'tear_down_class()') + + def test_example_6_1(self): + """Test validate_raw_material for 3-node serial system in Example 6.1. + """ + print_status('TestValidateRawMaterial', 'test_example_6_1()') + + network = load_instance("example_6_1") + nodes = {n.index: n for n in network.nodes} + + rm_obj, rm_ind = nodes[1].validate_raw_material(nodes[2]._dummy_product) + self.assertEqual(rm_obj, nodes[2]._dummy_product) + self.assertEqual(rm_ind, nodes[2]._dummy_product.index) + + rm_obj, rm_ind = nodes[2].validate_raw_material(nodes[3]._dummy_product.index) + self.assertEqual(rm_obj, nodes[3]._dummy_product) + self.assertEqual(rm_ind, nodes[3]._dummy_product.index) + + rm_obj, rm_ind = nodes[2].validate_raw_material(nodes[3]._dummy_product.index, predecessor=3) + self.assertEqual(rm_obj, nodes[3]._dummy_product) + self.assertEqual(rm_ind, nodes[3]._dummy_product.index) + + with self.assertRaises(ValueError): + _, _ = nodes[2].validate_raw_material(nodes[3]._dummy_product.index, predecessor=1) + + rm_obj, rm_ind = nodes[2].validate_raw_material(None) + self.assertEqual(rm_obj, nodes[3]._dummy_product) + self.assertEqual(rm_ind, nodes[3]._dummy_product.index) + + rm_obj, rm_ind = nodes[3].validate_raw_material(nodes[3]._external_supplier_dummy_product.index) + self.assertEqual(rm_obj, nodes[3]._external_supplier_dummy_product) + self.assertEqual(rm_ind, nodes[3]._external_supplier_dummy_product.index) + + rm_obj, rm_ind = nodes[3].validate_raw_material(None) + self.assertEqual(rm_obj, nodes[3]._external_supplier_dummy_product) + self.assertEqual(rm_ind, nodes[3]._external_supplier_dummy_product.index) + + with self.assertRaises(ValueError): + _, _ = nodes[3].validate_raw_material(nodes[3]._dummy_product.index, predecessor=2) + + def test_multiproduct_5_7(self): + """Test validate_raw_material for 5-node, 7-product system. + """ + print_status('TestValidateRawMaterial', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + nodes = {n.index: n for n in network.nodes} + products = {prod.index: prod for prod in network.products} + + rm_obj, rm_ind = nodes[1].validate_raw_material(products[4]) + self.assertEqual(rm_obj, products[4]) + self.assertEqual(rm_ind, 4) + + rm_obj, rm_ind = nodes[1].validate_raw_material(3) + self.assertEqual(rm_obj, products[3]) + self.assertEqual(rm_ind, 3) + + rm_obj, rm_ind = nodes[1].validate_raw_material(3, predecessor=2) + self.assertEqual(rm_obj, products[3]) + self.assertEqual(rm_ind, 3) + + with self.assertRaises(ValueError): + _, _ = nodes[0].validate_raw_material(4) + _, _ = nodes[1].validate_raw_material(3, predecessor=3) + + rm_obj, rm_ind = nodes[4].validate_raw_material(None) + self.assertEqual(rm_obj, nodes[4]._external_supplier_dummy_product) + self.assertEqual(rm_ind, nodes[4]._external_supplier_dummy_product.index) + + rm_obj, rm_ind = nodes[4].validate_raw_material(nodes[4]._external_supplier_dummy_product) + self.assertEqual(rm_obj, nodes[4]._external_supplier_dummy_product) + self.assertEqual(rm_ind, nodes[4]._external_supplier_dummy_product.index) + + def test_bad_param(self): + """Test that validate_raw_material correctly raises exceptions on bad parameters. + """ + print_status('TestValidateRawMaterial', 'test_bad_param()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + nodes = {n.index: n for n in network.nodes} + products = {prod.index: prod for prod in network.products} + + with self.assertRaises(TypeError): + _, _ = nodes[2].validate_raw_material(5.6) + _, _ = nodes[2].validate_raw_material(SupplyChainNode(10)) + + with self.assertRaises(ValueError): + _, _ = nodes[3].validate_raw_material(products[0]) + _, _ = nodes[3].validate_raw_material(0) + _, _ = nodes[2].validate_raw_material(None) + class TestLeadTime(unittest.TestCase): @classmethod def set_up_class(cls): From bbf275380398d265a15b45f0214a8072df369e59 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 4 May 2024 13:29:55 -0400 Subject: [PATCH 49/94] Add customers_by_product(); make node and network __repr__ more compact --- CHANGELOG.md | 1 + src/stockpyl/sim.py | 130 +++++++++++++------------ src/stockpyl/supply_chain_network.py | 3 +- src/stockpyl/supply_chain_node.py | 63 +++++++++--- src/stockpyl/supply_chain_product.py | 3 +- tests/test_supply_chain_node.py | 140 +++++++++++++++++++++++++++ 6 files changed, 263 insertions(+), 77 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd9f3f2..340548f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ a given number and return the corresponding value. - ``NodeStateVars`` object is now in its own module, ``node_state_vars.py``, rather than in ``supply_chain_node.py``. - ``supply_chain_network.network_from_edges()`` now only creates a ``DemandSource`` for sink nodes or if the demand source parameters were provided specifically for that node in the input args. +- More compact text representation of ``SupplyChainNetwork`` and ``SupplyChainNode`` objects via ``__repr__()``. ### Fixed - Bug in ``helpers.ensure_list_for_time_period()`` that caused it to handle numpy arrays improperly. diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index c7680ee..fc93134 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -614,22 +614,25 @@ def _initialize_next_period_state_vars(network, period): p_index = p.index if p is not None else None # Loop through raw materials at predecessor. for rm_index in (p.product_indices if p is not None else [n._external_supplier_dummy_product.index]): + + if rm_index in n.raw_material_indices_by_product('all', network_BOM=True) and \ + p in n.raw_material_suppliers_by_raw_material(rm_index, network_BOM=True): - # Is there a transit-pausing disruption? - if n.disrupted and n.disruption_process.disruption_type == 'TP': - # Yes; items in shipment pipeline stay where they are. - n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index] = \ - n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index].copy() - else: - # No; items in shipment pipeline advance by 1 slot. - # Copy items from slot 0 in period t to t+1. (Normally, this will equal 0, but it can - # be non-zero if there was a type-RP disruption.) - n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index][0] = \ - n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index][0] - # Add items from slot s+1 in period t to slot s in period t+1. - for s in range(len(n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index]) - 1): - n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index][s] += \ - n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index][s + 1] + # Is there a transit-pausing disruption? + if n.disrupted and n.disruption_process.disruption_type == 'TP': + # Yes; items in shipment pipeline stay where they are. + n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index] = \ + n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index].copy() + else: + # No; items in shipment pipeline advance by 1 slot. + # Copy items from slot 0 in period t to t+1. (Normally, this will equal 0, but it can + # be non-zero if there was a type-RP disruption.) + n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index][0] = \ + n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index][0] + # Add items from slot s+1 in period t to slot s in period t+1. + for s in range(len(n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index]) - 1): + n.state_vars[period + 1].inbound_shipment_pipeline[p_index][rm_index][s] += \ + n.state_vars[period].inbound_shipment_pipeline[p_index][rm_index][s + 1] # Loop through successors. for s in n.successor_indices(include_external=True): @@ -655,12 +658,14 @@ def _initialize_next_period_state_vars(network, period): p_index = p.index if p is not None else None # Loop through raw materials at predecessor. for rm_index in (p.product_indices if p is not None else [n._external_supplier_dummy_product.index]): - n.state_vars[period + 1].on_order_by_predecessor[p_index][rm_index] = \ - n.state_vars[period].on_order_by_predecessor[p_index][rm_index] - n.state_vars[period + 1].raw_material_inventory[rm_index] = \ - n.state_vars[period].raw_material_inventory[rm_index] - n.state_vars[period + 1].inbound_disrupted_items[p_index][rm_index] = \ - n.state_vars[period].inbound_disrupted_items[p_index][rm_index] + if rm_index in n.raw_material_indices_by_product('all', network_BOM=True) and \ + p in n.raw_material_suppliers_by_raw_material(rm_index, network_BOM=True): + n.state_vars[period + 1].on_order_by_predecessor[p_index][rm_index] = \ + n.state_vars[period].on_order_by_predecessor[p_index][rm_index] + n.state_vars[period + 1].raw_material_inventory[rm_index] = \ + n.state_vars[period].raw_material_inventory[rm_index] + n.state_vars[period + 1].inbound_disrupted_items[p_index][rm_index] = \ + n.state_vars[period].inbound_disrupted_items[p_index][rm_index] # Set demand_met_from_stock_cumul and demand_cumul. for prod_index in n.product_indices: @@ -763,34 +768,37 @@ def _receive_inbound_shipments(node): # Loop through raw materials at predecessor. for rm_index in (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]): - # Determine number of items that will be received from p (if there is no disruption), - # not including inbound disrupted items waiting to be received. - ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][rm_index][0] - - # Is there a receipt-pausing disruption? - if node.disrupted and node.disruption_process.disruption_type == 'RP': - # Yes: Don't receive anything. - IS = 0 - # Increase inbound disrupted items by the items that would have been received, if - # there were no disruption. - IDI = ready_to_receive - else: - # No: Inbound shipment from p = ready_to_receive + IDI from p. - IS = ready_to_receive + node.state_vars_current.inbound_disrupted_items[p_index][rm_index] - # Decrease inbound disrupted items by its whole amount. (This will zero out - # inbound_disrupted_items below.) - IDI = -node.state_vars_current.inbound_disrupted_items[p_index][rm_index] - - # Set inbound_shipment attribute. - node.state_vars_current.inbound_shipment[p_index][rm_index] = IS - # Remove shipment from pipeline. - node.state_vars_current.inbound_shipment_pipeline[p_index][rm_index][0] = 0 - # Add shipment to raw material inventory. - node.state_vars_current.raw_material_inventory[rm_index] += IS - # Update on-order inventory. - node.state_vars_current.on_order_by_predecessor[p_index][rm_index] -= ready_to_receive - # Update inbound_disrupted_items. - node.state_vars_current.inbound_disrupted_items[p_index][rm_index] += IDI + if rm_index in node.raw_material_indices_by_product('all', network_BOM=True) and \ + p in node.raw_material_suppliers_by_raw_material(rm_index, network_BOM=True): + + # Determine number of items that will be received from p (if there is no disruption), + # not including inbound disrupted items waiting to be received. + ready_to_receive = node.state_vars_current.inbound_shipment_pipeline[p_index][rm_index][0] + + # Is there a receipt-pausing disruption? + if node.disrupted and node.disruption_process.disruption_type == 'RP': + # Yes: Don't receive anything. + IS = 0 + # Increase inbound disrupted items by the items that would have been received, if + # there were no disruption. + IDI = ready_to_receive + else: + # No: Inbound shipment from p = ready_to_receive + IDI from p. + IS = ready_to_receive + node.state_vars_current.inbound_disrupted_items[p_index][rm_index] + # Decrease inbound disrupted items by its whole amount. (This will zero out + # inbound_disrupted_items below.) + IDI = -node.state_vars_current.inbound_disrupted_items[p_index][rm_index] + + # Set inbound_shipment attribute. + node.state_vars_current.inbound_shipment[p_index][rm_index] = IS + # Remove shipment from pipeline. + node.state_vars_current.inbound_shipment_pipeline[p_index][rm_index][0] = 0 + # Add shipment to raw material inventory. + node.state_vars_current.raw_material_inventory[rm_index] += IS + # Update on-order inventory. + node.state_vars_current.on_order_by_predecessor[p_index][rm_index] -= ready_to_receive + # Update inbound_disrupted_items. + node.state_vars_current.inbound_disrupted_items[p_index][rm_index] += IDI def _raw_materials_to_finished_goods(node): @@ -1065,17 +1073,19 @@ def _propagate_shipment_downstream(node): # unless there is a type-TP disruption, in which case outbound shipments # successor wait in slot s.shipment_lead_time until the disruption ends.) for s in node.successors(): - # Find a product at successor node that uses prod_index from node as a raw material, - # and use its lead time. If there is more than one such product, use the last one found. - # This is a little klugey. # TODO: improve? should LTs be an attribute of the RM, not the product? - for FG_index in s.product_indices: - if prod_index in s.raw_material_indices_by_product(product_index=FG_index, network_BOM=True) and \ - node.index in s.raw_material_supplier_indices_by_raw_material(rm_index=prod_index, network_BOM=True): - # Get lead time for this product. - shipment_lead_time = (s.get_attribute('shipment_lead_time', product=FG_index) or 0) - - s.state_vars_current.inbound_shipment_pipeline[node.index][prod_index][shipment_lead_time] \ - += node.state_vars_current.outbound_shipment[s.index][prod_index] + if prod_index in s.raw_material_indices_by_product('all', network_BOM=True) and \ + node in s.raw_material_suppliers_by_raw_material(prod_index, network_BOM=True): + # Find a product at successor node that uses prod_index from node as a raw material, + # and use its lead time. If there is more than one such product, use the last one found. + # This is a little klugey. # TODO: improve? should LTs be an attribute of the RM, not the product? + for FG_index in s.product_indices: + if prod_index in s.raw_material_indices_by_product(product_index=FG_index, network_BOM=True) and \ + node.index in s.raw_material_supplier_indices_by_raw_material(rm_index=prod_index, network_BOM=True): + # Get lead time for this product. + shipment_lead_time = (s.get_attribute('shipment_lead_time', product=FG_index) or 0) + + s.state_vars_current.inbound_shipment_pipeline[node.index][prod_index][shipment_lead_time] \ + += node.state_vars_current.outbound_shipment[s.index][prod_index] # ------------------- diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 302575d..ca50462 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -224,7 +224,8 @@ def __repr__(self): A string representation of the |class_network| instance. """ - return "SupplyChainNetwork({:s})".format(str(vars(self))) + return f'SupplyChainNetwork(nodes={self.node_indices}, products={self.product_indices})' +# return "SupplyChainNetwork({:s})".format(str(vars(self))) # Attribute management. diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 4d3d40d..8466f1e 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -773,7 +773,7 @@ def raw_materials_by_product(self, product_index=None, network_BOM=True): If ``network_BOM`` is ``True``, includes raw materials that don't have a BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) Read only. + (See :func:`get_network_bill_of_materials`.) Parameters ---------- @@ -828,7 +828,7 @@ def raw_material_indices_by_product(self, product_index=None, network_BOM=True): If ``network_BOM`` is ``True``, includes raw materials that don't have a BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) Read only. + (See :func:`get_network_bill_of_materials`.) Parameters ---------- @@ -860,7 +860,7 @@ def raw_material_suppliers_by_product(self, product_index=None, network_BOM=True If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) Read only. + (See :func:`get_network_bill_of_materials`.) Suppliers in list are |class_node| objects, plus ``None`` for the external supplier, if appropriate. @@ -926,7 +926,7 @@ def raw_material_supplier_indices_by_product(self, product_index=None, network_B If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) Read only. + (See :func:`get_network_bill_of_materials`.) Parameters ---------- @@ -962,7 +962,7 @@ def raw_material_suppliers_by_raw_material(self, rm_index=None, network_BOM=True If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) Read only. + (See :func:`get_network_bill_of_materials`.) Suppliers in list are |class_node| objects, plus ``None`` for the external supplier, if appropriate. @@ -1035,7 +1035,7 @@ def raw_material_supplier_indices_by_raw_material(self, rm_index=None, network_B If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) Read only. + (See :func:`get_network_bill_of_materials`.) Parameters ---------- @@ -1065,10 +1065,6 @@ def products_by_raw_material(self, rm_index=None): as as |class_prod| objects. If the node has a single raw material (either dummy or real), either set ``rm_index`` to the index of the single raw material, or to ``None`` and the function will determine the index automatically. - - If ``network_BOM`` is ``True``, includes products that don't have a - BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) Read only. Parameters ---------- @@ -1103,10 +1099,6 @@ def product_indices_by_raw_material(self, rm_index=None): as as |class_prod| objects. If the node has a single raw material (either dummy or real), either set ``rm_index`` to the index of the single raw material, or to ``None`` and the function will determine the index automatically. - - If ``network_BOM`` is ``True``, includes products that don't have a - BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) Read only. Parameters ---------- @@ -1125,6 +1117,46 @@ def product_indices_by_raw_material(self, rm_index=None): this node has a single raw material. """ return [prod.index for prod in self.products_by_raw_material(rm_index=rm_index)] + + def customers_by_product(self, product=None, return_indices=False, network_BOM=True): + """A list of customers that order ``product`` from the node. If the node has a single product + (either dummy or real), either set ``product`` to the single product, or to ``None`` and the function + will determine it automatically. + + If ``return_indices`` is ``False``, returns the customers as |class_node| objects (or ``None`` for the + external customer), otherwise returns customer indices. + + If ``network_BOM`` is ``True``, includes customers that don't have a + BOM relationship specified but are implied by the network structure. + (See :func:`get_network_bill_of_materials`.) + + Parameters + ---------- + product : |class_product| or int, optional + The product (as a |class_product| object or index), or ``None`` if the node has a single product. + return_indices : bool, optional + Set to ``False`` (the default) to return product objects, ``True`` to return product indices. + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. + """ + prod_obj, prod_ind = self.validate_product(product) + + # Customer nodes. + custs = [n for n in self.successors(include_external=False) \ + if prod_obj in n.raw_materials_by_product('all', network_BOM=network_BOM) and \ + self in n.raw_material_suppliers_by_raw_material(prod_ind, network_BOM=network_BOM)] + + # Convert to indices, if desired. + if return_indices: + custs = [n.index for n in custs] + + # External customer. + ds = self.get_attribute('demand_source', product=product) + if ds is not None and ds.type is not None: + custs.append(None) + + return custs + def validate_product(self, product): """Confirm that ``product`` is a valid product of node: @@ -1367,7 +1399,8 @@ def __repr__(self): A string representation of the |class_node| instance. """ - return "SupplyChainNode({:s})".format(str(vars(self))) + return f'SupplyChainNode(index={self.index})' +# return "SupplyChainNode({:s})".format(str(vars(self))) # Attribute management. diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 68be8af..c38d4e6 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -437,7 +437,8 @@ def __repr__(self): A string representation of the |class_product| instance. """ - return "SupplyChainProduct({:s})".format(str(vars(self))) + return f'SupplyChainProduct(index={self.index})' +# return "SupplyChainProduct({:s})".format(str(vars(self))) # Attribute management. diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 5e5d1c4..44a8f51 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -1875,7 +1875,147 @@ def test_multiproduct_5_7(self): _ = nodes[0].product_indices_by_raw_material(rm_index=5) _ = nodes[0].product_indices_by_raw_material(rm_index=None) + +class TestCustomersByProduct(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestCustomersByProduct', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestCustomersByProduct', 'tear_down_class()') + + def test_mwor_no_product(self): + """Test that customers_by_product works correctly on MWOR network with no product added at retailer. + """ + print_status('TestCustomersByProduct', 'test_mwor_no_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + nodes[0].demand_source = DemandSource(type='P', mean=5) + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + self.assertListEqual(nodes[0].customers_by_product(product=nodes[0]._dummy_product, return_indices=False, network_BOM=True), [None]) + self.assertListEqual(nodes[0].customers_by_product(product=None, return_indices=False, network_BOM=True), [None]) + self.assertListEqual(nodes[0].customers_by_product(product=None, return_indices=True, network_BOM=True), [None]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[1], return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[1], return_indices=True, network_BOM=True), [0]) + self.assertListEqual(nodes[1].customers_by_product(product=2, return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[2], return_indices=False, network_BOM=False), []) + self.assertListEqual(nodes[2].customers_by_product(product=prods[2], return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[2].customers_by_product(product=2, return_indices=True, network_BOM=True), [0]) + self.assertListEqual(nodes[2].customers_by_product(product=3, return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[2].customers_by_product(product=prods[3], return_indices=False, network_BOM=False), []) + + with self.assertRaises(ValueError): + _ = nodes[1].customers_by_product(product=77) + + def test_mwor_one_product(self): + """Test that customers_by_product works correctly on MWOR network with one product added at retailer. + """ + print_status('TestCustomersByProduct', 'test_mwor_one_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + nodes[0].demand_source = DemandSource(type='P', mean=5) + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + prods[10] = SupplyChainProduct(10) + nodes[0].add_product(prods[10]) + prods[10].set_bill_of_materials(1, 5) + prods[10].set_bill_of_materials(2, 7) + prods[10].set_bill_of_materials(3, 3) + prods[10].set_bill_of_materials(4, 15) + prods[10].set_bill_of_materials(5, 6) + + self.assertListEqual(nodes[0].customers_by_product(product=prods[10], return_indices=False, network_BOM=True), [None]) + self.assertListEqual(nodes[0].customers_by_product(product=None, return_indices=False, network_BOM=True), [None]) + self.assertListEqual(nodes[0].customers_by_product(product=None, return_indices=True, network_BOM=True), [None]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[1], return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[1], return_indices=True, network_BOM=True), [0]) + self.assertListEqual(nodes[1].customers_by_product(product=2, return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[2], return_indices=False, network_BOM=False), [nodes[0]]) + self.assertListEqual(nodes[2].customers_by_product(product=prods[2], return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[2].customers_by_product(product=2, return_indices=True, network_BOM=True), [0]) + self.assertListEqual(nodes[2].customers_by_product(product=3, return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[2].customers_by_product(product=prods[3], return_indices=False, network_BOM=False), [nodes[0]]) + + with self.assertRaises(ValueError): + _ = nodes[1].customers_by_product(product=77) + + def test_mwor_multiple_products(self): + """Test that customers_by_product works correctly on MWOR network with multiple products added at retailer. + """ + print_status('TestCustomersByProduct', 'test_mwor_multiple_products()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + nodes[0].demand_source = DemandSource(type='P', mean=5) + + prods = {i: SupplyChainProduct(i) for i in [1, 2, 3, 4, 5, 10, 11, 12]} + network.get_node_from_index(1).add_products([prods[1], prods[2]]) + network.get_node_from_index(2).add_products([prods[2], prods[3]]) + network.get_node_from_index(3).add_products([prods[4], prods[5]]) + + nodes[0].add_products([prods[10], prods[11], prods[12]]) + + prods[10].set_bill_of_materials(1, 5) + prods[10].set_bill_of_materials(2, 7) + prods[11].set_bill_of_materials(3, 3) + prods[11].set_bill_of_materials(4, 15) + prods[12].set_bill_of_materials(5, 6) + + self.assertListEqual(nodes[0].customers_by_product(product=prods[10], return_indices=False, network_BOM=True), [None]) + self.assertListEqual(nodes[0].customers_by_product(product=prods[11], return_indices=True, network_BOM=True), [None]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[1], return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[1], return_indices=True, network_BOM=True), [0]) + self.assertListEqual(nodes[1].customers_by_product(product=2, return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[2], return_indices=False, network_BOM=False), [nodes[0]]) + self.assertListEqual(nodes[2].customers_by_product(product=prods[2], return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[2].customers_by_product(product=2, return_indices=True, network_BOM=True), [0]) + self.assertListEqual(nodes[2].customers_by_product(product=3, return_indices=False, network_BOM=True), [nodes[0]]) + self.assertListEqual(nodes[2].customers_by_product(product=prods[3], return_indices=False, network_BOM=False), [nodes[0]]) + + with self.assertRaises(ValueError): + _ = nodes[1].customers_by_product(product=77) + _ = nodes[0].customers_by_product(product=None, return_indices=True, network_BOM=True), [None] + + def test_multiproduct_5_7(self): + """Test that customers_by_product works correctly on 5-node, 7-product network. + """ + print_status('TestCustomersByProduct', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + prods = {prod.index: prod for prod in network.products} + + self.assertListEqual(nodes[0].customers_by_product(product=prods[0], return_indices=False, network_BOM=True), [None]) + self.assertListEqual(nodes[0].customers_by_product(product=prods[0], return_indices=True, network_BOM=True), [None]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[1], return_indices=False, network_BOM=True), [None]) + self.assertListEqual(nodes[1].customers_by_product(product=prods[1], return_indices=True, network_BOM=True), [None]) + self.assertListEqual(nodes[2].customers_by_product(product=2, return_indices=False, network_BOM=True), [nodes[0], nodes[1]]) + self.assertListEqual(nodes[2].customers_by_product(product=prods[3], return_indices=False, network_BOM=False), [nodes[0], nodes[1]]) + self.assertListEqual(nodes[2].customers_by_product(product=prods[4], return_indices=True, network_BOM=False), [1]) + self.assertListEqual(nodes[3].customers_by_product(product=prods[2], return_indices=False, network_BOM=True), [nodes[1]]) + self.assertListEqual(nodes[3].customers_by_product(product=4, return_indices=True, network_BOM=True), [1]) + self.assertListEqual(nodes[4].customers_by_product(product=5, return_indices=True, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[4].customers_by_product(product=prods[6], return_indices=False, network_BOM=False), [nodes[2], nodes[3]]) + + with self.assertRaises(ValueError): + _ = nodes[1].customers_by_product(product=77) + _ = nodes[0].customers_by_product(product=None, return_indices=True, network_BOM=True), [None] + class TestValidateProduct(unittest.TestCase): @classmethod def set_up_class(cls): From 0762f9e44549c7a3bcaf6ce8b08b3e8a116d8f9a Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 4 May 2024 22:03:42 -0400 Subject: [PATCH 50/94] Add functions to access state vars without specifying product #143 --- src/stockpyl/node_state_vars.py | 3 + src/stockpyl/sim.py | 3 +- src/stockpyl/supply_chain_node.py | 71 +++++++++++++-- tests/test_supply_chain_node.py | 138 ++++++++++++++++++++++++++++++ 4 files changed, 209 insertions(+), 6 deletions(-) diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index 8dac134..8baef20 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -747,6 +747,9 @@ def in_transit_to(self, successor, prod_index=None): # Validate parameters. if prod_index is not None and prod_index not in self.node.product_indices: raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + elif prod_index is not None and (self.node.index, prod_index) not in \ + successor.supplier_raw_material_pairs_by_product(product='all', return_indices=True, network_BOM=True): + raise ValueError(f'Node {self.node.index} does not provide product {prod_index} to node {successor.index}.') # Determine product index. prod_index = prod_index or self.node._dummy_product.index diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index fc93134..2f730ea 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -731,7 +731,8 @@ def _calculate_period_costs(network, period): else: h = n.get_attribute('in_transit_holding_cost', prod_index) or 0 n.state_vars[period].in_transit_holding_cost_incurred += \ - h * float(np.sum([n.state_vars[period].in_transit_to(s, prod_index) for s in n.successors()])) + h * float(np.sum([n.state_vars[period].in_transit_to(s, prod_index) \ + for s in n.customers_by_product(product=prod_index, network_BOM=True) if s is not None])) # Revenue. n.state_vars[period].revenue_earned = (n.get_attribute('revenue', prod_index) or 0) * \ float(np.sum([n.state_vars[period].outbound_shipment[s_index][prod_index] \ diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 8466f1e..3087f16 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -792,7 +792,7 @@ def raw_materials_by_product(self, product_index=None, network_BOM=True): ------ ValueError If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and - this is a single-product node with no |class_product| added. + this is a single-product node. """ # If product index is not in product indices for node, AND it's not the case that this is a single-product node # and product_index is None, raise exception. @@ -803,7 +803,7 @@ def raw_materials_by_product(self, product_index=None, network_BOM=True): # Determine which products to get raw materials for. if product_index == 'all': products = self.products - elif product_index == None: + elif product_index is None: products = [self.products[0]] else: products = [self.products_by_index[product_index]] @@ -1117,7 +1117,69 @@ def product_indices_by_raw_material(self, rm_index=None): this node has a single raw material. """ return [prod.index for prod in self.products_by_raw_material(rm_index=rm_index)] - + + def supplier_raw_material_pairs_by_product(self, product=None, return_indices=False, network_BOM=True): + """A list of all predecessors and raw materials for ``product``, as tuples ``(pred, rm)``. + Set ``product`` to ``'all'`` to get predecessors and raw materials for all products at the node. + If the node has a single product (either dummy or real), either set ``product`` to the single product, + or to ``None`` and the function will determine it automatically. + + If ``return_indices`` is ``False``, returns the predecessors as |class_node| objects (or ``None`` for the + external supplier) and the products as |class_product| objects, otherwise returns predecessor and product indices. + + If ``network_BOM`` is ``True``, includes predecessors and raw materials that don't have a + BOM relationship specified but are implied by the network structure. + (See :func:`get_network_bill_of_materials`.) + + Parameters + ---------- + product : |class_product|, int, or string, optional + The product (as a |class_product| object or index), ``None`` if the node has a single product, + or ``'all'`` to get predecessors and raw materials for all products. + return_indices : bool, optional + Set to ``False`` (the default) to return node and product objects, ``True`` to return node and product indices. + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. + + Raises + ------ + ValueError + If ``product`` is not found among the node's products, and it's not the case that ``product is None`` and + this is a single-product node. + """ + # Validate parameters. + if product != 'all': + prod_obj, prod_ind = self.validate_product(product) + + # If product is not in products for node, AND it's not the case that this is a single-product node + # and product_index is None, raise exception. + if not (self.is_singleproduct and prod_obj is None) \ + and prod_ind not in self.product_indices: + raise ValueError(f'{prod_ind} is not a product index in this SupplyChainNode') + + # Determine which products to consider. + if product == 'all': + products = self.products + elif product is None: + products = [self.products[0]] + else: + products = [prod_obj] + + pairs = set() + for prod in products: + for rm in self.raw_materials_by_product(prod.index, network_BOM=network_BOM): + for pred in self.raw_material_suppliers_by_raw_material(rm.index, network_BOM=network_BOM): + if return_indices: + if pred is None: + pairs.add((None, rm.index)) + else: + pairs.add((pred.index, rm.index)) + else: + pairs.add((pred, rm)) + + return list(pairs) + + def customers_by_product(self, product=None, return_indices=False, network_BOM=True): """A list of customers that order ``product`` from the node. If the node has a single product (either dummy or real), either set ``product`` to the single product, or to ``None`` and the function @@ -1135,7 +1197,7 @@ def customers_by_product(self, product=None, return_indices=False, network_BOM=T product : |class_product| or int, optional The product (as a |class_product| object or index), or ``None`` if the node has a single product. return_indices : bool, optional - Set to ``False`` (the default) to return product objects, ``True`` to return product indices. + Set to ``False`` (the default) to return node objects, ``True`` to return node indices. network_BOM : bool, optional If ``True`` (default), function uses network BOM instead of product-only BOM. """ @@ -1400,7 +1462,6 @@ def __repr__(self): """ return f'SupplyChainNode(index={self.index})' -# return "SupplyChainNode({:s})".format(str(vars(self))) # Attribute management. diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 44a8f51..688225d 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -1876,6 +1876,144 @@ def test_multiproduct_5_7(self): _ = nodes[0].product_indices_by_raw_material(rm_index=None) +class TestSupplierRawMaterialPairsByProduct(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestSupplierRawMaterialPairsByProduct', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestSupplierRawMaterialPairsByProduct', 'tear_down_class()') + + def test_mwor_one_product(self): + """Test that supplier_raw_material_pairs_by_product works correctly on MWOR network with one product added at retailer. + """ + print_status('TestSupplierRawMaterialPairsByProduct', 'test_mwor_one_product()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + nodes[0].demand_source = DemandSource(type='P', mean=5) + + prods = {i: SupplyChainProduct(i) for i in range(1, 6)} + nodes[1].add_products([prods[1], prods[2]]) + nodes[2].add_products([prods[2], prods[3]]) + nodes[3].add_products([prods[4], prods[5]]) + + prods[10] = SupplyChainProduct(10) + nodes[0].add_product(prods[10]) + prods[10].set_bill_of_materials(1, 5) + prods[10].set_bill_of_materials(2, 7) + prods[10].set_bill_of_materials(3, 3) + prods[10].set_bill_of_materials(4, 15) + prods[10].set_bill_of_materials(5, 6) + + self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=prods[10], return_indices=False, network_BOM=True)), + {(nodes[1], prods[1]), (nodes[1], prods[2]), (nodes[2], prods[2]), (nodes[2], prods[3]), (nodes[3], prods[4]), (nodes[3], prods[5])}) + self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=None, return_indices=False, network_BOM=True)), + {(nodes[1], prods[1]), (nodes[1], prods[2]), (nodes[2], prods[2]), (nodes[2], prods[3]), (nodes[3], prods[4]), (nodes[3], prods[5])}) + self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=None, return_indices=True, network_BOM=True)), + {(1, 1), (1, 2), (2, 2), (2, 3), (3, 4), (3, 5)}) + self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=False, network_BOM=True)), + {(None, nodes[1]._external_supplier_dummy_product)}) + self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=True, network_BOM=True)), + {(None, nodes[1]._external_supplier_dummy_product.index)}) + self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=2, return_indices=False, network_BOM=True)), + {(None, nodes[1]._external_supplier_dummy_product)}) + self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=False)), set()) + self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=True)), + {(None, nodes[2]._external_supplier_dummy_product)}) + self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=2, return_indices=True, network_BOM=True)), + {(None, nodes[2]._external_supplier_dummy_product.index)}) + self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=4, return_indices=False, network_BOM=True)), + {(None, nodes[3]._external_supplier_dummy_product)}) + self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=prods[5], return_indices=True, network_BOM=False)), set()) + + with self.assertRaises(ValueError): + _ = nodes[1].supplier_raw_material_pairs_by_product(product=77) + + def test_mwor_multiple_products(self): + """Test that supplier_raw_material_pairs_by_product works correctly on MWOR network with multiple products added at retailer. + """ + print_status('TestSupplierRawMaterialPairsByProduct', 'test_mwor_multiple_products()') + + network = mwor_system(3) + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + nodes[0].demand_source = DemandSource(type='P', mean=5) + + prods = {i: SupplyChainProduct(i) for i in [1, 2, 3, 4, 5, 10, 11, 12]} + network.get_node_from_index(1).add_products([prods[1], prods[2]]) + network.get_node_from_index(2).add_products([prods[2], prods[3]]) + network.get_node_from_index(3).add_products([prods[4], prods[5]]) + + nodes[0].add_products([prods[10], prods[11], prods[12]]) + + prods[10].set_bill_of_materials(1, 5) + prods[10].set_bill_of_materials(2, 7) + prods[11].set_bill_of_materials(3, 3) + prods[11].set_bill_of_materials(4, 15) + prods[12].set_bill_of_materials(5, 6) + + self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=prods[10], return_indices=False, network_BOM=True)), + {(nodes[1], prods[1]), (nodes[1], prods[2]), (nodes[2], prods[2])}) + self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=11, return_indices=False, network_BOM=True)), + {(nodes[2], prods[3]), (nodes[3], prods[4])}) + self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=12, return_indices=True, network_BOM=True)), + {(3, 5)}) + self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=False, network_BOM=True)), + {(None, nodes[1]._external_supplier_dummy_product)}) + self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=True, network_BOM=True)), + {(None, nodes[1]._external_supplier_dummy_product.index)}) + self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=2, return_indices=False, network_BOM=True)), + {(None, nodes[1]._external_supplier_dummy_product)}) + self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=False)), set()) + self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=True)), + {(None, nodes[2]._external_supplier_dummy_product)}) + self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=2, return_indices=True, network_BOM=True)), + {(None, nodes[2]._external_supplier_dummy_product.index)}) + self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=4, return_indices=False, network_BOM=True)), + {(None, nodes[3]._external_supplier_dummy_product)}) + self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=prods[5], return_indices=True, network_BOM=False)), set()) + + with self.assertRaises(ValueError): + _ = nodes[1].supplier_raw_material_pairs_by_product(product=77) + _ = nodes[0].supplier_raw_material_pairs_by_product(product=None, return_indices=True, network_BOM=True), [None] + + def test_multiproduct_5_7(self): + """Test that supplier_raw_material_pairs_by_product works correctly on 5-node, 7-product network. + """ + print_status('TestSupplierRawMaterialPairsByProduct', 'test_multiproduct_5_7()') + + network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") + nodes = {i: network.get_node_from_index(i) for i in network.node_indices} + prods = {prod.index: prod for prod in network.products} + + self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=prods[0], return_indices=False, network_BOM=True)), + {(nodes[2], prods[2]), (nodes[2], prods[3])}) + self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=0, return_indices=False, network_BOM=True)), + {(nodes[2], prods[2]), (nodes[2], prods[3]), (nodes[3], prods[2])}) + self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=1, return_indices=True, network_BOM=True)), + {(2, 3), (2, 4), (3, 4)}) + self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=True)), + {(nodes[4], prods[5])}) + self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=prods[3], return_indices=True, network_BOM=True)), + {(4, 5)}) + self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=4, return_indices=False, network_BOM=True)), + {(nodes[4], prods[6])}) + self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=False)), + {(nodes[4], prods[5])}) + self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=4, return_indices=True, network_BOM=True)), + {(4, 6)}) + self.assertEqual(set(nodes[4].supplier_raw_material_pairs_by_product(product=5, return_indices=True, network_BOM=True)), + {(None, nodes[4]._external_supplier_dummy_product.index)}) + self.assertEqual(set(nodes[4].supplier_raw_material_pairs_by_product(product=prods[6], return_indices=False, network_BOM=False)), set()) + + with self.assertRaises(ValueError): + _ = nodes[1].supplier_raw_material_pairs_by_product(product=77) + _ = nodes[0].supplier_raw_material_pairs_by_product(product=None, return_indices=True, network_BOM=True), [None] + + class TestCustomersByProduct(unittest.TestCase): @classmethod def set_up_class(cls): From 9040d609bb551d1a6b49507caed9d44eb18e0482 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 6 May 2024 09:30:14 -0400 Subject: [PATCH 51/94] Get rid of `_indices` versions of `node.rm` functions and make it an option #145 --- src/stockpyl/node_state_vars.py | 35 +- src/stockpyl/policy.py | 4 +- src/stockpyl/sim.py | 36 +- src/stockpyl/supply_chain_node.py | 565 +++++++++--------- tests/test_node_state_vars.py | 12 +- tests/test_supply_chain_node.py | 925 +++++++++++++++--------------- 6 files changed, 792 insertions(+), 785 deletions(-) diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index 8baef20..2be45db 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -170,13 +170,13 @@ def __init__(self, node=None, period=None): self.inbound_shipment_pipeline = {} for p_index in self.node.predecessor_indices(include_external=True): self.inbound_shipment_pipeline[p_index] = {} - for rm_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True): + for rm_index in self.node.raw_materials_by_product(product='all', return_indices=True, network_BOM=True): # Find a product at this node that uses raw material rm_index from predecessor p_index, # and use its lead times. If there is more than one such product, use the last one found. # This is a little klugey. # TODO: improve? should LTs be an attribute of the RM, not the product? for prod_index in self.node.product_indices: - if rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) and \ - p_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): + if rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True) and \ + p_index in self.node.raw_material_suppliers_by_raw_material(raw_material=rm_index, return_indices=True, network_BOM=True): # Get lead times for this product. # TODO: shouldn't inbound shipment pipeline only use shipment LT, not order LT? order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) shipment_lead_time = (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) @@ -196,7 +196,8 @@ def __init__(self, node=None, period=None): for p in self.node.predecessors(include_external=True)} self.order_quantity = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} for p in self.node.predecessors(include_external=True)} - self.raw_material_inventory = {prod_index: 0 for prod_index in self.node.raw_material_indices_by_product(product_index='all', network_BOM=True)} + self.raw_material_inventory = {prod_index: 0 for prod_index \ + in self.node.raw_materials_by_product(product='all', return_indices=True, network_BOM=True)} self.order_quantity_fg = {prod_index: 0 for prod_index in self.node.product_indices} self.pending_finished_goods = {prod_index: 0 for prod_index in self.node.product_indices} @@ -838,14 +839,14 @@ def in_transit(self, prod_index=None): total_in_transit = np.sum([ self.in_transit_from(p, rm_index) * self.node.NBOM(product=prod_index, predecessor=p.index if p is not None else None, raw_material=rm_index) - for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) - for p in self.node.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=True) + for rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True) + for p in self.node.raw_material_suppliers_by_raw_material(raw_material=rm_index, network_BOM=True) ]) if total_in_transit == 0: return 0 else: - return total_in_transit / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + return total_in_transit / len(self.node.raw_materials_by_product(product=prod_index, network_BOM=True)) def on_order(self, prod_index=None): """Current inventory of raw materials for product ``prod_index`` that is on order to the node. Read only. @@ -891,14 +892,14 @@ def on_order(self, prod_index=None): total_on_order = np.sum([ self.on_order_by_predecessor[p][rm_index] / self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) - for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) - for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) + for rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True) + for p in self.node.raw_material_suppliers_by_raw_material(raw_material=rm_index, return_indices=True, network_BOM=True) ]) if total_on_order == 0: return 0 else: - return total_on_order / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + return total_on_order / len(self.node.raw_materials_by_product(product=prod_index, network_BOM=True)) def raw_material_aggregate(self, prod_index=None): """Current raw materials for product ``prod_index`` that are in raw-material inventory at the node. Read only. @@ -943,7 +944,7 @@ def raw_material_aggregate(self, prod_index=None): prod = self.node.products_by_index[prod_index] total_raw_material = 0 - for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True): + for rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True): BOM = prod.BOM(rm_index) if BOM == 0: # rm_index has no BOM relationship, so it is only in the network BOM; therefore, @@ -955,7 +956,7 @@ def raw_material_aggregate(self, prod_index=None): if total_raw_material == 0: return 0 else: - return total_raw_material / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + return total_raw_material / len(self.node.raw_materials_by_product(product=prod_index, network_BOM=True)) def inbound_disrupted_items_aggregate(self, prod_index=None): """Current total inbound disrupted inventory of raw materials for product ``prod_index``. Read only. @@ -1001,14 +1002,14 @@ def inbound_disrupted_items_aggregate(self, prod_index=None): total_disrupted_items = np.sum([ self.inbound_disrupted_items[p][rm_index] * self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) - for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True) - for p in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True) + for rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True) + for p in self.node.raw_material_suppliers_by_raw_material(raw_material=rm_index, return_indices=True, network_BOM=True) ]) if total_disrupted_items == 0: return 0 else: - return total_disrupted_items / len(self.node.raw_materials_by_product(product_index=prod_index, network_BOM=True)) + return total_disrupted_items / len(self.node.raw_materials_by_product(product=prod_index, network_BOM=True)) def inventory_position(self, prod_index=None, exclude_earmarked_units=False): """Current (local) inventory position at node for product with index ``prod_index``. @@ -1056,10 +1057,10 @@ def inventory_position(self, prod_index=None, exclude_earmarked_units=False): # Determine total units of each RM in the pipeline, converted to units of the downstream product. pipeline = {} - for rm_index in self.node.raw_material_indices_by_product(product_index=prod_index, network_BOM=True): + for rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True): # Calculate pipeline, in upstream units. pipeline[rm_index] = self.raw_material_inventory[rm_index] - for pred_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): + for pred_index in self.node.raw_material_suppliers_by_raw_material(raw_material=rm_index, return_indices=True, network_BOM=True): pipeline[rm_index] += (self.on_order_by_predecessor[pred_index][rm_index] \ + self.inbound_disrupted_items[pred_index][rm_index]) diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index a4e64e5..3a21078 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -499,8 +499,8 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra # Loop through raw materials and predecessors, and calculate order quantities for each. if OQ is not None: - for rm_index in self.node.raw_material_indices_by_product(product_index): - for pred_index in self.node.raw_material_supplier_indices_by_raw_material(rm_index): + for rm_index in self.node.raw_materials_by_product(product_index, return_indices=True): + for pred_index in self.node.raw_material_suppliers_by_raw_material(rm_index, return_indices=True): # Calculate total orders that have already been placed by this node to this supplier for this RM # in the current time period (for other products at the node that use the same RM). These units diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 2f730ea..a47d730 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -411,9 +411,9 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan node.state_vars_current.pending_finished_goods[prod.index] += order_quantity_dict[None][None] # Place orders for all raw materials. - for rm in node.raw_materials_by_product(product_index=prod.index, network_BOM=True): + for rm in node.raw_materials_by_product(product=prod.index, network_BOM=True): rm_index = rm.index - for p in node.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=True): + for p in node.raw_material_suppliers_by_raw_material(raw_material=rm_index, network_BOM=True): p_index = p.index if p is not None else None # Was an override order quantity provided? @@ -540,8 +540,8 @@ def _initialize_state_vars(network): n.state_vars[0].inbound_order_pipeline[s.index][prod.index][l] = s.get_attribute('initial_orders', prod) or 0 # State variables indexed by product at predecessor nodes. - for rm_index in n.raw_material_indices_by_product('all', network_BOM=True): - for p_index in n.raw_material_supplier_indices_by_raw_material(rm_index=rm_index, network_BOM=True): + for rm_index in n.raw_materials_by_product('all', return_indices=True, network_BOM=True): + for p_index in n.raw_material_suppliers_by_raw_material(raw_material=rm_index, return_indices=True, network_BOM=True): # for p in n.predecessors(include_external=True): # p_index = p.index if p is not None else None # for rm_index in p.product_indices if p is not None else [n._external_supplier_dummy_product.index]: @@ -554,7 +554,7 @@ def _initialize_state_vars(network): + (n.get_attribute('initial_orders', prod) or 0) * (n.get_attribute('order_lead_time', prod) or 0) # Initialize raw material inventory. - for rm_index in n.raw_material_indices_by_product(product_index='all', network_BOM=True): + for rm_index in n.raw_materials_by_product(product='all', return_indices=True, network_BOM=True): n.state_vars[0].raw_material_inventory[rm_index] = 0 @@ -615,7 +615,7 @@ def _initialize_next_period_state_vars(network, period): # Loop through raw materials at predecessor. for rm_index in (p.product_indices if p is not None else [n._external_supplier_dummy_product.index]): - if rm_index in n.raw_material_indices_by_product('all', network_BOM=True) and \ + if rm_index in n.raw_materials_by_product('all', return_indices=True, network_BOM=True) and \ p in n.raw_material_suppliers_by_raw_material(rm_index, network_BOM=True): # Is there a transit-pausing disruption? @@ -658,7 +658,7 @@ def _initialize_next_period_state_vars(network, period): p_index = p.index if p is not None else None # Loop through raw materials at predecessor. for rm_index in (p.product_indices if p is not None else [n._external_supplier_dummy_product.index]): - if rm_index in n.raw_material_indices_by_product('all', network_BOM=True) and \ + if rm_index in n.raw_materials_by_product('all', return_indices=True, network_BOM=True) and \ p in n.raw_material_suppliers_by_raw_material(rm_index, network_BOM=True): n.state_vars[period + 1].on_order_by_predecessor[p_index][rm_index] = \ n.state_vars[period].on_order_by_predecessor[p_index][rm_index] @@ -704,9 +704,9 @@ def _calculate_period_costs(network, period): except TypeError: n.state_vars[period].holding_cost_incurred += (n.get_attribute('local_holding_cost', prod_index) or 0) * items_held # Raw materials holding cost. Includes only products that come from an actual predecessor node, not external supplier. - for rm_index in n.raw_material_indices_by_product(product_index=prod_index, network_BOM=True): + for rm_index in n.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True): # Determine suppliers for this raw material, excluding external supplier. - preds = n.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=True) + preds = n.raw_material_suppliers_by_raw_material(raw_material=rm_index, network_BOM=True) preds = [p for p in preds if p is not None] if len(preds) > 0: # Choose first supplier of this raw material arbitrarily and use its holding cost. This is a workaround @@ -769,7 +769,7 @@ def _receive_inbound_shipments(node): # Loop through raw materials at predecessor. for rm_index in (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]): - if rm_index in node.raw_material_indices_by_product('all', network_BOM=True) and \ + if rm_index in node.raw_materials_by_product('all', return_indices=True, network_BOM=True) and \ p in node.raw_material_suppliers_by_raw_material(rm_index, network_BOM=True): # Determine number of items that will be received from p (if there is no disruption), @@ -832,7 +832,7 @@ def _raw_materials_to_finished_goods(node): # Allocate available raw materials to products in proportion to each product's share of # the order for that raw material that was placed LT periods ago. share = {} - for rm_index in node.raw_material_indices_by_product(product_index='all', network_BOM=True): + for rm_index in node.raw_materials_by_product(product='all', return_indices=True, network_BOM=True): # Shortcut to lead times. Note: This assumes that all products that use this RM have the # same lead times. Currently no way to distinguish among products if they have different lead times. @@ -845,13 +845,13 @@ def _raw_materials_to_finished_goods(node): avail_rm = node.state_vars_current.raw_material_inventory[rm_index] # Shortcut to list of product indices for this RM. - prods_for_rm = node.product_indices_by_raw_material(rm_index) + prods_for_rm = node.products_by_raw_material(rm_index, return_indices=True) # If avail_rm > 0, then we know period >= OLT + SLT. if avail_rm > 0: # Determine total order placed for this raw material LT periods ago. units_ordered = sum([node.state_vars[period - OLT - SLT].order_quantity[pred_index][rm_index] - for pred_index in node.raw_material_supplier_indices_by_raw_material(rm_index, network_BOM=True)]) + for pred_index in node.raw_material_suppliers_by_raw_material(rm_index, return_indices=True, network_BOM=True)]) # If units_ordered == 0, allocate into equal shares. (This can happen if the original # order was backordered, or if there is initial RM at the start of the simulation.) @@ -881,14 +881,14 @@ def _raw_materials_to_finished_goods(node): # Determine number of FGunits that can be produced; it equals the min, over all # RMs for the product, of the product's share of that RM, expressed in FG units. avail_rm = {rm_index: share[rm_index][prod_index] / node.NBOM(product=prod_index, predecessor=None, raw_material=rm_index) - for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True)} + for rm_index in node.raw_materials_by_product(prod_index, return_indices=True, network_BOM=True)} num_to_make = min(avail_rm.values()) # Number of finished goods = min of min RM available and pending FG. new_finished_goods[prod_index] = num_to_make # Process units: remove from raw material and add to finished goods. - for rm_index in node.raw_material_indices_by_product(prod_index, network_BOM=True): + for rm_index in node.raw_materials_by_product(prod_index, return_indices=True, network_BOM=True): node.state_vars_current.raw_material_inventory[rm_index] \ -= num_to_make * node.NBOM(product=prod_index, predecessor=None, raw_material=rm_index) node.state_vars_current.inventory_level[prod_index] += num_to_make @@ -1074,14 +1074,14 @@ def _propagate_shipment_downstream(node): # unless there is a type-TP disruption, in which case outbound shipments # successor wait in slot s.shipment_lead_time until the disruption ends.) for s in node.successors(): - if prod_index in s.raw_material_indices_by_product('all', network_BOM=True) and \ + if prod_index in s.raw_materials_by_product('all', return_indices=True, network_BOM=True) and \ node in s.raw_material_suppliers_by_raw_material(prod_index, network_BOM=True): # Find a product at successor node that uses prod_index from node as a raw material, # and use its lead time. If there is more than one such product, use the last one found. # This is a little klugey. # TODO: improve? should LTs be an attribute of the RM, not the product? for FG_index in s.product_indices: - if prod_index in s.raw_material_indices_by_product(product_index=FG_index, network_BOM=True) and \ - node.index in s.raw_material_supplier_indices_by_raw_material(rm_index=prod_index, network_BOM=True): + if prod_index in s.raw_materials_by_product(product=FG_index, return_indices=True, network_BOM=True) and \ + node.index in s.raw_material_suppliers_by_raw_material(raw_material=prod_index, return_indices=True, network_BOM=True): # Get lead time for this product. shipment_lead_time = (s.get_attribute('shipment_lead_time', product=FG_index) or 0) diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 3087f16..1fea11c 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -764,22 +764,27 @@ def NBOM(self, product=None, predecessor=None, raw_material=None): """A shortcut to :func:`~get_network_bill_of_materials`.""" return self.get_network_bill_of_materials(product, predecessor, raw_material) - def raw_materials_by_product(self, product_index=None, network_BOM=True): - """A list of all raw materials required to make product with index ``product_index`` - at the node, as as |class_prod| objects. If the node is single-product, either set - ``product_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. Set ``product_index`` to ``'all'`` + def raw_materials_by_product(self, product=None, return_indices=False, network_BOM=True): + """Return a list of all raw materials required to make ``product`` + at the node. If the node is single-product, either set + ``product`` to the single product, or to ``None`` + and the function will determine it automatically. Set ``product`` to ``'all'`` to include all raw materials required to make all products at the node. + If ``return_indices`` is ``False``, returns the raw materials as |class_product| objects, + otherwise returns their indices. + If ``network_BOM`` is ``True``, includes raw materials that don't have a BOM relationship specified but are implied by the network structure. (See :func:`get_network_bill_of_materials`.) Parameters ---------- - product_index : int, optional - The product index, or ``None`` if the node is single-product, or ``'all'`` to - get raw materials for all products. + product : |class_product|, int, or string, optional + The product (as a |class_product| object or index), ``None`` if the node is single-product, + or ``'all'`` to get raw materials for all products. + return_indices : bool, optional + Set to ``False`` (the default) to return product objects, ``True`` to return product indices. network_BOM : bool, optional If ``True`` (default), function uses network BOM instead of product-only BOM. @@ -791,332 +796,316 @@ def raw_materials_by_product(self, product_index=None, network_BOM=True): Raises ------ ValueError - If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and + If ``product`` is not found among the node's products, and it's not the case that ``product is None`` and this is a single-product node. """ - # If product index is not in product indices for node, AND it's not the case that this is a single-product node - # and product_index is None, raise exception. - if not (self.is_singleproduct and product_index is None) \ - and product_index != 'all' and product_index not in self.product_indices: - raise ValueError(f'{product_index} is not a product index in this SupplyChainNode') + # Validate parameters. + if product != 'all': + prod_obj, prod_ind = self.validate_product(product) # Determine which products to get raw materials for. - if product_index == 'all': + if product == 'all': products = self.products - elif product_index is None: + elif product is None: products = [self.products[0]] else: - products = [self.products_by_index[product_index]] + products = [prod_obj] rms = set() for prod in products: - if network_BOM: - for pred in self.predecessors(include_external=True): - for rm in pred.products if pred is not None else [self._external_supplier_dummy_product]: - if self.NBOM(product=prod, predecessor=pred, raw_material=rm) > 0: - rms.add(rm) - else: - rms |= set(prod.raw_materials) + for pred, rm in self.supplier_raw_material_pairs_by_product(product=prod, \ + return_indices=return_indices, network_BOM=network_BOM): + rms.add(rm) + # if network_BOM: + # for pred in self.predecessors(include_external=True): + # for rm in pred.products if pred is not None else [self._external_supplier_dummy_product]: + # if self.NBOM(product=prod, predecessor=pred, raw_material=rm) > 0: + # rms.add(rm) + # else: + # rms |= set(prod.raw_materials) + return list(rms) - def raw_material_indices_by_product(self, product_index=None, network_BOM=True): - """A list of indices of all raw materials required to make product with index ``product_index`` - at the node, as as |class_prod| objects. If the node is single-product, either set - ``product_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. Set ``product_index`` to ``'all'`` - to include all raw materials required to make all products at the node. - - If ``network_BOM`` is ``True``, includes raw materials that don't have a - BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) - - Parameters - ---------- - product_index : int, optional - The product index, or ``None`` if node is single-product, or ``'all'`` to - get raw materials for all products. - network_BOM : bool, optional - If ``True`` (default), function uses network BOM instead of product-only BOM. - - Returns - ------- - list - List of indices of all raw materials required to make the product at the node. - - Raises - ------ - ValueError - If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and - this is a single-product node with no |class_product| added. - """ - return [rm.index for rm in self.raw_materials_by_product(product_index=product_index, network_BOM=network_BOM)] - - def raw_material_suppliers_by_product(self, product_index=None, network_BOM=True): + # def raw_material_indices_by_product(self, product_index=None, network_BOM=True): + # """A list of indices of all raw materials required to make product with index ``product_index`` + # at the node, as as |class_prod| objects. If the node is single-product, either set + # ``product_index`` to the index of the single product, or to ``None`` + # and the function will determine the index automatically. Set ``product_index`` to ``'all'`` + # to include all raw materials required to make all products at the node. + + # If ``network_BOM`` is ``True``, includes raw materials that don't have a + # BOM relationship specified but are implied by the network structure. + # (See :func:`get_network_bill_of_materials`.) + + # Parameters + # ---------- + # product_index : int, optional + # The product index, or ``None`` if node is single-product, or ``'all'`` to + # get raw materials for all products. + # network_BOM : bool, optional + # If ``True`` (default), function uses network BOM instead of product-only BOM. + + # Returns + # ------- + # list + # List of indices of all raw materials required to make the product at the node. + + # Raises + # ------ + # ValueError + # If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and + # this is a single-product node with no |class_product| added. + # """ + # return [rm.index for rm in self.raw_materials_by_product(product=product_index, network_BOM=network_BOM)] + + def raw_material_suppliers_by_product(self, product=None, return_indices=False, network_BOM=True): """Return a list of all predecessors from which a raw material must be ordered in order to - make ``product_index`` at this node, according to the bill of materials. + make ``product`` at this node, according to the bill of materials. If the node is single-product, either set - ``product_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. + ``product`` to the single product, or to ``None`` + and the function will determine it automatically. + + If ``return_indices`` is ``False``, returns the suppliers as |class_node| objects, + otherwise returns their indices. If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a BOM relationship specified but are implied by the network structure. (See :func:`get_network_bill_of_materials`.) - - Suppliers in list are - |class_node| objects, plus ``None`` for the external supplier, if appropriate. Parameters ---------- - product_index : int, optional - The product index, or ``None`` if node is single-product. + product : |class_product| or int, optional + The product (as a |class_product| object or index), or ``None`` if the node is single-product. + return_indices : bool, optional + Set to ``False`` (the default) to return node objects, ``True`` to return node indices. network_BOM : bool, optional If ``True`` (default), function uses network BOM instead of product-only BOM. Returns ------- list - List of all predecessors, as |class_node| objects, from which a raw material must be ordered in order to - make ``product_index`` at this node, according to the bill of materials, including ``None`` for + List of all predecessors from which a raw material must be ordered in order to + make ``product`` at this node, according to the bill of materials, including ``None`` for the external supplier, if appropriate. Raises ------ ValueError - If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and - this is a single-product node with no |class_product| added. + If ``product`` is not found among the node's products, and it's not the case that ``product is None`` and + this is a single-product node. """ - # If product index is not in product indices for node, AND it's not the case that this is a single-product node - # and product_index is None, raise exception. - if not (self.is_singleproduct and product_index is None) and product_index not in self.product_indices: - raise ValueError(f'{product_index} is not a product index in this SupplyChainNode') - - if product_index is None: - if len(self.products) == 0: - return [] - else: - prod = self.products[0] - else: - prod = self.products_by_index[product_index] - suppliers = [] - # Only include external supplier if network_BOM is True. - for p in self.predecessors(include_external=network_BOM): - # Determine whether p provides a raw material for the product. - provides_rm = False - if p is None: - provides_rm = True - else: - for rm in p.products: - if (network_BOM and self.NBOM(product=prod, predecessor=p, raw_material=rm) > 0) \ - or (not network_BOM and prod.BOM(rm.index if rm is not None else None) > 0): - provides_rm = True - break - - # Add p to list if it provides a raw material. - if provides_rm: - suppliers.append(p) + # Validate parameters. + prod_obj, _ = self.validate_product(product) + + suppliers = set() + for pred, rm in self.supplier_raw_material_pairs_by_product(product=prod_obj, \ + return_indices=return_indices, network_BOM=network_BOM): + suppliers.add(pred) + + # suppliers = [] + # # Only include external supplier if network_BOM is True. + # for p in self.predecessors(include_external=network_BOM): + # # Determine whether p provides a raw material for the product. + # provides_rm = False + # if p is None: + # provides_rm = True + # else: + # for rm in p.products: + # if (network_BOM and self.NBOM(product=prod, predecessor=p, raw_material=rm) > 0) \ + # or (not network_BOM and prod.BOM(rm.index if rm is not None else None) > 0): + # provides_rm = True + # break + + # # Add p to list if it provides a raw material. + # if provides_rm: + # suppliers.append(p) - return suppliers - - def raw_material_supplier_indices_by_product(self, product_index=None, network_BOM=True): - """Return a list of all indices of predecessors from which a raw material must be ordered in order to - make ``product_index`` at this node, according to the bill of materials. - If the node is single-product, either set - ``product_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. - - If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a - BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) + return list(suppliers) + + # def raw_material_supplier_indices_by_product(self, product_index=None, network_BOM=True): + # """Return a list of all indices of predecessors from which a raw material must be ordered in order to + # make ``product_index`` at this node, according to the bill of materials. + # If the node is single-product, either set + # ``product_index`` to the index of the single product, or to ``None`` + # and the function will determine the index automatically. + + # If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a + # BOM relationship specified but are implied by the network structure. + # (See :func:`get_network_bill_of_materials`.) - Parameters - ---------- - product_index : int, optional - The product index, or ``None`` if ``predecessor`` is single-product. - network_BOM : bool, optional - If ``True`` (default), function uses network BOM instead of product-only BOM. - - Returns - ------- - list - List of all indices of predecessors from which a raw material must be ordered in order to - make ``product_index`` at this node, according to the bill of materials. - - Raises - ------ - ValueError - If ``product_index`` is not found among the node's products, and it's not the case that this is a single-product - node with no |class_product| added. - """ - return [(s.index if s is not None else None) for s in self.raw_material_suppliers_by_product(product_index=product_index, network_BOM=network_BOM)] - - def raw_material_suppliers_by_raw_material(self, rm_index=None, network_BOM=True): - """Return a list of all predecessors that supply the node with the raw material - with index ``rm_index``. Every predecessor that _can_ supply the raw material, including - the external supplier, is included in the list, regardless of whether the BOM - requires it, and regardless of whether the node actually orders the raw material - from the supplier. - - If the node has only a single raw material that is required according to its - BOM, ``rm_index`` can be set to the index of that raw material, or to ``None`` and - the function will determine th eindex automatically. + # Parameters + # ---------- + # product_index : int, optional + # The product index, or ``None`` if ``predecessor`` is single-product. + # network_BOM : bool, optional + # If ``True`` (default), function uses network BOM instead of product-only BOM. + + # Returns + # ------- + # list + # List of all indices of predecessors from which a raw material must be ordered in order to + # make ``product_index`` at this node, according to the bill of materials. + + # Raises + # ------ + # ValueError + # If ``product_index`` is not found among the node's products, and it's not the case that this is a single-product + # node with no |class_product| added. + # """ + # return [(s.index if s is not None else None) for s in self.raw_material_suppliers_by_product(product_index=product_index, network_BOM=network_BOM)] + + def raw_material_suppliers_by_raw_material(self, raw_material=None, return_indices=False, network_BOM=True): + """Return a list of all predecessors that supply the node with ``raw_material``. + Every predecessor that _can_ supply the raw material, including + the external supplier, is included in the list, regardless of whether the node actually orders the raw material + from the supplier. If the node has a single raw material, either set ``raw_material`` to the + single raw material, or to ``None`` and the function will determine it automatically. + + If ``return_indices`` is ``False``, returns the suppliers as |class_node| objects, + otherwise returns their indices. If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a BOM relationship specified but are implied by the network structure. (See :func:`get_network_bill_of_materials`.) - Suppliers in list are - |class_node| objects, plus ``None`` for the external supplier, if appropriate. - Parameters ---------- - rm_index : int, optional - The raw material index, or ``None`` if the node requires a single raw material. + raw_material : |class_product| or int, optional + The raw material (as a |class_product| object or index), or ``None`` if the node + requires a single raw material. + return_indices : bool, optional + Set to ``False`` (the default) to return product objects, ``True`` to return product indices. network_BOM : bool, optional If ``True`` (default), function uses network BOM instead of product-only BOM. Returns ------- list - List of all predecessors, as |class_node| objects, that can supply the node - with the raw material with index ``rm_index``, according to the bill of materials, + List of all predecessors that can supply the node + with ``raw_material``, according to the bill of materials, including ``None`` for the external supplier, if appropriate. Raises ------ ValueError - If ``rm_index`` is not found among the node's raw materials (and is not ``None``). - ValueError - If ``rm_index is None`` and the node requires more than one raw material. + If ``raw_material`` is not found among the node's raw materials, and it's not the case + that ``raw_material is None`` and this node has a single raw material. """ - rms = self.raw_materials_by_product('all', network_BOM=network_BOM) - rm_indices = self.raw_material_indices_by_product('all', network_BOM=network_BOM) - # If rm_index is None and the node requires more than one raw material, raise exception. - if len(rms) > 1 and rm_index is None: - raise ValueError(f'rm_index cannot be None if node requires more than 1 raw material.') - # If rm_index is not in product indices for node and is not None, raise exception. - if rm_index is not None and rm_index not in rm_indices: - raise ValueError(f'{rm_index} is not a raw material required by this SupplyChainNode') - - if rm_index is None: - # rm_index is None and there is at most a single raw material at this node (otherwise an exception - # would have been raised). - if len(rms) == 0: - return [] - else: - rm = rms[0] - elif rm_index == self._external_supplier_dummy_product.index: - rm = self._external_supplier_dummy_product - else: - rm = self.network.products_by_index[rm_index] - - suppliers = [] - # Only include external supplier if network_BOM is True. - for p in self.predecessors(include_external=network_BOM): - if p is None and rm.index == self._external_supplier_dummy_product.index: - # This is the external supplier, and rm_index matches the index of the - # external supplier dummy product. - suppliers.append(p) - elif p is not None and rm.index in p.product_indices: - # This is a "real" supplier, and it handles rm_index. - suppliers.append(p) - - return suppliers - - def raw_material_supplier_indices_by_raw_material(self, rm_index=None, network_BOM=True): - """Return a list of indices of all predecessors that supply the node with the raw material - with index ``rm_index``. Every predecessor that _can_ supply the raw material, including - the external supplier, is included in the list, regardless of whether the BOM - requires it, and regardless of whether the node actually orders the raw material - from the supplier. - - If the node has only a single raw material that is required according to its - BOM, ``rm_index`` can be set to the index of that raw material, or to ``None`` and - the function will determine the index automatically. - - If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a - BOM relationship specified but are implied by the network structure. - (See :func:`get_network_bill_of_materials`.) + # Validate parameters. + rm_obj, _ = self.validate_raw_material(raw_material, network_BOM=network_BOM) + + suppliers = set() + for pred, rm in self.supplier_raw_material_pairs_by_product(product='all', + return_indices=False, network_BOM=network_BOM): + if rm == rm_obj: + if return_indices: + suppliers.add(pred.index if pred is not None else None) + else: + suppliers.add(pred) + + return list(suppliers) + + # def raw_material_supplier_indices_by_raw_material(self, rm_index=None, network_BOM=True): + # """Return a list of indices of all predecessors that supply the node with the raw material + # with index ``rm_index``. Every predecessor that _can_ supply the raw material, including + # the external supplier, is included in the list, regardless of whether the BOM + # requires it, and regardless of whether the node actually orders the raw material + # from the supplier. + + # If the node has only a single raw material that is required according to its + # BOM, ``rm_index`` can be set to the index of that raw material, or to ``None`` and + # the function will determine the index automatically. + + # If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a + # BOM relationship specified but are implied by the network structure. + # (See :func:`get_network_bill_of_materials`.) + # Parameters + # ---------- + # rm_index : int, optional + # The raw material index, or ``None`` if the node requires a single raw material. + # network_BOM : bool, optional + # If ``True`` (default), function uses network BOM instead of product-only BOM. + + # Returns + # ------- + # list + # List of indicies of all predecessors that can supply the node + # with the raw material with index ``rm_index``, according to the bill of materials, + # including ``None`` for the external supplier, if appropriate. + + # Raises + # ------ + # ValueError + # If ``rm_index`` is not found among the node's raw materials (and is not ``None``). + # ValueError + # If ``rm_index is None`` and the node requires more than one raw material. + # """ + # return [(s.index if s is not None else None) for s in self.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=network_BOM)] + + def products_by_raw_material(self, raw_material=None, return_indices=False, network_BOM=True): + """Return a list of all products that use ``raw_material`` at the node. + If the node has a single raw material (either dummy or real), either set + ``raw_material`` to the single raw material, or to ``None`` and the function + will determine it automatically. + Parameters ---------- - rm_index : int, optional - The raw material index, or ``None`` if the node requires a single raw material. + raw_material : |class_product| or int, optional + The raw material (as a |class_product| object or index), or ``None`` if the node + requires a single raw material. + return_indices : bool, optional + Set to ``False`` (the default) to return product objects, ``True`` to return product indices. network_BOM : bool, optional If ``True`` (default), function uses network BOM instead of product-only BOM. Returns ------- list - List of indicies of all predecessors that can supply the node - with the raw material with index ``rm_index``, according to the bill of materials, - including ``None`` for the external supplier, if appropriate. - - Raises - ------ - ValueError - If ``rm_index`` is not found among the node's raw materials (and is not ``None``). - ValueError - If ``rm_index is None`` and the node requires more than one raw material. - """ - return [(s.index if s is not None else None) for s in self.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=network_BOM)] - - def products_by_raw_material(self, rm_index=None): - """A list of all products that use raw material with index ``rm_index`` at the node, - as as |class_prod| objects. If the node has a single raw material (either dummy or real), either set - ``rm_index`` to the index of the single raw material, or to ``None`` and the function - will determine the index automatically. - - Parameters - ---------- - rm_index : int, optional - The raw material index, or ``None`` if the node has a single raw material. - - Returns - ------- - list - List of all products that use the raw material at the node. + List of all products that use the raw material at the node, according to the bill of materials. Raises ------ ValueError - If ``rm_index`` is not found among the node's raw materials, and it's not the case that ``rm_index is None`` and + If ``raw_material`` is not found among the node's raw materials, and it's not the case that ``raw_material is None`` and this node has a single raw material. """ - # If rm_index is not in raw material indices for node, AND it's not the case that this node has a single raw material - # and rm_index is None, raise exception. - all_rms = self.raw_material_indices_by_product('all', network_BOM=True) - if not (len(all_rms) == 1 and rm_index is None) and rm_index not in all_rms: - raise ValueError(f'{rm_index} is not a raw material index in this SupplyChainNode') - - # If rm_index is None, determine which rm_index to use. - if rm_index is None: - rm_index = all_rms[0] + # Validate parameters. + rm_obj, rm_ind = self.validate_raw_material(raw_material, network_BOM=network_BOM) + + if network_BOM: + prods = [prod for prod in self.products if self.NBOM(product=prod, predecessor=None, raw_material=raw_material) > 0] + else: + prods = [prod for prod in self.products if prod.BOM(rm_index=rm_ind) > 0] - return [prod for prod in self.products if self.NBOM(product=prod, predecessor=None, raw_material=rm_index) > 0] + if return_indices: + return [prod.index for prod in prods] + else: + return prods - def product_indices_by_raw_material(self, rm_index=None): - """A list of indices of all products that use raw material with index ``rm_index`` at the node, - as as |class_prod| objects. If the node has a single raw material (either dummy or real), either set - ``rm_index`` to the index of the single raw material, or to ``None`` and the function - will determine the index automatically. - - Parameters - ---------- - rm_index : int, optional - The raw material index, or ``None`` if the node has a single raw material. - - Returns - ------- - list - List of indices of all products that use the raw material at the node. - - Raises - ------ - ValueError - If ``rm_index`` is not found among the node's raw materials, and it's not the case that ``rm_index is None`` and - this node has a single raw material. - """ - return [prod.index for prod in self.products_by_raw_material(rm_index=rm_index)] + # def product_indices_by_raw_material(self, rm_index=None): + # """A list of indices of all products that use raw material with index ``rm_index`` at the node, + # as as |class_prod| objects. If the node has a single raw material (either dummy or real), either set + # ``rm_index`` to the index of the single raw material, or to ``None`` and the function + # will determine the index automatically. + + # Parameters + # ---------- + # rm_index : int, optional + # The raw material index, or ``None`` if the node has a single raw material. + + # Returns + # ------- + # list + # List of indices of all products that use the raw material at the node. + + # Raises + # ------ + # ValueError + # If ``rm_index`` is not found among the node's raw materials, and it's not the case that ``rm_index is None`` and + # this node has a single raw material. + # """ + # return [prod.index for prod in self.products_by_raw_material(rm_index=rm_index)] def supplier_raw_material_pairs_by_product(self, product=None, return_indices=False, network_BOM=True): """A list of all predecessors and raw materials for ``product``, as tuples ``(pred, rm)``. @@ -1134,12 +1123,17 @@ def supplier_raw_material_pairs_by_product(self, product=None, return_indices=Fa Parameters ---------- product : |class_product|, int, or string, optional - The product (as a |class_product| object or index), ``None`` if the node has a single product, + The product (as a |class_product| object or index), ``None`` if the node is single-product, or ``'all'`` to get predecessors and raw materials for all products. return_indices : bool, optional Set to ``False`` (the default) to return node and product objects, ``True`` to return node and product indices. network_BOM : bool, optional If ``True`` (default), function uses network BOM instead of product-only BOM. + + Returns + ------- + list + List of (predecessor, raw material) tuples. Raises ------ @@ -1147,15 +1141,19 @@ def supplier_raw_material_pairs_by_product(self, product=None, return_indices=Fa If ``product`` is not found among the node's products, and it's not the case that ``product is None`` and this is a single-product node. """ - # Validate parameters. + # This function relies on :func:`get_network_bill_of_materials` but not other functions + # that list suppliers/raw materials. Therefore, those functions can call this one without + # triggering an infinite recursion. + + # Validate parameters. if product != 'all': prod_obj, prod_ind = self.validate_product(product) # If product is not in products for node, AND it's not the case that this is a single-product node - # and product_index is None, raise exception. - if not (self.is_singleproduct and prod_obj is None) \ + # and product is None, raise exception. + if not (self.is_singleproduct and product is None) \ and prod_ind not in self.product_indices: - raise ValueError(f'{prod_ind} is not a product index in this SupplyChainNode') + raise ValueError(f'{prod_ind} is not a product index at node {self.index}.') # Determine which products to consider. if product == 'all': @@ -1167,16 +1165,18 @@ def supplier_raw_material_pairs_by_product(self, product=None, return_indices=Fa pairs = set() for prod in products: - for rm in self.raw_materials_by_product(prod.index, network_BOM=network_BOM): - for pred in self.raw_material_suppliers_by_raw_material(rm.index, network_BOM=network_BOM): - if return_indices: - if pred is None: - pairs.add((None, rm.index)) + for pred in self.predecessors(include_external=True): + for rm in pred.products if pred is not None else [self._external_supplier_dummy_product]: + if (network_BOM and self.NBOM(product=prod, predecessor=pred, raw_material=rm) > 0) \ + or (not network_BOM and prod.BOM(rm_index=rm.index) > 0): + if return_indices: + if pred is None: + pairs.add((None, rm.index)) + else: + pairs.add((pred.index, rm.index)) else: - pairs.add((pred.index, rm.index)) - else: - pairs.add((pred, rm)) - + pairs.add((pred, rm)) + return list(pairs) @@ -1218,7 +1218,6 @@ def customers_by_product(self, product=None, return_indices=False, network_BOM=T custs.append(None) return custs - def validate_product(self, product): """Confirm that ``product`` is a valid product of node: @@ -1267,7 +1266,7 @@ def validate_product(self, product): else: return prod_obj, prod_ind - def validate_raw_material(self, raw_material, predecessor=None): + def validate_raw_material(self, raw_material, predecessor=None, network_BOM=True): """Confirm that ``raw_material`` is a valid raw material used by the node: * If ``raw_material`` is a |class_product| object, confirms that it is a @@ -1287,6 +1286,8 @@ def validate_raw_material(self, raw_material, predecessor=None): predecessor : |class_node| or int, optional If not ``None`` and ``raw_material`` is not ``None``, the function will check that ``raw_material`` is provided by ``predecessor`` and raise an exception if not. + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. Returns ------- @@ -1309,7 +1310,7 @@ def validate_raw_material(self, raw_material, predecessor=None): does not supply this node with ``raw_material``. """ - rms = self.raw_materials_by_product(product_index='all', network_BOM=True) + rms = self.raw_materials_by_product(product='all', network_BOM=network_BOM) if raw_material is None: if len(rms) == 1: return self.network.parse_product(rms[0]) @@ -1320,8 +1321,8 @@ def validate_raw_material(self, raw_material, predecessor=None): _, pred_ind = self.network.parse_node(predecessor) if rm_obj not in rms: raise ValueError(f'Product {rm_ind} is not a raw material of node {self.index}.') - elif pred_ind is not None and \ - pred_ind not in self.raw_material_supplier_indices_by_raw_material(rm_ind, network_BOM=True): + elif pred_ind is not None and (pred_ind, rm_ind) not in \ + self.supplier_raw_material_pairs_by_product(product='all', return_indices=True, network_BOM=True): raise ValueError(f'Node {pred_ind} does not provide product {rm_ind} as a raw material to node {self.index}') else: return rm_obj, rm_ind diff --git a/tests/test_node_state_vars.py b/tests/test_node_state_vars.py index ee2bfdb..136f7e1 100644 --- a/tests/test_node_state_vars.py +++ b/tests/test_node_state_vars.py @@ -403,7 +403,7 @@ def test_example_6_1_per_22(self): # Indexed by predecessor and raw material. for rm in n.raw_materials_by_product('all', network_BOM=True): rm_ind = rm.index - for pred_ind in n.raw_material_supplier_indices_by_raw_material(rm_ind, network_BOM=True): + for pred_ind in n.raw_material_suppliers_by_raw_material(rm_ind, return_indices=True, network_BOM=True): self.assertEqual(n.state_vars[22].inbound_shipment[pred_ind][rm_ind], n.state_vars[22].get_inbound_shipment(predecessor=pred_ind, raw_material=rm_ind)) self.assertEqual(n.state_vars[22].on_order_by_predecessor[pred_ind][rm_ind], @@ -443,7 +443,7 @@ def test_example_6_1_per_22(self): self.assertEqual(n.state_vars[22].order_quantity_fg[prod_ind], n.state_vars[22].get_order_quantity_fg(product=prod_ind)) # Indexed by raw material. - for rm_ind in n.raw_material_indices_by_product('all', network_BOM=True): + for rm_ind in n.raw_materials_by_product('all', return_indices=True, network_BOM=True): self.assertEqual(n.state_vars[22].raw_material_inventory[rm_ind], n.state_vars[22].get_raw_material_inventory(raw_material=rm_ind)) def test_assembly_3_stage_per_43(self): @@ -462,7 +462,7 @@ def test_assembly_3_stage_per_43(self): # Indexed by predecessor and raw material. for rm in n.raw_materials_by_product('all', network_BOM=True): rm_ind = rm.index - for pred_ind in n.raw_material_supplier_indices_by_raw_material(rm_ind, network_BOM=True): + for pred_ind in n.raw_material_suppliers_by_raw_material(rm_ind, return_indices=True, network_BOM=True): self.assertEqual(n.state_vars[43].inbound_shipment[pred_ind][rm_ind], n.state_vars[43].get_inbound_shipment(predecessor=pred_ind, raw_material=rm_ind)) self.assertEqual(n.state_vars[43].on_order_by_predecessor[pred_ind][rm_ind], @@ -502,7 +502,7 @@ def test_assembly_3_stage_per_43(self): self.assertEqual(n.state_vars[43].order_quantity_fg[prod_ind], n.state_vars[43].get_order_quantity_fg(product=prod_ind)) # Indexed by raw material. - for rm_ind in n.raw_material_indices_by_product('all', network_BOM=True): + for rm_ind in n.raw_materials_by_product('all', return_indices=True, network_BOM=True): self.assertEqual(n.state_vars[43].raw_material_inventory[rm_ind], n.state_vars[43].get_raw_material_inventory(raw_material=rm_ind)) def test_multiproduct_5_7_per_43(self): @@ -521,7 +521,7 @@ def test_multiproduct_5_7_per_43(self): # Indexed by predecessor and raw material. for rm in n.raw_materials_by_product('all', network_BOM=True): rm_ind = rm.index - for pred_ind in n.raw_material_supplier_indices_by_raw_material(rm_ind, network_BOM=True): + for pred_ind in n.raw_material_suppliers_by_raw_material(rm_ind, return_indices=True, network_BOM=True): self.assertEqual(n.state_vars[43].inbound_shipment[pred_ind][rm_ind], n.state_vars[43].get_inbound_shipment(predecessor=pred_ind, raw_material=rm_ind)) self.assertEqual(n.state_vars[43].on_order_by_predecessor[pred_ind][rm_ind], @@ -561,7 +561,7 @@ def test_multiproduct_5_7_per_43(self): self.assertEqual(n.state_vars[43].order_quantity_fg[prod_ind], n.state_vars[43].get_order_quantity_fg(product=prod_ind)) # Indexed by raw material. - for rm_ind in n.raw_material_indices_by_product('all', network_BOM=True): + for rm_ind in n.raw_materials_by_product('all', return_indices=True, network_BOM=True): self.assertEqual(n.state_vars[43].raw_material_inventory[rm_ind], n.state_vars[43].get_raw_material_inventory(raw_material=rm_ind)) diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index 688225d..f9554e1 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -925,11 +925,11 @@ def test_mwor_no_product(self): nodes[2].add_products([prods[2], prods[3]]) nodes[3].add_products([prods[4], prods[5]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=None), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=None), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=None), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=None, return_indices=True), [1, 2, 3]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers_by_product(product_index=77) - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77) + _ = nodes[0].raw_material_suppliers_by_product(product=77) + _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True) def test_mwor_one_product(self): """Test that raw_material_suppliers and raw_material_supplier_indices work correctly on MWOR network with one product added at retailer. @@ -951,16 +951,16 @@ def test_mwor_one_product(self): nodes[0].products[0].set_bill_of_materials(4, 15) nodes[0].products[0].set_bill_of_materials(5, 6) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=10), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=10), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True), [1, 2, 3]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers_by_product(product_index=None) - _ = nodes[0].raw_material_suppliers_by_product(product_index=77) - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=None) - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77) + _ = nodes[0].raw_material_suppliers_by_product(product=None) + _ = nodes[0].raw_material_suppliers_by_product(product=77) + _ = nodes[0].raw_material_suppliers_by_product(product=None, return_indices=True) + _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True) def test_mwor_multiple_products(self): - """Test that raw_material_suppliers_by_product and raw_material_supplier_indices_by_product work correctly on MWOR network with multiple products added at retailer. + """Test that raw_material_suppliers_by_product works correctly on MWOR network with multiple products added at retailer. """ print_status('TestRawMaterialSuppliers', 'test_mwor_multiple_products()') @@ -980,51 +980,51 @@ def test_mwor_multiple_products(self): nodes[0].products_by_index[11].set_bill_of_materials(4, 15) nodes[0].products_by_index[12].set_bill_of_materials(5, 6) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=10), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=11), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=12), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=10), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=11), [2, 3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=12), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11, return_indices=True), [2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12, return_indices=True), [3]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers_by_product(product_index=None) - _ = nodes[0].raw_material_suppliers_by_product(product_index=77) - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=None) - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77) + _ = nodes[0].raw_material_suppliers_by_product(product=None) + _ = nodes[0].raw_material_suppliers_by_product(product=77) + _ = nodes[0].raw_material_suppliers_by_product(product=None, return_indices=True) + _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True) def test_multiproduct_5_7(self): - """Test that raw_material_suppliers_by_product and raw_material_supplier_indices_by_product work correctly on 5-node, 7-product network. + """Test that raw_material_suppliers_by_product works correctly on 5-node, 7-product network. """ print_status('TestRawMaterialSuppliers', 'test_multiproduct_5_7()') network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=0), [nodes[2]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=0), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=1), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=2), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=3), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=4), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=2), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=4), [nodes[4]]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=5), [None]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=6), [None]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=0), [2]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=0), [2, 3]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=1), [2, 3]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=2), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=3), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=4), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=2), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=4), [4]) - self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=5), [None]) - self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=6), [None]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0), [nodes[2]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4), [nodes[4]]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5), [None]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6), [None]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0, return_indices=True), [2]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0, return_indices=True), [2, 3]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1, return_indices=True), [2, 3]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2, return_indices=True), [4]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3, return_indices=True), [4]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4, return_indices=True), [4]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2, return_indices=True), [4]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4, return_indices=True), [4]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5, return_indices=True), [None]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6, return_indices=True), [None]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_suppliers_by_product(product_index=None) - _ = nodes[0].raw_material_suppliers_by_product(product_index=77) - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=None) - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77) + _ = nodes[0].raw_material_suppliers_by_product(product=None) + _ = nodes[0].raw_material_suppliers_by_product(product=77) + _ = nodes[0].raw_material_suppliers_by_product(product=None, return_indices=True) + _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True) class TestGetNetworkBillOfMaterials(unittest.TestCase): @@ -1226,7 +1226,7 @@ def tear_down_class(cls): print_status('TestRawMaterials', 'tear_down_class()') def test_mwor_no_product(self): - """Test that raw_materials_by_product and raw_material_indices_by_product work correctly on MWOR network with no product added at retailer. + """Test that raw_materials_by_product works correctly on MWOR network with no product added at retailer. """ print_status('TestRawMaterials', 'test_mwor_no_product()') @@ -1239,77 +1239,77 @@ def test_mwor_no_product(self): nodes[3].add_products([prods[4], prods[5]]) # Raw materials by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=True), list(prods.keys())) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), list(prods.keys())) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), list(prods.keys())) self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=True), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=True), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=True), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=True), list(prods.values())) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=True) - _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) # Raw materials by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=False), []) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), []) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=False), []) + self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False), []) + self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), []) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), []) self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=False), []) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), []) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=False), []) + self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=False), []) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=False), []) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=False) - _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) # Raw material suppliers by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=True), [1, 2, 3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), [1, 2, 3]) self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=True), [nodes[1], nodes[2], nodes[3]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=True) - _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=True) # Raw material suppliers by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=False), []) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), []) self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=False), []) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=False), []) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=False) # Raw material suppliers by raw_material, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=True), [1]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=True), [2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=True), [nodes[1]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=True), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=True), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=True), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=True), [1]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=True), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=True), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=True), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=True), [nodes[3]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=True) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=True) # Raw material suppliers by raw_material, network_BOM=False. with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=False) - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=False) - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=False) - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=False) - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=False) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=False), []) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=False), []) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=False) def test_mwor_one_product(self): - """Test that raw_materials_by_product and raw_material_indices_by_product work correctly on MWOR network with one product added at retailer. + """Test that raw_materials_by_product works correctly on MWOR network with one product added at retailer. """ print_status('TestRawMaterials', 'test_mwor_one_product()') @@ -1329,77 +1329,77 @@ def test_mwor_one_product(self): nodes[0].products[0].set_bill_of_materials(5, 6) # Raw materials by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=True), list(prods.keys())) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), list(prods.keys())) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), list(prods.keys())) self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=True), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=True), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=True), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=True), list(prods.values())) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=True) - _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) # Raw materials by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=False), list(prods.keys())) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), list(prods.keys())) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=False), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), list(prods.keys())) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), list(prods.keys())) self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=False), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=False), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=False), list(prods.values())) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=False), list(prods.values())) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=False) - _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) # Raw material suppliers by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=True), [1, 2, 3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), [1, 2, 3]) self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=nodes[0].product_indices[0], network_BOM=True), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=True), [nodes[1], nodes[2], nodes[3]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=True) - _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=True) # Raw material suppliers by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=False), [1, 2, 3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False), [1, 2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), [1, 2, 3]) self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=False), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=nodes[0].product_indices[0], network_BOM=False), [nodes[1], nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=False), [nodes[1], nodes[2], nodes[3]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=False) # Raw material suppliers by raw_material, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=True), [1]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=True), [2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=True), [nodes[1]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=True), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=True), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=True), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=True), [1]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=True), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=True), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=True), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=True), [nodes[3]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=True) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=True) # Raw material suppliers by raw_material, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=False), [1]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=False), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=False), [2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=False), [3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=False), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=False), [nodes[1]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=False), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=False), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=False), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=False), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=False), [1]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [1, 2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=False), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=False), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=False), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=False), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=False), [nodes[3]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=False) def test_mwor_multiple_products(self): - """Test that raw_materials_by_product and raw_material_indices_by_product work correctly on MWOR network with multiple products added at retailer. + """Test that raw_materials_by_product works correctly on MWOR network with multiple products added at retailer. """ print_status('TestRawMaterials', 'test_mwor_multiple_products()') @@ -1420,93 +1420,93 @@ def test_mwor_multiple_products(self): nodes[0].products_by_index[12].set_bill_of_materials(5, 6) # Raw materials by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=10, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=11, network_BOM=True), [3, 4]) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=12, network_BOM=True), [5]) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=True), [1, 2, 3, 4, 5]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=10, network_BOM=True), [prods[1], prods[2]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=11, network_BOM=True), [prods[3], prods[4]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=12, network_BOM=True), [prods[5]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=True), [prods[1], prods[2], prods[3], prods[4], prods[5]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=10, return_indices=True, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=11, return_indices=True, network_BOM=True), [3, 4]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=12, return_indices=True, network_BOM=True), [5]) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [1, 2, 3, 4, 5]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=10, network_BOM=True), [prods[1], prods[2]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=11, network_BOM=True), [prods[3], prods[4]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=12, network_BOM=True), [prods[5]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=True), [prods[1], prods[2], prods[3], prods[4], prods[5]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_indices_by_product(network_BOM=True) + _ = nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True) _ = nodes[0].raw_materials_by_product(network_BOM=True) - _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=True) - _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) # Raw materials by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=10, network_BOM=False), [1, 2]) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=11, network_BOM=False), [3, 4]) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=12, network_BOM=False), [5]) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=False), [1, 2, 3, 4, 5]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=10, network_BOM=False), [prods[1], prods[2]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=11, network_BOM=False), [prods[3], prods[4]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=12, network_BOM=False), [prods[5]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=False), [prods[1], prods[2], prods[3], prods[4], prods[5]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=10, return_indices=True, network_BOM=False), [1, 2]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=11, return_indices=True, network_BOM=False), [3, 4]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=12, return_indices=True, network_BOM=False), [5]) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [1, 2, 3, 4, 5]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=10, network_BOM=False), [prods[1], prods[2]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=11, network_BOM=False), [prods[3], prods[4]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=12, network_BOM=False), [prods[5]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=False), [prods[1], prods[2], prods[3], prods[4], prods[5]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_indices_by_product(network_BOM=False) + _ = nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False) _ = nodes[0].raw_materials_by_product(network_BOM=False) - _ = nodes[0].raw_material_indices_by_product(product_index=77, network_BOM=False) - _ = nodes[0].raw_materials_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) + _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) # Raw material suppliers by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=10, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=11, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=12, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=10, network_BOM=True), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=11, network_BOM=True), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=12, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11, return_indices=True, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12, return_indices=True, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, network_BOM=True), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11, network_BOM=True), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12, network_BOM=True), [nodes[3]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_product(network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True) _ = nodes[0].raw_material_suppliers_by_product(network_BOM=True) - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=True) - _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=True) # Raw material suppliers by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=10, network_BOM=False), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=11, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=12, network_BOM=False), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=10, network_BOM=False), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=11, network_BOM=False), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=12, network_BOM=False), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True, network_BOM=False), [1, 2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11, return_indices=True, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12, return_indices=True, network_BOM=False), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, network_BOM=False), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11, network_BOM=False), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12, network_BOM=False), [nodes[3]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_product(network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False) _ = nodes[0].raw_material_suppliers_by_product(network_BOM=False) - _ = nodes[0].raw_material_supplier_indices_by_product(product_index=77, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_product(product_index=77, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=False) # Raw material suppliers by raw_material, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=True), [1]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=True), [2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=True), [nodes[1]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=True), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=True), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=True), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=True), [1]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [1, 2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=True), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=True), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=True), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=True), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=True), [nodes[3]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=True) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=True) # Raw material suppliers by raw_material, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=1, network_BOM=False), [1]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=False), [1, 2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=False), [2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=False), [3]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=False), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=1, network_BOM=False), [nodes[1]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=2, network_BOM=False), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=3, network_BOM=False), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=4, network_BOM=False), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(rm_index=5, network_BOM=False), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=False), [1]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [1, 2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [3]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=False), [nodes[1]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=False), [nodes[1], nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=False), [nodes[2]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=False), [nodes[3]]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=False), [nodes[3]]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=False) def test_multiproduct_5_7(self): - """Test that raw_materials_by_product and raw_material_indices_by_product work correctly on 5-node, 7-product network. + """Test that raw_materials_by_product works correctly on 5-node, 7-product network. """ print_status('TestRawMaterials', 'test_multiproduct_5_7()') @@ -1515,176 +1515,176 @@ def test_multiproduct_5_7(self): prods = network.products_by_index # Raw materials by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=True), [2, 3]) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=0, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=True), [2, 3]) - self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index=0, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index=1, network_BOM=True), [3, 4]) - self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index='all', network_BOM=True), [2, 3, 4]) - self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=2, network_BOM=True), [5]) - self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=3, network_BOM=True), [5]) - self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=4, network_BOM=True), [6]) - self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index='all', network_BOM=True), [5, 6]) - self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index=2, network_BOM=True), [5]) - self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index=4, network_BOM=True), [6]) - self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index='all', network_BOM=True), [5, 6]) - self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index=5, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) - self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index=6, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) - self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index='all', network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) + self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=0, return_indices=True, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[1].raw_materials_by_product(product=0, return_indices=True, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[1].raw_materials_by_product(product=1, return_indices=True, network_BOM=True), [3, 4]) + self.assertListEqual(nodes[1].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [2, 3, 4]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=2, return_indices=True, network_BOM=True), [5]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=3, return_indices=True, network_BOM=True), [5]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=4, return_indices=True, network_BOM=True), [6]) + self.assertListEqual(nodes[2].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [5, 6]) + self.assertListEqual(nodes[3].raw_materials_by_product(product=2, return_indices=True, network_BOM=True), [5]) + self.assertListEqual(nodes[3].raw_materials_by_product(product=4, return_indices=True, network_BOM=True), [6]) + self.assertListEqual(nodes[3].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [5, 6]) + self.assertListEqual(nodes[4].raw_materials_by_product(product=5, return_indices=True, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) + self.assertListEqual(nodes[4].raw_materials_by_product(product=6, return_indices=True, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) + self.assertListEqual(nodes[4].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=True), [prods[2], prods[3]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=0, network_BOM=True), [prods[2], prods[3]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=True), [prods[2], prods[3]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product_index=0, network_BOM=True), [prods[2], prods[3]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product_index=1, network_BOM=True), [prods[3], prods[4]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product_index='all', network_BOM=True), [prods[2], prods[3], prods[4]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product_index=2, network_BOM=True), [prods[5]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product_index=3, network_BOM=True), [prods[5]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product_index=4, network_BOM=True), [prods[6]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product_index='all', network_BOM=True), [prods[5], prods[6]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product_index=2, network_BOM=True), [prods[5]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product_index=4, network_BOM=True), [prods[6]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product_index='all', network_BOM=True), [prods[5], prods[6]]) - self.assertListEqual(nodes[4].raw_materials_by_product(product_index=5, network_BOM=True), [nodes[4]._external_supplier_dummy_product]) - self.assertListEqual(nodes[4].raw_materials_by_product(product_index=6, network_BOM=True), [nodes[4]._external_supplier_dummy_product]) - self.assertListEqual(nodes[4].raw_materials_by_product(product_index='all', network_BOM=True), [nodes[4]._external_supplier_dummy_product]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=0, network_BOM=True), [prods[2], prods[3]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=True), [prods[2], prods[3]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product=0, network_BOM=True), [prods[2], prods[3]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product=1, network_BOM=True), [prods[3], prods[4]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product='all', network_BOM=True), [prods[2], prods[3], prods[4]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=2, network_BOM=True), [prods[5]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=3, network_BOM=True), [prods[5]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=4, network_BOM=True), [prods[6]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product='all', network_BOM=True), [prods[5], prods[6]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product=2, network_BOM=True), [prods[5]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product=4, network_BOM=True), [prods[6]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product='all', network_BOM=True), [prods[5], prods[6]]) + self.assertListEqual(nodes[4].raw_materials_by_product(product=5, network_BOM=True), [nodes[4]._external_supplier_dummy_product]) + self.assertListEqual(nodes[4].raw_materials_by_product(product=6, network_BOM=True), [nodes[4]._external_supplier_dummy_product]) + self.assertListEqual(nodes[4].raw_materials_by_product(product='all', network_BOM=True), [nodes[4]._external_supplier_dummy_product]) with self.assertRaises(ValueError): - _ = nodes[1].raw_material_indices_by_product(network_BOM=True) + _ = nodes[1].raw_materials_by_product(return_indices=True, network_BOM=True) _ = nodes[1].raw_materials_by_product(network_BOM=True) - _ = nodes[1].raw_material_indices_by_product(product_index=77, network_BOM=True) - _ = nodes[1].raw_materials_by_product(product_index=77, network_BOM=True) + _ = nodes[1].raw_materials_by_product(product=77, network_BOM=True) + _ = nodes[1].raw_materials_by_product(product=77, network_BOM=True) # Raw materials by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_indices_by_product(network_BOM=False), [2, 3]) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index=0, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[0].raw_material_indices_by_product(product_index='all', network_BOM=False), [2, 3]) - self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index=0, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index=1, network_BOM=False), [3, 4]) - self.assertListEqual(nodes[1].raw_material_indices_by_product(product_index='all', network_BOM=False), [2, 3, 4]) - self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=2, network_BOM=False), [5]) - self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=3, network_BOM=False), [5]) - self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index=4, network_BOM=False), [6]) - self.assertListEqual(nodes[2].raw_material_indices_by_product(product_index='all', network_BOM=False), [5, 6]) - self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index=2, network_BOM=False), [5]) - self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index=4, network_BOM=False), [6]) - self.assertListEqual(nodes[3].raw_material_indices_by_product(product_index='all', network_BOM=False), [5, 6]) + self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[0].raw_materials_by_product(product=0, return_indices=True, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[1].raw_materials_by_product(product=0, return_indices=True, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[1].raw_materials_by_product(product=1, return_indices=True, network_BOM=False), [3, 4]) + self.assertListEqual(nodes[1].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [2, 3, 4]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=2, return_indices=True, network_BOM=False), [5]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=3, return_indices=True, network_BOM=False), [5]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=4, return_indices=True, network_BOM=False), [6]) + self.assertListEqual(nodes[2].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [5, 6]) + self.assertListEqual(nodes[3].raw_materials_by_product(product=2, return_indices=True, network_BOM=False), [5]) + self.assertListEqual(nodes[3].raw_materials_by_product(product=4, return_indices=True, network_BOM=False), [6]) + self.assertListEqual(nodes[3].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [5, 6]) self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=False), [prods[2], prods[3]]) - self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index=5, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index=6, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_material_indices_by_product(product_index='all', network_BOM=False), []) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index=0, network_BOM=False), [prods[2], prods[3]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product_index='all', network_BOM=False), [prods[2], prods[3]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product_index=0, network_BOM=False), [prods[2], prods[3]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product_index=1, network_BOM=False), [prods[3], prods[4]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product_index='all', network_BOM=False), [prods[2], prods[3], prods[4]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product_index=2, network_BOM=False), [prods[5]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product_index=3, network_BOM=False), [prods[5]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product_index=4, network_BOM=False), [prods[6]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product_index='all', network_BOM=False), [prods[5], prods[6]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product_index=2, network_BOM=False), [prods[5]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product_index=4, network_BOM=False), [prods[6]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product_index='all', network_BOM=False), [prods[5], prods[6]]) - self.assertListEqual(nodes[4].raw_materials_by_product(product_index=5, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_materials_by_product(product_index=6, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_materials_by_product(product_index='all', network_BOM=False), []) + self.assertListEqual(nodes[4].raw_materials_by_product(product=5, return_indices=True, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_materials_by_product(product=6, return_indices=True, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), []) + self.assertListEqual(nodes[0].raw_materials_by_product(product=0, network_BOM=False), [prods[2], prods[3]]) + self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=False), [prods[2], prods[3]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product=0, network_BOM=False), [prods[2], prods[3]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product=1, network_BOM=False), [prods[3], prods[4]]) + self.assertListEqual(nodes[1].raw_materials_by_product(product='all', network_BOM=False), [prods[2], prods[3], prods[4]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=2, network_BOM=False), [prods[5]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=3, network_BOM=False), [prods[5]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product=4, network_BOM=False), [prods[6]]) + self.assertListEqual(nodes[2].raw_materials_by_product(product='all', network_BOM=False), [prods[5], prods[6]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product=2, network_BOM=False), [prods[5]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product=4, network_BOM=False), [prods[6]]) + self.assertListEqual(nodes[3].raw_materials_by_product(product='all', network_BOM=False), [prods[5], prods[6]]) + self.assertListEqual(nodes[4].raw_materials_by_product(product=5, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_materials_by_product(product=6, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_materials_by_product(product='all', network_BOM=False), []) with self.assertRaises(ValueError): - _ = nodes[1].raw_material_indices_by_product(network_BOM=False) + _ = nodes[1].raw_materials_by_product(return_indices=True, network_BOM=False) _ = nodes[1].raw_materials_by_product(network_BOM=False) - _ = nodes[1].raw_material_indices_by_product(product_index=77, network_BOM=False) - _ = nodes[1].raw_materials_by_product(product_index=77, network_BOM=False) + _ = nodes[1].raw_materials_by_product(product=77, network_BOM=False) + _ = nodes[1].raw_materials_by_product(product=77, network_BOM=False) # Raw material suppliers by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=True), [2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=0, network_BOM=True), [2]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=0, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=1, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=2, network_BOM=True), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=3, network_BOM=True), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=4, network_BOM=True), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=2, network_BOM=True), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=4, network_BOM=True), [4]) - self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=5, network_BOM=True), [None]) - self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=6, network_BOM=True), [None]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True), [2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=True), [2]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1, return_indices=True, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=True), [4]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3, return_indices=True, network_BOM=True), [4]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=True), [4]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=True), [4]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=True), [4]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5, return_indices=True, network_BOM=True), [None]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6, return_indices=True, network_BOM=True), [None]) self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=0, network_BOM=True), [nodes[2]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=0, network_BOM=True), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=1, network_BOM=True), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=2, network_BOM=True), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=3, network_BOM=True), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=4, network_BOM=True), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=2, network_BOM=True), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=4, network_BOM=True), [nodes[4]]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=5, network_BOM=True), [None]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=6, network_BOM=True), [None]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0, network_BOM=True), [nodes[2]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0, network_BOM=True), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1, network_BOM=True), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2, network_BOM=True), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3, network_BOM=True), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4, network_BOM=True), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2, network_BOM=True), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4, network_BOM=True), [nodes[4]]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5, network_BOM=True), [None]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6, network_BOM=True), [None]) with self.assertRaises(ValueError): - _ = nodes[1].raw_material_supplier_indices_by_product(network_BOM=True) + _ = nodes[1].raw_material_suppliers_by_product(return_indices=True, network_BOM=True) _ = nodes[1].raw_material_suppliers_by_product(network_BOM=True) - _ = nodes[1].raw_material_supplier_indices_by_product(product_index=77, network_BOM=True) - _ = nodes[1].raw_material_suppliers_by_product(product_index=77, network_BOM=True) + _ = nodes[1].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=True) + _ = nodes[1].raw_material_suppliers_by_product(product=77, network_BOM=True) # # Raw material suppliers by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(network_BOM=False), [2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_product(product_index=0, network_BOM=False), [2]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=0, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_product(product_index=1, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=2, network_BOM=False), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=3, network_BOM=False), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_product(product_index=4, network_BOM=False), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=2, network_BOM=False), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices_by_product(product_index=4, network_BOM=False), [4]) - self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=5, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_material_supplier_indices_by_product(product_index=6, network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False), [2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=False), [2]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1, return_indices=True, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=False), [4]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3, return_indices=True, network_BOM=False), [4]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=False), [4]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=False), [4]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=False), [4]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5, return_indices=True, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6, return_indices=True, network_BOM=False), []) self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=False), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product_index=0, network_BOM=False), [nodes[2]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=0, network_BOM=False), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product_index=1, network_BOM=False), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=2, network_BOM=False), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=3, network_BOM=False), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product_index=4, network_BOM=False), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=2, network_BOM=False), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product_index=4, network_BOM=False), [nodes[4]]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=5, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product_index=6, network_BOM=False), []) + self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0, network_BOM=False), [nodes[2]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0, network_BOM=False), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1, network_BOM=False), [nodes[2], nodes[3]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2, network_BOM=False), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3, network_BOM=False), [nodes[4]]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4, network_BOM=False), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2, network_BOM=False), [nodes[4]]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4, network_BOM=False), [nodes[4]]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5, network_BOM=False), []) + self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6, network_BOM=False), []) with self.assertRaises(ValueError): - _ = nodes[1].raw_material_supplier_indices_by_product(network_BOM=False) + _ = nodes[1].raw_material_suppliers_by_product(return_indices=True, network_BOM=False) _ = nodes[1].raw_material_suppliers_by_product(network_BOM=False) - _ = nodes[1].raw_material_supplier_indices_by_product(product_index=77, network_BOM=False) - _ = nodes[1].raw_material_suppliers_by_product(product_index=77, network_BOM=False) + _ = nodes[1].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=False) + _ = nodes[1].raw_material_suppliers_by_product(product=77, network_BOM=False) # # Raw material suppliers by raw_material, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=True), [2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=True), [2]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=True), [2]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=True), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_raw_material(rm_index=6, network_BOM=True), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=True), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices_by_raw_material(rm_index=6, network_BOM=True), [4]) - self.assertListEqual(nodes[4].raw_material_supplier_indices_by_raw_material(rm_index=nodes[4]._external_supplier_dummy_product.index, network_BOM=True), [None]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [2, 3]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [4]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=True), [4]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [4]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=True), [4]) + self.assertListEqual(nodes[4].raw_material_suppliers_by_raw_material(raw_material=nodes[4]._external_supplier_dummy_product.index, return_indices=True, network_BOM=True), [None]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=True) - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=True) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=True) - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=77, network_BOM=True) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=77, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=77, return_indices=True, network_BOM=True) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=77, network_BOM=True) # # Raw material suppliers by raw_material, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=False), [2]) - self.assertListEqual(nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=False), [2]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=2, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=3, network_BOM=False), [2]) - self.assertListEqual(nodes[1].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=False), [4]) - self.assertListEqual(nodes[2].raw_material_supplier_indices_by_raw_material(rm_index=6, network_BOM=False), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices_by_raw_material(rm_index=5, network_BOM=False), [4]) - self.assertListEqual(nodes[3].raw_material_supplier_indices_by_raw_material(rm_index=6, network_BOM=False), [4]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [2]) + self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) + self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False), [2, 3]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [4]) + self.assertListEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=False), [4]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [4]) + self.assertListEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=False), [4]) with self.assertRaises(ValueError): - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=4, network_BOM=False) - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=None, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=None, network_BOM=False) - _ = nodes[0].raw_material_supplier_indices_by_raw_material(rm_index=77, network_BOM=False) - _ = nodes[0].raw_material_suppliers_by_raw_material(rm_index=77, network_BOM=False) - _ = nodes[4].raw_material_supplier_indices_by_raw_material(rm_index=nodes[4]._external_supplier_dummy_product.index, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=77, return_indices=True, network_BOM=False) + _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=77, network_BOM=False) + _ = nodes[4].raw_material_suppliers_by_raw_material(raw_material=nodes[4]._external_supplier_dummy_product.index, return_indices=True, network_BOM=False) class TestProductsByRawMaterial(unittest.TestCase): @@ -1701,7 +1701,7 @@ def tear_down_class(cls): print_status('TestProductsByRawMaterial', 'tear_down_class()') def test_mwor_no_product(self): - """Test that products_by_raw_materials and product_indices_by_raw_materials work correctly on MWOR network with no product added at retailer. + """Test that products_by_raw_materials works correctly on MWOR network with no product added at retailer. """ print_status('TestProductsByRawMaterial', 'test_mwor_no_product()') @@ -1713,36 +1713,36 @@ def test_mwor_no_product(self): nodes[2].add_products([prods[2], prods[3]]) nodes[3].add_products([prods[4], prods[5]]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=1), [nodes[0]._dummy_product.index]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=2), [nodes[0]._dummy_product.index]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=3), [nodes[0]._dummy_product.index]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=4), [nodes[0]._dummy_product.index]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=5), [nodes[0]._dummy_product.index]) - self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [1, 2]) - self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=None), [1, 2]) - self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [2, 3]) - self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=None), [2, 3]) - self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [4, 5]) - self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=None), [4, 5]) - - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=1), [nodes[0]._dummy_product]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=2), [nodes[0]._dummy_product]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=3), [nodes[0]._dummy_product]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=4), [nodes[0]._dummy_product]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=5), [nodes[0]._dummy_product]) - self.assertListEqual(nodes[1].products_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [prods[1], prods[2]]) - self.assertListEqual(nodes[1].products_by_raw_material(rm_index=None), [prods[1], prods[2]]) - self.assertListEqual(nodes[2].products_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [prods[2], prods[3]]) - self.assertListEqual(nodes[2].products_by_raw_material(rm_index=None), [prods[2], prods[3]]) - self.assertListEqual(nodes[3].products_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [prods[4], prods[5]]) - self.assertListEqual(nodes[3].products_by_raw_material(rm_index=None), [prods[4], prods[5]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=1, return_indices=True), [nodes[0]._dummy_product.index]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=2, return_indices=True), [nodes[0]._dummy_product.index]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=3, return_indices=True), [nodes[0]._dummy_product.index]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=4, return_indices=True), [nodes[0]._dummy_product.index]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=5, return_indices=True), [nodes[0]._dummy_product.index]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=nodes[1]._external_supplier_dummy_product.index, return_indices=True), [1, 2]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=None, return_indices=True), [1, 2]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=nodes[2]._external_supplier_dummy_product.index, return_indices=True), [2, 3]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=None, return_indices=True), [2, 3]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=nodes[3]._external_supplier_dummy_product.index, return_indices=True), [4, 5]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=None, return_indices=True), [4, 5]) + + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=1), [nodes[0]._dummy_product]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=2), [nodes[0]._dummy_product]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=3), [nodes[0]._dummy_product]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=4), [nodes[0]._dummy_product]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=5), [nodes[0]._dummy_product]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=nodes[1]._external_supplier_dummy_product.index), [prods[1], prods[2]]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=None), [prods[1], prods[2]]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=nodes[2]._external_supplier_dummy_product.index), [prods[2], prods[3]]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=None), [prods[2], prods[3]]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=nodes[3]._external_supplier_dummy_product.index), [prods[4], prods[5]]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=None), [prods[4], prods[5]]) with self.assertRaises(ValueError): - _ = nodes[0].product_indices_by_raw_material(rm_index=77) - _ = nodes[0].product_indices_by_raw_material(rm_index=None) + _ = nodes[0].products_by_raw_material(raw_material=77) + _ = nodes[0].products_by_raw_material(raw_material=None) def test_mwor_one_product(self): - """Test that products_by_raw_materials and product_indices_by_raw_materials work correctly on MWOR network with one product added at retailer. + """Test that products_by_raw_materials works correctly on MWOR network with one product added at retailer. """ print_status('TestProductsByRawMaterial', 'test_mwor_one_product()') @@ -1761,36 +1761,36 @@ def test_mwor_one_product(self): nodes[0].products[0].set_bill_of_materials(4, 15) nodes[0].products[0].set_bill_of_materials(5, 6) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=1), [10]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=2), [10]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=3), [10]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=4), [10]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=5), [10]) - self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [1, 2]) - self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=None), [1, 2]) - self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [2, 3]) - self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=None), [2, 3]) - self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [4, 5]) - self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=None), [4, 5]) - - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=1), [nodes[0].products[0]]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=2), [nodes[0].products[0]]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=3), [nodes[0].products[0]]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=4), [nodes[0].products[0]]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=5), [nodes[0].products[0]]) - self.assertListEqual(nodes[1].products_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [prods[1], prods[2]]) - self.assertListEqual(nodes[1].products_by_raw_material(rm_index=None), [prods[1], prods[2]]) - self.assertListEqual(nodes[2].products_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [prods[2], prods[3]]) - self.assertListEqual(nodes[2].products_by_raw_material(rm_index=None), [prods[2], prods[3]]) - self.assertListEqual(nodes[3].products_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [prods[4], prods[5]]) - self.assertListEqual(nodes[3].products_by_raw_material(rm_index=None), [prods[4], prods[5]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=1, return_indices=True), [10]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=2, return_indices=True), [10]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=3, return_indices=True), [10]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=4, return_indices=True), [10]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=5, return_indices=True), [10]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=nodes[1]._external_supplier_dummy_product.index, return_indices=True), [1, 2]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=None, return_indices=True), [1, 2]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=nodes[2]._external_supplier_dummy_product.index, return_indices=True), [2, 3]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=None, return_indices=True), [2, 3]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=nodes[3]._external_supplier_dummy_product.index, return_indices=True), [4, 5]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=None, return_indices=True), [4, 5]) + + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=1), [nodes[0].products[0]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=2), [nodes[0].products[0]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=3), [nodes[0].products[0]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=4), [nodes[0].products[0]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=5), [nodes[0].products[0]]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=nodes[1]._external_supplier_dummy_product.index), [prods[1], prods[2]]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=None), [prods[1], prods[2]]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=nodes[2]._external_supplier_dummy_product.index), [prods[2], prods[3]]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=None), [prods[2], prods[3]]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=nodes[3]._external_supplier_dummy_product.index), [prods[4], prods[5]]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=None), [prods[4], prods[5]]) with self.assertRaises(ValueError): - _ = nodes[0].product_indices_by_raw_material(rm_index=77) - _ = nodes[0].product_indices_by_raw_material(rm_index=None) + _ = nodes[0].products_by_raw_material(raw_material=77) + _ = nodes[0].products_by_raw_material(raw_material=None) def test_mwor_multiple_products(self): - """Test that products_by_raw_materials and product_indices_by_raw_materials work correctly on MWOR network with multiple products added at retailer. + """Test that products_by_raw_materials works correctly on MWOR network with multiple products added at retailer. """ print_status('TestProductsByRawMaterial', 'test_mwor_multiple_products()') @@ -1810,36 +1810,36 @@ def test_mwor_multiple_products(self): nodes[0].products_by_index[11].set_bill_of_materials(4, 15) nodes[0].products_by_index[12].set_bill_of_materials(5, 6) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=1), [10]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=2), [10]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=3), [11]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=4), [11]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=5), [12]) - self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [1, 2]) - self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=None), [1, 2]) - self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [2, 3]) - self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=None), [2, 3]) - self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [4, 5]) - self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=None), [4, 5]) - - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=1), [nodes[0].products_by_index[10]]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=2), [nodes[0].products_by_index[10]]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=3), [nodes[0].products_by_index[11]]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=4), [nodes[0].products_by_index[11]]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=5), [nodes[0].products_by_index[12]]) - self.assertListEqual(nodes[1].products_by_raw_material(rm_index=nodes[1]._external_supplier_dummy_product.index), [prods[1], prods[2]]) - self.assertListEqual(nodes[1].products_by_raw_material(rm_index=None), [prods[1], prods[2]]) - self.assertListEqual(nodes[2].products_by_raw_material(rm_index=nodes[2]._external_supplier_dummy_product.index), [prods[2], prods[3]]) - self.assertListEqual(nodes[2].products_by_raw_material(rm_index=None), [prods[2], prods[3]]) - self.assertListEqual(nodes[3].products_by_raw_material(rm_index=nodes[3]._external_supplier_dummy_product.index), [prods[4], prods[5]]) - self.assertListEqual(nodes[3].products_by_raw_material(rm_index=None), [prods[4], prods[5]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=1, return_indices=True), [10]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=2, return_indices=True), [10]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=3, return_indices=True), [11]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=4, return_indices=True), [11]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=5, return_indices=True), [12]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=nodes[1]._external_supplier_dummy_product.index, return_indices=True), [1, 2]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=None, return_indices=True), [1, 2]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=nodes[2]._external_supplier_dummy_product.index, return_indices=True), [2, 3]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=None, return_indices=True), [2, 3]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=nodes[3]._external_supplier_dummy_product.index, return_indices=True), [4, 5]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=None, return_indices=True), [4, 5]) + + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=1), [nodes[0].products_by_index[10]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=2), [nodes[0].products_by_index[10]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=3), [nodes[0].products_by_index[11]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=4), [nodes[0].products_by_index[11]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=5), [nodes[0].products_by_index[12]]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=nodes[1]._external_supplier_dummy_product.index), [prods[1], prods[2]]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=None), [prods[1], prods[2]]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=nodes[2]._external_supplier_dummy_product.index), [prods[2], prods[3]]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=None), [prods[2], prods[3]]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=nodes[3]._external_supplier_dummy_product.index), [prods[4], prods[5]]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=None), [prods[4], prods[5]]) with self.assertRaises(ValueError): - _ = nodes[0].product_indices_by_raw_material(rm_index=77) - _ = nodes[0].product_indices_by_raw_material(rm_index=None) + _ = nodes[0].products_by_raw_material(raw_material=77) + _ = nodes[0].products_by_raw_material(raw_material=None) def test_multiproduct_5_7(self): - """Test that products_by_raw_materials and product_indices_by_raw_materials work correctly on 5-node, 7-product network. + """Test that products_by_raw_materials works correctly on 5-node, 7-product network. """ print_status('TestProductsByRawMaterial', 'test_multiproduct_5_7()') @@ -1847,33 +1847,33 @@ def test_multiproduct_5_7(self): nodes = {i: network.get_node_from_index(i) for i in network.node_indices} prods = network.products_by_index - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=2), [0]) - self.assertListEqual(nodes[0].product_indices_by_raw_material(rm_index=3), [0]) - self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=2), [0]) - self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=3), [0, 1]) - self.assertListEqual(nodes[1].product_indices_by_raw_material(rm_index=4), [1]) - self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=5), [2, 3]) - self.assertListEqual(nodes[2].product_indices_by_raw_material(rm_index=6), [4]) - self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=5), [2]) - self.assertListEqual(nodes[3].product_indices_by_raw_material(rm_index=6), [4]) - self.assertListEqual(nodes[4].product_indices_by_raw_material(rm_index=nodes[4]._external_supplier_dummy_product.index), [5, 6]) - - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=2), [prods[0]]) - self.assertListEqual(nodes[0].products_by_raw_material(rm_index=3), [prods[0]]) - self.assertListEqual(nodes[1].products_by_raw_material(rm_index=2), [prods[0]]) - self.assertListEqual(nodes[1].products_by_raw_material(rm_index=3), [prods[0], prods[1]]) - self.assertListEqual(nodes[1].products_by_raw_material(rm_index=4), [prods[1]]) - self.assertListEqual(nodes[2].products_by_raw_material(rm_index=5), [prods[2], prods[3]]) - self.assertListEqual(nodes[2].products_by_raw_material(rm_index=6), [prods[4]]) - self.assertListEqual(nodes[3].products_by_raw_material(rm_index=5), [prods[2]]) - self.assertListEqual(nodes[3].products_by_raw_material(rm_index=6), [prods[4]]) - self.assertListEqual(nodes[4].products_by_raw_material(rm_index=nodes[4]._external_supplier_dummy_product.index), [prods[5], prods[6]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=2, return_indices=True), [0]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=3, return_indices=True), [0]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=2, return_indices=True), [0]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=3, return_indices=True), [0, 1]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=4, return_indices=True), [1]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=5, return_indices=True), [2, 3]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=6, return_indices=True), [4]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=5, return_indices=True), [2]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=6, return_indices=True), [4]) + self.assertListEqual(nodes[4].products_by_raw_material(raw_material=nodes[4]._external_supplier_dummy_product.index, return_indices=True), [5, 6]) + + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=2), [prods[0]]) + self.assertListEqual(nodes[0].products_by_raw_material(raw_material=3), [prods[0]]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=2), [prods[0]]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=3), [prods[0], prods[1]]) + self.assertListEqual(nodes[1].products_by_raw_material(raw_material=4), [prods[1]]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=5), [prods[2], prods[3]]) + self.assertListEqual(nodes[2].products_by_raw_material(raw_material=6), [prods[4]]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=5), [prods[2]]) + self.assertListEqual(nodes[3].products_by_raw_material(raw_material=6), [prods[4]]) + self.assertListEqual(nodes[4].products_by_raw_material(raw_material=nodes[4]._external_supplier_dummy_product.index), [prods[5], prods[6]]) with self.assertRaises(ValueError): - _ = nodes[0].product_indices_by_raw_material(rm_index=77) - _ = nodes[0].product_indices_by_raw_material(rm_index=4) - _ = nodes[0].product_indices_by_raw_material(rm_index=5) - _ = nodes[0].product_indices_by_raw_material(rm_index=None) + _ = nodes[0].products_by_raw_material(raw_material=77) + _ = nodes[0].products_by_raw_material(raw_material=4) + _ = nodes[0].products_by_raw_material(raw_material=5) + _ = nodes[0].products_by_raw_material(raw_material=None) class TestSupplierRawMaterialPairsByProduct(unittest.TestCase): @@ -2255,12 +2255,17 @@ def test_example_6_1(self): self.assertEqual(rm_obj, nodes[3]._dummy_product) self.assertEqual(rm_ind, nodes[3]._dummy_product.index) + rm_obj, rm_ind = nodes[2].validate_raw_material(nodes[3]._dummy_product.index, network_BOM=True) + self.assertEqual(rm_obj, nodes[3]._dummy_product) + self.assertEqual(rm_ind, nodes[3]._dummy_product.index) + rm_obj, rm_ind = nodes[2].validate_raw_material(nodes[3]._dummy_product.index, predecessor=3) self.assertEqual(rm_obj, nodes[3]._dummy_product) self.assertEqual(rm_ind, nodes[3]._dummy_product.index) with self.assertRaises(ValueError): _, _ = nodes[2].validate_raw_material(nodes[3]._dummy_product.index, predecessor=1) + _, _ = nodes[2].validate_raw_material(nodes[3]._dummy_product.index, network_BOM=False) rm_obj, rm_ind = nodes[2].validate_raw_material(None) self.assertEqual(rm_obj, nodes[3]._dummy_product) From 6527330e08fc658428d528490c67f720f6c456a5 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 6 May 2024 22:04:32 -0400 Subject: [PATCH 52/94] Working on Pre-build BOM and supplier/customer relationships #147 --- src/stockpyl/datasets/stockpyl_instances.json | 19966 +++++++++++++++- src/stockpyl/supply_chain_network.py | 99 +- src/stockpyl/supply_chain_node.py | 53 +- .../test_demand_source_TestFromDict_data.json | 973 +- ..._disruption_process_TestFromDict_data.json | 2 +- ..._TestSaveInstance_example_6_1_correct.json | 2 +- ...ample_6_1_with_order_capacity_correct.json | 2 +- ..._TestSaveInstance_figure_6_14_correct.json | 2 +- ...nstance_omit_state_vars_false_correct.json | 2 +- ...omit_state_vars_false_rosling_correct.json | 2 +- ...Instance_omit_state_vars_true_correct.json | 2 +- .../test_multiproduct_5_7.json | 2 +- .../test_policy_TestFromDict_data.json | 2 +- ...ply_chain_network_TestToFromDict_data.json | 2 +- ...ly_chain_node_TestNodeToFromDict_data.json | 2 +- 15 files changed, 21073 insertions(+), 40 deletions(-) diff --git a/src/stockpyl/datasets/stockpyl_instances.json b/src/stockpyl/datasets/stockpyl_instances.json index 4d4eef9..9462da6 100644 --- a/src/stockpyl/datasets/stockpyl_instances.json +++ b/src/stockpyl/datasets/stockpyl_instances.json @@ -1 +1,19965 @@ -{"_id": "", "instances": [{"name": "example_3_1", "description": "Example 3.1 (EOQ)", "data": {"fixed_cost": 8, "holding_cost": 0.225, "demand_rate": 1300}, "type": "dict"}, {"name": "problem_3_1", "description": "Problem 3.1 (EOQ)", "data": {"fixed_cost": 2250, "holding_cost": 275, "demand_rate": 182500}, "type": "dict"}, {"name": "example_3_8", "description": "Example 3.8 (EOQB)", "data": {"fixed_cost": 8, "holding_cost": 0.225, "stockout_cost": 5, "demand_rate": 1300}, "type": "dict"}, {"name": "problem_3_2b", "description": "Problem 3.2(b) (EOQB)", "data": {"fixed_cost": 40, "holding_cost": 40.05, "stockout_cost": 60, "demand_rate": 2080}, "type": "dict"}, {"name": "problem_3_22", "description": "Problem 3.22 (EPQ)", "data": {"fixed_cost": 4, "holding_cost": 0.08, "demand_rate": 80, "production_rate": 110}, "type": "dict"}, {"name": "example_3_9", "description": "Example 3.9 (Wagner-Whitin)", "data": {"num_periods": 4, "holding_cost": 2, "fixed_cost": 500, "demand": [90, 120, 80, 70]}, "type": "dict"}, {"name": "problem_3_27", "description": "Problem 3.27 (Wagner-Whitin)", "data": {"num_periods": 4, "holding_cost": 0.8, "fixed_cost": 120, "demand": [150, 100, 80, 200]}, "type": "dict"}, {"name": "problem_3_29", "description": "Problem 3.29 (Wagner-Whitin)", "data": {"num_periods": 5, "holding_cost": 0.1, "fixed_cost": 100, "demand": [730, 580, 445, 650, 880]}, "type": "dict"}, {"name": "scmo_ww_hw_c", "description": "SCMO (Wagner-Whitin with nonstationary purchase cost)", "data": {"num_periods": 5, "holding_cost": 0.1, "fixed_cost": 100, "demand": [400, 500, 500, 1100, 900], "purchase_cost": [3, 1, 4, 6, 6]}, "type": "dict"}, {"name": "scmo_jrp_ex", "description": "SCMO (JRP example)", "data": {"shared_fixed_cost": 600, "individual_fixed_costs": [120, 840, 300], "holding_costs": [160, 20, 50], "demand_rates": [1, 1, 1]}, "type": "dict"}, {"name": "spp_jrp", "description": "Numerical JRP example on p. 428 of Silver, Pyke, and Peterson (1998)", "data": {"shared_fixed_cost": 40, "individual_fixed_costs": [15, 15, 15, 15], "holding_costs": [0.24, 0.24, 0.24, 0.24], "demand_rates": [86000, 12500, 1400, 3000]}, "type": "dict"}, {"name": "silver_jrp", "description": "Numerical JRP example in Silver (1976)", "data": {"shared_fixed_cost": 10, "individual_fixed_costs": [1.87, 5.27, 7.94, 8.19, 8.87], "holding_costs": [0.2, 0.2, 0.2, 0.2, 0.2], "demand_rates": [1736, 656, 558, 170, 142]}, "type": "dict"}, {"name": "scmo_jrp_hw_1", "description": "SCMO (JRP problem 1)", "data": {"shared_fixed_cost": 20000, "individual_fixed_costs": [36000, 46000, 34000, 38000], "holding_costs": [1000, 900, 1200, 1000], "demand_rates": [1780, 445, 920, 175]}, "type": "dict"}, {"name": "scmo_jrp_hw_2", "description": "SCMO (JRP problem 2)", "data": {"shared_fixed_cost": 1500, "individual_fixed_costs": [4000, 1000, 2000], "holding_costs": [300, 200, 200], "demand_rates": [9100, 83200, 20800]}, "type": "dict"}, {"name": "scmo_jrp_hw_3", "description": "SCMO (JRP problem 3)", "data": {"shared_fixed_cost": 180, "individual_fixed_costs": [60, 100, 180, 115, 135], "holding_costs": [5.32, 3.9200000000000004, 4.760000000000001, 3.9200000000000004, 3.3600000000000003], "demand_rates": [6200, 1300, 400, 4400, 1800]}, "type": "dict"}, {"name": "example_4_1", "description": "Example 4.1 (newsvendor)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "example_4_1_network", "description": "Example 4.1 (newsvendor) (as SupplyChainNetwork object)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [null], "local_holding_cost": 0.18, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0.7, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 50, "standard_deviation": 8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 56.6, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_4_2", "description": "Example 4.2 (newsvendor explicit)", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "example_4_3", "description": "Example 4.3 (newsvendor) (= Example 4.1)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "problem_4_1", "description": "Problem 4.1 (newsvendor)", "data": {"holding_cost": 43, "stockout_cost": 79, "demand_mean": 900, "demand_sd": 60}, "type": "dict"}, {"name": "problem_4_3b", "description": "Problem 4.3(b) (newsvendor explicit)", "data": {"revenue": 7, "purchase_cost": 2.5, "salvage_value": 1.5, "demand_mean": 50, "demand_sd": 10}, "type": "dict"}, {"name": "example_4_4", "description": "Example 4.4 (base-stock optimization)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8, "lead_time": 4}, "type": "dict"}, {"name": "example_4_7", "description": "Example 4.7 ((s,S) with Poisson demand)", "data": {"holding_cost": 1, "stockout_cost": 4, "fixed_cost": 5, "demand_mean": 6}, "type": "dict"}, {"name": "problem_4_7b", "description": "Problem 4.7(b) (newsvendor with discrete demand)", "data": {"holding_cost": 500000, "stockout_cost": 1000000, "demand_pmf": {"1": 0.25, "2": 0.05, "3": 0.1, "4": 0.2, "5": 0.15, "6": 0.1, "7": 0.1, "8": 0.05}}, "type": "dict"}, {"name": "problem_4_8a", "description": "Problem 4.8(a) (newsvendor with Poisson demand)", "data": {"holding_cost": 200, "stockout_cost": 270, "demand_mean": 18}, "type": "dict"}, {"name": "problem_4_8b", "description": "Problem 4.8(b) (newsvendor with lognormal demand)", "data": {"holding_cost": 1, "stockout_cost": 0.1765, "mu": 6, "sigma": 0.3}, "type": "dict"}, {"name": "problem_4_31", "description": "Problem 4.31 ((s,S) with Poisson demand)", "data": {"holding_cost": 40, "stockout_cost": 125, "fixed_cost": 150, "demand_mean": 4}, "type": "dict"}, {"name": "example_4_8", "description": "Example 4.8 ((s,S))", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "fixed_cost": 2.5, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "problem_4_32", "description": "Problem 4.32 ((s,S))", "data": {"holding_cost": 2, "stockout_cost": 36, "fixed_cost": 60, "demand_mean": 190, "demand_sd": 48}, "type": "dict"}, {"name": "problem_4_29", "description": "Problem 4.29 (finite-horizon)", "data": {"num_periods": 10, "holding_cost": 1, "stockout_cost": 25, "terminal_holding_cost": 1, "terminal_stockout_cost": 25, "purchase_cost": 1, "fixed_cost": 0, "demand_mean": 18, "demand_sd": 3, "discount_factor": 0.98, "initial_inventory_level": 0}, "type": "dict"}, {"name": "problem_4_30", "description": "Problem 4.30 (finite-horizon)", "data": {"num_periods": 10, "holding_cost": 1, "stockout_cost": 25, "terminal_holding_cost": 1, "terminal_stockout_cost": 25, "purchase_cost": 1, "fixed_cost": 40, "demand_mean": 18, "demand_sd": 3, "discount_factor": 0.98, "initial_inventory_level": 0}, "type": "dict"}, {"name": "example_5_1", "description": "Example 5.1 ((r,Q))", "data": {"holding_cost": 0.225, "stockout_cost": 7.5, "fixed_cost": 8, "demand_mean": 1300, "demand_sd": 150, "lead_time": 0.08333333333333333}, "type": "dict"}, {"name": "problem_5_1", "description": "Problem 5.1 ((r,Q))", "data": {"holding_cost": 3.1, "stockout_cost": 45, "fixed_cost": 50, "demand_mean": 800, "demand_sd": 40, "lead_time": 0.010958904109589041}, "type": "dict"}, {"name": "problem_5_2", "description": "Problem 5.2 ((r,Q) with Poisson demand)", "data": {"holding_cost": 4, "stockout_cost": 28, "fixed_cost": 4, "demand_mean": 12, "lead_time": 0.5}, "type": "dict"}, {"name": "problem_5_3", "description": "Problem 5.3 ((r,Q))", "data": {"holding_cost": 0.21428571428571427, "stockout_cost": 40, "fixed_cost": 85, "demand_mean": 192, "demand_sd": 17.4, "lead_time": 3}, "type": "dict"}, {"name": "example_5_8", "description": "Example 5.8 ((r,Q) with Poisson demand))", "data": {"holding_cost": 20, "stockout_cost": 150, "fixed_cost": 100, "demand_mean": 1.5, "lead_time": 2}, "type": "dict"}, {"name": "example_6_1", "description": "Example 6.1 (serial SSM)", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_1", "description": "Problem 6.1 (serial SSM)", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [null], "_successors": [1], "local_holding_cost": 1, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 94, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 2, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 15, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 100, "standard_deviation": 15, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 100, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2a", "description": "Problem 6.2(a) (serial SSM)", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 7, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 5, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": "N", "mean": 64, "standard_deviation": 8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2b", "description": "Problem 6.2(a) (serial SSM with Poisson demand)", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 7, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 5, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": "P", "mean": 64, "standard_deviation": 8.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2a_adj", "description": "Problem 6.2(a) (serial SSM), adjusted for periodic review", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 32.0, "standard_deviation": 5.65685424949238, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2b_adj", "description": "Problem 6.2(b) (serial SSM with Poisson demand), adjusted for periodic review", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_16", "description": "Problem 6.16 (serial SSM)", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [null], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 20, "initial_orders": 20, "initial_shipments": 20, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 57.7257, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 8, "order_lead_time": null, "demand_source": {"type": "N", "mean": 20, "standard_deviation": 4, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 20, "initial_orders": 20, "initial_shipments": 20, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 171.1912, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_1", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 1", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 9, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_9", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 9", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 9, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_17", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 17", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 99, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_25", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 25", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 99, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "assembly_3_stage", "description": "3-stage assembly system (2 warehouses, 1 retailer)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [null], "_successors": [0], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 13, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 13, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [1, 2], "_successors": [null], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": true}, "initial_inventory_level": 7, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 7, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [null], "_successors": [0], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 11, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 11, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rosling_figure_1", "description": "Assembly system from Figure 1 in Rosling (1989)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1a", "description": "Distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": 0.3333333333333333, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [0], "_successors": [3, 4], "local_holding_cost": 0.6666666666666666, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [0], "_successors": [5, 6], "local_holding_cost": 0.6666666666666666, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [1], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 6, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1b", "description": "Distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [0], "_successors": [3, 4, 5, 6, 7], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [0], "_successors": [8, 9, 10], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 6, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 7, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": null, "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 8, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": null, "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 9, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": null, "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 10, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1c", "description": "Distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [0], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [0], "_successors": [3, 4, 5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_6_3", "description": "Example 6.3 (serial GSM)", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": 0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": 0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 0, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 1, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_7", "description": "Problem 6.7 (serial GSM)", "data": {"nodes": [{"_index": 3, "name": "Forming", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Firing", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": "Glazing", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 4, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 45, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 0, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_8", "description": "Problem 6.8 (serial GSM)", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4.56, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 10, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 5.73, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 15.8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.93, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 15, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [6], "_successors": [4], "local_holding_cost": 2.47, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 8, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [7], "_successors": [5], "local_holding_cost": 2.37, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [8], "_successors": [6], "local_holding_cost": 1.15, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 9, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": null, "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [9], "_successors": [7], "local_holding_cost": 1.1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": null, "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [10], "_successors": [8], "local_holding_cost": 0.98, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": null, "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [null], "_successors": [9], "local_holding_cost": 0.87, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": 0, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": 7, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_9", "description": "Problem 6.9 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [3], "_successors": [null], "local_holding_cost": 0.12054794520547946, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 22.0, "standard_deviation": 4.1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 7, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [null], "local_holding_cost": 0.07671232876712329, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 15.3, "standard_deviation": 6.2, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 7, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4, 5], "_successors": [1, 2], "local_holding_cost": 0.049315068493150684, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 21, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [3], "local_holding_cost": 0.0027397260273972603, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [6], "_successors": [3], "local_holding_cost": 0.010958904109589041, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 8, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.00410958904109589, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_6_5", "description": "Example 6.5 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [null], "_successors": [3], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [2, 4], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [null], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 0, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [3], "_successors": [null], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 1, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "figure_6_12", "description": "Figure 6.12 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6, 7], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [5], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "figure_6_14", "description": "Figure 6.14 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [7, 6, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_9_1", "description": "Example 9.1 (EOQD)", "data": {"holding_cost": 0.225, "stockout_cost": 5, "fixed_cost": 8, "demand_rate": 1300, "disruption_rate": 1.5, "recovery_rate": 14}, "type": "dict"}, {"name": "problem_9_8", "description": "Problem 9.8 (EOQD)", "data": {"holding_cost": 4, "stockout_cost": 22, "fixed_cost": 35, "demand_rate": 30, "disruption_rate": 1, "recovery_rate": 12}, "type": "dict"}, {"name": "example_9_3", "description": "Example 9.3 (base-stock with disruptions)", "data": {"holding_cost": 0.25, "stockout_cost": 3, "demand": 2000, "disruption_prob": 0.04, "recovery_prob": 0.25}, "type": "dict"}, {"name": "example_9_4", "description": "Example 9.4 (EOQ with additive yield uncertainty)", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": -15000, "yield_sd": 9000}, "type": "dict"}, {"name": "example_9_5", "description": "Example 9.5 (EOQ with multiplicative yield uncertainty)", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}, {"name": "problem_9_4a", "description": "Problem 9.4(a) (EOQ with additive yield uncertainty)", "data": {"holding_cost": 275, "fixed_cost": 2250, "demand_rate": 182500, "yield_mean": -50.0, "yield_sd": 0.02}, "type": "dict"}, {"name": "problem_9_4b", "description": "Problem 9.4(b) (EOQ with multiplicative yield uncertainty)", "data": {"holding_cost": 275, "fixed_cost": 2250, "demand_rate": 182500, "yield_mean": 0.9, "yield_sd": 0.05773502691896258}, "type": "dict"}, {"name": "example_9_6", "description": "Example 9.6 (newsvendor with additive yield uncertainty)", "data": {"holding_cost": 15000000, "stockout_cost": 75000000, "demand": 1.5, "yield_lo": -0.5, "yield_hi": 0.5}, "type": "dict"}, {"name": "problem_9_5", "description": "Problem 9.5 (newsvendor with additive yield uncertainty)", "data": {"holding_cost": 150, "stockout_cost": 1200, "demand": 25, "yield_lo": -5, "yield_hi": 0}, "type": "dict"}], "last_updated": "2024-04-21 21:47:48.007481"} \ No newline at end of file +{ + "_id": "", + "instances": [ + { + "name": "example_3_1", + "description": "Example 3.1 (EOQ)", + "data": { + "fixed_cost": 8, + "holding_cost": 0.225, + "demand_rate": 1300 + }, + "type": "dict" + }, + { + "name": "problem_3_1", + "description": "Problem 3.1 (EOQ)", + "data": { + "fixed_cost": 2250, + "holding_cost": 275, + "demand_rate": 182500 + }, + "type": "dict" + }, + { + "name": "example_3_8", + "description": "Example 3.8 (EOQB)", + "data": { + "fixed_cost": 8, + "holding_cost": 0.225, + "stockout_cost": 5, + "demand_rate": 1300 + }, + "type": "dict" + }, + { + "name": "problem_3_2b", + "description": "Problem 3.2(b) (EOQB)", + "data": { + "fixed_cost": 40, + "holding_cost": 40.05, + "stockout_cost": 60, + "demand_rate": 2080 + }, + "type": "dict" + }, + { + "name": "problem_3_22", + "description": "Problem 3.22 (EPQ)", + "data": { + "fixed_cost": 4, + "holding_cost": 0.08, + "demand_rate": 80, + "production_rate": 110 + }, + "type": "dict" + }, + { + "name": "example_3_9", + "description": "Example 3.9 (Wagner-Whitin)", + "data": { + "num_periods": 4, + "holding_cost": 2, + "fixed_cost": 500, + "demand": [ + 90, + 120, + 80, + 70 + ] + }, + "type": "dict" + }, + { + "name": "problem_3_27", + "description": "Problem 3.27 (Wagner-Whitin)", + "data": { + "num_periods": 4, + "holding_cost": 0.8, + "fixed_cost": 120, + "demand": [ + 150, + 100, + 80, + 200 + ] + }, + "type": "dict" + }, + { + "name": "problem_3_29", + "description": "Problem 3.29 (Wagner-Whitin)", + "data": { + "num_periods": 5, + "holding_cost": 0.1, + "fixed_cost": 100, + "demand": [ + 730, + 580, + 445, + 650, + 880 + ] + }, + "type": "dict" + }, + { + "name": "scmo_ww_hw_c", + "description": "SCMO (Wagner-Whitin with nonstationary purchase cost)", + "data": { + "num_periods": 5, + "holding_cost": 0.1, + "fixed_cost": 100, + "demand": [ + 400, + 500, + 500, + 1100, + 900 + ], + "purchase_cost": [ + 3, + 1, + 4, + 6, + 6 + ] + }, + "type": "dict" + }, + { + "name": "scmo_jrp_ex", + "description": "SCMO (JRP example)", + "data": { + "shared_fixed_cost": 600, + "individual_fixed_costs": [ + 120, + 840, + 300 + ], + "holding_costs": [ + 160, + 20, + 50 + ], + "demand_rates": [ + 1, + 1, + 1 + ] + }, + "type": "dict" + }, + { + "name": "spp_jrp", + "description": "Numerical JRP example on p. 428 of Silver, Pyke, and Peterson (1998)", + "data": { + "shared_fixed_cost": 40, + "individual_fixed_costs": [ + 15, + 15, + 15, + 15 + ], + "holding_costs": [ + 0.24, + 0.24, + 0.24, + 0.24 + ], + "demand_rates": [ + 86000, + 12500, + 1400, + 3000 + ] + }, + "type": "dict" + }, + { + "name": "silver_jrp", + "description": "Numerical JRP example in Silver (1976)", + "data": { + "shared_fixed_cost": 10, + "individual_fixed_costs": [ + 1.87, + 5.27, + 7.94, + 8.19, + 8.87 + ], + "holding_costs": [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ], + "demand_rates": [ + 1736, + 656, + 558, + 170, + 142 + ] + }, + "type": "dict" + }, + { + "name": "scmo_jrp_hw_1", + "description": "SCMO (JRP problem 1)", + "data": { + "shared_fixed_cost": 20000, + "individual_fixed_costs": [ + 36000, + 46000, + 34000, + 38000 + ], + "holding_costs": [ + 1000, + 900, + 1200, + 1000 + ], + "demand_rates": [ + 1780, + 445, + 920, + 175 + ] + }, + "type": "dict" + }, + { + "name": "scmo_jrp_hw_2", + "description": "SCMO (JRP problem 2)", + "data": { + "shared_fixed_cost": 1500, + "individual_fixed_costs": [ + 4000, + 1000, + 2000 + ], + "holding_costs": [ + 300, + 200, + 200 + ], + "demand_rates": [ + 9100, + 83200, + 20800 + ] + }, + "type": "dict" + }, + { + "name": "scmo_jrp_hw_3", + "description": "SCMO (JRP problem 3)", + "data": { + "shared_fixed_cost": 180, + "individual_fixed_costs": [ + 60, + 100, + 180, + 115, + 135 + ], + "holding_costs": [ + 5.32, + 3.9200000000000004, + 4.760000000000001, + 3.9200000000000004, + 3.3600000000000003 + ], + "demand_rates": [ + 6200, + 1300, + 400, + 4400, + 1800 + ] + }, + "type": "dict" + }, + { + "name": "example_4_1", + "description": "Example 4.1 (newsvendor)", + "data": { + "holding_cost": 0.18, + "stockout_cost": 0.7, + "demand_mean": 50, + "demand_sd": 8 + }, + "type": "dict" + }, + { + "name": "example_4_1_network", + "description": "Example 4.1 (newsvendor) (as SupplyChainNetwork object)", + "data": { + "nodes": [ + { + "_index": 0, + "name": null, + "network": null, + "_products_by_index": { + "-1000": -1000 + }, + "_dummy_product": -1000, + "_external_supplier_dummy_product": -1001, + "_predecessors": [ + null + ], + "_successors": [ + null + ], + "local_holding_cost": 0.18, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0.7, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 50, + "standard_deviation": 8, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "product": null, + "base_stock_level": 56.6, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -1000, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "example_4_2", + "description": "Example 4.2 (newsvendor explicit)", + "data": { + "revenue": 1, + "purchase_cost": 0.3, + "salvage_value": 0.12, + "demand_mean": 50, + "demand_sd": 8 + }, + "type": "dict" + }, + { + "name": "example_4_3", + "description": "Example 4.3 (newsvendor) (= Example 4.1)", + "data": { + "holding_cost": 0.18, + "stockout_cost": 0.7, + "demand_mean": 50, + "demand_sd": 8 + }, + "type": "dict" + }, + { + "name": "problem_4_1", + "description": "Problem 4.1 (newsvendor)", + "data": { + "holding_cost": 43, + "stockout_cost": 79, + "demand_mean": 900, + "demand_sd": 60 + }, + "type": "dict" + }, + { + "name": "problem_4_3b", + "description": "Problem 4.3(b) (newsvendor explicit)", + "data": { + "revenue": 7, + "purchase_cost": 2.5, + "salvage_value": 1.5, + "demand_mean": 50, + "demand_sd": 10 + }, + "type": "dict" + }, + { + "name": "example_4_4", + "description": "Example 4.4 (base-stock optimization)", + "data": { + "holding_cost": 0.18, + "stockout_cost": 0.7, + "demand_mean": 50, + "demand_sd": 8, + "lead_time": 4 + }, + "type": "dict" + }, + { + "name": "example_4_7", + "description": "Example 4.7 ((s,S) with Poisson demand)", + "data": { + "holding_cost": 1, + "stockout_cost": 4, + "fixed_cost": 5, + "demand_mean": 6 + }, + "type": "dict" + }, + { + "name": "problem_4_7b", + "description": "Problem 4.7(b) (newsvendor with discrete demand)", + "data": { + "holding_cost": 500000, + "stockout_cost": 1000000, + "demand_pmf": { + "1": 0.25, + "2": 0.05, + "3": 0.1, + "4": 0.2, + "5": 0.15, + "6": 0.1, + "7": 0.1, + "8": 0.05 + } + }, + "type": "dict" + }, + { + "name": "problem_4_8a", + "description": "Problem 4.8(a) (newsvendor with Poisson demand)", + "data": { + "holding_cost": 200, + "stockout_cost": 270, + "demand_mean": 18 + }, + "type": "dict" + }, + { + "name": "problem_4_8b", + "description": "Problem 4.8(b) (newsvendor with lognormal demand)", + "data": { + "holding_cost": 1, + "stockout_cost": 0.1765, + "mu": 6, + "sigma": 0.3 + }, + "type": "dict" + }, + { + "name": "problem_4_31", + "description": "Problem 4.31 ((s,S) with Poisson demand)", + "data": { + "holding_cost": 40, + "stockout_cost": 125, + "fixed_cost": 150, + "demand_mean": 4 + }, + "type": "dict" + }, + { + "name": "example_4_8", + "description": "Example 4.8 ((s,S))", + "data": { + "holding_cost": 0.18, + "stockout_cost": 0.7, + "fixed_cost": 2.5, + "demand_mean": 50, + "demand_sd": 8 + }, + "type": "dict" + }, + { + "name": "problem_4_32", + "description": "Problem 4.32 ((s,S))", + "data": { + "holding_cost": 2, + "stockout_cost": 36, + "fixed_cost": 60, + "demand_mean": 190, + "demand_sd": 48 + }, + "type": "dict" + }, + { + "name": "problem_4_29", + "description": "Problem 4.29 (finite-horizon)", + "data": { + "num_periods": 10, + "holding_cost": 1, + "stockout_cost": 25, + "terminal_holding_cost": 1, + "terminal_stockout_cost": 25, + "purchase_cost": 1, + "fixed_cost": 0, + "demand_mean": 18, + "demand_sd": 3, + "discount_factor": 0.98, + "initial_inventory_level": 0 + }, + "type": "dict" + }, + { + "name": "problem_4_30", + "description": "Problem 4.30 (finite-horizon)", + "data": { + "num_periods": 10, + "holding_cost": 1, + "stockout_cost": 25, + "terminal_holding_cost": 1, + "terminal_stockout_cost": 25, + "purchase_cost": 1, + "fixed_cost": 40, + "demand_mean": 18, + "demand_sd": 3, + "discount_factor": 0.98, + "initial_inventory_level": 0 + }, + "type": "dict" + }, + { + "name": "example_5_1", + "description": "Example 5.1 ((r,Q))", + "data": { + "holding_cost": 0.225, + "stockout_cost": 7.5, + "fixed_cost": 8, + "demand_mean": 1300, + "demand_sd": 150, + "lead_time": 0.08333333333333333 + }, + "type": "dict" + }, + { + "name": "problem_5_1", + "description": "Problem 5.1 ((r,Q))", + "data": { + "holding_cost": 3.1, + "stockout_cost": 45, + "fixed_cost": 50, + "demand_mean": 800, + "demand_sd": 40, + "lead_time": 0.010958904109589041 + }, + "type": "dict" + }, + { + "name": "problem_5_2", + "description": "Problem 5.2 ((r,Q) with Poisson demand)", + "data": { + "holding_cost": 4, + "stockout_cost": 28, + "fixed_cost": 4, + "demand_mean": 12, + "lead_time": 0.5 + }, + "type": "dict" + }, + { + "name": "problem_5_3", + "description": "Problem 5.3 ((r,Q))", + "data": { + "holding_cost": 0.21428571428571427, + "stockout_cost": 40, + "fixed_cost": 85, + "demand_mean": 192, + "demand_sd": 17.4, + "lead_time": 3 + }, + "type": "dict" + }, + { + "name": "example_5_8", + "description": "Example 5.8 ((r,Q) with Poisson demand))", + "data": { + "holding_cost": 20, + "stockout_cost": 150, + "fixed_cost": 100, + "demand_mean": 1.5, + "lead_time": 2 + }, + "type": "dict" + }, + { + "name": "example_6_1", + "description": "Example 6.1 (serial SSM)", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_1", + "description": "Problem 6.1 (serial SSM)", + "data": { + "nodes": [ + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + null + ], + "_successors": [ + 1 + ], + "local_holding_cost": 1, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 94, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 2, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 15, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 100, + "standard_deviation": 15, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 100, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_2a", + "description": "Problem 6.2(a) (serial SSM)", + "data": { + "nodes": [ + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": 7, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "product": null, + "base_stock_level": 32.93, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 5, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": 33.3, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 3, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 35.14, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 33.87, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 24, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 64, + "standard_deviation": 8, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 40.59, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_2b", + "description": "Problem 6.2(a) (serial SSM with Poisson demand)", + "data": { + "nodes": [ + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": 7, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "product": null, + "base_stock_level": 32.93, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 5, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": 33.3, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 3, + "echelon_holding_cost": 1, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 35.14, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 33.87, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 24, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.5, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 64, + "standard_deviation": 8.0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 40.59, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_2a_adj", + "description": "Problem 6.2(a) (serial SSM), adjusted for periodic review", + "data": { + "nodes": [ + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": 3.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "product": null, + "base_stock_level": 32.93, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 2.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": 33.3, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 1.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 35.14, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 1.0, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 33.87, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 0.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 12.0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 32.0, + "standard_deviation": 5.65685424949238, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 40.59, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_2b_adj", + "description": "Problem 6.2(b) (serial SSM with Poisson demand), adjusted for periodic review", + "data": { + "nodes": [ + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": 3.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "product": null, + "base_stock_level": 32.93, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 2.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": 33.3, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 1.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 35.14, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 1.0, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 33.87, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 0.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 12.0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 32.0, + "standard_deviation": 5.656854249492381, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 40.59, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_16", + "description": "Problem 6.16 (serial SSM)", + "data": { + "nodes": [ + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + null + ], + "_successors": [ + 1 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 3, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 20, + "initial_orders": 20, + "initial_shipments": 20, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 57.7257, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 24, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 8, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 20, + "standard_deviation": 4, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 20, + "initial_orders": 20, + "initial_shipments": 20, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 171.1912, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_1", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 1", + "data": { + "nodes": [ + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 9, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": 4.0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_9", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 9", + "data": { + "nodes": [ + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 9, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": 4.0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_17", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 17", + "data": { + "nodes": [ + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 99, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": 4.0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "shang_song_25", + "description": "Serial SSM system in Shang and Song (2003), Table 1, row 25", + "data": { + "nodes": [ + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": 2.5, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": 0.25, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 99, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 0.25, + "order_lead_time": null, + "demand_source": { + "type": "P", + "mean": 16, + "standard_deviation": 4.0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "assembly_3_stage", + "description": "3-stage assembly system (2 warehouses, 1 retailer)", + "data": { + "nodes": [ + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + null + ], + "_successors": [ + 0 + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 13, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 13, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 0, + "name": null, + "network": null, + "_products_by_index": { + "-1000": -1000 + }, + "_dummy_product": -1000, + "_external_supplier_dummy_product": -1001, + "_predecessors": [ + 1, + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": true + }, + "initial_inventory_level": 7, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "product": null, + "base_stock_level": 7, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + null + ], + "_successors": [ + 0 + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 11, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 11, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1000, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rosling_figure_1", + "description": "Assembly system from Figure 1 in Rosling (1989)", + "data": { + "nodes": [ + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2, + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "UD", + "mean": 5.0, + "standard_deviation": 3.1622776601683795, + "demand_list": null, + "probabilities": null, + "lo": 0, + "hi": 10, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 8, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 1, + "product": null, + "base_stock_level": 8, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 5 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 8, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 2, + "product": null, + "base_stock_level": 24, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4 + ], + "_successors": [ + 1 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 3, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 24, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 3, + "product": null, + "base_stock_level": 40, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 6, + 7 + ], + "_successors": [ + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 16, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 4, + "product": null, + "base_stock_level": 76, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 4, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 32, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 5, + "product": null, + "base_stock_level": 62, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": null, + "network": null, + "_products_by_index": { + "-12": -12 + }, + "_dummy_product": -12, + "_external_supplier_dummy_product": -13, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 8, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 6, + "product": null, + "base_stock_level": 84, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 7, + "name": null, + "network": null, + "_products_by_index": { + "-14": -14 + }, + "_dummy_product": -14, + "_external_supplier_dummy_product": -15, + "_predecessors": [ + null + ], + "_successors": [ + 4 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": 16, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BEBS", + "node": 7, + "product": null, + "base_stock_level": 92, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -15, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -14, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -13, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -12, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rong_atan_snyder_figure_1a", + "description": "Distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)", + "data": { + "nodes": [ + { + "_index": 0, + "name": null, + "network": null, + "_products_by_index": { + "-1000": -1000 + }, + "_dummy_product": -1000, + "_external_supplier_dummy_product": -1001, + "_predecessors": [ + null + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": 0.3333333333333333, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 0 + ], + "_successors": [ + 3, + 4 + ], + "local_holding_cost": 0.6666666666666666, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 0 + ], + "_successors": [ + 5, + 6 + ], + "local_holding_cost": 0.6666666666666666, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": null, + "network": null, + "_products_by_index": { + "-12": -12 + }, + "_dummy_product": -12, + "_external_supplier_dummy_product": -13, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 20, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 6, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -12, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1000, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -13, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rong_atan_snyder_figure_1b", + "description": "Distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)", + "data": { + "nodes": [ + { + "_index": 0, + "name": null, + "network": null, + "_products_by_index": { + "-1000": -1000 + }, + "_dummy_product": -1000, + "_external_supplier_dummy_product": -1001, + "_predecessors": [ + null + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 0 + ], + "_successors": [ + 3, + 4, + 5, + 6, + 7 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 0 + ], + "_successors": [ + 8, + 9, + 10 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": null, + "network": null, + "_products_by_index": { + "-12": -12 + }, + "_dummy_product": -12, + "_external_supplier_dummy_product": -13, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 6, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 7, + "name": null, + "network": null, + "_products_by_index": { + "-14": -14 + }, + "_dummy_product": -14, + "_external_supplier_dummy_product": -15, + "_predecessors": [ + 1 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 7, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 8, + "name": null, + "network": null, + "_products_by_index": { + "-16": -16 + }, + "_dummy_product": -16, + "_external_supplier_dummy_product": -17, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 8, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 9, + "name": null, + "network": null, + "_products_by_index": { + "-18": -18 + }, + "_dummy_product": -18, + "_external_supplier_dummy_product": -19, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 9, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 10, + "name": null, + "network": null, + "_products_by_index": { + "-20": -20 + }, + "_dummy_product": -20, + "_external_supplier_dummy_product": -21, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 10, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1000, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -21, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -20, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -19, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -18, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -17, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -16, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -15, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -14, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -13, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -12, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "rong_atan_snyder_figure_1c", + "description": "Distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)", + "data": { + "nodes": [ + { + "_index": 0, + "name": null, + "network": null, + "_products_by_index": { + "-1000": -1000 + }, + "_dummy_product": -1000, + "_external_supplier_dummy_product": -1001, + "_predecessors": [ + null + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 0, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 0 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 0 + ], + "_successors": [ + 3, + 4, + 5 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 4, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 8, + "standard_deviation": 2.8284271247461903, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 5, + "product": null, + "base_stock_level": 0, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1001, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -1000, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "example_6_3", + "description": "Example 6.3 (serial GSM)", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": 0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": 1, + "external_outbound_cst": null, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": 0, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 0, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": 1, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_7", + "description": "Problem 6.7 (serial GSM)", + "data": { + "nodes": [ + { + "_index": 3, + "name": "Forming", + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": 1, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": "Firing", + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 3, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": "Glazing", + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 4, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 45, + "standard_deviation": 10, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": 0, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_8", + "description": "Problem 6.8 (serial GSM)", + "data": { + "nodes": [ + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4.56, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 10, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 5.73, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 15.8, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 5, + "external_inbound_cst": null, + "external_outbound_cst": 3, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4 + ], + "_successors": [ + 2 + ], + "local_holding_cost": 3.04, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 5 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 2.93, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 15, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + 6 + ], + "_successors": [ + 4 + ], + "local_holding_cost": 2.47, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 8, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": null, + "network": null, + "_products_by_index": { + "-12": -12 + }, + "_dummy_product": -12, + "_external_supplier_dummy_product": -13, + "_predecessors": [ + 7 + ], + "_successors": [ + 5 + ], + "local_holding_cost": 2.37, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 5, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 7, + "name": null, + "network": null, + "_products_by_index": { + "-14": -14 + }, + "_dummy_product": -14, + "_external_supplier_dummy_product": -15, + "_predecessors": [ + 8 + ], + "_successors": [ + 6 + ], + "local_holding_cost": 1.15, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 7, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 9, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 8, + "name": null, + "network": null, + "_products_by_index": { + "-16": -16 + }, + "_dummy_product": -16, + "_external_supplier_dummy_product": -17, + "_predecessors": [ + 9 + ], + "_successors": [ + 7 + ], + "local_holding_cost": 1.1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 8, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 5, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 9, + "name": null, + "network": null, + "_products_by_index": { + "-18": -18 + }, + "_dummy_product": -18, + "_external_supplier_dummy_product": -19, + "_predecessors": [ + 10 + ], + "_successors": [ + 8 + ], + "local_holding_cost": 0.98, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 9, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 10, + "name": null, + "network": null, + "_products_by_index": { + "-20": -20 + }, + "_dummy_product": -20, + "_external_supplier_dummy_product": -21, + "_predecessors": [ + null + ], + "_successors": [ + 9 + ], + "local_holding_cost": 0.87, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": 0, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 10, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 5, + "external_inbound_cst": 7, + "external_outbound_cst": null, + "demand_bound_constant": 2.0537489106318225, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -21, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -20, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -19, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -18, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -17, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -16, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -15, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -14, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -13, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -12, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "problem_6_9", + "description": "Problem 6.9 (tree GSM)", + "data": { + "nodes": [ + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": 0.12054794520547946, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 22.0, + "standard_deviation": 4.1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 7, + "external_inbound_cst": null, + "external_outbound_cst": 3, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": 0.07671232876712329, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 15.3, + "standard_deviation": 6.2, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 7, + "external_inbound_cst": null, + "external_outbound_cst": 3, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 4, + 5 + ], + "_successors": [ + 1, + 2 + ], + "local_holding_cost": 0.049315068493150684, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 21, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [], + "_successors": [ + 3 + ], + "local_holding_cost": 0.0027397260273972603, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 3, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + 6 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 0.010958904109589041, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 8, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": null, + "network": null, + "_products_by_index": { + "-12": -12 + }, + "_dummy_product": -12, + "_external_supplier_dummy_product": -13, + "_predecessors": [], + "_successors": [ + 5 + ], + "local_holding_cost": 0.00410958904109589, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 4, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -13, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -12, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "example_6_5", + "description": "Example 6.5 (tree GSM)", + "data": { + "nodes": [ + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + null + ], + "_successors": [ + 3 + ], + "local_holding_cost": 1, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": 1, + "external_outbound_cst": null, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 1 + ], + "_successors": [ + 2, + 4 + ], + "local_holding_cost": 2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": 3, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": 0, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + 3 + ], + "_successors": [ + null + ], + "local_holding_cost": 3, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 1, + "external_inbound_cst": null, + "external_outbound_cst": 1, + "demand_bound_constant": 1, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "figure_6_12", + "description": "Figure 6.12 (tree GSM)", + "data": { + "nodes": [ + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + null + ], + "_successors": [ + 2, + 3 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 1 + ], + "_successors": [], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 1 + ], + "_successors": [ + 5 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": null, + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + 3, + 4 + ], + "_successors": [ + 6, + 7 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": null, + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [ + null + ], + "_successors": [ + 5 + ], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": null, + "network": null, + "_products_by_index": { + "-12": -12 + }, + "_dummy_product": -12, + "_external_supplier_dummy_product": -13, + "_predecessors": [ + 5 + ], + "_successors": [], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 7, + "name": null, + "network": null, + "_products_by_index": { + "-14": -14 + }, + "_dummy_product": -14, + "_external_supplier_dummy_product": -15, + "_predecessors": [ + 5 + ], + "_successors": [], + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 7, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -15, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -14, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -13, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -12, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "figure_6_14", + "description": "Figure 6.14 (tree GSM)", + "data": { + "nodes": [ + { + "_index": 1, + "name": "Raw_Material", + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [], + "_successors": [ + 2 + ], + "local_holding_cost": 0.01, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 1, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": "Process_Wafers", + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 1 + ], + "_successors": [ + 3 + ], + "local_holding_cost": 0.03, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 2, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 3, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 3, + "name": "Package_Test_Wafers", + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + 2 + ], + "_successors": [ + 5 + ], + "local_holding_cost": 0.04, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 3, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 4, + "name": "Imager_Base", + "network": null, + "_products_by_index": { + "-8": -8 + }, + "_dummy_product": -8, + "_external_supplier_dummy_product": -9, + "_predecessors": [], + "_successors": [ + 5 + ], + "local_holding_cost": 0.06, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 4, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 4, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 5, + "name": "Imager_Assembly", + "network": null, + "_products_by_index": { + "-10": -10 + }, + "_dummy_product": -10, + "_external_supplier_dummy_product": -11, + "_predecessors": [ + 3, + 4 + ], + "_successors": [ + 6 + ], + "local_holding_cost": 0.12, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 5, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 6, + "name": "Ship_to_Final_Assembly", + "network": null, + "_products_by_index": { + "-12": -12 + }, + "_dummy_product": -12, + "_external_supplier_dummy_product": -13, + "_predecessors": [ + 5 + ], + "_successors": [ + 10 + ], + "local_holding_cost": 0.13, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 6, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 3, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 7, + "name": "Camera", + "network": null, + "_products_by_index": { + "-14": -14 + }, + "_dummy_product": -14, + "_external_supplier_dummy_product": -15, + "_predecessors": [], + "_successors": [ + 10 + ], + "local_holding_cost": 0.2, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 7, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 6, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 8, + "name": "Circuit_Board", + "network": null, + "_products_by_index": { + "-16": -16 + }, + "_dummy_product": -16, + "_external_supplier_dummy_product": -17, + "_predecessors": [], + "_successors": [ + 10 + ], + "local_holding_cost": 0.08, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 8, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 4, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 9, + "name": "Other_Parts", + "network": null, + "_products_by_index": { + "-18": -18 + }, + "_dummy_product": -18, + "_external_supplier_dummy_product": -19, + "_predecessors": [], + "_successors": [ + 10 + ], + "local_holding_cost": 0.04, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 9, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 3, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 10, + "name": "Build_Test_Pack", + "network": null, + "_products_by_index": { + "-20": -20 + }, + "_dummy_product": -20, + "_external_supplier_dummy_product": -21, + "_predecessors": [ + 7, + 6, + 8, + 9 + ], + "_successors": [ + null + ], + "local_holding_cost": 0.5, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 0, + "standard_deviation": 10, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": 10, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": 2, + "external_inbound_cst": null, + "external_outbound_cst": 2, + "demand_bound_constant": 1.6448536269514722, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -21, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -20, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -19, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -18, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -17, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -16, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -15, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -14, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -13, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -12, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -11, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -10, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -9, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -8, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "example_9_1", + "description": "Example 9.1 (EOQD)", + "data": { + "holding_cost": 0.225, + "stockout_cost": 5, + "fixed_cost": 8, + "demand_rate": 1300, + "disruption_rate": 1.5, + "recovery_rate": 14 + }, + "type": "dict" + }, + { + "name": "problem_9_8", + "description": "Problem 9.8 (EOQD)", + "data": { + "holding_cost": 4, + "stockout_cost": 22, + "fixed_cost": 35, + "demand_rate": 30, + "disruption_rate": 1, + "recovery_rate": 12 + }, + "type": "dict" + }, + { + "name": "example_9_3", + "description": "Example 9.3 (base-stock with disruptions)", + "data": { + "holding_cost": 0.25, + "stockout_cost": 3, + "demand": 2000, + "disruption_prob": 0.04, + "recovery_prob": 0.25 + }, + "type": "dict" + }, + { + "name": "example_9_4", + "description": "Example 9.4 (EOQ with additive yield uncertainty)", + "data": { + "holding_cost": 0.06, + "fixed_cost": 18500, + "demand_rate": 75000, + "yield_mean": -15000, + "yield_sd": 9000 + }, + "type": "dict" + }, + { + "name": "example_9_5", + "description": "Example 9.5 (EOQ with multiplicative yield uncertainty)", + "data": { + "holding_cost": 0.06, + "fixed_cost": 18500, + "demand_rate": 75000, + "yield_mean": 0.8333333333333334, + "yield_sd": 0.14085904245475275 + }, + "type": "dict" + }, + { + "name": "problem_9_4a", + "description": "Problem 9.4(a) (EOQ with additive yield uncertainty)", + "data": { + "holding_cost": 275, + "fixed_cost": 2250, + "demand_rate": 182500, + "yield_mean": -50.0, + "yield_sd": 0.02 + }, + "type": "dict" + }, + { + "name": "problem_9_4b", + "description": "Problem 9.4(b) (EOQ with multiplicative yield uncertainty)", + "data": { + "holding_cost": 275, + "fixed_cost": 2250, + "demand_rate": 182500, + "yield_mean": 0.9, + "yield_sd": 0.05773502691896258 + }, + "type": "dict" + }, + { + "name": "example_9_6", + "description": "Example 9.6 (newsvendor with additive yield uncertainty)", + "data": { + "holding_cost": 15000000, + "stockout_cost": 75000000, + "demand": 1.5, + "yield_lo": -0.5, + "yield_hi": 0.5 + }, + "type": "dict" + }, + { + "name": "problem_9_5", + "description": "Problem 9.5 (newsvendor with additive yield uncertainty)", + "data": { + "holding_cost": 150, + "stockout_cost": 1200, + "demand": 25, + "yield_lo": -5, + "yield_hi": 0 + }, + "type": "dict" + } + ], + "last_updated": "2024-04-21 21:47:48.007481" +} \ No newline at end of file diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index ca50462..4dcd48a 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -97,7 +97,7 @@ def __init__(self, **kwargs): _DEFAULT_VALUES = { '_nodes': [], - '_products': [], + '_local_products': [], # products that are loaded into the network but not (necessarily) into a node '_period': 0, 'max_max_replenishment_time': None } @@ -123,12 +123,13 @@ def products(self): that have been explicitly added to the network via :func:`add_product` as well as products that are handled by the nodes in the network. Read only. """ - product_set = set(self._products) - for node in self.nodes: - product_set |= set(node.products) - if node._external_supplier_dummy_product is not None: - product_set |= {node._external_supplier_dummy_product} - return list(product_set) + return self._products + # product_set = set(self._local_products) + # for node in self.nodes: + # product_set |= set(node.products) + # if node._external_supplier_dummy_product is not None: + # product_set |= {node._external_supplier_dummy_product} + # return list(product_set) @property def product_indices(self): @@ -136,7 +137,8 @@ def product_indices(self): that have been explicitly added to the network via :func:`add_product` as well as products that are handled by the nodes in the network. Read only. """ - return [prod.index for prod in self.products] + return self._product_indices + # return [prod.index for prod in self.products] @property def products_by_index(self): @@ -154,13 +156,14 @@ def products_by_index(self): Read only. """ - # Include all products in network (including in nodes). - prod_by_ind = {prod.index: prod for prod in self.products} - # Add external supplier dummy products. - prod_by_ind.update({node._external_supplier_dummy_product.index: node._external_supplier_dummy_product \ - for node in self.nodes if node._external_supplier_dummy_product is not None}) + return self._products_by_index + # # Include all products in network (including in nodes). + # prod_by_ind = {prod.index: prod for prod in self.products} + # # Add external supplier dummy products. + # prod_by_ind.update({node._external_supplier_dummy_product.index: node._external_supplier_dummy_product \ + # for node in self.nodes if node._external_supplier_dummy_product is not None}) - return prod_by_ind + # return prod_by_ind @property def period(self): @@ -239,6 +242,9 @@ def initialize(self): else: setattr(self, attr, self._DEFAULT_VALUES[attr]) + # Initialize product-related attributes that are derived from others. + self._build_product_attributes() + # # --- Nodes and Period --- # # if overwrite or not hasattr(self, '_nodes'): # self._nodes = [] @@ -288,7 +294,7 @@ def deep_equal_to(self, other, rel_tol=1e-8): eq = False elif not self.get_node_from_index(n_ind).deep_equal_to(other_node, rel_tol=rel_tol): eq = False - elif attr == '_products': + elif attr == '_local_products': for prod_ind in sorted(self.product_indices): other_product = other.products_by_index[prod_ind] if other_product is None: @@ -321,7 +327,7 @@ def to_dict(self): network_dict['nodes'] = [] for n in self.nodes: network_dict['nodes'].append(n.to_dict()) - elif attr == '_products': + elif attr == '_local_products': network_dict[attr] = [prod.to_dict() for prod in self.products] else: network_dict[prop] = getattr(self, prop) @@ -349,10 +355,12 @@ def from_dict(cls, the_dict): # Build empty SupplyChainNetwork. network = cls() # Fill products first, since these will be needed when filling nodes. - if '_products' not in the_dict: - network._products = copy.deepcopy(cls._DEFAULT_VALUES['_products']) + if '_local_products' not in the_dict: + network._local_products = copy.deepcopy(cls._DEFAULT_VALUES['_local_products']) else: - network._products = [SupplyChainProduct.from_dict(prod_dict) for prod_dict in the_dict['_products']] + network._local_products = [SupplyChainProduct.from_dict(prod_dict) for prod_dict in the_dict['_local_products']] + # Build product-related attributes. + network._build_product_attributes() # Fill attributes. for attr in cls._DEFAULT_VALUES.keys(): @@ -391,7 +399,7 @@ def from_dict(cls, the_dict): succs.append(m) n._predecessors = preds n._successors = succs - elif attr == '_products': + elif attr == '_local_products': # Already set this--do nothing. pass else: @@ -466,6 +474,9 @@ def reindex_nodes(self, old_to_new_dict, new_names=None): if new_names is not None: node.name = new_names[old_index] + # Rebuild product attributes. + self._build_product_attributes() + # Methods related to network structure. def add_node(self, node): @@ -492,6 +503,9 @@ def add_node(self, node): if not is_integer(prod): prod.network = self + # Rebuild product attributes. + self._build_product_attributes() + def add_edge(self, from_index, to_index): """Add an edge to the network to and from the nodes with the specified indices. If the edge is already in the network, does nothing. @@ -524,6 +538,9 @@ def add_edge(self, from_index, to_index): # Add edge. self.add_successor(from_node, to_node) + # Rebuild product attributes. + self._build_product_attributes() + def add_edges_from_list(self, edge_list): """Add multiple edges to the network from a list of index tuples. Any edge that is already in the network is ignored. @@ -568,6 +585,9 @@ def add_successor(self, node, successor_node): # Add node to network (if not already contained in it). self.add_node(successor_node) + # Rebuild product attributes. + self._build_product_attributes() + def add_predecessor(self, node, predecessor_node): """Add ``predecessor_node`` as a predecessor to ``node``. ``node`` must already be contained in the network. @@ -593,6 +613,9 @@ def add_predecessor(self, node, predecessor_node): # Add node to network (if not already contained in it). self.add_node(predecessor_node) + # Rebuild product attributes. + self._build_product_attributes() + def remove_node(self, node): """Remove a node from the network. Remove the node from the node list and from its predecessors' and successors' successors and predecessors lists. @@ -615,6 +638,8 @@ def remove_node(self, node): p.remove_successor(node) # Remove node from network. self.nodes.remove(node) + # Rebuild product attributes. + self._build_product_attributes() def networkx_digraph(self): """Build a `NetworkX `_ ``DiGraph`` object with the same structure as @@ -635,6 +660,26 @@ def networkx_digraph(self): return digraph # Functions related to product management. + + def _build_product_attributes(self): + """Build product-related attributes that are derived from other attributes. + These attributes are built each time the nodes or products change, rather than + deriving them live during a simulation. + """ + # Build _products and _product_indices. + product_set = set(self._local_products) + for node in self.nodes: + product_set |= set(node.products) + if node._external_supplier_dummy_product is not None: + product_set |= {node._external_supplier_dummy_product} + self._products = list(product_set) + self._product_indices = [prod.index for prod in self._products] + + # Build _products_by_index. Include all products in network (including in nodes). + self._products_by_index = {prod.index: prod for prod in self._products} + # Add external supplier dummy products. + self._products_by_index.update({node._external_supplier_dummy_product.index: node._external_supplier_dummy_product \ + for node in self.nodes if node._external_supplier_dummy_product is not None}) def add_product(self, product): """Add ``product`` to the network. ``product`` will not automatically be contained in any @@ -653,10 +698,13 @@ def add_product(self, product): """ # Check whether product is already in network. - if product not in self._products: - self._products.append(product) + if product not in self._local_products: + self._local_products.append(product) product.network = self + # Rebuild product attributes. + self._build_product_attributes() + def remove_product(self, product): """Remove a product from the network. If ``product`` is not in the network (as determined by the index), do nothing. @@ -673,9 +721,12 @@ def remove_product(self, product): """ # Check whether product is in network. - if product in self._products: + if product in self._local_products: # Remove product from network. - self._products.remove(product) + self._local_products.remove(product) + + # Rebuild product attributes. + self._build_product_attributes() # Utility functions. diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 1fea11c..f95a3e7 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -241,8 +241,10 @@ def index(self, value): # Replace external supplier dummy product. self._external_supplier_dummy_product = \ SupplyChainProduct(SupplyChainNode._external_supplier_dummy_product_index_from_node_index(self.index), is_dummy=True) - - + + # Rebuild product-related attributes in network. + if self.network is not None: + self.network._build_product_attributes() # Properties related to input parameters. @@ -540,6 +542,36 @@ def product_indices(self): """A list of indices of all products handled at the node. Read only.""" return list(self._products_by_index.keys()) + def _build_network_bill_of_materials(self): + """Build the network bill of materials and store it in _network_bill_of_materials attribute. + This attribute is built each time the nodes or products change, rather than + deriving it live during a simulation. + """ + # Initialize NBOM. + self._network_bill_of_materials = {prod.index: {pred.index: {} for pred in self.predecessors} for prod in self.products} + + # Loop through predecessors. + for pred in self.predecessors: + # Do any raw materials at predecessor have a BOM relationship with any products at the node? + BOM_found = False + for prod1 in self.products: + for prod2 in prod1.raw_materials: + if prod2 in (pred.products if pred is not None else [self._external_supplier_dummy_product.index]): + BOM_found = True + break + + # Loop through products at node and predecessor. + for prod1 in self.products: + for prod2 in pred.products: + # If any BOM relationships were found, use product BOM; otherwise, NBOM = 1. + if BOM_found: + NBOM = prod1.BOM(prod2.index) + else: + NBOM = 1 + + # Set NBOM. + self._network_bill_of_materials[prod1.index][pred.index][prod2.index] = NBOM + def add_product(self, product): """Add ``product`` to the node. If ``product`` is already in the node (as determined by the index), do nothing. @@ -557,6 +589,10 @@ def add_product(self, product): # Remove dummy product. (This also sets `dummy_product` to None.) self._remove_dummy_product() + # Rebuild product-related attributes in network. + if self.network is not None: + self.network._build_product_attributes() + def add_products(self, list_of_products): """Add each product in ``list_of_products`` to the node. If a given product is already in the node (as determined by the index), do not add it. @@ -589,6 +625,10 @@ def remove_product(self, product): # No real products in the node. Add dummy product. self._add_dummy_product() + # Rebuild product-related attributes in network. + if self.network is not None: + self.network._build_product_attributes() + def remove_products(self, list_of_products): """Remove each product in ``list_of_products`` from the node. Products in ``list_of_products`` may be either |class_product| objects or product indices, or a mix. Alternatively, set ``list_of_products`` to @@ -616,6 +656,10 @@ def _add_dummy_product(self): dummy = SupplyChainProduct(index=prod_ind, is_dummy=True) self.add_product(dummy) self._dummy_product = dummy + + # Rebuild product-related attributes in network. + if self.network is not None: + self.network._build_product_attributes() def _remove_dummy_product(self): """Remove the dummy product from the node. Typically this happens when a "real" product is added @@ -624,6 +668,10 @@ def _remove_dummy_product(self): self.remove_product(self._dummy_product) self._dummy_product = None + # Rebuild product-related attributes in network. + if self.network is not None: + self.network._build_product_attributes() + @classmethod def _dummy_product_index_from_node_index(cls, node_index): """Return index of dummy product for a given node index. This is called when a dummy product is @@ -1179,7 +1227,6 @@ def supplier_raw_material_pairs_by_product(self, product=None, return_indices=Fa return list(pairs) - def customers_by_product(self, product=None, return_indices=False, network_BOM=True): """A list of customers that order ``product`` from the node. If the node has a single product (either dummy or real), either set ``product`` to the single product, or to ``None`` and the function diff --git a/tests/additional_files/test_demand_source_TestFromDict_data.json b/tests/additional_files/test_demand_source_TestFromDict_data.json index 0328cb3..826763b 100644 --- a/tests/additional_files/test_demand_source_TestFromDict_data.json +++ b/tests/additional_files/test_demand_source_TestFromDict_data.json @@ -1 +1,972 @@ -{"_id": "", "instances": [{"name": "missing_mean", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_list", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.524246"} \ No newline at end of file +{ + "_id": "", + "instances": [ + { + "name": "missing_mean", + "description": "", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "standard_deviation": 1, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + }, + { + "name": "missing_demand_list", + "description": "", + "data": { + "nodes": [ + { + "_index": 3, + "name": null, + "network": null, + "_products_by_index": { + "-6": -6 + }, + "_dummy_product": -6, + "_external_supplier_dummy_product": -7, + "_predecessors": [ + null + ], + "_successors": [ + 2 + ], + "local_holding_cost": 2, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 2, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 3, + "product": null, + "base_stock_level": 10.69, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": "U", + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 2, + "name": null, + "network": null, + "_products_by_index": { + "-4": -4 + }, + "_dummy_product": -4, + "_external_supplier_dummy_product": -5, + "_predecessors": [ + 3 + ], + "_successors": [ + 1 + ], + "local_holding_cost": 4, + "echelon_holding_cost": 2, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 0, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 2, + "product": null, + "base_stock_level": 5.53, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + }, + { + "_index": 1, + "name": null, + "network": null, + "_products_by_index": { + "-2": -2 + }, + "_dummy_product": -2, + "_external_supplier_dummy_product": -3, + "_predecessors": [ + 2 + ], + "_successors": [ + null + ], + "local_holding_cost": 7, + "echelon_holding_cost": 3, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": 37.12, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": 1, + "order_lead_time": null, + "demand_source": { + "type": "N", + "mean": 5, + "standard_deviation": 1, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": "BS", + "node": 1, + "product": null, + "base_stock_level": 6.49, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "disruption_process": { + "random_process_type": null, + "disruption_type": "OP", + "disruption_probability": null, + "recovery_probability": null, + "disruption_state_list": null, + "disrupted": false + }, + "order_capacity": null, + "processing_time": null, + "external_inbound_cst": null, + "external_outbound_cst": null, + "demand_bound_constant": null, + "units_required": null, + "original_label": null, + "net_demand_mean": null, + "net_demand_standard_deviation": null, + "larger_adjacent_node": null, + "larger_adjacent_node_is_downstream": null, + "max_replenishment_time": null, + "state_vars": null + } + ], + "_local_products": [ + { + "_index": -7, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -6, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -5, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -4, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -3, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + }, + { + "_index": -2, + "name": null, + "network": null, + "is_dummy": true, + "_bill_of_materials": {}, + "local_holding_cost": null, + "echelon_holding_cost": null, + "local_holding_cost_function": null, + "in_transit_holding_cost": null, + "stockout_cost": null, + "stockout_cost_function": null, + "revenue": null, + "shipment_lead_time": null, + "order_lead_time": null, + "demand_source": { + "type": null, + "mean": null, + "standard_deviation": null, + "demand_list": null, + "probabilities": null, + "lo": null, + "hi": null, + "n": null, + "p": null, + "round_to_int": null + }, + "initial_inventory_level": null, + "initial_orders": null, + "initial_shipments": null, + "_inventory_policy": { + "type": null, + "node": null, + "product": null, + "base_stock_level": null, + "order_quantity": null, + "reorder_point": null, + "order_up_to_level": null + }, + "supply_type": null, + "order_capacity": null, + "state_vars": [] + } + ], + "period": 0, + "max_max_replenishment_time": null + }, + "type": "network" + } + ], + "last_updated": "2024-04-21 22:58:09.524246" +} \ No newline at end of file diff --git a/tests/additional_files/test_disruption_process_TestFromDict_data.json b/tests/additional_files/test_disruption_process_TestFromDict_data.json index f5f38df..433ed34 100644 --- a/tests/additional_files/test_disruption_process_TestFromDict_data.json +++ b/tests/additional_files/test_disruption_process_TestFromDict_data.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "missing_disruption_probability", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_disruption_state_list", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.532325"} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_disruption_probability", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_disruption_state_list", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.532325"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json index ab47c00..2569d21 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.955647"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.955647"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json index ee27404..e19a114 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.960625"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.960625"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json index bc14611..cc8fafe 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.968723"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.968723"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json index e37f50b..72899f6 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "order_quantity_fg": {"-10": 36.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "order_quantity_fg": {"-10": 25.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "order_quantity_fg": {"-10": 29.000000000000014}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "order_quantity_fg": {"-10": 27.999999999999986}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "order_quantity_fg": {"-10": 35.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "order_quantity_fg": {"-10": 24.000000000000007}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "order_quantity_fg": {"-10": 28.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "order_quantity_fg": {"-10": 43.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "order_quantity_fg": {"-10": 22.999999999999993}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "order_quantity_fg": {"-10": 18.99999999999998}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "order_quantity_fg": {"-8": 25.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "order_quantity_fg": {"-8": 29.000000000000014}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "order_quantity_fg": {"-8": 27.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "order_quantity_fg": {"-8": 35.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "order_quantity_fg": {"-8": 24.000000000000007}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "order_quantity_fg": {"-8": 28.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "order_quantity_fg": {"-8": 43.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "order_quantity_fg": {"-8": 22.999999999999993}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "order_quantity_fg": {"-8": 18.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "order_quantity_fg": {"-6": 36.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "order_quantity_fg": {"-6": 25.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "order_quantity_fg": {"-6": 29.000000000000007}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "order_quantity_fg": {"-6": 27.999999999999993}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "order_quantity_fg": {"-6": 35.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "order_quantity_fg": {"-6": 24.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "order_quantity_fg": {"-6": 28.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "order_quantity_fg": {"-6": 43.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "order_quantity_fg": {"-6": 23.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "order_quantity_fg": {"-6": 18.999999999999986}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "order_quantity_fg": {"-4": 36.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "order_quantity_fg": {"-4": 25.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "order_quantity_fg": {"-4": 29.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "order_quantity_fg": {"-4": 27.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "order_quantity_fg": {"-4": 35.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "order_quantity_fg": {"-4": 24.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "order_quantity_fg": {"-4": 28.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "order_quantity_fg": {"-4": 43.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "order_quantity_fg": {"-4": 22.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "order_quantity_fg": {"-4": 18.999999999999986}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "order_quantity_fg": {"-2": 36.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "order_quantity_fg": {"-2": 25.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "order_quantity_fg": {"-2": 29.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "order_quantity_fg": {"-2": 27.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "order_quantity_fg": {"-2": 35.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "order_quantity_fg": {"-2": 24.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "order_quantity_fg": {"-2": 28.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "order_quantity_fg": {"-2": 43.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "order_quantity_fg": {"-2": 22.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "order_quantity_fg": {"-2": 18.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.340322"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "order_quantity_fg": {"-10": 36.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "order_quantity_fg": {"-10": 25.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "order_quantity_fg": {"-10": 29.000000000000014}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "order_quantity_fg": {"-10": 27.999999999999986}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "order_quantity_fg": {"-10": 35.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "order_quantity_fg": {"-10": 24.000000000000007}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "order_quantity_fg": {"-10": 28.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "order_quantity_fg": {"-10": 43.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "order_quantity_fg": {"-10": 22.999999999999993}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "order_quantity_fg": {"-10": 18.99999999999998}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "order_quantity_fg": {"-8": 25.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "order_quantity_fg": {"-8": 29.000000000000014}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "order_quantity_fg": {"-8": 27.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "order_quantity_fg": {"-8": 35.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "order_quantity_fg": {"-8": 24.000000000000007}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "order_quantity_fg": {"-8": 28.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "order_quantity_fg": {"-8": 43.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "order_quantity_fg": {"-8": 22.999999999999993}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "order_quantity_fg": {"-8": 18.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "order_quantity_fg": {"-6": 36.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "order_quantity_fg": {"-6": 25.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "order_quantity_fg": {"-6": 29.000000000000007}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "order_quantity_fg": {"-6": 27.999999999999993}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "order_quantity_fg": {"-6": 35.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "order_quantity_fg": {"-6": 24.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "order_quantity_fg": {"-6": 28.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "order_quantity_fg": {"-6": 43.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "order_quantity_fg": {"-6": 23.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "order_quantity_fg": {"-6": 18.999999999999986}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "order_quantity_fg": {"-4": 36.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "order_quantity_fg": {"-4": 25.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "order_quantity_fg": {"-4": 29.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "order_quantity_fg": {"-4": 27.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "order_quantity_fg": {"-4": 35.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "order_quantity_fg": {"-4": 24.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "order_quantity_fg": {"-4": 28.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "order_quantity_fg": {"-4": 43.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "order_quantity_fg": {"-4": 22.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "order_quantity_fg": {"-4": 18.999999999999986}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "order_quantity_fg": {"-2": 36.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "order_quantity_fg": {"-2": 25.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "order_quantity_fg": {"-2": 29.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "order_quantity_fg": {"-2": 27.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "order_quantity_fg": {"-2": 35.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "order_quantity_fg": {"-2": 24.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "order_quantity_fg": {"-2": 28.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "order_quantity_fg": {"-2": 43.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "order_quantity_fg": {"-2": 22.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "order_quantity_fg": {"-2": 18.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_local_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.340322"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json index bfc224b..7bc4f8a 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "order_quantity_fg": {"-2": 9.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 9.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "order_quantity_fg": {"-2": 0.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "order_quantity_fg": {"-4": 14.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "order_quantity_fg": {"-4": 11.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "order_quantity_fg": {"-4": 6.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "order_quantity_fg": {"-6": 14.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "order_quantity_fg": {"-6": 8.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "order_quantity_fg": {"-6": 0.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 16.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 6.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 5.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "order_quantity_fg": {"-8": 18.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 18.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 23.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "order_quantity_fg": {"-8": 12.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 12.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "order_quantity_fg": {"-8": 7.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "order_quantity_fg": {"-8": 10.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 11.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "order_quantity_fg": {"-8": 2.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 2.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "order_quantity_fg": {"-8": 8.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "order_quantity_fg": {"-10": 22.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "order_quantity_fg": {"-10": 3.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "order_quantity_fg": {"-10": 2.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "order_quantity_fg": {"-12": 44.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "order_quantity_fg": {"-12": 27.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "order_quantity_fg": {"-12": 22.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "order_quantity_fg": {"-12": 9.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "order_quantity_fg": {"-12": 14.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "order_quantity_fg": {"-12": 10.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "order_quantity_fg": {"-12": 4.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "order_quantity_fg": {"-12": 16.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "order_quantity_fg": {"-12": 6.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "order_quantity_fg": {"-14": 64.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "order_quantity_fg": {"-14": 21.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "order_quantity_fg": {"-14": 14.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "order_quantity_fg": {"-14": 10.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "order_quantity_fg": {"-14": 1.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "order_quantity_fg": {"-14": 2.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "order_quantity_fg": {"-14": 16.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "order_quantity_fg": {"-14": 6.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.609999"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "order_quantity_fg": {"-2": 9.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 9.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "order_quantity_fg": {"-2": 0.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "order_quantity_fg": {"-4": 14.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "order_quantity_fg": {"-4": 11.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "order_quantity_fg": {"-4": 6.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "order_quantity_fg": {"-6": 14.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "order_quantity_fg": {"-6": 8.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "order_quantity_fg": {"-6": 0.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 16.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 6.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 5.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "order_quantity_fg": {"-8": 18.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 18.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 23.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "order_quantity_fg": {"-8": 12.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 12.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "order_quantity_fg": {"-8": 7.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "order_quantity_fg": {"-8": 10.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 11.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "order_quantity_fg": {"-8": 2.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 2.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "order_quantity_fg": {"-8": 8.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "order_quantity_fg": {"-10": 22.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "order_quantity_fg": {"-10": 3.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "order_quantity_fg": {"-10": 2.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "order_quantity_fg": {"-12": 44.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "order_quantity_fg": {"-12": 27.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "order_quantity_fg": {"-12": 22.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "order_quantity_fg": {"-12": 9.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "order_quantity_fg": {"-12": 14.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "order_quantity_fg": {"-12": 10.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "order_quantity_fg": {"-12": 4.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "order_quantity_fg": {"-12": 16.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "order_quantity_fg": {"-12": 6.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "order_quantity_fg": {"-14": 64.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "order_quantity_fg": {"-14": 21.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "order_quantity_fg": {"-14": 14.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "order_quantity_fg": {"-14": 10.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "order_quantity_fg": {"-14": 1.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "order_quantity_fg": {"-14": 2.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "order_quantity_fg": {"-14": 16.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "order_quantity_fg": {"-14": 6.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_local_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.609999"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json index 6bf2c1e..df667c6 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.240524"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.240524"} \ No newline at end of file diff --git a/tests/additional_files/test_multiproduct_5_7.json b/tests/additional_files/test_multiproduct_5_7.json index 9035f23..39ee45b 100644 --- a/tests/additional_files/test_multiproduct_5_7.json +++ b/tests/additional_files/test_multiproduct_5_7.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"5": {"type": "BS", "node": 4, "product": 5, "base_stock_level": 1500, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "6": {"type": "BS", "node": 4, "product": 6, "base_stock_level": 7500, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product": -5, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": {"2": 6, "3": 5, "4": 4}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"2": {"type": "BS", "node": 2, "product": 2, "base_stock_level": 50, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "3": {"type": "BS", "node": 2, "product": 3, "base_stock_level": 300, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "4": {"type": "BS", "node": 2, "product": 4, "base_stock_level": 60, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": {"2": 5, "4": 4}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"2": {"type": "BS", "node": 3, "product": 2, "base_stock_level": 20, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "4": {"type": "BS", "node": 3, "product": 4, "base_stock_level": 20, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product": -1001, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 5, "standard_deviation": 2.23606797749979, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": 0, "base_stock_level": 5, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": {"0": 12, "1": 20}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"0": {"type": "P", "mean": 4, "standard_deviation": 2.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "1": {"type": "P", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "dict_type": "product_keyed_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"0": {"type": "BS", "node": 1, "product": 0, "base_stock_level": 4, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "1": {"type": "BS", "node": 1, "product": 1, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": 0.3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": 10, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 350, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 08:54:50.372064"} \ No newline at end of file +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"5": {"type": "BS", "node": 4, "product": 5, "base_stock_level": 1500, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "6": {"type": "BS", "node": 4, "product": 6, "base_stock_level": 7500, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product": -5, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": {"2": 6, "3": 5, "4": 4}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"2": {"type": "BS", "node": 2, "product": 2, "base_stock_level": 50, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "3": {"type": "BS", "node": 2, "product": 3, "base_stock_level": 300, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "4": {"type": "BS", "node": 2, "product": 4, "base_stock_level": 60, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": {"2": 5, "4": 4}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"2": {"type": "BS", "node": 3, "product": 2, "base_stock_level": 20, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "4": {"type": "BS", "node": 3, "product": 4, "base_stock_level": 20, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product": -1001, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 5, "standard_deviation": 2.23606797749979, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": 0, "base_stock_level": 5, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": {"0": 12, "1": 20}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"0": {"type": "P", "mean": 4, "standard_deviation": 2.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "1": {"type": "P", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "dict_type": "product_keyed_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"0": {"type": "BS", "node": 1, "product": 0, "base_stock_level": 4, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "1": {"type": "BS", "node": 1, "product": 1, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": 0.3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": 10, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 350, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 08:54:50.372064"} \ No newline at end of file diff --git a/tests/additional_files/test_policy_TestFromDict_data.json b/tests/additional_files/test_policy_TestFromDict_data.json index a801f63..8652530 100644 --- a/tests/additional_files/test_policy_TestFromDict_data.json +++ b/tests/additional_files/test_policy_TestFromDict_data.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "missing_base_stock_level", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_type", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.540582"} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_base_stock_level", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_type", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.540582"} \ No newline at end of file diff --git a/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json b/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json index 03474e8..5d983b7 100644 --- a/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json +++ b/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "missing_period", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_nodes", "description": "", "data": {"_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.599466"} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_period", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_nodes", "description": "", "data": {"_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.599466"} \ No newline at end of file diff --git a/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json b/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json index 2fdf1e7..fa9f8be 100644 --- a/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json +++ b/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.552322"} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.552322"} \ No newline at end of file From a0ee2043422ad1b3e1f50ba3f3e09b6a8ae85336 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Wed, 8 May 2024 20:31:55 -0400 Subject: [PATCH 53/94] Pre-build BOM and supplier/customer relationships #147. All tests pass. --- src/stockpyl/supply_chain_network.py | 66 +++++-- src/stockpyl/supply_chain_node.py | 268 +++++++++++++++++---------- src/stockpyl/supply_chain_product.py | 15 +- tests/test_gsm_tree.py | 21 +-- tests/test_supply_chain_node.py | 95 +++++----- 5 files changed, 285 insertions(+), 180 deletions(-) diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 4dcd48a..e63237d 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -242,6 +242,10 @@ def initialize(self): else: setattr(self, attr, self._DEFAULT_VALUES[attr]) + # Set _currently_building flag. (This indicates whether we are currently building + # a network, e.g., using from_dict(), in which case we should pause buidling product attributes.) + self._currently_building = False + # Initialize product-related attributes that are derived from others. self._build_product_attributes() @@ -359,10 +363,13 @@ def from_dict(cls, the_dict): network._local_products = copy.deepcopy(cls._DEFAULT_VALUES['_local_products']) else: network._local_products = [SupplyChainProduct.from_dict(prod_dict) for prod_dict in the_dict['_local_products']] - # Build product-related attributes. + + # Build product attributes (for now, this just creates network._products_by_index). network._build_product_attributes() + # Set _currently_building flag so we don't re-build product attributes in the next step. + network._currently_building = True - # Fill attributes. + # Fill attributes. for attr in cls._DEFAULT_VALUES.keys(): if attr == '_nodes': if 'nodes' not in the_dict: @@ -379,7 +386,7 @@ def from_dict(cls, the_dict): node.add_product(network.products_by_index[prod_ind]) # Replace product attribute in inventory_policy with product object (SupplyChainNode.to_dict() # stores it as int.) - node + node # TODO: ??? # Replace dummy-product indices with product objects. if node._dummy_product is not None: node._dummy_product = network.products_by_index[node._dummy_product] @@ -411,6 +418,10 @@ def from_dict(cls, the_dict): value = cls._DEFAULT_VALUES[attr] setattr(network, attr, value) + # Turn off _currently_building flag and build product-related attributes. + network._currently_building = False + network._build_product_attributes() + return network # Methods for node handling. @@ -503,8 +514,8 @@ def add_node(self, node): if not is_integer(prod): prod.network = self - # Rebuild product attributes. - self._build_product_attributes() + # Rebuild product attributes. + self._build_product_attributes() def add_edge(self, from_index, to_index): """Add an edge to the network to and from the nodes with the specified indices. @@ -662,24 +673,34 @@ def networkx_digraph(self): # Functions related to product management. def _build_product_attributes(self): - """Build product-related attributes that are derived from other attributes. + """Build product-related attributes that are derived from other attributes, + at the network and the nodes in it. These attributes are built each time the nodes or products change, rather than deriving them live during a simulation. + + Does nothing if self._currently_building is True. (This is to avoid building + product attributes when network is currently being built and not all product/node + info is in place yet.) """ - # Build _products and _product_indices. - product_set = set(self._local_products) - for node in self.nodes: - product_set |= set(node.products) - if node._external_supplier_dummy_product is not None: - product_set |= {node._external_supplier_dummy_product} - self._products = list(product_set) - self._product_indices = [prod.index for prod in self._products] + if not self._currently_building: + # Build _products and _product_indices. + product_set = set(self._local_products) + for node in self.nodes: + product_set |= set(node.products) + if node._external_supplier_dummy_product is not None: + product_set |= {node._external_supplier_dummy_product} + self._products = list(product_set) + self._product_indices = [prod.index for prod in self._products] + + # Build _products_by_index. Include all products in network (including in nodes). + self._products_by_index = {prod.index: prod for prod in self._products} + # Add external supplier dummy products. + self._products_by_index.update({node._external_supplier_dummy_product.index: node._external_supplier_dummy_product \ + for node in self.nodes if node._external_supplier_dummy_product is not None}) - # Build _products_by_index. Include all products in network (including in nodes). - self._products_by_index = {prod.index: prod for prod in self._products} - # Add external supplier dummy products. - self._products_by_index.update({node._external_supplier_dummy_product.index: node._external_supplier_dummy_product \ - for node in self.nodes if node._external_supplier_dummy_product is not None}) + # Build network BOM for all nodes. + for node in self.nodes: + node._build_network_bill_of_materials() def add_product(self, product): """Add ``product`` to the network. ``product`` will not automatically be contained in any @@ -916,6 +937,9 @@ def network_from_edges(edges, node_order_in_lists=None, **kwargs): # Create network. network = SupplyChainNetwork() + # Set _currently_building flag so we don't re-build product attributes in the next step. + network._currently_building = True + # Is the edge list non-empty? if edges: # Add nodes from edge list. @@ -1062,6 +1086,10 @@ def network_from_edges(edges, node_order_in_lists=None, **kwargs): # Problem-specific data. n.problem_specific_data = data_dict[n.index].get('problem_specific_data') + # Turn off _currently_building flag and build product-related attributes. + network._currently_building = False + network._build_product_attributes() + return network diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index f95a3e7..bf266ac 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -161,12 +161,14 @@ def __init__(self, index, name=None, network=None, **kwargs): AttributeError If an optional keyword argument does not match a |class_node| attribute. """ - # Initialize attributes; set index; add dummy product. + # Set network. (This must be done before initialize() because initialize() uses it.) + self.network = network + + # Initialize other attributes; set index; add dummy product. self.initialize(index) - # Set other named attributes. + # Set name. (This must be done after initialize() because initialize() will reset it to None.) self.name = name - self.network = network # Set attributes specified by kwargs. for key, value in kwargs.items(): @@ -410,7 +412,7 @@ def neighbor_indices(self): """ return [n.index for n in self.neighbors] - def validate_predecessor(self, predecessor): + def validate_predecessor(self, predecessor, raw_material=None, network_BOM=True, err_on_multiple_preds=True): """Confirm that ``predecessor`` is a valid predecessor of node: * If ``predecessor`` is a |class_node| object, confirms that it is a @@ -422,11 +424,21 @@ def validate_predecessor(self, predecessor): * If ``predecessor`` is ``None`` and the node has 0 or more than 1 predecessor node and has an external supplier, returns ``None, None``. (This represents the external supplier.) * Raises a ``ValueError`` in most other cases. + * If ``raw_material`` is not ``None``, also checks that the predecessor provides that raw + material, and raises an exception if not. (This only works if ``preecessor`` is not ``None``.) Parameters ---------- predecessor : |class_node|, int, or ``None`` The predecessor to validate. + raw_material : |class_product| or int, optional + If not ``None`` and ``predecessor`` is not ``None``, the function will check that + ``raw_material`` is provided by ``predecessor`` and raise an exception if not. + network_BOM : bool, optional + If ``True`` (default), function uses network BOM instead of product-only BOM. + err_on_multiple_preds : bool, optional + If ``True`` (default), raises an exception if ``predecessor`` is ``None`` and the + node has multiple predecessors (or multiple predecessors that provide ``raw_material``). Returns ------- @@ -444,23 +456,40 @@ def validate_predecessor(self, predecessor): ValueError If ``predecessor`` is ``None`` and the node has no external supplier and has 0 or >1 predecessor nodes. + ValueError + If ``predecessor`` and ``raw_material`` are both not ``None`` and ``predecessor`` + does not supply this node with ``raw_material``. """ - preds = self.predecessors(include_external=False) + if raw_material is None: + preds = self.predecessors(include_external=False) + else: + rm_obj, rm_ind = self.network.parse_product(raw_material) + preds = [pred for pred in self.predecessors(include_external=False) if rm_ind in pred.product_indices] + if rm_ind == self._external_supplier_dummy_product.index: + preds.append(None) + if predecessor is None: if len(preds) == 1: return self.network.parse_node(preds[0]) elif None in self.predecessors(include_external=True): return None, None + # Now len(preds) = 0 or >1 and node does not have an external supplier. + elif len(preds) == 0 or err_on_multiple_preds: + if raw_material is None: + raise ValueError(f'predecessor cannot be None if the node has no external supplier and has 0 or >1 predecessor nodes.') + else: + raise ValueError(f'predecessor cannot be None if raw_material is not None and the node has 0 or >1 suppliers of raw_material') else: - raise ValueError(f'predecessor cannot be None if the node has no external supplier and has 0 or >1 predecessor nodes.') + # len(preds) > 1 but error was suppressed. + return None, None else: pred_node, pred_ind = self.network.parse_node(predecessor) # raises TypeError on bad type if pred_node not in preds: raise ValueError(f'Node {pred_ind} is not a predecessor of node {self.index}.') else: return pred_node, pred_ind - + def validate_successor(self, successor): """Confirm that ``successor`` is a valid successor of node: @@ -546,31 +575,39 @@ def _build_network_bill_of_materials(self): """Build the network bill of materials and store it in _network_bill_of_materials attribute. This attribute is built each time the nodes or products change, rather than deriving it live during a simulation. + + Does nothing if ``self.network`` is ``None`` or ``self.network._currently_building`` is ``True``. + (This is to avoid building + product attributes when network is currently being built and not all product/node + info is in place yet.) """ - # Initialize NBOM. - self._network_bill_of_materials = {prod.index: {pred.index: {} for pred in self.predecessors} for prod in self.products} - - # Loop through predecessors. - for pred in self.predecessors: - # Do any raw materials at predecessor have a BOM relationship with any products at the node? - BOM_found = False - for prod1 in self.products: - for prod2 in prod1.raw_materials: - if prod2 in (pred.products if pred is not None else [self._external_supplier_dummy_product.index]): - BOM_found = True - break - - # Loop through products at node and predecessor. - for prod1 in self.products: - for prod2 in pred.products: - # If any BOM relationships were found, use product BOM; otherwise, NBOM = 1. - if BOM_found: - NBOM = prod1.BOM(prod2.index) - else: - NBOM = 1 + if self.network is not None and not self.network._currently_building: + # Initialize NBOM. + self._network_bill_of_materials = \ + {prod_ind: {pred_ind: {} for pred_ind in self.predecessor_indices(include_external=True)} for prod_ind in self.product_indices} + + # Loop through predecessors. + for pred in self.predecessors(include_external=True): + pred_ind = pred.index if pred is not None else None + # Do any raw materials at predecessor have a BOM relationship with any products at the node? + BOM_found = False + for prod1 in self.products: + for prod2 in prod1.raw_materials: + if prod2 in (pred.products if pred is not None else [self._external_supplier_dummy_product.index]): + BOM_found = True + break + + # Loop through products at node and predecessor. + for prod1 in self.products: + for prod2 in (pred.products if pred is not None else [self._external_supplier_dummy_product]): + # If any BOM relationships were found, use product BOM; otherwise, NBOM = 1. + if BOM_found: + NBOM = prod1.BOM(prod2.index) + else: + NBOM = 1 - # Set NBOM. - self._network_bill_of_materials[prod1.index][pred.index][prod2.index] = NBOM + # Set NBOM. + self._network_bill_of_materials[prod1.index][pred_ind][prod2.index] = NBOM def add_product(self, product): """Add ``product`` to the node. If ``product`` is already in the node (as determined by the index), @@ -583,6 +620,12 @@ def add_product(self, product): """ product.network = self.network + + # Remember value of _currently_building flag, and turn it on to avoid building product attributes prematurely. + if self.network is not None: + old_currently_building = self.network._currently_building + self.network._currently_building = True + if product not in self.products: self._products_by_index[product.index] = product if not product.is_dummy: @@ -591,6 +634,7 @@ def add_product(self, product): # Rebuild product-related attributes in network. if self.network is not None: + self.network._currently_building = old_currently_building self.network._build_product_attributes() def add_products(self, list_of_products): @@ -616,6 +660,11 @@ def remove_product(self, product): product : |class_product| or int The product to remove from the node. """ + # Remember value of _currently_building flag, and turn it on to avoid building product attributes prematurely. + if self.network is not None: + old_currently_building = self.network._currently_building + self.network._currently_building = True + if isinstance(product, SupplyChainProduct): self._products_by_index.pop(product.index, None) else: @@ -627,6 +676,7 @@ def remove_product(self, product): # Rebuild product-related attributes in network. if self.network is not None: + self.network._currently_building = old_currently_building self.network._build_product_attributes() def remove_products(self, list_of_products): @@ -712,12 +762,12 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate ``product``, ``predecessor``, and ``raw_material`` may be indices or objects. Set ``predecessor`` to ``None`` to determine the predecessor automatically: Either the external supplier (if ``raw_material`` is - ``None`` or the index of the dummy product at the external supplier) or the unique predecessor that provides a given + ``None`` or the dummy product at the external supplier) or the unique predecessor that provides a given dummy product (if ``raw_material`` is a dummy product), or an arbitrary predecessor (if ``raw_material`` is not a dummy product, because in this case the NBOM equals the BOM--it is product-specific, not node-specific, so the predecessor is irrelevant). - Raises a ``ValueError`` if ``product`` is not a product at the node, ``raw_material`` is + Returns a ``ValueError`` if ``product`` is not a product at the node, ``raw_material`` is not a product at ``predecessor``, or ``predecessor`` is not a predecessor of the node. :func:`NBOM` is a shortcut to this function. @@ -748,65 +798,84 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate If ``predecessor`` is not a predecessor of the node. """ - # TODO: would be better to pre-build this, plus raw_materials, raw_material_suppliers, etc., - # in SCNode and SCProduct. Rebuild it each time the product or node structure changes. - - # Get objects and indices for parameters. - if isinstance(product, SupplyChainProduct): - prod = product - prod_ind = product.index - elif product is None: - prod = self._dummy_product - prod_ind = self._dummy_product.index - else: - prod = self.network.products_by_index[product] - prod_ind = product - - if isinstance(raw_material, SupplyChainProduct): -# rm = raw_material - rm_ind = raw_material.index + _, prod_ind = self.validate_product(product) + pred_obj, pred_ind = self.validate_predecessor(predecessor, raw_material=raw_material, err_on_multiple_preds=False) + if pred_obj: + # Make sure raw material is a product at pred. + _, rm_ind = pred_obj.validate_product(raw_material) # can't use self.validate_raw_material here because it calls NBOM() ==> infinite recursion else: -# rm = None if raw_material is None else self.network.products_by_index[raw_material] - rm_ind = raw_material - - if isinstance(predecessor, SupplyChainNode): - pred = predecessor - pred_ind = predecessor.index - elif predecessor is None: - if rm_ind == self._external_supplier_dummy_product.index: - pred = None - pred_ind = None - else: - # This works for the case in which rm is a dummy product or a regular product. - pred = self.raw_material_suppliers_by_raw_material(rm_ind, network_BOM=True)[0] - pred_ind = pred.index if pred is not None else None - else: - pred = self.network.get_node_from_index(predecessor) - pred_ind = predecessor - - # Validate parameters. - if prod_ind not in self.product_indices: - raise ValueError(f'Product {prod_ind} is not a product in node {self.index}.') - if pred is not None and rm_ind not in pred.product_indices: - raise ValueError(f'Product {rm_ind} is not a product in node {pred_ind}.') - if pred_ind not in self.predecessor_indices(include_external=True): - raise ValueError(f'Node {pred_ind} is not a predecessor of node {self.index}.') + # Pred is external supplier. Just parse the raw material. + rm_obj, rm_ind = self.network.parse_product(raw_material) + # If raw material is a non-dummy product, replace pred with an arbitrary predecessor. (See docstring.) + if rm_obj is not None and not rm_obj.is_dummy: + pred_obj = [pred for pred in self.predecessors(include_external=False) if rm_ind in pred.product_indices][0] + pred_ind = pred_obj.index + + # If raw material is None, replace it with external supplier dummy product. + if rm_ind is None: + rm_ind = self._external_supplier_dummy_product.index + + return self._network_bill_of_materials[prod_ind][pred_ind][rm_ind] + +# # TODO: would be better to pre-build this, plus raw_materials, raw_material_suppliers, etc., +# # in SCNode and SCProduct. Rebuild it each time the product or node structure changes. + +# # Get objects and indices for parameters. +# if isinstance(product, SupplyChainProduct): +# prod = product +# prod_ind = product.index +# elif product is None: +# prod = self._dummy_product +# prod_ind = self._dummy_product.index +# else: +# prod = self.network.products_by_index[product] +# prod_ind = product + +# if isinstance(raw_material, SupplyChainProduct): +# # rm = raw_material +# rm_ind = raw_material.index +# else: +# # rm = None if raw_material is None else self.network.products_by_index[raw_material] +# rm_ind = raw_material + +# if isinstance(predecessor, SupplyChainNode): +# pred = predecessor +# pred_ind = predecessor.index +# elif predecessor is None: +# if rm_ind == self._external_supplier_dummy_product.index: +# pred = None +# pred_ind = None +# else: +# # This works for the case in which rm is a dummy product or a regular product. +# pred = self.raw_material_suppliers_by_raw_material(rm_ind, network_BOM=True)[0] +# pred_ind = pred.index if pred is not None else None +# else: +# pred = self.network.get_node_from_index(predecessor) +# pred_ind = predecessor + +# # Validate parameters. +# if prod_ind not in self.product_indices: +# raise ValueError(f'Product {prod_ind} is not a product in node {self.index}.') +# if pred is not None and rm_ind not in pred.product_indices: +# raise ValueError(f'Product {rm_ind} is not a product in node {pred_ind}.') +# if pred_ind not in self.predecessor_indices(include_external=True): +# raise ValueError(f'Node {pred_ind} is not a predecessor of node {self.index}.') - # Do any raw materials at predecessor have a BOM relationship with any products at the node? - found = False - for prod1 in self.products: - for prod2 in prod1.raw_materials: - if prod2 in (pred.products if pred is not None else [self._external_supplier_dummy_product.index]): - found = True - break +# # Do any raw materials at predecessor have a BOM relationship with any products at the node? +# found = False +# for prod1 in self.products: +# for prod2 in prod1.raw_materials: +# if prod2 in (pred.products if pred is not None else [self._external_supplier_dummy_product.index]): +# found = True +# break - # Were any BOM relationships found? - if found: - # Yes--return BOM relationship for this (product, raw material) pair (even if it's 0). - return prod.BOM(rm_ind) - else: - # No--return 1, regardless of the product and raw material. - return 1 +# # Were any BOM relationships found? +# if found: +# # Yes--return BOM relationship for this (product, raw material) pair (even if it's 0). +# return prod.BOM(rm_ind) +# else: +# # No--return 1, regardless of the product and raw material. +# return 1 def NBOM(self, product=None, predecessor=None, raw_material=None): """A shortcut to :func:`~get_network_bill_of_materials`.""" @@ -1119,17 +1188,22 @@ def products_by_raw_material(self, raw_material=None, return_indices=False, netw this node has a single raw material. """ # Validate parameters. - rm_obj, rm_ind = self.validate_raw_material(raw_material, network_BOM=network_BOM) + _, rm_ind = self.validate_raw_material(raw_material, network_BOM=network_BOM) if network_BOM: - prods = [prod for prod in self.products if self.NBOM(product=prod, predecessor=None, raw_material=raw_material) > 0] + prods = set() + for prod in self.products: + for pred in self.raw_material_suppliers_by_raw_material(rm_ind, return_indices=False, network_BOM=True): + if self.NBOM(product=prod, predecessor=pred, raw_material=rm_ind) > 0: + prods.add(prod) +# [prod for prod in self.products if self.NBOM(product=prod, predecessor=None, raw_material=rm_ind) > 0] else: - prods = [prod for prod in self.products if prod.BOM(rm_index=rm_ind) > 0] + prods = {prod for prod in self.products if prod.BOM(rm_index=rm_ind) > 0} if return_indices: return [prod.index for prod in prods] else: - return prods + return list(prods) # def product_indices_by_raw_material(self, rm_index=None): # """A list of indices of all products that use raw material with index ``rm_index`` at the node, @@ -1539,11 +1613,8 @@ def initialize(self, index=None): if index is not None and not is_integer(index): raise ValueError('Node index must be an integer.') - # Remember current index. (Make sure it exists. If this is first initialization, it does not.) - if hasattr(self, 'index'): - curr_index = self.index - else: - curr_index = None + # Remember current index, if any. (If this is first initialization, it doesn't exist yet.) + curr_index = self.index if hasattr(self, 'index') else None # Loop through attributes. Special handling for list and object attributes. for attr in self._DEFAULT_VALUES.keys(): @@ -1572,6 +1643,9 @@ def initialize(self, index=None): # never will have an external supplier.) self._external_supplier_dummy_product = \ SupplyChainProduct(SupplyChainNode._external_supplier_dummy_product_index_from_node_index(self.index), is_dummy=True) + + # Build NBOM. + self._build_network_bill_of_materials() def deep_equal_to(self, other, rel_tol=1e-8): """Check whether node "deeply equals" ``other``, i.e., if all attributes are diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index c38d4e6..5cd81ee 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -281,6 +281,10 @@ def set_bill_of_materials(self, rm_index, num_needed=1.0): else: # We are removing a BOM relationship. self._bill_of_materials.pop(rm_index, None) + + # Rebuild product info throughout network. + if self.network: + self.network._build_product_attributes() def get_bill_of_materials(self, rm_index): """Return the number of units of raw material product ``rm_index`` that are required in order @@ -330,14 +334,19 @@ def bill_of_materials_dict(self): @property def raw_materials(self): - """A list of all raw materials required to make this product, as |class_prod| objects. Read only.""" + """A list of all raw materials required to make this product, as |class_prod| objects. + If a given raw material is registered in the product's BOM but has not been added + to the network (or any of its nodes), the raw material is not included in the list. Read only.""" if self.network is None: raise ValueError('self.network cannot be None when calling raw_materials.') - return [self.network.products_by_index[rm_index] for rm_index in self.bill_of_materials_dict.keys() if self.BOM(rm_index) > 0 ] + return [self.network.products_by_index[rm_index] for rm_index in self.bill_of_materials_dict.keys() \ + if self.BOM(rm_index) > 0 and rm_index in self.network.products_by_index] @property def raw_material_indices(self): - """A list of the indices of all raw materials required to make this product. Read only.""" + """A list of the indices of all raw materials required to make this product. + If a given raw material is registered in the product's BOM but has not been added + to the network (or any of its nodes), the raw material is not included in the list. Read only.""" return [rm.index for rm in self.raw_materials] # Properties and functions related to network structure. diff --git a/tests/test_gsm_tree.py b/tests/test_gsm_tree.py index ecbf060..eba51ec 100644 --- a/tests/test_gsm_tree.py +++ b/tests/test_gsm_tree.py @@ -575,8 +575,7 @@ def test_example_6_5(self): correct_SSM_tree.add_edge(3, 2) correct_SSM_tree.add_edge(3, 4) - trees_equal = SSM_tree.deep_equal_to(correct_SSM_tree) - self.assertEqual(trees_equal, True) + self.assertTrue(SSM_tree.deep_equal_to(correct_SSM_tree)) def test_figure_6_14(self): """Test that GSM_to_SSM() works for network in Figure 6.14. @@ -602,8 +601,7 @@ def test_figure_6_14(self): demand_source=DemandSource(type='N', mean=0, standard_deviation=10))) correct_SSM_tree.add_edges_from_list([(1, 2), (2, 3), (3, 5), (4, 5), (5, 6), (7, 10), (6, 10), (8, 10), (9, 10)]) - trees_equal = SSM_tree.deep_equal_to(correct_SSM_tree) - self.assertEqual(trees_equal, True) + self.assertTrue(SSM_tree.deep_equal_to(correct_SSM_tree)) def test_problem_6_9(self): """Test that GSM_to_SSM() works for network in Problem 6.9. @@ -624,8 +622,7 @@ def test_problem_6_9(self): correct_SSM_tree.add_node(SupplyChainNode(6, shipment_lead_time=2, echelon_holding_cost=7.5 * 0.2 / 365)) correct_SSM_tree.add_edges_from_list([(6, 5), (5, 3), (4, 3), (3, 1), (3, 2)]) - trees_equal = SSM_tree.deep_equal_to(correct_SSM_tree) - self.assertEqual(trees_equal, True) + self.assertTrue(SSM_tree.deep_equal_to(correct_SSM_tree)) class TestPreprocessTree(unittest.TestCase): @@ -712,8 +709,7 @@ def test_example_6_5(self): ) correct_tree.add_successor(node3, node4) - trees_equal = new_tree.deep_equal_to(correct_tree) - self.assertTrue(trees_equal) + self.assertTrue(new_tree.deep_equal_to(correct_tree)) def test_figure_6_14(self): """Test that preprocess_tree() works for network in Figure 6.14. @@ -839,8 +835,7 @@ def test_figure_6_14(self): max_replenishment_time=14)) correct_tree.add_edges_from_list([(1, 2), (2, 3), (3, 5), (4, 5), (5, 6), (6, 10), (7, 10), (8, 10), (9, 10)]) - trees_equal = new_tree.deep_equal_to(correct_tree) - self.assertEqual(trees_equal, True) + self.assertTrue(new_tree.deep_equal_to(correct_tree)) def test_problem_6_7(self): """Test that preprocess_tree() works for network in Problem 6.7. @@ -884,8 +879,7 @@ def test_problem_6_7(self): max_replenishment_time=5)) correct_tree.add_edges_from_list([(2, 1), (3, 2)]) - trees_equal = new_tree.deep_equal_to(correct_tree) - self.assertTrue(trees_equal) + self.assertTrue(new_tree.deep_equal_to(correct_tree)) def test_problem_6_9(self): """Test that preprocess_tree() works for network in Problem 6.9. @@ -973,8 +967,7 @@ def test_problem_6_9(self): max_replenishment_time=2)) correct_tree.add_edges_from_list([(6, 5), (4, 3), (5, 3), (3, 1), (3, 2)]) - trees_equal = new_tree.deep_equal_to(correct_tree) - self.assertTrue(trees_equal) + self.assertTrue(new_tree.deep_equal_to(correct_tree)) class TestCalculateC(unittest.TestCase): diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index f9554e1..a639173 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -1097,11 +1097,11 @@ def test_mwor_one_product(self): self.assertEqual(nodes[0].get_network_bill_of_materials(10, nodes[3], prods[5]), 1) # Then test with product and BOM. - nodes[0].products[0].set_bill_of_materials(1, 5) - nodes[0].products[0].set_bill_of_materials(2, 7) - nodes[0].products[0].set_bill_of_materials(3, 3) - nodes[0].products[0].set_bill_of_materials(4, 15) - nodes[0].products[0].set_bill_of_materials(5, 6) + prods[10].set_bill_of_materials(1, 5) + prods[10].set_bill_of_materials(2, 7) + prods[10].set_bill_of_materials(3, 3) + prods[10].set_bill_of_materials(4, 15) + prods[10].set_bill_of_materials(5, 6) self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], 1, 1), 5) self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], nodes[1], 2), 7) @@ -1150,11 +1150,11 @@ def test_mwor_multiple_products(self): self.assertEqual(nodes[0].get_network_bill_of_materials(12, nodes[3], prods[5]), 1) # Then test with products and BOM. - nodes[0].products_by_index[10].set_bill_of_materials(1, 5) - nodes[0].products_by_index[10].set_bill_of_materials(2, 7) - nodes[0].products_by_index[11].set_bill_of_materials(3, 3) - nodes[0].products_by_index[11].set_bill_of_materials(4, 15) - nodes[0].products_by_index[12].set_bill_of_materials(5, 6) + prods[10].set_bill_of_materials(1, 5) + prods[10].set_bill_of_materials(2, 7) + prods[11].set_bill_of_materials(3, 3) + prods[11].set_bill_of_materials(4, 15) + prods[12].set_bill_of_materials(5, 6) self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], 1, 1), 5) self.assertEqual(nodes[0].get_network_bill_of_materials(prods[10], nodes[1], 2), 7) @@ -1322,11 +1322,12 @@ def test_mwor_one_product(self): nodes[3].add_products([prods[4], prods[5]]) nodes[0].add_product(SupplyChainProduct(10)) - nodes[0].products[0].set_bill_of_materials(1, 5) - nodes[0].products[0].set_bill_of_materials(2, 7) - nodes[0].products[0].set_bill_of_materials(3, 3) - nodes[0].products[0].set_bill_of_materials(4, 15) - nodes[0].products[0].set_bill_of_materials(5, 6) + prod10 = nodes[0].products[0] + prod10.set_bill_of_materials(1, 5) + prod10.set_bill_of_materials(2, 7) + prod10.set_bill_of_materials(3, 3) + prod10.set_bill_of_materials(4, 15) + prod10.set_bill_of_materials(5, 6) # Raw materials by product, network_BOM=True. self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True), list(prods.keys())) @@ -1847,27 +1848,27 @@ def test_multiproduct_5_7(self): nodes = {i: network.get_node_from_index(i) for i in network.node_indices} prods = network.products_by_index - self.assertListEqual(nodes[0].products_by_raw_material(raw_material=2, return_indices=True), [0]) - self.assertListEqual(nodes[0].products_by_raw_material(raw_material=3, return_indices=True), [0]) - self.assertListEqual(nodes[1].products_by_raw_material(raw_material=2, return_indices=True), [0]) - self.assertListEqual(nodes[1].products_by_raw_material(raw_material=3, return_indices=True), [0, 1]) - self.assertListEqual(nodes[1].products_by_raw_material(raw_material=4, return_indices=True), [1]) - self.assertListEqual(nodes[2].products_by_raw_material(raw_material=5, return_indices=True), [2, 3]) - self.assertListEqual(nodes[2].products_by_raw_material(raw_material=6, return_indices=True), [4]) - self.assertListEqual(nodes[3].products_by_raw_material(raw_material=5, return_indices=True), [2]) - self.assertListEqual(nodes[3].products_by_raw_material(raw_material=6, return_indices=True), [4]) - self.assertListEqual(nodes[4].products_by_raw_material(raw_material=nodes[4]._external_supplier_dummy_product.index, return_indices=True), [5, 6]) - - self.assertListEqual(nodes[0].products_by_raw_material(raw_material=2), [prods[0]]) - self.assertListEqual(nodes[0].products_by_raw_material(raw_material=3), [prods[0]]) - self.assertListEqual(nodes[1].products_by_raw_material(raw_material=2), [prods[0]]) - self.assertListEqual(nodes[1].products_by_raw_material(raw_material=3), [prods[0], prods[1]]) - self.assertListEqual(nodes[1].products_by_raw_material(raw_material=4), [prods[1]]) - self.assertListEqual(nodes[2].products_by_raw_material(raw_material=5), [prods[2], prods[3]]) - self.assertListEqual(nodes[2].products_by_raw_material(raw_material=6), [prods[4]]) - self.assertListEqual(nodes[3].products_by_raw_material(raw_material=5), [prods[2]]) - self.assertListEqual(nodes[3].products_by_raw_material(raw_material=6), [prods[4]]) - self.assertListEqual(nodes[4].products_by_raw_material(raw_material=nodes[4]._external_supplier_dummy_product.index), [prods[5], prods[6]]) + self.assertCountEqual(nodes[0].products_by_raw_material(raw_material=2, return_indices=True), [0]) + self.assertCountEqual(nodes[0].products_by_raw_material(raw_material=3, return_indices=True), [0]) + self.assertCountEqual(nodes[1].products_by_raw_material(raw_material=2, return_indices=True), [0]) + self.assertCountEqual(nodes[1].products_by_raw_material(raw_material=3, return_indices=True), [0, 1]) + self.assertCountEqual(nodes[1].products_by_raw_material(raw_material=4, return_indices=True), [1]) + self.assertCountEqual(nodes[2].products_by_raw_material(raw_material=5, return_indices=True), [2, 3]) + self.assertCountEqual(nodes[2].products_by_raw_material(raw_material=6, return_indices=True), [4]) + self.assertCountEqual(nodes[3].products_by_raw_material(raw_material=5, return_indices=True), [2]) + self.assertCountEqual(nodes[3].products_by_raw_material(raw_material=6, return_indices=True), [4]) + self.assertCountEqual(nodes[4].products_by_raw_material(raw_material=nodes[4]._external_supplier_dummy_product.index, return_indices=True), [5, 6]) + + self.assertCountEqual(nodes[0].products_by_raw_material(raw_material=2), [prods[0]]) + self.assertCountEqual(nodes[0].products_by_raw_material(raw_material=3), [prods[0]]) + self.assertCountEqual(nodes[1].products_by_raw_material(raw_material=2), [prods[0]]) + self.assertCountEqual(nodes[1].products_by_raw_material(raw_material=3), [prods[0], prods[1]]) + self.assertCountEqual(nodes[1].products_by_raw_material(raw_material=4), [prods[1]]) + self.assertCountEqual(nodes[2].products_by_raw_material(raw_material=5), [prods[2], prods[3]]) + self.assertCountEqual(nodes[2].products_by_raw_material(raw_material=6), [prods[4]]) + self.assertCountEqual(nodes[3].products_by_raw_material(raw_material=5), [prods[2]]) + self.assertCountEqual(nodes[3].products_by_raw_material(raw_material=6), [prods[4]]) + self.assertCountEqual(nodes[4].products_by_raw_material(raw_material=nodes[4]._external_supplier_dummy_product.index), [prods[5], prods[6]]) with self.assertRaises(ValueError): _ = nodes[0].products_by_raw_material(raw_material=77) @@ -2039,17 +2040,17 @@ def test_mwor_no_product(self): nodes[2].add_products([prods[2], prods[3]]) nodes[3].add_products([prods[4], prods[5]]) - self.assertListEqual(nodes[0].customers_by_product(product=nodes[0]._dummy_product, return_indices=False, network_BOM=True), [None]) - self.assertListEqual(nodes[0].customers_by_product(product=None, return_indices=False, network_BOM=True), [None]) - self.assertListEqual(nodes[0].customers_by_product(product=None, return_indices=True, network_BOM=True), [None]) - self.assertListEqual(nodes[1].customers_by_product(product=prods[1], return_indices=False, network_BOM=True), [nodes[0]]) - self.assertListEqual(nodes[1].customers_by_product(product=prods[1], return_indices=True, network_BOM=True), [0]) - self.assertListEqual(nodes[1].customers_by_product(product=2, return_indices=False, network_BOM=True), [nodes[0]]) - self.assertListEqual(nodes[1].customers_by_product(product=prods[2], return_indices=False, network_BOM=False), []) - self.assertListEqual(nodes[2].customers_by_product(product=prods[2], return_indices=False, network_BOM=True), [nodes[0]]) - self.assertListEqual(nodes[2].customers_by_product(product=2, return_indices=True, network_BOM=True), [0]) - self.assertListEqual(nodes[2].customers_by_product(product=3, return_indices=False, network_BOM=True), [nodes[0]]) - self.assertListEqual(nodes[2].customers_by_product(product=prods[3], return_indices=False, network_BOM=False), []) + self.assertCountEqual(nodes[0].customers_by_product(product=nodes[0]._dummy_product, return_indices=False, network_BOM=True), [None]) + self.assertCountEqual(nodes[0].customers_by_product(product=None, return_indices=False, network_BOM=True), [None]) + self.assertCountEqual(nodes[0].customers_by_product(product=None, return_indices=True, network_BOM=True), [None]) + self.assertCountEqual(nodes[1].customers_by_product(product=prods[1], return_indices=False, network_BOM=True), [nodes[0]]) + self.assertCountEqual(nodes[1].customers_by_product(product=prods[1], return_indices=True, network_BOM=True), [0]) + self.assertCountEqual(nodes[1].customers_by_product(product=2, return_indices=False, network_BOM=True), [nodes[0]]) + self.assertCountEqual(nodes[1].customers_by_product(product=prods[2], return_indices=False, network_BOM=False), []) + self.assertCountEqual(nodes[2].customers_by_product(product=prods[2], return_indices=False, network_BOM=True), [nodes[0]]) + self.assertCountEqual(nodes[2].customers_by_product(product=2, return_indices=True, network_BOM=True), [0]) + self.assertCountEqual(nodes[2].customers_by_product(product=3, return_indices=False, network_BOM=True), [nodes[0]]) + self.assertCountEqual(nodes[2].customers_by_product(product=prods[3], return_indices=False, network_BOM=False), []) with self.assertRaises(ValueError): _ = nodes[1].customers_by_product(product=77) From 66f6967de8c80964e2779d95014a870f0b3df86a Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Wed, 8 May 2024 21:00:55 -0400 Subject: [PATCH 54/94] Prebuild supplier_raw_material_pairs_by_product --- src/stockpyl/supply_chain_network.py | 2 +- src/stockpyl/supply_chain_node.py | 81 ++++++++++++++++++++++------ 2 files changed, 65 insertions(+), 18 deletions(-) diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index e63237d..a46cc4b 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -700,7 +700,7 @@ def _build_product_attributes(self): # Build network BOM for all nodes. for node in self.nodes: - node._build_network_bill_of_materials() + node._build_product_attributes() def add_product(self, product): """Add ``product`` to the network. ``product`` will not automatically be contained in any diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index bf266ac..a42c31e 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -571,6 +571,56 @@ def product_indices(self): """A list of indices of all products handled at the node. Read only.""" return list(self._products_by_index.keys()) + def _build_product_attributes(self): + """Build product-related attributes that are derived from other attributes, + at the network and the nodes in it. + These attributes are built each time the nodes or products in the network change, rather than + deriving them live during a simulation. + + Does nothing if self._currently_building is True. (This is to avoid building + product attributes when network is currently being built and not all product/node + info is in place yet.) + """ + if self.network is not None and not self.network._currently_building: + self._build_network_bill_of_materials() + self._build_supplier_raw_material_pairs() + + def _build_supplier_raw_material_pairs(self): + """Build two product-indexed dicts of (supplier, raw material) pairs -- one based on pure BOM + and one based on NBOM -- and store them in _supplier_raw_material_pairs_by_product_BOM and + _supplier_raw_material_pairs_by_product_NBOM attributes. Suppliers and raw materials are + stored as indices. + These attributes are built each time the nodes or products change, rather than + deriving them live during a simulation. + + Does nothing if ``self.network`` is ``None`` or ``self.network._currently_building`` is ``True``. + (This is to avoid building + product attributes when network is currently being built and not all product/node + info is in place yet.) + """ + # This function relies on :func:`get_network_bill_of_materials` but not other functions + # that list suppliers/raw materials. Therefore, those functions can call this one without + # triggering an infinite recursion. + + if self.network is not None and not self.network._currently_building: + + # Initialize attributes. + self._supplier_raw_material_pairs_by_product_BOM = {prod_ind: [] for prod_ind in self.product_indices} + self._supplier_raw_material_pairs_by_product_NBOM = {prod_ind: [] for prod_ind in self.product_indices} + + for prod in self.products: + pairs_BOM = set() + pairs_NBOM = set() + for pred in self.predecessors(include_external=True): + for rm in pred.products if pred is not None else [self._external_supplier_dummy_product]: + if prod.BOM(rm_index=rm.index) > 0: + pairs_BOM.add((pred.index if pred else None, rm.index)) + if self.NBOM(product=prod, predecessor=pred, raw_material=rm) > 0: + pairs_NBOM.add((pred.index if pred else None, rm.index)) + + self._supplier_raw_material_pairs_by_product_BOM[prod.index] = pairs_BOM + self._supplier_raw_material_pairs_by_product_NBOM[prod.index] = pairs_NBOM + def _build_network_bill_of_materials(self): """Build the network bill of materials and store it in _network_bill_of_materials attribute. This attribute is built each time the nodes or products change, rather than @@ -1230,7 +1280,7 @@ def products_by_raw_material(self, raw_material=None, return_indices=False, netw # return [prod.index for prod in self.products_by_raw_material(rm_index=rm_index)] def supplier_raw_material_pairs_by_product(self, product=None, return_indices=False, network_BOM=True): - """A list of all predecessors and raw materials for ``product``, as tuples ``(pred, rm)``. + """A set of all predecessors and raw materials for ``product``, as tuples ``(pred, rm)``. Set ``product`` to ``'all'`` to get predecessors and raw materials for all products at the node. If the node has a single product (either dummy or real), either set ``product`` to the single product, or to ``None`` and the function will determine it automatically. @@ -1254,8 +1304,8 @@ def supplier_raw_material_pairs_by_product(self, product=None, return_indices=Fa Returns ------- - list - List of (predecessor, raw material) tuples. + set + Set of (predecessor, raw material) tuples. Raises ------ @@ -1287,19 +1337,16 @@ def supplier_raw_material_pairs_by_product(self, product=None, return_indices=Fa pairs = set() for prod in products: - for pred in self.predecessors(include_external=True): - for rm in pred.products if pred is not None else [self._external_supplier_dummy_product]: - if (network_BOM and self.NBOM(product=prod, predecessor=pred, raw_material=rm) > 0) \ - or (not network_BOM and prod.BOM(rm_index=rm.index) > 0): - if return_indices: - if pred is None: - pairs.add((None, rm.index)) - else: - pairs.add((pred.index, rm.index)) - else: - pairs.add((pred, rm)) + if network_BOM: + pairs = pairs.union(self._supplier_raw_material_pairs_by_product_NBOM[prod.index]) + else: + pairs = pairs.union(self._supplier_raw_material_pairs_by_product_BOM[prod.index]) + + # Convert indices to objects, if requested. + if not return_indices: + pairs = {(self.network.get_node_from_index(pred_ind), self.network.products_by_index[rm_ind]) for pred_ind, rm_ind in pairs} - return list(pairs) + return pairs def customers_by_product(self, product=None, return_indices=False, network_BOM=True): """A list of customers that order ``product`` from the node. If the node has a single product @@ -1644,8 +1691,8 @@ def initialize(self, index=None): self._external_supplier_dummy_product = \ SupplyChainProduct(SupplyChainNode._external_supplier_dummy_product_index_from_node_index(self.index), is_dummy=True) - # Build NBOM. - self._build_network_bill_of_materials() + # Build product-related attributes. + self._build_product_attributes() def deep_equal_to(self, other, rel_tol=1e-8): """Check whether node "deeply equals" ``other``, i.e., if all attributes are From be47a364af06cd070bc1570a7e0bc61974abce87 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Thu, 9 May 2024 09:21:30 -0400 Subject: [PATCH 55/94] Roll back some stuff I was trying for Convert product-related lists to sets #148 --- src/stockpyl/helpers.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/stockpyl/helpers.py b/src/stockpyl/helpers.py index f7b2f24..e59c9de 100644 --- a/src/stockpyl/helpers.py +++ b/src/stockpyl/helpers.py @@ -150,6 +150,24 @@ def is_list(x): return isinstance(x, list) +def is_set(x): + """Determine whether x is a set. + # TODO: unit tests + + Parameters + ---------- + x : any + Object to test for set-ness. + + Returns + ------- + bool + ``True`` if ``x`` is a set, ``False`` otherwise. + + """ + return isinstance(x, set) + + def is_dict(x): """Determine whether x is a dict. From 26792d67696fc26a6a60cfe4db6c31a647c73a1b Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 10 May 2024 09:37:38 -0400 Subject: [PATCH 56/94] Fix parameter-validation issue in `echelon_inventory_position()` --- CHANGELOG.md | 1 + src/stockpyl/helpers.py | 1 - src/stockpyl/instances.py | 3 -- src/stockpyl/node_state_vars.py | 22 ++++++++------ tests/test_helpers.py | 54 +++++++++++++++++++++++++++++++++ 5 files changed, 67 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 340548f..19ce8a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ a given number and return the corresponding value. - Functions to validate and parse nodes and products within a network or node. (Mostly used internally for simulation.) ### Changed +- ``NodeStateVars.raw_material_inventory`` is now indexed by product, not by predecessor. - ``NodeStateVars`` object is now in its own module, ``node_state_vars.py``, rather than in ``supply_chain_node.py``. - ``supply_chain_network.network_from_edges()`` now only creates a ``DemandSource`` for sink nodes or if the demand source parameters were provided specifically for that node in the input args. diff --git a/src/stockpyl/helpers.py b/src/stockpyl/helpers.py index e59c9de..6c9033f 100644 --- a/src/stockpyl/helpers.py +++ b/src/stockpyl/helpers.py @@ -152,7 +152,6 @@ def is_list(x): def is_set(x): """Determine whether x is a set. - # TODO: unit tests Parameters ---------- diff --git a/src/stockpyl/instances.py b/src/stockpyl/instances.py index da5d7b9..c44504f 100644 --- a/src/stockpyl/instances.py +++ b/src/stockpyl/instances.py @@ -75,9 +75,6 @@ def load_instance(instance_name, filepath=None, ignore_state_vars=True): If the JSON file does not exist or the instance cannot be found in the JSON file. """ - -# TODO: convert 'null' to None - # Determine filepath. if filepath is None: filepath = _stockpyl_instances_json_path() diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index 2be45db..da876f7 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -99,7 +99,6 @@ class NodeStateVars(object): raw_material_inventory : dict ``raw_material_inventory[rm]`` = number of units of raw material ``rm`` from _all_ predecessors in raw-material inventory at node. - # TODO: note: this is a change, used to be indexed by predecessor pending_finished_goods : dict ``pending_finished_goods[prod]`` = number of units of product ``prod`` that are waiting to be produced from raw materials. (This is used internally to ensure that raw materials are used to produce @@ -173,11 +172,10 @@ def __init__(self, node=None, period=None): for rm_index in self.node.raw_materials_by_product(product='all', return_indices=True, network_BOM=True): # Find a product at this node that uses raw material rm_index from predecessor p_index, # and use its lead times. If there is more than one such product, use the last one found. - # This is a little klugey. # TODO: improve? should LTs be an attribute of the RM, not the product? for prod_index in self.node.product_indices: if rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True) and \ p_index in self.node.raw_material_suppliers_by_raw_material(raw_material=rm_index, return_indices=True, network_BOM=True): - # Get lead times for this product. # TODO: shouldn't inbound shipment pipeline only use shipment LT, not order LT? + # Get lead times for this product. order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) shipment_lead_time = (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) self.inbound_shipment_pipeline[p_index][rm_index] = [0] * (order_lead_time + shipment_lead_time + 1) @@ -1149,7 +1147,7 @@ def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm set to the index of a single product at the node. If the node has a single predecessor, which provides a single raw material, either set ``predecessor_index`` - and ``rm_index`` to the appropriate indicies, or to ``None`` and the function will determine the indices + and ``rm_index`` to the appropriate indicies, or set them to ``None`` and the function will determine the indices automatically. If the node has multiple predecessors and/or raw materials, either set ``predecessor_index`` and ``rm_index`` to the indices of a single predecessor and raw material (to get the raw-material-specific inventory position) @@ -1182,17 +1180,20 @@ def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. """ # Validate parameters. # TODO: figure out what's going on here + if not (predecessor_index is None and rm_index is None): + _, predecessor_index = self.node.validate_predecessor(predecessor_index, raw_material=rm_index) + _, prod_index = self.node.validate_product(prod_index) # if predecessor_index is None and rm_index is not None: # raise ValueError('If predecessor_index is None, then rm_index must also be None.') # if predecessor_index is not None and rm_index is None: # raise ValueError('If rm_index is None, then predecessor_index must also be None.') - # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + # # Validate parameters. + # if prod_index is not None and prod_index not in self.node.product_indices: + # raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] + # # Determine product index. + # prod_index = prod_index or self.node.product_indices[0] # Calculate echelon inventory level. if self.node.is_singleproduct: @@ -1214,7 +1215,6 @@ def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm return EIL + OO + RMI + IDI def _echelon_inventory_position_adjusted(self): - # TODO: not updated for multi-product """Calculate the adjusted echelon inventory position. Equals the current echelon inventory position including only items ordered :math:`L_i` periods ago or earlier, where :math:`L_i` is the forward echelon lead time for the node. That is, equals current echelon inventory level @@ -1233,6 +1233,8 @@ def _echelon_inventory_position_adjusted(self): given interval is the same as # of items ordered. In addition, there are no raw-material inventories. + .. warning:: This function has not yet been updated to handle multi-product nodes. + Returns ------- float diff --git a/tests/test_helpers.py b/tests/test_helpers.py index c0e5bcf..36f1722 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -264,6 +264,60 @@ def test_iter(self): self.assertEqual(helpers.is_dict(a), False) +class TestIsSet(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestIsSet', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestIsSet', 'tear_down_class()') + + def test_list(self): + """Test that is_set() correctly returns False when input is a list. + """ + print_status('TestIsSet', 'test_list()') + + a = [1, 2, 3] + self.assertFalse(helpers.is_set(a)) + + def test_set(self): + """Test that is_set() correctly returns False when input is a set. + """ + print_status('TestIsSet', 'test_set()') + + a = {1, 2, 3} + self.assertTrue(helpers.is_set(a)) + + def test_dict(self): + """Test that is_set() correctly returns True when input is a dict. + """ + print_status('TestIsSet', 'test_dict()') + + a = {1: 0, 2: 5, 3: 'potato'} + self.assertFalse(helpers.is_set(a)) + + def test_singleton(self): + """Test that is_set() correctly returns False when input is a + singleton. + """ + print_status('TestIsSet', 'test_singleton()') + + a = 3.14 + self.assertFalse(helpers.is_set(a)) + + def test_iter(self): + """Test that is_set() correctly returns False when input is an + iter. + """ + print_status('TestIsSet', 'test_iter()') + + a = iter("foo") + self.assertFalse(helpers.is_set(a)) + + class TestIsInteger(unittest.TestCase): @classmethod def set_up_class(cls): From f6b7b4d7bd77efa3a6074316e84b3ee8b7775c66 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 10 May 2024 10:31:07 -0400 Subject: [PATCH 57/94] Validate missing mean, SD in gsm_tree (`DemandSource` setting of `standard_deviation` upon instantiation #130) --- CHANGELOG.md | 4 + src/stockpyl/gsm_tree.py | 14 ++ src/stockpyl/node_state_vars.py | 13 +- src/stockpyl/policy.py | 162 +------------------- src/stockpyl/sim.py | 10 -- src/stockpyl/supply_chain_network.py | 11 -- src/stockpyl/supply_chain_node.py | 211 --------------------------- src/stockpyl/supply_chain_product.py | 10 +- tests/test_demand_source.py | 1 - tests/test_gsm_tree.py | 17 ++- 10 files changed, 40 insertions(+), 413 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19ce8a9..1782eb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,10 @@ demand source parameters were provided specifically for that node in the input a - Bug in ``demand_source.py`` that sometimes caused infinite recursion when some attributes were ``None``. - Bug in ``sim_io.py`` that caused incorrect headers for a few state variables. +### Known Issues +- Echelon base-stock policies are not working reliably yet, at least for systems with multiple products. [#153](https://github.com/LarrySnyder/stockpyl/issues/153) +- Disruptions can only occur at node level, not product level. [#158](https://github.com/LarrySnyder/stockpyl/issues/158) + ## [0.0.15] -- 2024-02-10 ### Added diff --git a/src/stockpyl/gsm_tree.py b/src/stockpyl/gsm_tree.py index 8f066f5..1323c60 100644 --- a/src/stockpyl/gsm_tree.py +++ b/src/stockpyl/gsm_tree.py @@ -62,6 +62,8 @@ def optimize_committed_service_times(tree): Output parameters are expressed using the original labeling of tree, even if the nodes are relabeled internally. + Demands are assumed to be normally distributed. + Parameters ---------- tree : |class_network| @@ -73,6 +75,11 @@ def optimize_committed_service_times(tree): Dict of optimal CSTs, with node indices as keys and CSTs as values. opt_cost : float Optimal expected cost of system. + + Raises + ------ + ValueError + If any sink node (node with no successors) has no demand mean or standard devation provided. **Example** (Example 6.5): @@ -100,6 +107,13 @@ def optimize_committed_service_times(tree): S. C. Graves and S. P. Willems. Erratum: Optimizing strategic safety stock placement in supply chains. *Manufacturing and Service Operations Management*, 5(2):176-177, 2003. """ + + # Validate parameters. + for n in tree.sink_nodes: + if n.demand_source.mean is None: + raise ValueError(f'All sink nodes must have demand_source.mean (node {n.index} does not).') + if n.demand_source.standard_deviation is None: + raise ValueError(f'All sink nodes must have demand_source.standard_deviation (node {n.index} does not).') # Preprocess tree. tree = preprocess_tree(tree) diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index da876f7..e8afd0d 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -1179,21 +1179,10 @@ def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm ValueError If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. """ - # Validate parameters. # TODO: figure out what's going on here + # Validate parameters. if not (predecessor_index is None and rm_index is None): _, predecessor_index = self.node.validate_predecessor(predecessor_index, raw_material=rm_index) _, prod_index = self.node.validate_product(prod_index) - # if predecessor_index is None and rm_index is not None: - # raise ValueError('If predecessor_index is None, then rm_index must also be None.') - # if predecessor_index is not None and rm_index is None: - # raise ValueError('If rm_index is None, then predecessor_index must also be None.') - - # # Validate parameters. - # if prod_index is not None and prod_index not in self.node.product_indices: - # raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - - # # Determine product index. - # prod_index = prod_index or self.node.product_indices[0] # Calculate echelon inventory level. if self.node.is_singleproduct: diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index 3a21078..d4d9519 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -366,7 +366,7 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra If there are multiple predecessors that supply the same raw material, this function will, in general, order all required units of that raw material from a single supplier. The function can be overloaded to - specify an allocation rule. # TODO: Handle this differently? + specify an allocation rule. The method obtains the necessary state variables (typically inventory position, and sometimes others) from ``self.node.network``. The order quantities are set using the @@ -444,8 +444,6 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra # Calculate (local or echelon) inventory position, before demand is subtracted. Exclude from pipeline # RM units that are "earmarked" for other products at this node. if self.type in ('EBS', 'BEBS'): - # TODO: handle this case (for now, just setting pred_index and rm_index to None) - # TODO: handle exclude_earmarked_units IP_before_demand = \ self.node.state_vars_current.echelon_inventory_position(prod_index=product_index, predecessor_index=None, rm_index=None) else: @@ -519,164 +517,6 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra # OQ * self.node.NBOM(product=product_index, predecessor=pred_index, raw_material=rm_index) return OQ_dict - - def _get_order_quantity_old(self, product_index=None, predecessor_index=None, rm_index=None, inventory_position=None, - echelon_inventory_position_adjusted=None): - """Calculate order quantity using the policy type specified in ``type``. - If ``type`` is ``None``, return ``None``. Returns order quantity in the units of the upstream product - (the raw material). - - The method obtains the necessary state variables (typically inventory position, - and sometimes others) from ``self.node.network``. The order quantity is set using the - bill of materials structure for the node/product. - - If the policy's ``node`` attribute is ``None``, assumes that the product and raw material have - a BOM number of 1. - - Order quantity returned is in the units of ``rm_index``, not ``product_index``. For example, if - 4 units of ``rm_index`` are required to make 1 unit of ``product_index``, and if we should increase - the inventory position of ``product_index`` by 5 units, then this function will return 20. - - If ``inventory_position`` (and ``echelon_inventory_position_adjusted``, for - balanced echelon base-stock policies) are provided, they will override the - values indicated by the node's current state variables. This allows the - policy to be queried for an order quantity even if no node/product or network are - provided or have no state variables objects. If ``inventory_position`` - and ``echelon_inventory_position_adjusted`` are ``None`` - (which is the typical use case), the current state variables will be used. - - Parameters - ---------- - product_index : int, optional - The index of the product for which the order quantity should be calculated. - If the node is single-product, either set ``product_index`` to the index of the single product, - or to ``None`` and the function will determine the index automatically. - predecessor_index : int, optional - The index of the predecessor for which the order quantity should be calculated. - Use ``None`` for external supplier, or if node has only one predecessor - (including external supplier). - rm_index : int, optional - The index of the raw material at the predecessor for which the order quantity should be calculated. - Use ``None`` if the predecessor is the external supplier. If the predecessor - has only one product, ``predecessor_product_index`` can be set to ``None`` or to the - index of that product. - inventory_position : float, optional - Inventory position immediately before order is placed (after demand is subtracted). - If provided, the policy will use this IP instead of the IP indicated by the - current state variables. - echelon_inventory_position_adjusted : float, optional - Adjusted echelon inventory position at node i+1, where i is the current node. - If provided, the policy will use this EIPA instead of the EIPA indicated by - current state variables. Used only for balanced echelon base-stock policies. - - Returns - ------- - order_quantity : float - The order quantity. - - Raises - ------ - AttributeError - If the policy's ``node`` attribute (or ``product`` attribute, if ``node`` is multi-product) - is ``None`` and ``inventory_position`` or other required state variables are ``None``. - """ - if self.type is None: - return None - - # Determine network BOM for this product/predecessor/raw material. If it's 0, return 0. - if self.node is None: - # Assume BOM number = 1. - NBOM = 1 - else: - NBOM = self.node.NBOM(product=product_index, predecessor=predecessor_index, raw_material=rm_index) - if NBOM == 0: - return 0 - - # Was inventory_position provided? - if inventory_position is not None: - IP = inventory_position - else: - if self.type == 'FQ': - # Fixed-quantity policy does not need inventory position. - IP = None - else: - # Make sure node attribute is set or inventory_position is provided. - if self.node is None: - raise AttributeError("You must either provide inventory_position or set the node attribute of the Policy object to the node that it refers to. (Usually this should be done when you first create the Policy object.)") - if self.node.is_multiproduct and self.product is None: - raise AttributeError("You must either provide inventory_position or set the product attribute of the Policy object to the product that it refers to (since the node is multi-product). (Usually this shoudl be done when you first creat the Policy object.)") - - # Calculate total demand (inbound orders), including successor nodes and - # external demand. - demand = self.node._get_state_var_total('inbound_order', self.node.network.period, product_index=product_index) - - # Calculate total orders that have already been placed by this node to this supplier for this RM - # in the current time period (for other products at the node that use the same RM). These units - # will be included in IP_before_demand and so must be subtracted before setting the order quantity. - # units_already_ordered = self.node.state_vars_current.order_quantity[predecessor_index][rm_index] - # # Convert to downstream units. - # units_already_ordered /= NBOM - - # TODO: should units_already_ordered and IP_before_demand really happen outside the policy? Policy should maybe just take IP as an input. - - # Determine number of units of this raw material that are already spoken for (via pending_finished_goods) - # for all products at this node. First in units of the raw material: - units_already_ordered = 0 - for prod in self.node.products: - units_already_ordered += \ - self.node.state_vars_current.pending_finished_goods[prod.index] \ - * self.node.NBOM(product=prod.index, predecessor=predecessor_index, raw_material=rm_index) - # Then convert to units of this product: - units_already_ordered /= NBOM - - - # Calculate (local or echelon) inventory position, before demand is subtracted. - if self.type in ('EBS', 'BEBS'): - IP_before_demand = \ - self.node.state_vars_current.echelon_inventory_position(prod_index=product_index, predecessor_index=predecessor_index, rm_index=rm_index) - else: - IP_before_demand = \ - self.node.state_vars_current.inventory_position(prod_index=product_index, predecessor_index=predecessor_index, rm_index=rm_index) - - # Calculate current inventory position, after demand is subtracted. - IP = IP_before_demand - demand - units_already_ordered - - # Determine order quantity based on policy. This order quantity is in units of the product. - if self.type == 'BS': - OQ = self._get_order_quantity_base_stock(IP) - elif self.type == 'sS': - OQ = self._get_order_quantity_s_S(IP) - elif self.type == 'rQ': - OQ = self._get_order_quantity_r_Q(IP) - elif self.type == 'FQ': - OQ = self._get_order_quantity_fixed_quantity() - elif self.type == 'EBS': - OQ = self._get_order_quantity_echelon_base_stock(IP) - elif self.type == 'BEBS': - # Make sure node attribute is set or inventory_position is provided. - if self.node is None and echelon_inventory_position_adjusted is None: - raise AttributeError("You must either provide echelon_inventory_position_adjusted or set the node attribute of the Policy object to the node that it refers to. (Usually this should be done when you first create the Policy object.)") - - # Was EIPA provided? - if echelon_inventory_position_adjusted is not None: - EIPA = echelon_inventory_position_adjusted - else: - # Determine partner node and adjusted echelon inventory position. - if self.node.index == max(self.node.network.node_indices): - EIPA = np.inf - else: - partner_node = self.node.network.get_node_from_index(self.node.index + 1) - EIPA = partner_node.state_vars_current._echelon_inventory_position_adjusted() - - OQ = self._get_order_quantity_balanced_echelon_base_stock(IP, EIPA) - else: - OQ = None - - # Convert to units of the raw material. - if OQ is None: - return None - else: - return OQ * NBOM def _get_order_quantity_base_stock(self, inventory_position): """Calculate order quantity using base-stock policy. diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index a47d730..54bd637 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -385,7 +385,6 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan for prod in node.products: # Get lead times and product index (for convenience). - # TODO: LTs should live with the RM, not the FG. Otherwise, different RMs can't have different LTs. (But this doesn't mean interpret LT as applying to the outbound link instead of the inbound.) order_lead_time = node.get_attribute('order_lead_time', prod) or 0 shipment_lead_time = node.get_attribute('shipment_lead_time', prod) or 0 @@ -821,11 +820,6 @@ def _raw_materials_to_finished_goods(node): """ - # TODO: currently assumes product is infinitely divisble, i.e., if need 2 units of A and 2 of - # B to make the product, and have 1.5 units of A and 2 of B, will make 0.75 units of product. - # Make it an option to choose whether to allow this, or require integer multiples of the BOM number to - # be available, i.e., require integer number of items to be processed. - # Shortcut to period. period = node.network.period @@ -836,7 +830,6 @@ def _raw_materials_to_finished_goods(node): # Shortcut to lead times. Note: This assumes that all products that use this RM have the # same lead times. Currently no way to distinguish among products if they have different lead times. - # TODO: fix this prod = node.products_by_raw_material(rm_index)[0] OLT = node.get_attribute('order_lead_time', prod) or 0 SLT = node.get_attribute('shipment_lead_time', prod) or 0 @@ -855,11 +848,9 @@ def _raw_materials_to_finished_goods(node): # If units_ordered == 0, allocate into equal shares. (This can happen if the original # order was backordered, or if there is initial RM at the start of the simulation.) - # TODO: allocate in a smarter way in this case? if units_ordered == 0: share_frac = {prod_index: 1 / len(prods_for_rm) for prod_index in prods_for_rm} else: - # TODO: what if order_quantity_fg = 0 (e.g., because of backorders)? share_frac = {prod_index: node.state_vars[period - OLT - SLT].order_quantity_fg[prod_index] \ * node.NBOM(product=prod_index, predecessor=None, raw_material=rm_index) \ / units_ordered for prod_index in prods_for_rm} @@ -1078,7 +1069,6 @@ def _propagate_shipment_downstream(node): node in s.raw_material_suppliers_by_raw_material(prod_index, network_BOM=True): # Find a product at successor node that uses prod_index from node as a raw material, # and use its lead time. If there is more than one such product, use the last one found. - # This is a little klugey. # TODO: improve? should LTs be an attribute of the RM, not the product? for FG_index in s.product_indices: if prod_index in s.raw_materials_by_product(product=FG_index, return_indices=True, network_BOM=True) and \ node.index in s.raw_material_suppliers_by_raw_material(raw_material=prod_index, return_indices=True, network_BOM=True): diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index a46cc4b..09c8e2b 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -384,9 +384,6 @@ def from_dict(cls, the_dict): node._products_by_index = {} for prod_ind in prod_indices: node.add_product(network.products_by_index[prod_ind]) - # Replace product attribute in inventory_policy with product object (SupplyChainNode.to_dict() - # stores it as int.) - node # TODO: ??? # Replace dummy-product indices with product objects. if node._dummy_product is not None: node._dummy_product = network.products_by_index[node._dummy_product] @@ -1065,8 +1062,6 @@ def network_from_edges(edges, node_order_in_lists=None, **kwargs): dp.disrupted = data_dict[n.index].get('disrupted') n.disruption_process = dp - # TODO: bill_of_materials - # Supply type. if not n.predecessors(): n.supply_type = 'U' @@ -1289,8 +1284,6 @@ def serial_system(num_nodes, node_order_in_system=None, node_order_in_lists=None if node_order_in_lists is None: node_order_in_lists = node_order_in_system - # TODO: bill_of_materials - # Build network. network = network_from_edges( edges=edges, @@ -1405,8 +1398,6 @@ def owmr_system(num_retailers, node_order_in_system=None, node_order_in_lists=No if node_order_in_lists is None: node_order_in_lists = node_order_in_system - # TODO: bill_of_materials - # Build network. return network_from_edges( edges=edges, @@ -1511,8 +1502,6 @@ def mwor_system(num_warehouses, node_order_in_system=None, node_order_in_lists=N if node_order_in_lists is None: node_order_in_lists = node_order_in_system - # TODO: bill_of_materials - # Build network. return network_from_edges( edges=edges, diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index a42c31e..bcf914d 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -867,66 +867,6 @@ def get_network_bill_of_materials(self, product=None, predecessor=None, raw_mate return self._network_bill_of_materials[prod_ind][pred_ind][rm_ind] -# # TODO: would be better to pre-build this, plus raw_materials, raw_material_suppliers, etc., -# # in SCNode and SCProduct. Rebuild it each time the product or node structure changes. - -# # Get objects and indices for parameters. -# if isinstance(product, SupplyChainProduct): -# prod = product -# prod_ind = product.index -# elif product is None: -# prod = self._dummy_product -# prod_ind = self._dummy_product.index -# else: -# prod = self.network.products_by_index[product] -# prod_ind = product - -# if isinstance(raw_material, SupplyChainProduct): -# # rm = raw_material -# rm_ind = raw_material.index -# else: -# # rm = None if raw_material is None else self.network.products_by_index[raw_material] -# rm_ind = raw_material - -# if isinstance(predecessor, SupplyChainNode): -# pred = predecessor -# pred_ind = predecessor.index -# elif predecessor is None: -# if rm_ind == self._external_supplier_dummy_product.index: -# pred = None -# pred_ind = None -# else: -# # This works for the case in which rm is a dummy product or a regular product. -# pred = self.raw_material_suppliers_by_raw_material(rm_ind, network_BOM=True)[0] -# pred_ind = pred.index if pred is not None else None -# else: -# pred = self.network.get_node_from_index(predecessor) -# pred_ind = predecessor - -# # Validate parameters. -# if prod_ind not in self.product_indices: -# raise ValueError(f'Product {prod_ind} is not a product in node {self.index}.') -# if pred is not None and rm_ind not in pred.product_indices: -# raise ValueError(f'Product {rm_ind} is not a product in node {pred_ind}.') -# if pred_ind not in self.predecessor_indices(include_external=True): -# raise ValueError(f'Node {pred_ind} is not a predecessor of node {self.index}.') - -# # Do any raw materials at predecessor have a BOM relationship with any products at the node? -# found = False -# for prod1 in self.products: -# for prod2 in prod1.raw_materials: -# if prod2 in (pred.products if pred is not None else [self._external_supplier_dummy_product.index]): -# found = True -# break - -# # Were any BOM relationships found? -# if found: -# # Yes--return BOM relationship for this (product, raw material) pair (even if it's 0). -# return prod.BOM(rm_ind) -# else: -# # No--return 1, regardless of the product and raw material. -# return 1 - def NBOM(self, product=None, predecessor=None, raw_material=None): """A shortcut to :func:`~get_network_bill_of_materials`.""" return self.get_network_bill_of_materials(product, predecessor, raw_material) @@ -983,48 +923,9 @@ def raw_materials_by_product(self, product=None, return_indices=False, network_B for pred, rm in self.supplier_raw_material_pairs_by_product(product=prod, \ return_indices=return_indices, network_BOM=network_BOM): rms.add(rm) - # if network_BOM: - # for pred in self.predecessors(include_external=True): - # for rm in pred.products if pred is not None else [self._external_supplier_dummy_product]: - # if self.NBOM(product=prod, predecessor=pred, raw_material=rm) > 0: - # rms.add(rm) - # else: - # rms |= set(prod.raw_materials) return list(rms) - # def raw_material_indices_by_product(self, product_index=None, network_BOM=True): - # """A list of indices of all raw materials required to make product with index ``product_index`` - # at the node, as as |class_prod| objects. If the node is single-product, either set - # ``product_index`` to the index of the single product, or to ``None`` - # and the function will determine the index automatically. Set ``product_index`` to ``'all'`` - # to include all raw materials required to make all products at the node. - - # If ``network_BOM`` is ``True``, includes raw materials that don't have a - # BOM relationship specified but are implied by the network structure. - # (See :func:`get_network_bill_of_materials`.) - - # Parameters - # ---------- - # product_index : int, optional - # The product index, or ``None`` if node is single-product, or ``'all'`` to - # get raw materials for all products. - # network_BOM : bool, optional - # If ``True`` (default), function uses network BOM instead of product-only BOM. - - # Returns - # ------- - # list - # List of indices of all raw materials required to make the product at the node. - - # Raises - # ------ - # ValueError - # If ``product_index`` is not found among the node's products, and it's not the case that ``product_index is None`` and - # this is a single-product node with no |class_product| added. - # """ - # return [rm.index for rm in self.raw_materials_by_product(product=product_index, network_BOM=network_BOM)] - def raw_material_suppliers_by_product(self, product=None, return_indices=False, network_BOM=True): """Return a list of all predecessors from which a raw material must be ordered in order to make ``product`` at this node, according to the bill of materials. @@ -1068,59 +969,9 @@ def raw_material_suppliers_by_product(self, product=None, return_indices=False, for pred, rm in self.supplier_raw_material_pairs_by_product(product=prod_obj, \ return_indices=return_indices, network_BOM=network_BOM): suppliers.add(pred) - - # suppliers = [] - # # Only include external supplier if network_BOM is True. - # for p in self.predecessors(include_external=network_BOM): - # # Determine whether p provides a raw material for the product. - # provides_rm = False - # if p is None: - # provides_rm = True - # else: - # for rm in p.products: - # if (network_BOM and self.NBOM(product=prod, predecessor=p, raw_material=rm) > 0) \ - # or (not network_BOM and prod.BOM(rm.index if rm is not None else None) > 0): - # provides_rm = True - # break - - # # Add p to list if it provides a raw material. - # if provides_rm: - # suppliers.append(p) return list(suppliers) - # def raw_material_supplier_indices_by_product(self, product_index=None, network_BOM=True): - # """Return a list of all indices of predecessors from which a raw material must be ordered in order to - # make ``product_index`` at this node, according to the bill of materials. - # If the node is single-product, either set - # ``product_index`` to the index of the single product, or to ``None`` - # and the function will determine the index automatically. - - # If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a - # BOM relationship specified but are implied by the network structure. - # (See :func:`get_network_bill_of_materials`.) - - # Parameters - # ---------- - # product_index : int, optional - # The product index, or ``None`` if ``predecessor`` is single-product. - # network_BOM : bool, optional - # If ``True`` (default), function uses network BOM instead of product-only BOM. - - # Returns - # ------- - # list - # List of all indices of predecessors from which a raw material must be ordered in order to - # make ``product_index`` at this node, according to the bill of materials. - - # Raises - # ------ - # ValueError - # If ``product_index`` is not found among the node's products, and it's not the case that this is a single-product - # node with no |class_product| added. - # """ - # return [(s.index if s is not None else None) for s in self.raw_material_suppliers_by_product(product_index=product_index, network_BOM=network_BOM)] - def raw_material_suppliers_by_raw_material(self, raw_material=None, return_indices=False, network_BOM=True): """Return a list of all predecessors that supply the node with ``raw_material``. Every predecessor that _can_ supply the raw material, including @@ -1172,44 +1023,6 @@ def raw_material_suppliers_by_raw_material(self, raw_material=None, return_indic return list(suppliers) - # def raw_material_supplier_indices_by_raw_material(self, rm_index=None, network_BOM=True): - # """Return a list of indices of all predecessors that supply the node with the raw material - # with index ``rm_index``. Every predecessor that _can_ supply the raw material, including - # the external supplier, is included in the list, regardless of whether the BOM - # requires it, and regardless of whether the node actually orders the raw material - # from the supplier. - - # If the node has only a single raw material that is required according to its - # BOM, ``rm_index`` can be set to the index of that raw material, or to ``None`` and - # the function will determine the index automatically. - - # If ``network_BOM`` is ``True``, includes raw material suppliers that don't have a - # BOM relationship specified but are implied by the network structure. - # (See :func:`get_network_bill_of_materials`.) - - # Parameters - # ---------- - # rm_index : int, optional - # The raw material index, or ``None`` if the node requires a single raw material. - # network_BOM : bool, optional - # If ``True`` (default), function uses network BOM instead of product-only BOM. - - # Returns - # ------- - # list - # List of indicies of all predecessors that can supply the node - # with the raw material with index ``rm_index``, according to the bill of materials, - # including ``None`` for the external supplier, if appropriate. - - # Raises - # ------ - # ValueError - # If ``rm_index`` is not found among the node's raw materials (and is not ``None``). - # ValueError - # If ``rm_index is None`` and the node requires more than one raw material. - # """ - # return [(s.index if s is not None else None) for s in self.raw_material_suppliers_by_raw_material(rm_index=rm_index, network_BOM=network_BOM)] - def products_by_raw_material(self, raw_material=None, return_indices=False, network_BOM=True): """Return a list of all products that use ``raw_material`` at the node. If the node has a single raw material (either dummy or real), either set @@ -1255,30 +1068,6 @@ def products_by_raw_material(self, raw_material=None, return_indices=False, netw else: return list(prods) - # def product_indices_by_raw_material(self, rm_index=None): - # """A list of indices of all products that use raw material with index ``rm_index`` at the node, - # as as |class_prod| objects. If the node has a single raw material (either dummy or real), either set - # ``rm_index`` to the index of the single raw material, or to ``None`` and the function - # will determine the index automatically. - - # Parameters - # ---------- - # rm_index : int, optional - # The raw material index, or ``None`` if the node has a single raw material. - - # Returns - # ------- - # list - # List of indices of all products that use the raw material at the node. - - # Raises - # ------ - # ValueError - # If ``rm_index`` is not found among the node's raw materials, and it's not the case that ``rm_index is None`` and - # this node has a single raw material. - # """ - # return [prod.index for prod in self.products_by_raw_material(rm_index=rm_index)] - def supplier_raw_material_pairs_by_product(self, product=None, return_indices=False, network_BOM=True): """A set of all predecessors and raw materials for ``product``, as tuples ``(pred, rm)``. Set ``product`` to ``'all'`` to get predecessors and raw materials for all products at the node. diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 5cd81ee..431dd60 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -94,8 +94,6 @@ class SupplyChainProduct(object): by a |class_node| that handles the product. TODO: update? - TODO: note that GSM and SSM modules can't handle multi-product; only sim. - Attributes ---------- index : int @@ -143,7 +141,6 @@ class SupplyChainProduct(object): Initial inbound shipment quantity. inventory_policy : |class_policy| Inventory policy to be used to make inventory decisions. - TODO: decide whether disruptions are at node or product level supply_type : str Supply type , as a string. Currently supported strings are: @@ -356,7 +353,6 @@ def handling_nodes(self): """A list of all nodes in the network that handle this product, as |class_node| objects. Read only. """ - # TODO: unit tests return [node for node in self.network.nodes if self in node.products] @property @@ -389,9 +385,11 @@ def inventory_policy(self): @inventory_policy.setter def inventory_policy(self, value): - # Set _inventory_policy, and also set _inventory_policy's product + # Set _inventory_policy, and also set _inventory_policy's product. + # Note that _inventory_policy.node cannot be set here, because we don't know the node from + # within the product. self._inventory_policy = value - # TODO: handle setting product and node attributes + self._inventory_policy.product_index = self.index # Special methods. diff --git a/tests/test_demand_source.py b/tests/test_demand_source.py index 99809ac..6da2a32 100644 --- a/tests/test_demand_source.py +++ b/tests/test_demand_source.py @@ -558,7 +558,6 @@ def test_normal(self): demand_source.standard_deviation = -100 with self.assertRaises(AttributeError): demand_source.validate_parameters() - # TODO: if mean is not set, mean property calls demand_distribution property which calls mean property... def test_poisson(self): """Test that TestValidateParameters correctly raises errors on invalid parameters diff --git a/tests/test_gsm_tree.py b/tests/test_gsm_tree.py index eba51ec..ed70630 100644 --- a/tests/test_gsm_tree.py +++ b/tests/test_gsm_tree.py @@ -1939,4 +1939,19 @@ def test_single_stage_instance(self): gsm_tree.optimize_committed_service_times(tree) self.assertAlmostEqual(opt_cost, 2) - self.assertDictEqual(opt_cst, {1: 0}) \ No newline at end of file + self.assertDictEqual(opt_cst, {1: 0}) + + def test_bad_params(self): + """Test that optimize_committed_service_times() correctly raises errors on bad parameters.""" + + print_status('TestOptimizeCommittedServiceTimes', 'test_bad_params') + + tree = load_instance("problem_6_9") + tree.get_node_from_index(1).demand_source.mean = None + with self.assertRaises(ValueError): + gsm_tree.optimize_committed_service_times(tree) + + tree = load_instance("problem_6_9") + tree.get_node_from_index(2).demand_source.standard_deviation = None + with self.assertRaises(ValueError): + gsm_tree.optimize_committed_service_times(tree) From d687ede3e95c8691aac53dfbb7b0e5b799172f80 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 10 May 2024 11:57:43 -0400 Subject: [PATCH 58/94] Clean up some todo's. All tests (including usually-skipped ones) pass. --- src/stockpyl/finite_horizon.py | 21 +-------------------- src/stockpyl/supply_chain_product.py | 3 ++- tests/test_supply_chain_network.py | 5 ++--- 3 files changed, 5 insertions(+), 24 deletions(-) diff --git a/src/stockpyl/finite_horizon.py b/src/stockpyl/finite_horizon.py index 3969419..648b2b9 100644 --- a/src/stockpyl/finite_horizon.py +++ b/src/stockpyl/finite_horizon.py @@ -385,12 +385,6 @@ def finite_horizon_dp( # - to get index from x value, use x - x_min # Example: x_range = 10:20; then x_range[3] = 13 and 13 - x_min = 3. - # Pre-calculate standard normal loss function values. - # TODO: deal with this - min_z, max_z, step_z = -4, 4, 0.01 - loss_table = lf.standard_normal_loss_dict(start=min_z, stop=max_z, step=step_z) - comp_table = lf.standard_normal_loss_dict(start=min_z, stop=max_z, step=step_z, complementary=True) - # Start with initial truncation range; abort, expand, and re-try if necessary. done = False while not done: @@ -433,21 +427,8 @@ def finite_horizon_dp( # Initialize cost. cost = 0.0 -# TODO: this needs to be an option; and add tests for it # Calculate n(y) and \bar{n}(y). - if False: - z = (y - demand_mean[t]) / demand_sd[t] - if z < min_z: - n = demand_mean[t] - y - n_bar = 0 - elif z > max_z: - n = 0 - n_bar = y - demand_mean[t] - else: - n = nearest_dict_value(z, loss_table) * demand_sd[t] - n_bar = nearest_dict_value(z, comp_table) * demand_sd[t] - else: - n, n_bar = lf.normal_loss(y, demand_mean[t], demand_sd[t]) + n, n_bar = lf.normal_loss(y, demand_mean[t], demand_sd[t]) # Calculate current-period (newsvendor) cost. cost += holding_cost[t] * n_bar + stockout_cost[t] * n diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 431dd60..448de61 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -389,7 +389,8 @@ def inventory_policy(self, value): # Note that _inventory_policy.node cannot be set here, because we don't know the node from # within the product. self._inventory_policy = value - self._inventory_policy.product_index = self.index + if self._inventory_policy: + self._inventory_policy.product_index = self.index # Special methods. diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index 4a2de02..af6adb1 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -1523,7 +1523,6 @@ def test_single_node(self): ) self.assertTrue(network.deep_equal_to(correct_network)) - @unittest.skipUnless(RUN_ALL_TESTS, "TestNetworkFromEdges.test_list_params skipped because test fails for now; to un-skip, set RUN_ALL_TESTS to True in tests/settings.py") def test_list_params(self): """Test that network_from_edges() correctly builds the network defined in get_correct_network() when built using all lists. @@ -1540,8 +1539,8 @@ def test_list_params(self): demand_list=[0, 1, 2, 3], probabilities=[0.25, 0.25, 0.4, 0.1] ) - correct_network.get_node_from_index(3).demand_source = DemandSource(type='CD') - correct_network.get_node_from_index(4).demand_source = DemandSource(type='CD') + correct_network.get_node_from_index(3).demand_source = DemandSource(type=None) + correct_network.get_node_from_index(4).demand_source = DemandSource(type=None) network = network_from_edges( edges=[(3, 1), (3, 2), (4, 1)], From 89e34bde28bcd9c47d4af9b95663896551ddb442 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 10 May 2024 13:19:50 -0400 Subject: [PATCH 59/94] Minor tweak in sim --- src/stockpyl/sim.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 54bd637..d9a5c12 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -541,9 +541,6 @@ def _initialize_state_vars(network): # State variables indexed by product at predecessor nodes. for rm_index in n.raw_materials_by_product('all', return_indices=True, network_BOM=True): for p_index in n.raw_material_suppliers_by_raw_material(raw_material=rm_index, return_indices=True, network_BOM=True): - # for p in n.predecessors(include_external=True): - # p_index = p.index if p is not None else None - # for rm_index in p.product_indices if p is not None else [n._external_supplier_dummy_product.index]: # Initialize inbound shipment pipeline and on-order quantities. for l in range(n.shipment_lead_time or 0): From 4037beca6b8f2b6f6913481c4d5bfd08ab096b49 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 10 May 2024 15:29:34 -0400 Subject: [PATCH 60/94] Fixed some stuff with #161, still some bugs in GSM stuff --- src/stockpyl/node_state_vars.py | 22 ++++--- src/stockpyl/policy.py | 2 +- src/stockpyl/sim.py | 4 +- src/stockpyl/supply_chain_network.py | 18 +++--- src/stockpyl/supply_chain_node.py | 87 +++++++++++++++------------- src/stockpyl/supply_chain_product.py | 62 +++++++++++--------- 6 files changed, 102 insertions(+), 93 deletions(-) diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index e8afd0d..5ae43c1 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -158,9 +158,7 @@ def __init__(self, node=None, period=None): if node: # Build some shortcuts. - p_indices = {p: p.index if p is not None else None for p in self.node.predecessors(include_external=True)} - s_indices = {s: s.index if s is not None else None for s in self.node.successors(include_external=True)} - rm_indices = {p: (p.product_indices if p is not None else [node._external_supplier_dummy_product.index]) \ + rm_indices = {p.index if p else None: (p.product_indices if p else [node._external_supplier_dummy_product.index]) \ for p in self.node.predecessors(include_external=True)} # Initialize dicts with appropriate keys. (inbound_shipment_pipeline gets @@ -179,20 +177,20 @@ def __init__(self, node=None, period=None): order_lead_time = (self.node.get_attribute('order_lead_time', product=prod_index) or 0) shipment_lead_time = (self.node.get_attribute('shipment_lead_time', product=prod_index) or 0) self.inbound_shipment_pipeline[p_index][rm_index] = [0] * (order_lead_time + shipment_lead_time + 1) - self.inbound_shipment = {p_indices[p]: - {prod_index: 0 for prod_index in rm_indices[p]} + self.inbound_shipment = {p.index if p else None: + {prod_index: 0 for prod_index in rm_indices[p.index if p else None]} for p in self.node.predecessors(include_external=True)} - self.inbound_order = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.outbound_shipment = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.on_order_by_predecessor = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} + self.inbound_order = {s.index if s else None: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} + self.outbound_shipment = {s.index if s else None: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} + self.on_order_by_predecessor = {p.index if p else None: {prod_index: 0 for prod_index in rm_indices[p.index if p else None]} for p in self.node.predecessors(include_external=True)} - self.backorders_by_successor = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} + self.backorders_by_successor = {s.index if s else None: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.outbound_disrupted_items = {s_indices[s]: {prod_index: 0 for prod_index in node.product_indices} + self.outbound_disrupted_items = {s.index if s else None: {prod_index: 0 for prod_index in node.product_indices} for s in self.node.successors(include_external=True)} - self.inbound_disrupted_items = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} + self.inbound_disrupted_items = {p.index if p else None: {prod_index: 0 for prod_index in rm_indices[p.index if p else None]} for p in self.node.predecessors(include_external=True)} - self.order_quantity = {p_indices[p]: {prod_index: 0 for prod_index in rm_indices[p]} + self.order_quantity = {p.index if p else None: {prod_index: 0 for prod_index in rm_indices[p.index if p else None]} for p in self.node.predecessors(include_external=True)} self.raw_material_inventory = {prod_index: 0 for prod_index \ in self.node.raw_materials_by_product(product='all', return_indices=True, network_BOM=True)} diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index d4d9519..ecf94ef 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -439,7 +439,7 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra # Calculate total demand (inbound orders), including successor nodes and # external demand, in FG units. - demand = self.node._get_state_var_total('inbound_order', self.node.network.period, product_index=product_index) + demand = self.node._get_state_var_total('inbound_order', self.node.network.period, product=product_index) # Calculate (local or echelon) inventory position, before demand is subtracted. Exclude from pipeline # RM units that are "earmarked" for other products at this node. diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index d9a5c12..3bed0c6 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -694,7 +694,7 @@ def _calculate_period_costs(network, period): for prod_index in n.product_indices: # Finished goods holding cost. items_held = max(0, n.state_vars[period].inventory_level[prod_index]) + \ - n._get_state_var_total('outbound_disrupted_items', period, product_index=prod_index) + n._get_state_var_total('outbound_disrupted_items', period, product=prod_index) try: n.state_vars[period].holding_cost_incurred += n.get_attribute('local_holding_cost_function', prod_index)(items_held) except TypeError: @@ -926,7 +926,7 @@ def _process_outbound_shipments(node, starting_inventory_level, new_finished_goo global issued_backorder_warning if consistency_checks in ('W', 'WF', 'E', 'EF') and not issued_backorder_warning: # Double-check BO calculations. - current_backorders_check = node._get_state_var_total('backorders_by_successor', node.network.period, product_index=prod_index) + current_backorders_check = node._get_state_var_total('backorders_by_successor', node.network.period, product=prod_index) if not np.isclose(current_backorders, current_backorders_check): if consistency_checks in ('WF', 'EF'): # Write instance and simulation data to file. diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index 09c8e2b..b43c230 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -124,12 +124,6 @@ def products(self): that are handled by the nodes in the network. Read only. """ return self._products - # product_set = set(self._local_products) - # for node in self.nodes: - # product_set |= set(node.products) - # if node._external_supplier_dummy_product is not None: - # product_set |= {node._external_supplier_dummy_product} - # return list(product_set) @property def product_indices(self): @@ -138,7 +132,6 @@ def product_indices(self): that are handled by the nodes in the network. Read only. """ return self._product_indices - # return [prod.index for prod in self.products] @property def products_by_index(self): @@ -681,12 +674,15 @@ def _build_product_attributes(self): """ if not self._currently_building: # Build _products and _product_indices. - product_set = set(self._local_products) + products = self._local_products for node in self.nodes: - product_set |= set(node.products) + for prod in node.products: + if prod not in products: + products.append(prod) if node._external_supplier_dummy_product is not None: - product_set |= {node._external_supplier_dummy_product} - self._products = list(product_set) + if node._external_supplier_dummy_product not in products: + products.append(node._external_supplier_dummy_product) + self._products = products self._product_indices = [prod.index for prod in self._products] # Build _products_by_index. Include all products in network (including in nodes). diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index bcf914d..646323c 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -403,7 +403,10 @@ def neighbors(self): """A list of all neighbors (successors and predecessors) of the node, as |class_node| objects. Read only. """ - return list(set(self.successors()).union(set(self.predecessors()))) + neighbors = self.successors() + neighbors.extend(self.predecessors()) # this assumes no predecessor can also be a successor + + return neighbors @property def neighbor_indices(self): @@ -613,7 +616,7 @@ def _build_supplier_raw_material_pairs(self): pairs_NBOM = set() for pred in self.predecessors(include_external=True): for rm in pred.products if pred is not None else [self._external_supplier_dummy_product]: - if prod.BOM(rm_index=rm.index) > 0: + if prod.BOM(raw_material=rm.index) > 0: pairs_BOM.add((pred.index if pred else None, rm.index)) if self.NBOM(product=prod, predecessor=pred, raw_material=rm) > 0: pairs_NBOM.add((pred.index if pred else None, rm.index)) @@ -918,13 +921,13 @@ def raw_materials_by_product(self, product=None, return_indices=False, network_B else: products = [prod_obj] - rms = set() + rms = [] for prod in products: - for pred, rm in self.supplier_raw_material_pairs_by_product(product=prod, \ + for _, rm in self.supplier_raw_material_pairs_by_product(product=prod, \ return_indices=return_indices, network_BOM=network_BOM): - rms.add(rm) + rms.append(rm) - return list(rms) + return rms def raw_material_suppliers_by_product(self, product=None, return_indices=False, network_BOM=True): """Return a list of all predecessors from which a raw material must be ordered in order to @@ -965,12 +968,12 @@ def raw_material_suppliers_by_product(self, product=None, return_indices=False, # Validate parameters. prod_obj, _ = self.validate_product(product) - suppliers = set() + suppliers = [] for pred, rm in self.supplier_raw_material_pairs_by_product(product=prod_obj, \ return_indices=return_indices, network_BOM=network_BOM): - suppliers.add(pred) + suppliers.append(pred) - return list(suppliers) + return suppliers def raw_material_suppliers_by_raw_material(self, raw_material=None, return_indices=False, network_BOM=True): """Return a list of all predecessors that supply the node with ``raw_material``. @@ -1012,16 +1015,16 @@ def raw_material_suppliers_by_raw_material(self, raw_material=None, return_indic # Validate parameters. rm_obj, _ = self.validate_raw_material(raw_material, network_BOM=network_BOM) - suppliers = set() + suppliers = [] for pred, rm in self.supplier_raw_material_pairs_by_product(product='all', return_indices=False, network_BOM=network_BOM): if rm == rm_obj: if return_indices: - suppliers.add(pred.index if pred is not None else None) + suppliers.append(pred.index if pred is not None else None) else: - suppliers.add(pred) + suppliers.append(pred) - return list(suppliers) + return suppliers def products_by_raw_material(self, raw_material=None, return_indices=False, network_BOM=True): """Return a list of all products that use ``raw_material`` at the node. @@ -1054,28 +1057,29 @@ def products_by_raw_material(self, raw_material=None, return_indices=False, netw _, rm_ind = self.validate_raw_material(raw_material, network_BOM=network_BOM) if network_BOM: - prods = set() + prods = [] for prod in self.products: for pred in self.raw_material_suppliers_by_raw_material(rm_ind, return_indices=False, network_BOM=True): if self.NBOM(product=prod, predecessor=pred, raw_material=rm_ind) > 0: - prods.add(prod) + prods.append(prod) # [prod for prod in self.products if self.NBOM(product=prod, predecessor=None, raw_material=rm_ind) > 0] else: - prods = {prod for prod in self.products if prod.BOM(rm_index=rm_ind) > 0} + prods = [prod for prod in self.products if prod.BOM(raw_material=rm_ind) > 0] if return_indices: return [prod.index for prod in prods] else: - return list(prods) + return prods def supplier_raw_material_pairs_by_product(self, product=None, return_indices=False, network_BOM=True): - """A set of all predecessors and raw materials for ``product``, as tuples ``(pred, rm)``. + """A set or list (see below) of all predecessors and raw materials for ``product``, as tuples ``(pred, rm)``. Set ``product`` to ``'all'`` to get predecessors and raw materials for all products at the node. If the node has a single product (either dummy or real), either set ``product`` to the single product, or to ``None`` and the function will determine it automatically. - If ``return_indices`` is ``False``, returns the predecessors as |class_node| objects (or ``None`` for the - external supplier) and the products as |class_product| objects, otherwise returns predecessor and product indices. + If ``return_indices`` is ``False``, returns a list, with the predecessors as |class_node| objects (or ``None`` for the + external supplier) and the products as |class_product| objects. Otherwise, returns a set, with + the predecessor and product indices. If ``network_BOM`` is ``True``, includes predecessors and raw materials that don't have a BOM relationship specified but are implied by the network structure. @@ -1093,8 +1097,9 @@ def supplier_raw_material_pairs_by_product(self, product=None, return_indices=Fa Returns ------- - set - Set of (predecessor, raw material) tuples. + set or list + Set (if ``return_indices`` is ``True`` or list (if ``return_indices`` is ``False``) + of (predecessor, raw material) tuples. Raises ------ @@ -1133,7 +1138,7 @@ def supplier_raw_material_pairs_by_product(self, product=None, return_indices=Fa # Convert indices to objects, if requested. if not return_indices: - pairs = {(self.network.get_node_from_index(pred_ind), self.network.products_by_index[rm_ind]) for pred_ind, rm_ind in pairs} + pairs = [(self.network.get_node_from_index(pred_ind), self.network.products_by_index[rm_ind]) for pred_ind, rm_ind in pairs] return pairs @@ -1403,12 +1408,12 @@ def __ne__(self, other): """ return not self.__eq__(other) - def __hash__(self): - """ - Return the hash for the node, which equals its index. + # def __hash__(self): + # """ + # Return the hash for the node, which equals its index. - """ - return self.index + # """ + # return self.index def __repr__(self): """ @@ -1919,7 +1924,7 @@ def get_attribute(self, attr, product=None): else: return self_attr - def _get_state_var_total(self, attribute, period, product_index=None, include_external=True): + def _get_state_var_total(self, attribute, period, product=None, include_external=True): """Return total (over all successors/predecessors) of ``attribute`` in the node's ``state_vars`` for the period and product specified, for an attribute that is indexed by successor or predecessor, i.e., @@ -1963,30 +1968,32 @@ def _get_state_var_total(self, attribute, period, product_index=None, include_ex If ``product_index is None`` and the node is not single-product. """ - if product_index is None and self.is_multiproduct: - raise ValueError('product_index cannot be None for multi-product nodes.') + _, prod_ind = self.validate_product(product) + + # if product_index is None and self.is_multiproduct: + # raise ValueError('product_index cannot be None for multi-product nodes.') - # Reset product_index to index of (possibly dummy) product if this is a single-product node. - if product_index is None: - product_index = self.product_indices[0] + # # Reset product_index to index of (possibly dummy) product if this is a single-product node. + # if product_index is None: + # product_index = self.product_indices[0] if attribute in ('inbound_shipment', 'on_order_by_predecessor', 'raw_material_inventory', 'inbound_disrupted_items'): # These attributes are indexed by predecessor. if period is None: - return float(np.sum([self.state_vars[t].__dict__[attribute][p_index][product_index] + return float(np.sum([self.state_vars[t].__dict__[attribute][p_index][prod_ind] for t in range(len(self.state_vars)) for p_index in self.predecessor_indices(include_external=include_external)])) else: - return float(np.sum([self.state_vars[period].__dict__[attribute][p_index][product_index] + return float(np.sum([self.state_vars[period].__dict__[attribute][p_index][prod_ind] for p_index in self.predecessor_indices(include_external=include_external)])) elif attribute in ('inbound_order', 'outbound_shipment', 'backorders_by_successor', 'outbound_disrupted_items'): # These attributes are indexed by successor. if period is None: - return float(np.sum([self.state_vars[t].__dict__[attribute][s_index][product_index] + return float(np.sum([self.state_vars[t].__dict__[attribute][s_index][prod_ind] for t in range(len(self.state_vars)) for s_index in self.successor_indices(include_external=include_external)])) else: - return float(np.sum([self.state_vars[period].__dict__[attribute][s_index][product_index] + return float(np.sum([self.state_vars[period].__dict__[attribute][s_index][prod_ind] for s_index in self.successor_indices(include_external=include_external)])) elif attribute in ('disrupted', 'holding_cost_incurred', 'stockout_cost_incurred', 'in_transit_holding_cost_incurred', 'revenue_earned', 'total_cost_incurred'): @@ -1997,9 +2004,9 @@ def _get_state_var_total(self, attribute, period, product_index=None, include_ex return self.state_vars[period].__dict__[attribute] else: if period is None: - return np.sum([self.state_vars[:].__dict__[attribute][product_index]]) + return np.sum([self.state_vars[:].__dict__[attribute][prod_ind]]) else: - return self.state_vars[period].__dict__[attribute][product_index] + return self.state_vars[period].__dict__[attribute][prod_ind] def reindex_all_state_variables(self, old_to_new_dict, old_to_new_prod_dict): """Change indices of all node-based keys in all state variables using ``old_to_new_dict`` diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 448de61..136440d 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -243,80 +243,88 @@ def index(self, value): # Properties and functions related to bill of materials. - def set_bill_of_materials(self, rm_index, num_needed=1.0): - """Specify that ``num_needed`` units of raw material product ``rm_index`` are required in order + def set_bill_of_materials(self, raw_material, num_needed=1.0): + """Specify that ``num_needed`` units of ``raw_material`` are required in order to make one unit of this product. To remove a BOM relationship, call this function again, setting ``num_needed = 0`` or ``num_needed = None``. If ``num_needed = 0`` or ``None`` and a BOM relationship does not already exist for the specified product and raw material, does nothing. - Raises an exception if the product's index or ``rm_index`` is negative. (Negative indices are reserved for + Raises an exception if the product's index or ``raw_material`` (or its index) is negative. (Negative indices are reserved for "dummy products" established by a simulation, and such products always have a BOM number of 1 with every other product.) Parameters ---------- - rm_index : int - Index of raw material product. + raw_material : |class_product| or int + The raw material product. num_needed : float, optional The number of units required, by default 1.0. Set to 0 or ``None`` to remove the BOM relationship. Raises ------ ValueError - If ``self.index is None`` or ``rm_index is None``. + If ``self.index is None`` or ``raw_material is None``. """ + if self.network is not None: + _, rm_ind = self.network.parse_product(raw_material) + elif is_integer(raw_material): + rm_ind = raw_material + elif raw_material is None: + rm_ind = None + else: + rm_ind = raw_material.index - if self.index < 0 or rm_index < 0: + if self.index < 0 or rm_ind < 0: raise ValueError('You cannot set the BOM for dummy products (products with index < 0).') # Are we adding a BOM relationship? if num_needed: - # Set self._bill_of_materials[rm_index]. - self._bill_of_materials[rm_index] = num_needed + # Set self._bill_of_materials[rm_ind]. + self._bill_of_materials[rm_ind] = num_needed else: # We are removing a BOM relationship. - self._bill_of_materials.pop(rm_index, None) + self._bill_of_materials.pop(rm_ind, None) # Rebuild product info throughout network. if self.network: self.network._build_product_attributes() - def get_bill_of_materials(self, rm_index): - """Return the number of units of raw material product ``rm_index`` that are required in order - to make one unit of this product. Returns 0 if there is no BOM relationship for this product and ``rm_index``. + def get_bill_of_materials(self, raw_material): + """Return the number of units of ``raw_material`` that are required in order + to make one unit of this product. Returns 0 if there is no BOM relationship for this + product and ``raw_material``. :func:`BOM` is a shortcut to this function. Parameters ---------- - rm_index : int - Index of raw material product. + raw_material : |class_product| or int + The raw material product. Returns ------- int The BOM number for the (raw material, product) pair. """ - # if self.index < 0 or rm_index < 0: - # return 1 - try: + _, rm_ind = self.network.parse_product(raw_material) + # Return BOM number, if BOM entry exists. - return self._bill_of_materials[rm_index] + return self._bill_of_materials[rm_ind] except: # No BOM relationship exists; return 0. return 0 - def BOM(self, rm_index): + def BOM(self, raw_material): """A shortcut to :func:`~get_bill_of_materials`.""" - return self.get_bill_of_materials(rm_index) + return self.get_bill_of_materials(raw_material) @property def bill_of_materials_dict(self): """A dict containing all non-zero bill-of-materials relationships for this product. - ``bill_of_materials_dict[rm_index]`` is the number of units of raw material ``rm_index`` + ``bill_of_materials_dict[rm]`` is the number of units of raw material ``rm`` required to make one unit of this product. It is normally easier to access the bill of materials using :func:`get_bill_of_materials` @@ -429,12 +437,12 @@ def __ne__(self, other): """ return not self.__eq__(other) - def __hash__(self): - """ - Return the hash for the product, which equals its index, or -1 if its index is ``None``. + # def __hash__(self): + # """ + # Return the hash for the product, which equals its index, or -1 if its index is ``None``. - """ - return self.index or -1 + # """ + # return self.index or -1 def __repr__(self): """ From a1e883ce83693618527e53a30b6aec8bc63c7972 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Fri, 10 May 2024 16:03:58 -0400 Subject: [PATCH 61/94] Bug fix in gsm_tree --- src/stockpyl/gsm_tree.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stockpyl/gsm_tree.py b/src/stockpyl/gsm_tree.py index 1323c60..8cc6a79 100644 --- a/src/stockpyl/gsm_tree.py +++ b/src/stockpyl/gsm_tree.py @@ -766,8 +766,8 @@ def is_correctly_labeled(tree): for k in tree.nodes: if k.index < np.max(ind): greater_indexed_neighbors = \ - {i for i in k.predecessors() if i.index > k.index}.union( - {i for i in k.successors() if i.index > k.index} + {i_ind for i_ind in k.predecessor_indices() if i_ind > k.index}.union( + {i_ind for i_ind in k.successor_indices() if i_ind > k.index} ) if len(greater_indexed_neighbors) != 1: is_correct = False From b07613985813508fc72c462a0b07676abe0e86b0 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 11 May 2024 08:12:53 -0400 Subject: [PATCH 62/94] #161 and lots of bug fixes --- src/stockpyl/datasets/stockpyl_instances.json | 19966 +--------------- src/stockpyl/helpers.py | 36 + src/stockpyl/sim.py | 14 +- src/stockpyl/supply_chain_network.py | 69 +- src/stockpyl/supply_chain_node.py | 37 +- src/stockpyl/supply_chain_product.py | 20 +- .../test_demand_source_TestFromDict_data.json | 973 +- ..._disruption_process_TestFromDict_data.json | 2 +- ..._TestSaveInstance_example_4_2_correct.json | 2 +- ..._TestSaveInstance_example_6_1_correct.json | 2 +- ...ample_6_1_with_order_capacity_correct.json | 2 +- ..._TestSaveInstance_example_9_5_correct.json | 2 +- ..._TestSaveInstance_figure_6_14_correct.json | 2 +- ...nstance_omit_state_vars_false_correct.json | 2 +- ...omit_state_vars_false_rosling_correct.json | 2 +- ...Instance_omit_state_vars_true_correct.json | 2 +- .../test_multiproduct_5_7.json | 2 +- .../test_policy_TestFromDict_data.json | 2 +- ...ply_chain_network_TestToFromDict_data.json | 2 +- ...ly_chain_node_TestNodeToFromDict_data.json | 2 +- tests/test_helpers.py | 51 + tests/test_sim.py | 30 +- tests/test_supply_chain_network.py | 8 +- tests/test_supply_chain_node.py | 685 +- 24 files changed, 552 insertions(+), 21363 deletions(-) diff --git a/src/stockpyl/datasets/stockpyl_instances.json b/src/stockpyl/datasets/stockpyl_instances.json index 9462da6..e7cf596 100644 --- a/src/stockpyl/datasets/stockpyl_instances.json +++ b/src/stockpyl/datasets/stockpyl_instances.json @@ -1,19965 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "example_3_1", - "description": "Example 3.1 (EOQ)", - "data": { - "fixed_cost": 8, - "holding_cost": 0.225, - "demand_rate": 1300 - }, - "type": "dict" - }, - { - "name": "problem_3_1", - "description": "Problem 3.1 (EOQ)", - "data": { - "fixed_cost": 2250, - "holding_cost": 275, - "demand_rate": 182500 - }, - "type": "dict" - }, - { - "name": "example_3_8", - "description": "Example 3.8 (EOQB)", - "data": { - "fixed_cost": 8, - "holding_cost": 0.225, - "stockout_cost": 5, - "demand_rate": 1300 - }, - "type": "dict" - }, - { - "name": "problem_3_2b", - "description": "Problem 3.2(b) (EOQB)", - "data": { - "fixed_cost": 40, - "holding_cost": 40.05, - "stockout_cost": 60, - "demand_rate": 2080 - }, - "type": "dict" - }, - { - "name": "problem_3_22", - "description": "Problem 3.22 (EPQ)", - "data": { - "fixed_cost": 4, - "holding_cost": 0.08, - "demand_rate": 80, - "production_rate": 110 - }, - "type": "dict" - }, - { - "name": "example_3_9", - "description": "Example 3.9 (Wagner-Whitin)", - "data": { - "num_periods": 4, - "holding_cost": 2, - "fixed_cost": 500, - "demand": [ - 90, - 120, - 80, - 70 - ] - }, - "type": "dict" - }, - { - "name": "problem_3_27", - "description": "Problem 3.27 (Wagner-Whitin)", - "data": { - "num_periods": 4, - "holding_cost": 0.8, - "fixed_cost": 120, - "demand": [ - 150, - 100, - 80, - 200 - ] - }, - "type": "dict" - }, - { - "name": "problem_3_29", - "description": "Problem 3.29 (Wagner-Whitin)", - "data": { - "num_periods": 5, - "holding_cost": 0.1, - "fixed_cost": 100, - "demand": [ - 730, - 580, - 445, - 650, - 880 - ] - }, - "type": "dict" - }, - { - "name": "scmo_ww_hw_c", - "description": "SCMO (Wagner-Whitin with nonstationary purchase cost)", - "data": { - "num_periods": 5, - "holding_cost": 0.1, - "fixed_cost": 100, - "demand": [ - 400, - 500, - 500, - 1100, - 900 - ], - "purchase_cost": [ - 3, - 1, - 4, - 6, - 6 - ] - }, - "type": "dict" - }, - { - "name": "scmo_jrp_ex", - "description": "SCMO (JRP example)", - "data": { - "shared_fixed_cost": 600, - "individual_fixed_costs": [ - 120, - 840, - 300 - ], - "holding_costs": [ - 160, - 20, - 50 - ], - "demand_rates": [ - 1, - 1, - 1 - ] - }, - "type": "dict" - }, - { - "name": "spp_jrp", - "description": "Numerical JRP example on p. 428 of Silver, Pyke, and Peterson (1998)", - "data": { - "shared_fixed_cost": 40, - "individual_fixed_costs": [ - 15, - 15, - 15, - 15 - ], - "holding_costs": [ - 0.24, - 0.24, - 0.24, - 0.24 - ], - "demand_rates": [ - 86000, - 12500, - 1400, - 3000 - ] - }, - "type": "dict" - }, - { - "name": "silver_jrp", - "description": "Numerical JRP example in Silver (1976)", - "data": { - "shared_fixed_cost": 10, - "individual_fixed_costs": [ - 1.87, - 5.27, - 7.94, - 8.19, - 8.87 - ], - "holding_costs": [ - 0.2, - 0.2, - 0.2, - 0.2, - 0.2 - ], - "demand_rates": [ - 1736, - 656, - 558, - 170, - 142 - ] - }, - "type": "dict" - }, - { - "name": "scmo_jrp_hw_1", - "description": "SCMO (JRP problem 1)", - "data": { - "shared_fixed_cost": 20000, - "individual_fixed_costs": [ - 36000, - 46000, - 34000, - 38000 - ], - "holding_costs": [ - 1000, - 900, - 1200, - 1000 - ], - "demand_rates": [ - 1780, - 445, - 920, - 175 - ] - }, - "type": "dict" - }, - { - "name": "scmo_jrp_hw_2", - "description": "SCMO (JRP problem 2)", - "data": { - "shared_fixed_cost": 1500, - "individual_fixed_costs": [ - 4000, - 1000, - 2000 - ], - "holding_costs": [ - 300, - 200, - 200 - ], - "demand_rates": [ - 9100, - 83200, - 20800 - ] - }, - "type": "dict" - }, - { - "name": "scmo_jrp_hw_3", - "description": "SCMO (JRP problem 3)", - "data": { - "shared_fixed_cost": 180, - "individual_fixed_costs": [ - 60, - 100, - 180, - 115, - 135 - ], - "holding_costs": [ - 5.32, - 3.9200000000000004, - 4.760000000000001, - 3.9200000000000004, - 3.3600000000000003 - ], - "demand_rates": [ - 6200, - 1300, - 400, - 4400, - 1800 - ] - }, - "type": "dict" - }, - { - "name": "example_4_1", - "description": "Example 4.1 (newsvendor)", - "data": { - "holding_cost": 0.18, - "stockout_cost": 0.7, - "demand_mean": 50, - "demand_sd": 8 - }, - "type": "dict" - }, - { - "name": "example_4_1_network", - "description": "Example 4.1 (newsvendor) (as SupplyChainNetwork object)", - "data": { - "nodes": [ - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "-1000": -1000 - }, - "_dummy_product": -1000, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - null - ], - "_successors": [ - null - ], - "local_holding_cost": 0.18, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0.7, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 50, - "standard_deviation": 8, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 0, - "product": null, - "base_stock_level": 56.6, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -1000, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "example_4_2", - "description": "Example 4.2 (newsvendor explicit)", - "data": { - "revenue": 1, - "purchase_cost": 0.3, - "salvage_value": 0.12, - "demand_mean": 50, - "demand_sd": 8 - }, - "type": "dict" - }, - { - "name": "example_4_3", - "description": "Example 4.3 (newsvendor) (= Example 4.1)", - "data": { - "holding_cost": 0.18, - "stockout_cost": 0.7, - "demand_mean": 50, - "demand_sd": 8 - }, - "type": "dict" - }, - { - "name": "problem_4_1", - "description": "Problem 4.1 (newsvendor)", - "data": { - "holding_cost": 43, - "stockout_cost": 79, - "demand_mean": 900, - "demand_sd": 60 - }, - "type": "dict" - }, - { - "name": "problem_4_3b", - "description": "Problem 4.3(b) (newsvendor explicit)", - "data": { - "revenue": 7, - "purchase_cost": 2.5, - "salvage_value": 1.5, - "demand_mean": 50, - "demand_sd": 10 - }, - "type": "dict" - }, - { - "name": "example_4_4", - "description": "Example 4.4 (base-stock optimization)", - "data": { - "holding_cost": 0.18, - "stockout_cost": 0.7, - "demand_mean": 50, - "demand_sd": 8, - "lead_time": 4 - }, - "type": "dict" - }, - { - "name": "example_4_7", - "description": "Example 4.7 ((s,S) with Poisson demand)", - "data": { - "holding_cost": 1, - "stockout_cost": 4, - "fixed_cost": 5, - "demand_mean": 6 - }, - "type": "dict" - }, - { - "name": "problem_4_7b", - "description": "Problem 4.7(b) (newsvendor with discrete demand)", - "data": { - "holding_cost": 500000, - "stockout_cost": 1000000, - "demand_pmf": { - "1": 0.25, - "2": 0.05, - "3": 0.1, - "4": 0.2, - "5": 0.15, - "6": 0.1, - "7": 0.1, - "8": 0.05 - } - }, - "type": "dict" - }, - { - "name": "problem_4_8a", - "description": "Problem 4.8(a) (newsvendor with Poisson demand)", - "data": { - "holding_cost": 200, - "stockout_cost": 270, - "demand_mean": 18 - }, - "type": "dict" - }, - { - "name": "problem_4_8b", - "description": "Problem 4.8(b) (newsvendor with lognormal demand)", - "data": { - "holding_cost": 1, - "stockout_cost": 0.1765, - "mu": 6, - "sigma": 0.3 - }, - "type": "dict" - }, - { - "name": "problem_4_31", - "description": "Problem 4.31 ((s,S) with Poisson demand)", - "data": { - "holding_cost": 40, - "stockout_cost": 125, - "fixed_cost": 150, - "demand_mean": 4 - }, - "type": "dict" - }, - { - "name": "example_4_8", - "description": "Example 4.8 ((s,S))", - "data": { - "holding_cost": 0.18, - "stockout_cost": 0.7, - "fixed_cost": 2.5, - "demand_mean": 50, - "demand_sd": 8 - }, - "type": "dict" - }, - { - "name": "problem_4_32", - "description": "Problem 4.32 ((s,S))", - "data": { - "holding_cost": 2, - "stockout_cost": 36, - "fixed_cost": 60, - "demand_mean": 190, - "demand_sd": 48 - }, - "type": "dict" - }, - { - "name": "problem_4_29", - "description": "Problem 4.29 (finite-horizon)", - "data": { - "num_periods": 10, - "holding_cost": 1, - "stockout_cost": 25, - "terminal_holding_cost": 1, - "terminal_stockout_cost": 25, - "purchase_cost": 1, - "fixed_cost": 0, - "demand_mean": 18, - "demand_sd": 3, - "discount_factor": 0.98, - "initial_inventory_level": 0 - }, - "type": "dict" - }, - { - "name": "problem_4_30", - "description": "Problem 4.30 (finite-horizon)", - "data": { - "num_periods": 10, - "holding_cost": 1, - "stockout_cost": 25, - "terminal_holding_cost": 1, - "terminal_stockout_cost": 25, - "purchase_cost": 1, - "fixed_cost": 40, - "demand_mean": 18, - "demand_sd": 3, - "discount_factor": 0.98, - "initial_inventory_level": 0 - }, - "type": "dict" - }, - { - "name": "example_5_1", - "description": "Example 5.1 ((r,Q))", - "data": { - "holding_cost": 0.225, - "stockout_cost": 7.5, - "fixed_cost": 8, - "demand_mean": 1300, - "demand_sd": 150, - "lead_time": 0.08333333333333333 - }, - "type": "dict" - }, - { - "name": "problem_5_1", - "description": "Problem 5.1 ((r,Q))", - "data": { - "holding_cost": 3.1, - "stockout_cost": 45, - "fixed_cost": 50, - "demand_mean": 800, - "demand_sd": 40, - "lead_time": 0.010958904109589041 - }, - "type": "dict" - }, - { - "name": "problem_5_2", - "description": "Problem 5.2 ((r,Q) with Poisson demand)", - "data": { - "holding_cost": 4, - "stockout_cost": 28, - "fixed_cost": 4, - "demand_mean": 12, - "lead_time": 0.5 - }, - "type": "dict" - }, - { - "name": "problem_5_3", - "description": "Problem 5.3 ((r,Q))", - "data": { - "holding_cost": 0.21428571428571427, - "stockout_cost": 40, - "fixed_cost": 85, - "demand_mean": 192, - "demand_sd": 17.4, - "lead_time": 3 - }, - "type": "dict" - }, - { - "name": "example_5_8", - "description": "Example 5.8 ((r,Q) with Poisson demand))", - "data": { - "holding_cost": 20, - "stockout_cost": 150, - "fixed_cost": 100, - "demand_mean": 1.5, - "lead_time": 2 - }, - "type": "dict" - }, - { - "name": "example_6_1", - "description": "Example 6.1 (serial SSM)", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_1", - "description": "Problem 6.1 (serial SSM)", - "data": { - "nodes": [ - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - null - ], - "_successors": [ - 1 - ], - "local_holding_cost": 1, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 94, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 2, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 15, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 100, - "standard_deviation": 15, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 100, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_2a", - "description": "Problem 6.2(a) (serial SSM)", - "data": { - "nodes": [ - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 7, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 5, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 33.3, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 3, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 35.14, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 24, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 64, - "standard_deviation": 8, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 40.59, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_2b", - "description": "Problem 6.2(a) (serial SSM with Poisson demand)", - "data": { - "nodes": [ - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 7, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 5, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 33.3, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 3, - "echelon_holding_cost": 1, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 35.14, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 24, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.5, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 64, - "standard_deviation": 8.0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 40.59, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_2a_adj", - "description": "Problem 6.2(a) (serial SSM), adjusted for periodic review", - "data": { - "nodes": [ - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 3.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 2.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 33.3, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 1.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 35.14, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 1.0, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 12.0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 32.0, - "standard_deviation": 5.65685424949238, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 40.59, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_2b_adj", - "description": "Problem 6.2(b) (serial SSM with Poisson demand), adjusted for periodic review", - "data": { - "nodes": [ - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": 3.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 32.93, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 2.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 33.3, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 1.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 35.14, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 1.0, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 33.87, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 12.0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 32.0, - "standard_deviation": 5.656854249492381, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 40.59, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_16", - "description": "Problem 6.16 (serial SSM)", - "data": { - "nodes": [ - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - null - ], - "_successors": [ - 1 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 3, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 20, - "initial_orders": 20, - "initial_shipments": 20, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 57.7257, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 5, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 24, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 8, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 20, - "standard_deviation": 4, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 20, - "initial_orders": 20, - "initial_shipments": 20, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 171.1912, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_1", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 1", - "data": { - "nodes": [ - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 9, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 16, - "standard_deviation": 4.0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_9", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 9", - "data": { - "nodes": [ - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": 2.5, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": 2.5, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 9, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 16, - "standard_deviation": 4.0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_17", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 17", - "data": { - "nodes": [ - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 99, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 16, - "standard_deviation": 4.0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "shang_song_25", - "description": "Serial SSM system in Shang and Song (2003), Table 1, row 25", - "data": { - "nodes": [ - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": 2.5, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": 2.5, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": 0.25, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 99, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 0.25, - "order_lead_time": null, - "demand_source": { - "type": "P", - "mean": 16, - "standard_deviation": 4.0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "assembly_3_stage", - "description": "3-stage assembly system (2 warehouses, 1 retailer)", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - null - ], - "_successors": [ - 0 - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 13, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 13, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "-1000": -1000 - }, - "_dummy_product": -1000, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - 1, - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": true - }, - "initial_inventory_level": 7, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 0, - "product": null, - "base_stock_level": 7, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - null - ], - "_successors": [ - 0 - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 11, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 11, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1000, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rosling_figure_1", - "description": "Assembly system from Figure 1 in Rosling (1989)", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2, - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "UD", - "mean": 5.0, - "standard_deviation": 3.1622776601683795, - "demand_list": null, - "probabilities": null, - "lo": 0, - "hi": 10, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 8, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 1, - "product": null, - "base_stock_level": 8, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 5 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 8, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 2, - "product": null, - "base_stock_level": 24, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4 - ], - "_successors": [ - 1 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 3, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 24, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 3, - "product": null, - "base_stock_level": 40, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 6, - 7 - ], - "_successors": [ - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 16, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 4, - "product": null, - "base_stock_level": 76, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 4, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 32, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 5, - "product": null, - "base_stock_level": 62, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-12": -12 - }, - "_dummy_product": -12, - "_external_supplier_dummy_product": -13, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 8, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 6, - "product": null, - "base_stock_level": 84, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": null, - "network": null, - "_products_by_index": { - "-14": -14 - }, - "_dummy_product": -14, - "_external_supplier_dummy_product": -15, - "_predecessors": [ - null - ], - "_successors": [ - 4 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": 16, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BEBS", - "node": 7, - "product": null, - "base_stock_level": 92, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -15, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -14, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -13, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -12, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rong_atan_snyder_figure_1a", - "description": "Distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)", - "data": { - "nodes": [ - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "-1000": -1000 - }, - "_dummy_product": -1000, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - null - ], - "_successors": [ - 1, - 2 - ], - "local_holding_cost": 0.3333333333333333, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 0, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 0 - ], - "_successors": [ - 3, - 4 - ], - "local_holding_cost": 0.6666666666666666, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 0 - ], - "_successors": [ - 5, - 6 - ], - "local_holding_cost": 0.6666666666666666, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-12": -12 - }, - "_dummy_product": -12, - "_external_supplier_dummy_product": -13, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 20, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 6, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -12, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1000, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -13, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rong_atan_snyder_figure_1b", - "description": "Distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)", - "data": { - "nodes": [ - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "-1000": -1000 - }, - "_dummy_product": -1000, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - null - ], - "_successors": [ - 1, - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 0, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 0 - ], - "_successors": [ - 3, - 4, - 5, - 6, - 7 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 0 - ], - "_successors": [ - 8, - 9, - 10 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-12": -12 - }, - "_dummy_product": -12, - "_external_supplier_dummy_product": -13, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 6, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": null, - "network": null, - "_products_by_index": { - "-14": -14 - }, - "_dummy_product": -14, - "_external_supplier_dummy_product": -15, - "_predecessors": [ - 1 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 7, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 8, - "name": null, - "network": null, - "_products_by_index": { - "-16": -16 - }, - "_dummy_product": -16, - "_external_supplier_dummy_product": -17, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 8, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 9, - "name": null, - "network": null, - "_products_by_index": { - "-18": -18 - }, - "_dummy_product": -18, - "_external_supplier_dummy_product": -19, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 9, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 10, - "name": null, - "network": null, - "_products_by_index": { - "-20": -20 - }, - "_dummy_product": -20, - "_external_supplier_dummy_product": -21, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 10, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1000, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -21, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -20, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -19, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -18, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -17, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -16, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -15, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -14, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -13, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -12, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "rong_atan_snyder_figure_1c", - "description": "Distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)", - "data": { - "nodes": [ - { - "_index": 0, - "name": null, - "network": null, - "_products_by_index": { - "-1000": -1000 - }, - "_dummy_product": -1000, - "_external_supplier_dummy_product": -1001, - "_predecessors": [ - null - ], - "_successors": [ - 1, - 2 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 0, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 0 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 0 - ], - "_successors": [ - 3, - 4, - 5 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 4, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 8, - "standard_deviation": 2.8284271247461903, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 5, - "product": null, - "base_stock_level": 0, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1001, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -1000, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "example_6_3", - "description": "Example 6.3 (serial GSM)", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": 0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": 1, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": 0, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 0, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": 1, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_7", - "description": "Problem 6.7 (serial GSM)", - "data": { - "nodes": [ - { - "_index": 3, - "name": "Forming", - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": 1, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": "Firing", - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 3, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": "Glazing", - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 4, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 45, - "standard_deviation": 10, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": 0, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_8", - "description": "Problem 6.8 (serial GSM)", - "data": { - "nodes": [ - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4.56, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 10, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 5.73, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 15.8, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 5, - "external_inbound_cst": null, - "external_outbound_cst": 3, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4 - ], - "_successors": [ - 2 - ], - "local_holding_cost": 3.04, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 5 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 2.93, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 15, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - 6 - ], - "_successors": [ - 4 - ], - "local_holding_cost": 2.47, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 8, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-12": -12 - }, - "_dummy_product": -12, - "_external_supplier_dummy_product": -13, - "_predecessors": [ - 7 - ], - "_successors": [ - 5 - ], - "local_holding_cost": 2.37, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 5, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": null, - "network": null, - "_products_by_index": { - "-14": -14 - }, - "_dummy_product": -14, - "_external_supplier_dummy_product": -15, - "_predecessors": [ - 8 - ], - "_successors": [ - 6 - ], - "local_holding_cost": 1.15, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 7, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 9, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 8, - "name": null, - "network": null, - "_products_by_index": { - "-16": -16 - }, - "_dummy_product": -16, - "_external_supplier_dummy_product": -17, - "_predecessors": [ - 9 - ], - "_successors": [ - 7 - ], - "local_holding_cost": 1.1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 8, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 5, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 9, - "name": null, - "network": null, - "_products_by_index": { - "-18": -18 - }, - "_dummy_product": -18, - "_external_supplier_dummy_product": -19, - "_predecessors": [ - 10 - ], - "_successors": [ - 8 - ], - "local_holding_cost": 0.98, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 9, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 10, - "name": null, - "network": null, - "_products_by_index": { - "-20": -20 - }, - "_dummy_product": -20, - "_external_supplier_dummy_product": -21, - "_predecessors": [ - null - ], - "_successors": [ - 9 - ], - "local_holding_cost": 0.87, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": 0, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 10, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 5, - "external_inbound_cst": 7, - "external_outbound_cst": null, - "demand_bound_constant": 2.0537489106318225, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -21, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -20, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -19, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -18, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -17, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -16, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -15, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -14, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -13, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -12, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "problem_6_9", - "description": "Problem 6.9 (tree GSM)", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.12054794520547946, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 22.0, - "standard_deviation": 4.1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 7, - "external_inbound_cst": null, - "external_outbound_cst": 3, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.07671232876712329, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 15.3, - "standard_deviation": 6.2, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 7, - "external_inbound_cst": null, - "external_outbound_cst": 3, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 4, - 5 - ], - "_successors": [ - 1, - 2 - ], - "local_holding_cost": 0.049315068493150684, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 21, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [], - "_successors": [ - 3 - ], - "local_holding_cost": 0.0027397260273972603, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - 6 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 0.010958904109589041, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 8, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-12": -12 - }, - "_dummy_product": -12, - "_external_supplier_dummy_product": -13, - "_predecessors": [], - "_successors": [ - 5 - ], - "local_holding_cost": 0.00410958904109589, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 4, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -13, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -12, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "example_6_5", - "description": "Example 6.5 (tree GSM)", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - null - ], - "_successors": [ - 3 - ], - "local_holding_cost": 1, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": 1, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 1 - ], - "_successors": [ - 2, - 4 - ], - "local_holding_cost": 2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": 3, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": 0, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - 3 - ], - "_successors": [ - null - ], - "local_holding_cost": 3, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 1, - "external_inbound_cst": null, - "external_outbound_cst": 1, - "demand_bound_constant": 1, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "figure_6_12", - "description": "Figure 6.12 (tree GSM)", - "data": { - "nodes": [ - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - null - ], - "_successors": [ - 2, - 3 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 1 - ], - "_successors": [], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 1 - ], - "_successors": [ - 5 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": null, - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - 3, - 4 - ], - "_successors": [ - 6, - 7 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": null, - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [ - null - ], - "_successors": [ - 5 - ], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": null, - "network": null, - "_products_by_index": { - "-12": -12 - }, - "_dummy_product": -12, - "_external_supplier_dummy_product": -13, - "_predecessors": [ - 5 - ], - "_successors": [], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": null, - "network": null, - "_products_by_index": { - "-14": -14 - }, - "_dummy_product": -14, - "_external_supplier_dummy_product": -15, - "_predecessors": [ - 5 - ], - "_successors": [], - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 7, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -15, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -14, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -13, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -12, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "figure_6_14", - "description": "Figure 6.14 (tree GSM)", - "data": { - "nodes": [ - { - "_index": 1, - "name": "Raw_Material", - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [], - "_successors": [ - 2 - ], - "local_holding_cost": 0.01, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 1, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": "Process_Wafers", - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 1 - ], - "_successors": [ - 3 - ], - "local_holding_cost": 0.03, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 2, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 3, - "name": "Package_Test_Wafers", - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - 2 - ], - "_successors": [ - 5 - ], - "local_holding_cost": 0.04, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 3, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 4, - "name": "Imager_Base", - "network": null, - "_products_by_index": { - "-8": -8 - }, - "_dummy_product": -8, - "_external_supplier_dummy_product": -9, - "_predecessors": [], - "_successors": [ - 5 - ], - "local_holding_cost": 0.06, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 4, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 4, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 5, - "name": "Imager_Assembly", - "network": null, - "_products_by_index": { - "-10": -10 - }, - "_dummy_product": -10, - "_external_supplier_dummy_product": -11, - "_predecessors": [ - 3, - 4 - ], - "_successors": [ - 6 - ], - "local_holding_cost": 0.12, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 5, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 6, - "name": "Ship_to_Final_Assembly", - "network": null, - "_products_by_index": { - "-12": -12 - }, - "_dummy_product": -12, - "_external_supplier_dummy_product": -13, - "_predecessors": [ - 5 - ], - "_successors": [ - 10 - ], - "local_holding_cost": 0.13, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 6, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 7, - "name": "Camera", - "network": null, - "_products_by_index": { - "-14": -14 - }, - "_dummy_product": -14, - "_external_supplier_dummy_product": -15, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.2, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 7, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 6, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 8, - "name": "Circuit_Board", - "network": null, - "_products_by_index": { - "-16": -16 - }, - "_dummy_product": -16, - "_external_supplier_dummy_product": -17, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.08, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 8, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 4, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 9, - "name": "Other_Parts", - "network": null, - "_products_by_index": { - "-18": -18 - }, - "_dummy_product": -18, - "_external_supplier_dummy_product": -19, - "_predecessors": [], - "_successors": [ - 10 - ], - "local_holding_cost": 0.04, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 9, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 3, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 10, - "name": "Build_Test_Pack", - "network": null, - "_products_by_index": { - "-20": -20 - }, - "_dummy_product": -20, - "_external_supplier_dummy_product": -21, - "_predecessors": [ - 7, - 6, - 8, - 9 - ], - "_successors": [ - null - ], - "local_holding_cost": 0.5, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 0, - "standard_deviation": 10, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": 10, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": 2, - "external_inbound_cst": null, - "external_outbound_cst": 2, - "demand_bound_constant": 1.6448536269514722, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -21, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -20, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -19, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -18, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -17, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -16, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -15, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -14, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -13, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -12, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -11, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -10, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -9, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -8, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "example_9_1", - "description": "Example 9.1 (EOQD)", - "data": { - "holding_cost": 0.225, - "stockout_cost": 5, - "fixed_cost": 8, - "demand_rate": 1300, - "disruption_rate": 1.5, - "recovery_rate": 14 - }, - "type": "dict" - }, - { - "name": "problem_9_8", - "description": "Problem 9.8 (EOQD)", - "data": { - "holding_cost": 4, - "stockout_cost": 22, - "fixed_cost": 35, - "demand_rate": 30, - "disruption_rate": 1, - "recovery_rate": 12 - }, - "type": "dict" - }, - { - "name": "example_9_3", - "description": "Example 9.3 (base-stock with disruptions)", - "data": { - "holding_cost": 0.25, - "stockout_cost": 3, - "demand": 2000, - "disruption_prob": 0.04, - "recovery_prob": 0.25 - }, - "type": "dict" - }, - { - "name": "example_9_4", - "description": "Example 9.4 (EOQ with additive yield uncertainty)", - "data": { - "holding_cost": 0.06, - "fixed_cost": 18500, - "demand_rate": 75000, - "yield_mean": -15000, - "yield_sd": 9000 - }, - "type": "dict" - }, - { - "name": "example_9_5", - "description": "Example 9.5 (EOQ with multiplicative yield uncertainty)", - "data": { - "holding_cost": 0.06, - "fixed_cost": 18500, - "demand_rate": 75000, - "yield_mean": 0.8333333333333334, - "yield_sd": 0.14085904245475275 - }, - "type": "dict" - }, - { - "name": "problem_9_4a", - "description": "Problem 9.4(a) (EOQ with additive yield uncertainty)", - "data": { - "holding_cost": 275, - "fixed_cost": 2250, - "demand_rate": 182500, - "yield_mean": -50.0, - "yield_sd": 0.02 - }, - "type": "dict" - }, - { - "name": "problem_9_4b", - "description": "Problem 9.4(b) (EOQ with multiplicative yield uncertainty)", - "data": { - "holding_cost": 275, - "fixed_cost": 2250, - "demand_rate": 182500, - "yield_mean": 0.9, - "yield_sd": 0.05773502691896258 - }, - "type": "dict" - }, - { - "name": "example_9_6", - "description": "Example 9.6 (newsvendor with additive yield uncertainty)", - "data": { - "holding_cost": 15000000, - "stockout_cost": 75000000, - "demand": 1.5, - "yield_lo": -0.5, - "yield_hi": 0.5 - }, - "type": "dict" - }, - { - "name": "problem_9_5", - "description": "Problem 9.5 (newsvendor with additive yield uncertainty)", - "data": { - "holding_cost": 150, - "stockout_cost": 1200, - "demand": 25, - "yield_lo": -5, - "yield_hi": 0 - }, - "type": "dict" - } - ], - "last_updated": "2024-04-21 21:47:48.007481" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "example_3_1", "description": "Example 3.1 (EOQ)", "data": {"fixed_cost": 8, "holding_cost": 0.225, "demand_rate": 1300}, "type": "dict"}, {"name": "problem_3_1", "description": "Problem 3.1 (EOQ)", "data": {"fixed_cost": 2250, "holding_cost": 275, "demand_rate": 182500}, "type": "dict"}, {"name": "example_3_8", "description": "Example 3.8 (EOQB)", "data": {"fixed_cost": 8, "holding_cost": 0.225, "stockout_cost": 5, "demand_rate": 1300}, "type": "dict"}, {"name": "problem_3_2b", "description": "Problem 3.2(b) (EOQB)", "data": {"fixed_cost": 40, "holding_cost": 40.05, "stockout_cost": 60, "demand_rate": 2080}, "type": "dict"}, {"name": "problem_3_22", "description": "Problem 3.22 (EPQ)", "data": {"fixed_cost": 4, "holding_cost": 0.08, "demand_rate": 80, "production_rate": 110}, "type": "dict"}, {"name": "example_3_9", "description": "Example 3.9 (Wagner-Whitin)", "data": {"num_periods": 4, "holding_cost": 2, "fixed_cost": 500, "demand": [90, 120, 80, 70]}, "type": "dict"}, {"name": "problem_3_27", "description": "Problem 3.27 (Wagner-Whitin)", "data": {"num_periods": 4, "holding_cost": 0.8, "fixed_cost": 120, "demand": [150, 100, 80, 200]}, "type": "dict"}, {"name": "problem_3_29", "description": "Problem 3.29 (Wagner-Whitin)", "data": {"num_periods": 5, "holding_cost": 0.1, "fixed_cost": 100, "demand": [730, 580, 445, 650, 880]}, "type": "dict"}, {"name": "scmo_ww_hw_c", "description": "SCMO (Wagner-Whitin with nonstationary purchase cost)", "data": {"num_periods": 5, "holding_cost": 0.1, "fixed_cost": 100, "demand": [400, 500, 500, 1100, 900], "purchase_cost": [3, 1, 4, 6, 6]}, "type": "dict"}, {"name": "scmo_jrp_ex", "description": "SCMO (JRP example)", "data": {"shared_fixed_cost": 600, "individual_fixed_costs": [120, 840, 300], "holding_costs": [160, 20, 50], "demand_rates": [1, 1, 1]}, "type": "dict"}, {"name": "spp_jrp", "description": "Numerical JRP example on p. 428 of Silver, Pyke, and Peterson (1998)", "data": {"shared_fixed_cost": 40, "individual_fixed_costs": [15, 15, 15, 15], "holding_costs": [0.24, 0.24, 0.24, 0.24], "demand_rates": [86000, 12500, 1400, 3000]}, "type": "dict"}, {"name": "silver_jrp", "description": "Numerical JRP example in Silver (1976)", "data": {"shared_fixed_cost": 10, "individual_fixed_costs": [1.87, 5.27, 7.94, 8.19, 8.87], "holding_costs": [0.2, 0.2, 0.2, 0.2, 0.2], "demand_rates": [1736, 656, 558, 170, 142]}, "type": "dict"}, {"name": "scmo_jrp_hw_1", "description": "SCMO (JRP problem 1)", "data": {"shared_fixed_cost": 20000, "individual_fixed_costs": [36000, 46000, 34000, 38000], "holding_costs": [1000, 900, 1200, 1000], "demand_rates": [1780, 445, 920, 175]}, "type": "dict"}, {"name": "scmo_jrp_hw_2", "description": "SCMO (JRP problem 2)", "data": {"shared_fixed_cost": 1500, "individual_fixed_costs": [4000, 1000, 2000], "holding_costs": [300, 200, 200], "demand_rates": [9100, 83200, 20800]}, "type": "dict"}, {"name": "scmo_jrp_hw_3", "description": "SCMO (JRP problem 3)", "data": {"shared_fixed_cost": 180, "individual_fixed_costs": [60, 100, 180, 115, 135], "holding_costs": [5.32, 3.9200000000000004, 4.760000000000001, 3.9200000000000004, 3.3600000000000003], "demand_rates": [6200, 1300, 400, 4400, 1800]}, "type": "dict"}, {"name": "example_4_1", "description": "Example 4.1 (newsvendor)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "example_4_1_network", "description": "Example 4.1 (newsvendor) (as SupplyChainNetwork object)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [null], "local_holding_cost": 0.18, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0.7, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 50, "standard_deviation": 8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 56.6, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_4_2", "description": "Example 4.2 (newsvendor explicit)", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "example_4_3", "description": "Example 4.3 (newsvendor) (= Example 4.1)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "problem_4_1", "description": "Problem 4.1 (newsvendor)", "data": {"holding_cost": 43, "stockout_cost": 79, "demand_mean": 900, "demand_sd": 60}, "type": "dict"}, {"name": "problem_4_3b", "description": "Problem 4.3(b) (newsvendor explicit)", "data": {"revenue": 7, "purchase_cost": 2.5, "salvage_value": 1.5, "demand_mean": 50, "demand_sd": 10}, "type": "dict"}, {"name": "example_4_4", "description": "Example 4.4 (base-stock optimization)", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "demand_mean": 50, "demand_sd": 8, "lead_time": 4}, "type": "dict"}, {"name": "example_4_7", "description": "Example 4.7 ((s,S) with Poisson demand)", "data": {"holding_cost": 1, "stockout_cost": 4, "fixed_cost": 5, "demand_mean": 6}, "type": "dict"}, {"name": "problem_4_7b", "description": "Problem 4.7(b) (newsvendor with discrete demand)", "data": {"holding_cost": 500000, "stockout_cost": 1000000, "demand_pmf": {"1": 0.25, "2": 0.05, "3": 0.1, "4": 0.2, "5": 0.15, "6": 0.1, "7": 0.1, "8": 0.05}}, "type": "dict"}, {"name": "problem_4_8a", "description": "Problem 4.8(a) (newsvendor with Poisson demand)", "data": {"holding_cost": 200, "stockout_cost": 270, "demand_mean": 18}, "type": "dict"}, {"name": "problem_4_8b", "description": "Problem 4.8(b) (newsvendor with lognormal demand)", "data": {"holding_cost": 1, "stockout_cost": 0.1765, "mu": 6, "sigma": 0.3}, "type": "dict"}, {"name": "problem_4_31", "description": "Problem 4.31 ((s,S) with Poisson demand)", "data": {"holding_cost": 40, "stockout_cost": 125, "fixed_cost": 150, "demand_mean": 4}, "type": "dict"}, {"name": "example_4_8", "description": "Example 4.8 ((s,S))", "data": {"holding_cost": 0.18, "stockout_cost": 0.7, "fixed_cost": 2.5, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}, {"name": "problem_4_32", "description": "Problem 4.32 ((s,S))", "data": {"holding_cost": 2, "stockout_cost": 36, "fixed_cost": 60, "demand_mean": 190, "demand_sd": 48}, "type": "dict"}, {"name": "problem_4_29", "description": "Problem 4.29 (finite-horizon)", "data": {"num_periods": 10, "holding_cost": 1, "stockout_cost": 25, "terminal_holding_cost": 1, "terminal_stockout_cost": 25, "purchase_cost": 1, "fixed_cost": 0, "demand_mean": 18, "demand_sd": 3, "discount_factor": 0.98, "initial_inventory_level": 0}, "type": "dict"}, {"name": "problem_4_30", "description": "Problem 4.30 (finite-horizon)", "data": {"num_periods": 10, "holding_cost": 1, "stockout_cost": 25, "terminal_holding_cost": 1, "terminal_stockout_cost": 25, "purchase_cost": 1, "fixed_cost": 40, "demand_mean": 18, "demand_sd": 3, "discount_factor": 0.98, "initial_inventory_level": 0}, "type": "dict"}, {"name": "example_5_1", "description": "Example 5.1 ((r,Q))", "data": {"holding_cost": 0.225, "stockout_cost": 7.5, "fixed_cost": 8, "demand_mean": 1300, "demand_sd": 150, "lead_time": 0.08333333333333333}, "type": "dict"}, {"name": "problem_5_1", "description": "Problem 5.1 ((r,Q))", "data": {"holding_cost": 3.1, "stockout_cost": 45, "fixed_cost": 50, "demand_mean": 800, "demand_sd": 40, "lead_time": 0.010958904109589041}, "type": "dict"}, {"name": "problem_5_2", "description": "Problem 5.2 ((r,Q) with Poisson demand)", "data": {"holding_cost": 4, "stockout_cost": 28, "fixed_cost": 4, "demand_mean": 12, "lead_time": 0.5}, "type": "dict"}, {"name": "problem_5_3", "description": "Problem 5.3 ((r,Q))", "data": {"holding_cost": 0.21428571428571427, "stockout_cost": 40, "fixed_cost": 85, "demand_mean": 192, "demand_sd": 17.4, "lead_time": 3}, "type": "dict"}, {"name": "example_5_8", "description": "Example 5.8 ((r,Q) with Poisson demand))", "data": {"holding_cost": 20, "stockout_cost": 150, "fixed_cost": 100, "demand_mean": 1.5, "lead_time": 2}, "type": "dict"}, {"name": "example_6_1", "description": "Example 6.1 (serial SSM)", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_1", "description": "Problem 6.1 (serial SSM)", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [null], "_successors": [1], "local_holding_cost": 1, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 94, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 2, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 15, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 100, "standard_deviation": 15, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 100, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2a", "description": "Problem 6.2(a) (serial SSM)", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 7, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 5, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": "N", "mean": 64, "standard_deviation": 8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2b", "description": "Problem 6.2(a) (serial SSM with Poisson demand)", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 7, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 5, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3, "echelon_holding_cost": 1, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.5, "order_lead_time": null, "demand_source": {"type": "P", "mean": 64, "standard_deviation": 8.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2a_adj", "description": "Problem 6.2(a) (serial SSM), adjusted for periodic review", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 32.0, "standard_deviation": 5.65685424949238, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_2b_adj", "description": "Problem 6.2(b) (serial SSM with Poisson demand), adjusted for periodic review", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_16", "description": "Problem 6.16 (serial SSM)", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [null], "_successors": [1], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 20, "initial_orders": 20, "initial_shipments": 20, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 57.7257, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 24, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 8, "order_lead_time": null, "demand_source": {"type": "N", "mean": 20, "standard_deviation": 4, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 20, "initial_orders": 20, "initial_shipments": 20, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 171.1912, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_1", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 1", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 9, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_9", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 9", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 9, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_17", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 17", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 99, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "shang_song_25", "description": "Serial SSM system in Shang and Song (2003), Table 1, row 25", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": 2.5, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": 0.25, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 99, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 0.25, "order_lead_time": null, "demand_source": {"type": "P", "mean": 16, "standard_deviation": 4.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "assembly_3_stage", "description": "3-stage assembly system (2 warehouses, 1 retailer)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [null], "_successors": [0], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 13, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 13, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [1, 2], "_successors": [null], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": true, "dict_type": "singleton_attribute"}, "initial_inventory_level": 7, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 7, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [null], "_successors": [0], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 11, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 11, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rosling_figure_1", "description": "Assembly system from Figure 1 in Rosling (1989)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1a", "description": "Distribution system from Figure 1(a) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": 0.3333333333333333, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [0], "_successors": [3, 4], "local_holding_cost": 0.6666666666666666, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [0], "_successors": [5, 6], "local_holding_cost": 0.6666666666666666, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [1], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [2], "_successors": [null], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 20, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 6, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1b", "description": "Distribution system from Figure 1(b) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [0], "_successors": [3, 4, 5, 6, 7], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [0], "_successors": [8, 9, 10], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 6, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [1], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 7, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": null, "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 8, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": null, "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 9, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": null, "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 10, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "rong_atan_snyder_figure_1c", "description": "Distribution system from Figure 1(c) in Rong, Atan, and Snyder (2017)", "data": {"nodes": [{"_index": 0, "name": null, "network": null, "_products_by_index": {"-1000": -1000}, "_dummy_product": -1000, "_external_supplier_dummy_product": -1001, "_predecessors": [null], "_successors": [1, 2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [0], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [0], "_successors": [3, 4, 5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 0, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -1000, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_6_3", "description": "Example 6.3 (serial GSM)", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 0, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 1, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_7", "description": "Problem 6.7 (serial GSM)", "data": {"nodes": [{"_index": 3, "name": "Forming", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Firing", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": "Glazing", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 4, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 45, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 0, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_8", "description": "Problem 6.8 (serial GSM)", "data": {"nodes": [{"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4.56, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 10, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 5.73, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 15.8, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 3.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.93, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 15, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [6], "_successors": [4], "local_holding_cost": 2.47, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 8, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [7], "_successors": [5], "local_holding_cost": 2.37, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [8], "_successors": [6], "local_holding_cost": 1.15, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 9, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": null, "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [9], "_successors": [7], "local_holding_cost": 1.1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": null, "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [10], "_successors": [8], "local_holding_cost": 0.98, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": null, "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [null], "_successors": [9], "local_holding_cost": 0.87, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 5, "external_inbound_cst": 7, "external_outbound_cst": null, "demand_bound_constant": 2.0537489106318225, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "problem_6_9", "description": "Problem 6.9 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [3], "_successors": [null], "local_holding_cost": 0.12054794520547946, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 22.0, "standard_deviation": 4.1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 7, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [null], "local_holding_cost": 0.07671232876712329, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 15.3, "standard_deviation": 6.2, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 7, "external_inbound_cst": null, "external_outbound_cst": 3, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4, 5], "_successors": [1, 2], "local_holding_cost": 0.049315068493150684, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 21, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [3], "local_holding_cost": 0.0027397260273972603, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [6], "_successors": [3], "local_holding_cost": 0.010958904109589041, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 8, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.00410958904109589, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 4, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_6_5", "description": "Example 6.5 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [null], "_successors": [3], "local_holding_cost": 1, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": 1, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [2, 4], "local_holding_cost": 2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [null], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 0, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [3], "_successors": [null], "local_holding_cost": 3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 1, "external_inbound_cst": null, "external_outbound_cst": 1, "demand_bound_constant": 1, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "figure_6_12", "description": "Figure 6.12 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [1], "_successors": [5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6, 7], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [5], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [5], "_successors": [], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "figure_6_14", "description": "Figure 6.14 (tree GSM)", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [7, 6, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "example_9_1", "description": "Example 9.1 (EOQD)", "data": {"holding_cost": 0.225, "stockout_cost": 5, "fixed_cost": 8, "demand_rate": 1300, "disruption_rate": 1.5, "recovery_rate": 14}, "type": "dict"}, {"name": "problem_9_8", "description": "Problem 9.8 (EOQD)", "data": {"holding_cost": 4, "stockout_cost": 22, "fixed_cost": 35, "demand_rate": 30, "disruption_rate": 1, "recovery_rate": 12}, "type": "dict"}, {"name": "example_9_3", "description": "Example 9.3 (base-stock with disruptions)", "data": {"holding_cost": 0.25, "stockout_cost": 3, "demand": 2000, "disruption_prob": 0.04, "recovery_prob": 0.25}, "type": "dict"}, {"name": "example_9_4", "description": "Example 9.4 (EOQ with additive yield uncertainty)", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": -15000, "yield_sd": 9000}, "type": "dict"}, {"name": "example_9_5", "description": "Example 9.5 (EOQ with multiplicative yield uncertainty)", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}, {"name": "problem_9_4a", "description": "Problem 9.4(a) (EOQ with additive yield uncertainty)", "data": {"holding_cost": 275, "fixed_cost": 2250, "demand_rate": 182500, "yield_mean": -50.0, "yield_sd": 0.02}, "type": "dict"}, {"name": "problem_9_4b", "description": "Problem 9.4(b) (EOQ with multiplicative yield uncertainty)", "data": {"holding_cost": 275, "fixed_cost": 2250, "demand_rate": 182500, "yield_mean": 0.9, "yield_sd": 0.05773502691896258}, "type": "dict"}, {"name": "example_9_6", "description": "Example 9.6 (newsvendor with additive yield uncertainty)", "data": {"holding_cost": 15000000, "stockout_cost": 75000000, "demand": 1.5, "yield_lo": -0.5, "yield_hi": 0.5}, "type": "dict"}, {"name": "problem_9_5", "description": "Problem 9.5 (newsvendor with additive yield uncertainty)", "data": {"holding_cost": 150, "stockout_cost": 1200, "demand": 25, "yield_lo": -5, "yield_hi": 0}, "type": "dict"}], "last_updated": "2024-05-10 21:45:32.260353"} \ No newline at end of file diff --git a/src/stockpyl/helpers.py b/src/stockpyl/helpers.py index 6c9033f..9126c1f 100644 --- a/src/stockpyl/helpers.py +++ b/src/stockpyl/helpers.py @@ -973,6 +973,42 @@ def replace_dict_null_keys(dict_to_change): return new_dict +def compare_unhashable_lists(list1, list2): + """Determine whether ``list1`` and ``list2`` have the same elements, with the same + counts, not necessarily in the same order. Return ``True`` if they do, ``False`` otherwise. + + .. note : Only use this function for lists of unhashable objects (such as |class_node| + and |class_product|). For hashable objects, ``collections.Counter`` is faster, e.g., + ``Counter(list1) == Counter(list2)``. + + Parameters + ---------- + list1 : list + The first list to compare. + list2 : list + The second list to compare. + + Returns + ------- + bool + ``True`` if the two lists have the same elements, with the same counts, not + neceessarily in the same order, ``False`` otherwise. + """ + # https://stackoverflow.com/a/7829388/3453768 + + if len(list1) != len(list2): + return False + + list1 = list(list1) # make a mutable copy + + try: + for elem in list2: + list1.remove(elem) + except ValueError: + return False + + return not list1 + ### STATS FUNCTIONS ### diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 3bed0c6..8dc7bce 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -218,8 +218,8 @@ def step(network, order_quantity_override=None, consistency_checks='W'): if check fails. See docstring for :func:`~stockpyl.sim.simulation` for list of currently supported strings. order_quantity_override : dict, optional Nested dictionary such that order_quantity_override[node][pred][rm] is an order quantity (or ``None``) - for each node in the network (specified as a |class_node| object), each predecessor (specified as a |class_node| - object), and each raw material (specified as a |class_product| object) the node orders from that predecessor. + for each node in the network, each predecessor, and each raw material the node orders from that predecessor + (each specified by its index, not the object). If provided, these order quantities will override the order quantities that would otherwise be calculated for the nodes/products. If the node has a single predecessor and raw material, ``pred`` and ``rm`` may be set to ``None`` and they will be determined automatically. @@ -342,8 +342,8 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan visited by the depth-first search. order_quantity_override : dict, optional Nested dictionary such that order_quantity_override[node][pred][rm] is an order quantity (or ``None``) - for each node in the network (specified as a |class_node| object), each predecessor (specified as a |class_node| - object), and each raw material (specified as a |class_product| object) the node orders from that predecessor. + for each node in the network, each predecessor, and each raw material the node orders from that predecessor + (each specified by its index, not the object). If provided, these order quantities will override the order quantities that would otherwise be calculated for the nodes/products. If the node has a single predecessor and raw material, ``pred`` and ``rm`` may be set to ``None`` and they will be determined automatically. @@ -417,10 +417,10 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Was an override order quantity provided? try: - if None in order_quantity_override[node] and None in order_quantity_override[node][None]: - qty_override = order_quantity_override[node][None][None] + if None in order_quantity_override[node.index] and None in order_quantity_override[node.index][None]: + qty_override = order_quantity_override[node.index][None][None] else: - qty_override = order_quantity_override[node][p][rm] + qty_override = order_quantity_override[node.index][p_index][rm_index] except: qty_override = None diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index b43c230..ccd783f 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -38,6 +38,7 @@ import numpy as np # import json import copy +from collections import Counter #import supply_chain_node from stockpyl.supply_chain_node import SupplyChainNode @@ -97,7 +98,8 @@ def __init__(self, **kwargs): _DEFAULT_VALUES = { '_nodes': [], - '_local_products': [], # products that are loaded into the network but not (necessarily) into a node + '_local_products': [], # only includes products that are loaded directly into the network; they may or may not also be loaded into nodes + '_products': [], # all products (loaded directly or into nodes) '_period': 0, 'max_max_replenishment_time': None } @@ -150,13 +152,6 @@ def products_by_index(self): Read only. """ return self._products_by_index - # # Include all products in network (including in nodes). - # prod_by_ind = {prod.index: prod for prod in self.products} - # # Add external supplier dummy products. - # prod_by_ind.update({node._external_supplier_dummy_product.index: node._external_supplier_dummy_product \ - # for node in self.nodes if node._external_supplier_dummy_product is not None}) - - # return prod_by_ind @property def period(self): @@ -291,13 +286,28 @@ def deep_equal_to(self, other, rel_tol=1e-8): eq = False elif not self.get_node_from_index(n_ind).deep_equal_to(other_node, rel_tol=rel_tol): eq = False - elif attr == '_local_products': - for prod_ind in sorted(self.product_indices): - other_product = other.products_by_index[prod_ind] - if other_product is None: + elif attr == '_products': + # Check that lists of indices are equal (ignoring order). + if Counter([prod.index for prod in self._products]) != Counter([prod.index for prod in other._products]): + eq = False + for prod in self._products: + other_prod = other.products_by_index[prod.index] + if not prod.deep_equal_to(other_prod, rel_tol=rel_tol): eq = False - elif not self.products_by_index[prod_ind].deep_equal_to(other_product, rel_tol=rel_tol): + elif attr == '_local_products': + # Check that lists of indices are equal (ignoring order). + if Counter([prod.index for prod in self._local_products]) != Counter([prod.index for prod in other._local_products]): + eq = False + for prod in self._local_products: + other_prod = other.products_by_index[prod.index] + if not prod.deep_equal_to(other_prod, rel_tol=rel_tol): eq = False + # for prod in self._local_products: + # other_prod = other.products_by_index[prod.index] + # if other_prod is None: + # eq = False + # elif not self.products_by_index[prod.index].deep_equal_to(other_prod, rel_tol=rel_tol): + # eq = False else: if getattr(self, attr) != getattr(other, attr): eq = False @@ -324,8 +334,11 @@ def to_dict(self): network_dict['nodes'] = [] for n in self.nodes: network_dict['nodes'].append(n.to_dict()) - elif attr == '_local_products': + elif attr == '_products': network_dict[attr] = [prod.to_dict() for prod in self.products] + elif attr == '_local_products': + # Store as indices only. + network_dict[attr] = [prod.index for prod in self._local_products] else: network_dict[prop] = getattr(self, prop) @@ -351,14 +364,16 @@ def from_dict(cls, the_dict): else: # Build empty SupplyChainNetwork. network = cls() - # Fill products first, since these will be needed when filling nodes. - if '_local_products' not in the_dict: - network._local_products = copy.deepcopy(cls._DEFAULT_VALUES['_local_products']) + + # Build list and dict of products to use below. + if '_products' not in the_dict: + products = copy.deepcopy(cls._DEFAULT_VALUES['_products']) else: - network._local_products = [SupplyChainProduct.from_dict(prod_dict) for prod_dict in the_dict['_local_products']] + products = [SupplyChainProduct.from_dict(prod_dict) for prod_dict in the_dict['_products']] + products_by_index = {prod.index: prod for prod in products} - # Build product attributes (for now, this just creates network._products_by_index). - network._build_product_attributes() + # # Build product attributes (for now, this just creates network._products_by_index). + # network._build_product_attributes() # Set _currently_building flag so we don't re-build product attributes in the next step. network._currently_building = True @@ -376,12 +391,12 @@ def from_dict(cls, the_dict): prod_indices = [int(k) for k in node._products_by_index.keys()] node._products_by_index = {} for prod_ind in prod_indices: - node.add_product(network.products_by_index[prod_ind]) + node.add_product(products_by_index[prod_ind]) # Replace dummy-product indices with product objects. if node._dummy_product is not None: - node._dummy_product = network.products_by_index[node._dummy_product] + node._dummy_product = products_by_index[node._dummy_product] if node._external_supplier_dummy_product is not None: - node._external_supplier_dummy_product = network.products_by_index[node._external_supplier_dummy_product] + node._external_supplier_dummy_product = products_by_index[node._external_supplier_dummy_product] # Add node to network. network.add_node(node) for n in network.nodes: @@ -397,8 +412,8 @@ def from_dict(cls, the_dict): n._predecessors = preds n._successors = succs elif attr == '_local_products': - # Already set this--do nothing. - pass + # Replace indices with objects. (They are stored as indices.) + network._local_products = [products_by_index[prod_ind] for prod_ind in the_dict['_local_products']] else: # Remove leading '_' to get property names. prop = attr[1:] if attr[0] == '_' else attr @@ -674,7 +689,7 @@ def _build_product_attributes(self): """ if not self._currently_building: # Build _products and _product_indices. - products = self._local_products + products = [prod for prod in self._local_products] for node in self.nodes: for prod in node.products: if prod not in products: @@ -691,7 +706,7 @@ def _build_product_attributes(self): self._products_by_index.update({node._external_supplier_dummy_product.index: node._external_supplier_dummy_product \ for node in self.nodes if node._external_supplier_dummy_product is not None}) - # Build network BOM for all nodes. + # Build product attributes for all nodes. for node in self.nodes: node._build_product_attributes() diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 646323c..2095b5d 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -403,8 +403,8 @@ def neighbors(self): """A list of all neighbors (successors and predecessors) of the node, as |class_node| objects. Read only. """ - neighbors = self.successors() - neighbors.extend(self.predecessors()) # this assumes no predecessor can also be a successor + neighbors = copy.deepcopy(self.successors()) + neighbors.extend(copy.deepcopy(self.predecessors())) # this assumes no predecessor can also be a successor return neighbors @@ -925,7 +925,8 @@ def raw_materials_by_product(self, product=None, return_indices=False, network_B for prod in products: for _, rm in self.supplier_raw_material_pairs_by_product(product=prod, \ return_indices=return_indices, network_BOM=network_BOM): - rms.append(rm) + if rm not in rms: + rms.append(rm) return rms @@ -971,7 +972,8 @@ def raw_material_suppliers_by_product(self, product=None, return_indices=False, suppliers = [] for pred, rm in self.supplier_raw_material_pairs_by_product(product=prod_obj, \ return_indices=return_indices, network_BOM=network_BOM): - suppliers.append(pred) + if pred not in suppliers: + suppliers.append(pred) return suppliers @@ -1018,11 +1020,12 @@ def raw_material_suppliers_by_raw_material(self, raw_material=None, return_indic suppliers = [] for pred, rm in self.supplier_raw_material_pairs_by_product(product='all', return_indices=False, network_BOM=network_BOM): - if rm == rm_obj: - if return_indices: - suppliers.append(pred.index if pred is not None else None) - else: - suppliers.append(pred) + if pred not in suppliers: + if rm == rm_obj: + if return_indices: + suppliers.append(pred.index if pred is not None else None) + else: + suppliers.append(pred) return suppliers @@ -1059,9 +1062,11 @@ def products_by_raw_material(self, raw_material=None, return_indices=False, netw if network_BOM: prods = [] for prod in self.products: - for pred in self.raw_material_suppliers_by_raw_material(rm_ind, return_indices=False, network_BOM=True): - if self.NBOM(product=prod, predecessor=pred, raw_material=rm_ind) > 0: - prods.append(prod) + if prod not in prods: + for pred in self.raw_material_suppliers_by_raw_material(rm_ind, return_indices=False, network_BOM=True): + if self.NBOM(product=prod, predecessor=pred, raw_material=rm_ind) > 0: + prods.append(prod) + break # [prod for prod in self.products if self.NBOM(product=prod, predecessor=None, raw_material=rm_ind) > 0] else: prods = [prod for prod in self.products if prod.BOM(raw_material=rm_ind) > 0] @@ -1376,7 +1381,8 @@ def disrupted(self): def __eq__(self, other): """Determine whether ``other`` is equal to the node. Two nodes are - considered equal if their indices are equal. + considered equal if their indices are equal. Returns ``False`` if ``other`` + is not a |class_node|. Parameters ---------- @@ -1389,7 +1395,10 @@ def __eq__(self, other): True if the nodes are equal, False otherwise. """ - return other is not None and self.index == other.index + if not isinstance(other, SupplyChainNode): + return False + else: + return self.index == other.index def __ne__(self, other): """Determine whether ``other`` is not equal to the node. Two nodes are diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 136440d..5cb4ccc 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -309,8 +309,16 @@ def get_bill_of_materials(self, raw_material): The BOM number for the (raw material, product) pair. """ try: - _, rm_ind = self.network.parse_product(raw_material) - + # Can't use network.parse_product because self.network might be None + # (but BOM may still have been added to product). + if raw_material is None: + raise TypeError('raw_material may not be None.') + elif isinstance(raw_material, SupplyChainProduct): + rm_ind = raw_material.index + elif isinstance(raw_material, int): + rm_ind = raw_material + else: + raise TypeError('raw_material must be a SupplyChainProduct or an int.') # Return BOM number, if BOM entry exists. return self._bill_of_materials[rm_ind] except: @@ -405,7 +413,8 @@ def inventory_policy(self, value): def __eq__(self, other): """Determine whether ``other`` is equal to the product. Two products are - considered equal if their indices are equal. + considered equal if their indices are equal. Returns ``False`` if ``other`` + is not a |class_product|. Parameters ---------- @@ -418,7 +427,10 @@ def __eq__(self, other): True if the products are equal, False otherwise. """ - return self.index == (other.index if other is not None else None) + if not isinstance(other, SupplyChainProduct): + return False + else: + return self.index == other.index def __ne__(self, other): """Determine whether ``other`` is not equal to the product. Two products are diff --git a/tests/additional_files/test_demand_source_TestFromDict_data.json b/tests/additional_files/test_demand_source_TestFromDict_data.json index 826763b..ee0475c 100644 --- a/tests/additional_files/test_demand_source_TestFromDict_data.json +++ b/tests/additional_files/test_demand_source_TestFromDict_data.json @@ -1,972 +1 @@ -{ - "_id": "", - "instances": [ - { - "name": "missing_mean", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "standard_deviation": 1, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - }, - { - "name": "missing_demand_list", - "description": "", - "data": { - "nodes": [ - { - "_index": 3, - "name": null, - "network": null, - "_products_by_index": { - "-6": -6 - }, - "_dummy_product": -6, - "_external_supplier_dummy_product": -7, - "_predecessors": [ - null - ], - "_successors": [ - 2 - ], - "local_holding_cost": 2, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 2, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 3, - "product": null, - "base_stock_level": 10.69, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": "U", - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 2, - "name": null, - "network": null, - "_products_by_index": { - "-4": -4 - }, - "_dummy_product": -4, - "_external_supplier_dummy_product": -5, - "_predecessors": [ - 3 - ], - "_successors": [ - 1 - ], - "local_holding_cost": 4, - "echelon_holding_cost": 2, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 0, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 2, - "product": null, - "base_stock_level": 5.53, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - }, - { - "_index": 1, - "name": null, - "network": null, - "_products_by_index": { - "-2": -2 - }, - "_dummy_product": -2, - "_external_supplier_dummy_product": -3, - "_predecessors": [ - 2 - ], - "_successors": [ - null - ], - "local_holding_cost": 7, - "echelon_holding_cost": 3, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": 37.12, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": 1, - "order_lead_time": null, - "demand_source": { - "type": "N", - "mean": 5, - "standard_deviation": 1, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": "BS", - "node": 1, - "product": null, - "base_stock_level": 6.49, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "disruption_process": { - "random_process_type": null, - "disruption_type": "OP", - "disruption_probability": null, - "recovery_probability": null, - "disruption_state_list": null, - "disrupted": false - }, - "order_capacity": null, - "processing_time": null, - "external_inbound_cst": null, - "external_outbound_cst": null, - "demand_bound_constant": null, - "units_required": null, - "original_label": null, - "net_demand_mean": null, - "net_demand_standard_deviation": null, - "larger_adjacent_node": null, - "larger_adjacent_node_is_downstream": null, - "max_replenishment_time": null, - "state_vars": null - } - ], - "_local_products": [ - { - "_index": -7, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -6, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -5, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -4, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -3, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - }, - { - "_index": -2, - "name": null, - "network": null, - "is_dummy": true, - "_bill_of_materials": {}, - "local_holding_cost": null, - "echelon_holding_cost": null, - "local_holding_cost_function": null, - "in_transit_holding_cost": null, - "stockout_cost": null, - "stockout_cost_function": null, - "revenue": null, - "shipment_lead_time": null, - "order_lead_time": null, - "demand_source": { - "type": null, - "mean": null, - "standard_deviation": null, - "demand_list": null, - "probabilities": null, - "lo": null, - "hi": null, - "n": null, - "p": null, - "round_to_int": null - }, - "initial_inventory_level": null, - "initial_orders": null, - "initial_shipments": null, - "_inventory_policy": { - "type": null, - "node": null, - "product": null, - "base_stock_level": null, - "order_quantity": null, - "reorder_point": null, - "order_up_to_level": null - }, - "supply_type": null, - "order_capacity": null, - "state_vars": [] - } - ], - "period": 0, - "max_max_replenishment_time": null - }, - "type": "network" - } - ], - "last_updated": "2024-04-21 22:58:09.524246" -} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_mean", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_list", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:00.827607"} \ No newline at end of file diff --git a/tests/additional_files/test_disruption_process_TestFromDict_data.json b/tests/additional_files/test_disruption_process_TestFromDict_data.json index 433ed34..a2c5216 100644 --- a/tests/additional_files/test_disruption_process_TestFromDict_data.json +++ b/tests/additional_files/test_disruption_process_TestFromDict_data.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "missing_disruption_probability", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_disruption_state_list", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.532325"} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_disruption_probability", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_disruption_state_list", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:00.835964"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json index 59c0afb..d227e8f 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_4_2_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-05-04 11:24:40.947146"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_4_2", "description": "this is test_example_4_2", "data": {"revenue": 1, "purchase_cost": 0.3, "salvage_value": 0.12, "demand_mean": 50, "demand_sd": 8}, "type": "dict"}], "last_updated": "2024-05-10 22:09:13.381003"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json index 2569d21..08e44de 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.955647"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1", "description": "this is test_example_6_1", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:13.389284"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json index e19a114..456fbfd 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_6_1_with_order_capacity_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.960625"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_6_1_with_order_capacity", "description": "this is test_example_6_1_with_order_capacity", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": 25, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": 40, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:13.395008"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json index 3cc7d3f..cd4e247 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_example_9_5_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-05-04 11:24:40.950419"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_example_9_5", "description": "this is test_example_9_5", "data": {"holding_cost": 0.06, "fixed_cost": 18500, "demand_rate": 75000, "yield_mean": 0.8333333333333334, "yield_sd": 0.14085904245475275}, "type": "dict"}], "last_updated": "2024-05-10 22:09:13.384330"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json index cc8fafe..f5c9641 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_figure_6_14_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:40.968723"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_figure_6_14", "description": "this is test_figure_6_14", "data": {"nodes": [{"_index": 1, "name": "Raw_Material", "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [], "_successors": [2], "local_holding_cost": 0.01, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 1, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": "Process_Wafers", "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [1], "_successors": [3], "local_holding_cost": 0.03, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 2, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": "Package_Test_Wafers", "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [2], "_successors": [5], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 3, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": "Imager_Base", "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [], "_successors": [5], "local_holding_cost": 0.06, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 4, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 5, "name": "Imager_Assembly", "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [3, 4], "_successors": [6], "local_holding_cost": 0.12, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 5, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 6, "name": "Ship_to_Final_Assembly", "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [5], "_successors": [10], "local_holding_cost": 0.13, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 6, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 7, "name": "Camera", "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 7, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 6, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 8, "name": "Circuit_Board", "network": null, "_products_by_index": {"-16": -16}, "_dummy_product": -16, "_external_supplier_dummy_product": -17, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.08, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 8, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 4, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 9, "name": "Other_Parts", "network": null, "_products_by_index": {"-18": -18}, "_dummy_product": -18, "_external_supplier_dummy_product": -19, "_predecessors": [], "_successors": [10], "local_holding_cost": 0.04, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 9, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 3, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 10, "name": "Build_Test_Pack", "network": null, "_products_by_index": {"-20": -20}, "_dummy_product": -20, "_external_supplier_dummy_product": -21, "_predecessors": [6, 7, 8, 9], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": "N", "mean": 0, "standard_deviation": 10, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": 10, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": 2, "external_inbound_cst": null, "external_outbound_cst": 2, "demand_bound_constant": 1.6448536269514722, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -16, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -17, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -18, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -19, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -20, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -21, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:13.403552"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json index 72899f6..054d24f 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "order_quantity_fg": {"-10": 36.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "order_quantity_fg": {"-10": 25.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "order_quantity_fg": {"-10": 29.000000000000014}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "order_quantity_fg": {"-10": 27.999999999999986}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "order_quantity_fg": {"-10": 35.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "order_quantity_fg": {"-10": 24.000000000000007}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "order_quantity_fg": {"-10": 28.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "order_quantity_fg": {"-10": 43.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "order_quantity_fg": {"-10": 22.999999999999993}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "order_quantity_fg": {"-10": 18.99999999999998}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "order_quantity_fg": {"-8": 25.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "order_quantity_fg": {"-8": 29.000000000000014}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "order_quantity_fg": {"-8": 27.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "order_quantity_fg": {"-8": 35.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "order_quantity_fg": {"-8": 24.000000000000007}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "order_quantity_fg": {"-8": 28.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "order_quantity_fg": {"-8": 43.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "order_quantity_fg": {"-8": 22.999999999999993}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "order_quantity_fg": {"-8": 18.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "order_quantity_fg": {"-6": 36.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "order_quantity_fg": {"-6": 25.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "order_quantity_fg": {"-6": 29.000000000000007}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "order_quantity_fg": {"-6": 27.999999999999993}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "order_quantity_fg": {"-6": 35.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "order_quantity_fg": {"-6": 24.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "order_quantity_fg": {"-6": 28.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "order_quantity_fg": {"-6": 43.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "order_quantity_fg": {"-6": 23.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "order_quantity_fg": {"-6": 18.999999999999986}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "order_quantity_fg": {"-4": 36.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "order_quantity_fg": {"-4": 25.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "order_quantity_fg": {"-4": 29.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "order_quantity_fg": {"-4": 27.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "order_quantity_fg": {"-4": 35.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "order_quantity_fg": {"-4": 24.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "order_quantity_fg": {"-4": 28.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "order_quantity_fg": {"-4": 43.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "order_quantity_fg": {"-4": 22.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "order_quantity_fg": {"-4": 18.999999999999986}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "order_quantity_fg": {"-2": 36.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "order_quantity_fg": {"-2": 25.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "order_quantity_fg": {"-2": 29.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "order_quantity_fg": {"-2": 27.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "order_quantity_fg": {"-2": 35.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "order_quantity_fg": {"-2": 24.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "order_quantity_fg": {"-2": 28.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "order_quantity_fg": {"-2": 43.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "order_quantity_fg": {"-2": 22.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "order_quantity_fg": {"-2": 18.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_local_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.340322"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false", "description": "this is test_omit_state_vars_false", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 2.9299999999999997}, "disrupted": false, "holding_cost_incurred": 10.254999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 30.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 30.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 36.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 36.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 36.0}}, "backorders_by_successor": {"4": {"-10": 3.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 36.0}}, "order_quantity_fg": {"-10": 36.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 36.0}, "inventory_level": {"-10": -3.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 66.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 62.93}, "fill_rate": {"-10": 0.9534848484848485}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 25.0]}}, "inbound_shipment": {"null": {"-11": 36.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 25.0}}, "outbound_shipment": {"4": {"-10": 28.07}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 25.0}}, "order_quantity_fg": {"-10": 25.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 7.93}, "disrupted": false, "holding_cost_incurred": 27.755, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.245, "revenue_earned": 0.0, "total_cost_incurred": 126.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 25.0}, "demand_met_from_stock_cumul": {"-10": 87.93}, "fill_rate": {"-10": 0.9662637362637363}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 25.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 125.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 120.86000000000001}, "fill_rate": {"-10": 0.9668800000000001}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 34.0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 119.0, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 163.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 153.79000000000002}, "fill_rate": {"-10": 0.9434969325153375}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 38.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 31.07}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.745, "revenue_earned": 0.0, "total_cost_incurred": 133.0, "demand_cumul": {"-10": 189.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 179.79000000000002}, "fill_rate": {"-10": 0.9512698412698414}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.000000000000014]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.000000000000014}}, "outbound_shipment": {"4": {"-10": 29.000000000000014}}, "on_order_by_predecessor": {"null": {"-11": 29.000000000000014}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.000000000000014}}, "order_quantity_fg": {"-10": 29.000000000000014}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.000000000000014}, "inventory_level": {"-10": 3.9299999999999855}, "disrupted": false, "holding_cost_incurred": 13.75499999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.50000000000006, "revenue_earned": 0.0, "total_cost_incurred": 115.25500000000001, "demand_cumul": {"-10": 218.0}, "demand_met_from_stock": {"-10": 29.000000000000014}, "demand_met_from_stock_cumul": {"-10": 208.79000000000002}, "fill_rate": {"-10": 0.9577522935779818}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 29.000000000000014}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 249.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 239.79000000000002}, "fill_rate": {"-10": 0.9630120481927712}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 283.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 272.72}, "fill_rate": {"-10": 0.9636749116607775}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 27.999999999999986]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 27.999999999999986}}, "outbound_shipment": {"4": {"-10": 29.069999999999986}}, "on_order_by_predecessor": {"null": {"-11": 27.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 27.999999999999986}}, "order_quantity_fg": {"-10": 27.999999999999986}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.999999999999986}, "inventory_level": {"-10": 4.930000000000014}, "disrupted": false, "holding_cost_incurred": 17.25500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.74499999999995, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 311.0}, "demand_met_from_stock": {"-10": 27.999999999999986}, "demand_met_from_stock_cumul": {"-10": 300.72}, "fill_rate": {"-10": 0.9669453376205789}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 31.0]}}, "inbound_shipment": {"null": {"-11": 27.999999999999986}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 31.0}}, "outbound_shipment": {"4": {"-10": 31.0}}, "on_order_by_predecessor": {"null": {"-11": 31.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 31.0}}, "order_quantity_fg": {"-10": 31.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 31.0}, "inventory_level": {"-10": 1.9299999999999997}, "disrupted": false, "holding_cost_incurred": 6.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 108.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 342.0}, "demand_met_from_stock": {"-10": 31.0}, "demand_met_from_stock_cumul": {"-10": 331.72}, "fill_rate": {"-10": 0.9699415204678363}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 26.0]}}, "inbound_shipment": {"null": {"-11": 31.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 26.0}}, "outbound_shipment": {"4": {"-10": 26.0}}, "on_order_by_predecessor": {"null": {"-11": 26.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 26.0}}, "order_quantity_fg": {"-10": 26.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 26.0}, "inventory_level": {"-10": 6.93}, "disrupted": false, "holding_cost_incurred": 24.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 368.0}, "demand_met_from_stock": {"-10": 26.0}, "demand_met_from_stock_cumul": {"-10": 357.72}, "fill_rate": {"-10": 0.9720652173913045}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 26.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 401.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 390.65000000000003}, "fill_rate": {"-10": 0.9741895261845387}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 34.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 34.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 34.0}}, "backorders_by_successor": {"4": {"-10": 1.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 34.0}}, "order_quantity_fg": {"-10": 34.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 34.0}, "inventory_level": {"-10": -1.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 435.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 423.58000000000004}, "fill_rate": {"-10": 0.9737471264367817}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 34.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 30.07}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.245, "revenue_earned": 0.0, "total_cost_incurred": 119.0, "demand_cumul": {"-10": 464.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 452.58000000000004}, "fill_rate": {"-10": 0.9753879310344828}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 35.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 35.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 35.0}}, "backorders_by_successor": {"4": {"-10": 2.0700000000000003}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 35.0}}, "order_quantity_fg": {"-10": 35.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 35.0}, "inventory_level": {"-10": -2.0700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 499.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 485.51000000000005}, "fill_rate": {"-10": 0.9729659318637276}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 24.000000000000007]}}, "inbound_shipment": {"null": {"-11": 35.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 24.000000000000007}}, "outbound_shipment": {"4": {"-10": 26.070000000000007}}, "on_order_by_predecessor": {"null": {"-11": 24.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 24.000000000000007}}, "order_quantity_fg": {"-10": 24.000000000000007}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.000000000000007}, "inventory_level": {"-10": 8.929999999999993}, "disrupted": false, "holding_cost_incurred": 31.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 91.24500000000003, "revenue_earned": 0.0, "total_cost_incurred": 122.5, "demand_cumul": {"-10": 523.0}, "demand_met_from_stock": {"-10": 24.000000000000007}, "demand_met_from_stock_cumul": {"-10": 509.51000000000005}, "fill_rate": {"-10": 0.974206500956023}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 28.0]}}, "inbound_shipment": {"null": {"-11": 24.000000000000007}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 28.0}}, "outbound_shipment": {"4": {"-10": 28.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 28.0}}, "order_quantity_fg": {"-10": 28.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 4.93}, "disrupted": false, "holding_cost_incurred": 17.255, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 98.0, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 551.0}, "demand_met_from_stock": {"-10": 28.0}, "demand_met_from_stock_cumul": {"-10": 537.51}, "fill_rate": {"-10": 0.9755172413793103}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 29.0]}}, "inbound_shipment": {"null": {"-11": 28.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 29.0}}, "outbound_shipment": {"4": {"-10": 29.0}}, "on_order_by_predecessor": {"null": {"-11": 29.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 29.0}}, "order_quantity_fg": {"-10": 29.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 29.0}, "inventory_level": {"-10": 3.9299999999999997}, "disrupted": false, "holding_cost_incurred": 13.754999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 101.5, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 580.0}, "demand_met_from_stock": {"-10": 29.0}, "demand_met_from_stock_cumul": {"-10": 566.51}, "fill_rate": {"-10": 0.9767413793103448}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 33.0]}}, "inbound_shipment": {"null": {"-11": 29.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 33.0}}, "outbound_shipment": {"4": {"-10": 32.93}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"4": {"-10": 0.07000000000000028}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 33.0}}, "order_quantity_fg": {"-10": 33.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": -0.07000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.255, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 613.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 599.4399999999999}, "fill_rate": {"-10": 0.977879282218597}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 43.0]}}, "inbound_shipment": {"null": {"-11": 33.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 43.0}}, "outbound_shipment": {"4": {"-10": 33.0}}, "on_order_by_predecessor": {"null": {"-11": 43.0}}, "backorders_by_successor": {"4": {"-10": 10.07}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 43.0}}, "order_quantity_fg": {"-10": 43.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 43.0}, "inventory_level": {"-10": -10.07}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.5, "revenue_earned": 0.0, "total_cost_incurred": 115.5, "demand_cumul": {"-10": 656.0}, "demand_met_from_stock": {"-10": 32.93}, "demand_met_from_stock_cumul": {"-10": 632.3699999999999}, "fill_rate": {"-10": 0.9639786585365852}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.999999999999993]}}, "inbound_shipment": {"null": {"-11": 43.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 22.999999999999993}}, "outbound_shipment": {"4": {"-10": 33.06999999999999}}, "on_order_by_predecessor": {"null": {"-11": 23.0}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.999999999999993}}, "order_quantity_fg": {"-10": 22.999999999999993}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 23.0}, "inventory_level": {"-10": 9.930000000000007}, "disrupted": false, "holding_cost_incurred": 34.755000000000024, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 115.74499999999998, "revenue_earned": 0.0, "total_cost_incurred": 150.5, "demand_cumul": {"-10": 679.0}, "demand_met_from_stock": {"-10": 22.999999999999993}, "demand_met_from_stock_cumul": {"-10": 655.3699999999999}, "fill_rate": {"-10": 0.9651988217967598}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 18.99999999999998]}}, "inbound_shipment": {"null": {"-11": 22.999999999999993}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 18.999999999999986}}, "outbound_shipment": {"4": {"-10": 18.999999999999986}}, "on_order_by_predecessor": {"null": {"-11": 18.999999999999986}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 18.99999999999998}}, "order_quantity_fg": {"-10": 18.99999999999998}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.999999999999986}, "inventory_level": {"-10": 13.930000000000014}, "disrupted": false, "holding_cost_incurred": 48.75500000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 66.49999999999994, "revenue_earned": 0.0, "total_cost_incurred": 115.255, "demand_cumul": {"-10": 698.0}, "demand_met_from_stock": {"-10": 18.999999999999986}, "demand_met_from_stock_cumul": {"-10": 674.3699999999999}, "fill_rate": {"-10": 0.9661461318051574}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 30.0]}}, "inbound_shipment": {"null": {"-11": 18.99999999999998}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 30.0}}, "outbound_shipment": {"4": {"-10": 30.0}}, "on_order_by_predecessor": {"null": {"-11": 30.000000000000007}}, "backorders_by_successor": {"4": {"-10": 0.0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 30.0}}, "order_quantity_fg": {"-10": 30.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.000000000000007}, "inventory_level": {"-10": 2.9299999999999926}, "disrupted": false, "holding_cost_incurred": 10.254999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 105.0, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 728.0}, "demand_met_from_stock": {"-10": 30.0}, "demand_met_from_stock_cumul": {"-10": 704.3699999999999}, "fill_rate": {"-10": 0.9675412087912086}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 38.0]}}, "inbound_shipment": {"null": {"-11": 30.0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 38.0}}, "outbound_shipment": {"4": {"-10": 32.92999999999999}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 38.0}}, "order_quantity_fg": {"-10": 38.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 115.25499999999997, "revenue_earned": 0.0, "total_cost_incurred": 115.25499999999997, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 32.92999999999999}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0.9625326370757178}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [38.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 38.0}}, "backorders_by_successor": {"4": {"-10": 5.070000000000007}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 38.0}, "inventory_level": {"-10": -5.070000000000007}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 766.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 737.2999999999998}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"4": {"-10": [0]}}, "inbound_order": {"4": {"-10": 0}}, "outbound_shipment": {"4": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"4": {"-10": 0}}, "outbound_disrupted_items": {"4": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 30.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 30.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 36.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 36.0}}, "backorders_by_successor": {"3": {"-8": 2.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -2.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 66.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 63.3}, "fill_rate": {"-8": 0.959090909090909}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.07]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 25.0}}, "outbound_shipment": {"3": {"-8": 27.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 28.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 25.0}}, "order_quantity_fg": {"-8": 25.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.07}, "inventory_level": {"-8": 5.229999999999997}, "disrupted": false, "holding_cost_incurred": 13.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 69.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 91.0}, "demand_met_from_stock": {"-8": 25.0}, "demand_met_from_stock_cumul": {"-8": 88.3}, "fill_rate": {"-8": 0.9703296703296703}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 28.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 125.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 121.6}, "fill_rate": {"-8": 0.9728}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 34.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 32.93}}, "on_order_by_predecessor": {"5": {"-10": 39.07}}, "backorders_by_successor": {"3": {"-8": 5.770000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 39.07}, "inventory_level": {"-8": -5.770000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 82.325, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 163.0}, "demand_met_from_stock": {"-8": 32.23}, "demand_met_from_stock_cumul": {"-8": 153.82999999999998}, "fill_rate": {"-8": 0.9437423312883435}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.07]}}, "inbound_shipment": {"5": {"-10": 34.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 31.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 31.069999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.069999999999993}, "inventory_level": {"-8": 2.229999999999997}, "disrupted": false, "holding_cost_incurred": 5.574999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 79.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 85.0, "demand_cumul": {"-8": 189.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 179.82999999999998}, "fill_rate": {"-8": 0.9514814814814814}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.000000000000014]}}, "inbound_shipment": {"5": {"-10": 31.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.000000000000007}}, "outbound_shipment": {"3": {"-8": 29.000000000000007}}, "on_order_by_predecessor": {"5": {"-10": 29.000000000000007}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.000000000000014}}, "order_quantity_fg": {"-8": 29.000000000000014}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.000000000000007}, "inventory_level": {"-8": 4.29999999999999}, "disrupted": false, "holding_cost_incurred": 10.749999999999975, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.50000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.24999999999999, "demand_cumul": {"-8": 218.0}, "demand_met_from_stock": {"-8": 29.000000000000007}, "demand_met_from_stock_cumul": {"-8": 208.82999999999998}, "fill_rate": {"-8": 0.9579357798165137}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.000000000000014}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 30.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.999999999999993}, "inventory_level": {"-8": 2.3000000000000043}, "disrupted": false, "holding_cost_incurred": 5.750000000000011, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 249.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 239.82999999999998}, "fill_rate": {"-8": 0.9631726907630521}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.300000000000004}}, "on_order_by_predecessor": {"5": {"-10": 34.0}}, "backorders_by_successor": {"3": {"-8": 0.6999999999999957}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -0.6999999999999957}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25000000000001, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 283.0}, "demand_met_from_stock": {"-8": 33.300000000000004}, "demand_met_from_stock_cumul": {"-8": 273.13}, "fill_rate": {"-8": 0.9651236749116607}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.069999999999986]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 27.999999999999993}}, "outbound_shipment": {"3": {"-8": 28.69999999999999}}, "on_order_by_predecessor": {"5": {"-10": 29.069999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 27.999999999999986}}, "order_quantity_fg": {"-8": 27.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 29.069999999999986}, "inventory_level": {"-8": 4.230000000000011}, "disrupted": false, "holding_cost_incurred": 10.575000000000028, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 71.74999999999997, "revenue_earned": 0.0, "total_cost_incurred": 82.325, "demand_cumul": {"-8": 311.0}, "demand_met_from_stock": {"-8": 27.999999999999993}, "demand_met_from_stock_cumul": {"-8": 301.13}, "fill_rate": {"-8": 0.9682636655948553}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 31.0]}}, "inbound_shipment": {"5": {"-10": 29.069999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 31.0}}, "outbound_shipment": {"3": {"-8": 31.0}}, "on_order_by_predecessor": {"5": {"-10": 31.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 31.0}}, "order_quantity_fg": {"-8": 31.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 31.0}, "inventory_level": {"-8": 2.299999999999997}, "disrupted": false, "holding_cost_incurred": 5.749999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 77.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 342.0}, "demand_met_from_stock": {"-8": 31.0}, "demand_met_from_stock_cumul": {"-8": 332.13}, "fill_rate": {"-8": 0.971140350877193}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.0]}}, "inbound_shipment": {"5": {"-10": 31.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 26.0}}, "outbound_shipment": {"3": {"-8": 26.0}}, "on_order_by_predecessor": {"5": {"-10": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 26.0}}, "order_quantity_fg": {"-8": 26.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 7.299999999999997}, "disrupted": false, "holding_cost_incurred": 18.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 65.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 368.0}, "demand_met_from_stock": {"-8": 26.0}, "demand_met_from_stock_cumul": {"-8": 358.13}, "fill_rate": {"-8": 0.973179347826087}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 33.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.0}, "inventory_level": {"-8": 0.29999999999999716}, "disrupted": false, "holding_cost_incurred": 0.7499999999999929, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 401.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 391.13}, "fill_rate": {"-8": 0.9753865336658354}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 34.0}}, "outbound_shipment": {"3": {"-8": 33.23}}, "on_order_by_predecessor": {"5": {"-10": 34.07}}, "backorders_by_successor": {"3": {"-8": 0.7700000000000031}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 34.0}}, "order_quantity_fg": {"-8": 34.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.07}, "inventory_level": {"-8": -0.7700000000000031}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07499999999999, "revenue_earned": 0.0, "total_cost_incurred": 83.07499999999999, "demand_cumul": {"-8": 435.0}, "demand_met_from_stock": {"-8": 33.23}, "demand_met_from_stock_cumul": {"-8": 424.36}, "fill_rate": {"-8": 0.9755402298850575}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.07]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.770000000000003}}, "on_order_by_predecessor": {"5": {"-10": 30.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.07}, "inventory_level": {"-8": 3.229999999999997}, "disrupted": false, "holding_cost_incurred": 8.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 74.42500000000001, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 464.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 453.36}, "fill_rate": {"-8": 0.9770689655172414}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 30.07}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 35.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 34.99999999999999}}, "backorders_by_successor": {"3": {"-8": 1.7000000000000028}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 35.0}}, "order_quantity_fg": {"-8": 35.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 34.99999999999999}, "inventory_level": {"-8": -1.7000000000000028}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 499.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 486.66}, "fill_rate": {"-8": 0.9752705410821644}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 26.070000000000007]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 24.0}}, "outbound_shipment": {"3": {"-8": 25.700000000000003}}, "on_order_by_predecessor": {"5": {"-10": 26.07}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 24.000000000000007}}, "order_quantity_fg": {"-8": 24.000000000000007}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 26.07}, "inventory_level": {"-8": 7.229999999999997}, "disrupted": false, "holding_cost_incurred": 18.074999999999992, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 64.25, "revenue_earned": 0.0, "total_cost_incurred": 82.32499999999999, "demand_cumul": {"-8": 523.0}, "demand_met_from_stock": {"-8": 24.0}, "demand_met_from_stock_cumul": {"-8": 510.66}, "fill_rate": {"-8": 0.9764053537284896}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 28.0]}}, "inbound_shipment": {"5": {"-10": 26.070000000000007}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 28.0}}, "outbound_shipment": {"3": {"-8": 28.0}}, "on_order_by_predecessor": {"5": {"-10": 27.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 28.0}}, "order_quantity_fg": {"-8": 28.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 27.999999999999993}, "inventory_level": {"-8": 5.300000000000004}, "disrupted": false, "holding_cost_incurred": 13.25000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 70.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 551.0}, "demand_met_from_stock": {"-8": 28.0}, "demand_met_from_stock_cumul": {"-8": 538.6600000000001}, "fill_rate": {"-8": 0.9776043557168785}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 29.0]}}, "inbound_shipment": {"5": {"-10": 28.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 29.0}}, "outbound_shipment": {"3": {"-8": 29.0}}, "on_order_by_predecessor": {"5": {"-10": 28.999999999999993}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 29.0}}, "order_quantity_fg": {"-8": 29.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 28.999999999999993}, "inventory_level": {"-8": 4.300000000000004}, "disrupted": false, "holding_cost_incurred": 10.75000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 72.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 580.0}, "demand_met_from_stock": {"-8": 29.0}, "demand_met_from_stock_cumul": {"-8": 567.6600000000001}, "fill_rate": {"-8": 0.9787241379310346}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.93]}}, "inbound_shipment": {"5": {"-10": 29.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 33.0}}, "outbound_shipment": {"3": {"-8": 33.0}}, "on_order_by_predecessor": {"5": {"-10": 32.99999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 33.0}}, "order_quantity_fg": {"-8": 33.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 32.99999999999999}, "inventory_level": {"-8": 0.30000000000000426}, "disrupted": false, "holding_cost_incurred": 0.7500000000000107, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 82.5, "revenue_earned": 0.0, "total_cost_incurred": 83.25000000000001, "demand_cumul": {"-8": 613.0}, "demand_met_from_stock": {"-8": 33.0}, "demand_met_from_stock_cumul": {"-8": 600.6600000000001}, "fill_rate": {"-8": 0.9798694942903753}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.0]}}, "inbound_shipment": {"5": {"-10": 32.93}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 43.0}}, "outbound_shipment": {"3": {"-8": 33.230000000000004}}, "on_order_by_predecessor": {"5": {"-10": 43.07}}, "backorders_by_successor": {"3": {"-8": 9.769999999999996}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 43.0}}, "order_quantity_fg": {"-8": 43.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 43.07}, "inventory_level": {"-8": -9.769999999999996}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.07500000000002, "revenue_earned": 0.0, "total_cost_incurred": 83.07500000000002, "demand_cumul": {"-8": 656.0}, "demand_met_from_stock": {"-8": 33.230000000000004}, "demand_met_from_stock_cumul": {"-8": 633.8900000000001}, "fill_rate": {"-8": 0.9662957317073172}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 33.06999999999999]}}, "inbound_shipment": {"5": {"-10": 33.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 23.0}}, "outbound_shipment": {"3": {"-8": 32.769999999999996}}, "on_order_by_predecessor": {"5": {"-10": 33.06999999999999}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 22.999999999999993}}, "order_quantity_fg": {"-8": 22.999999999999993}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 33.06999999999999}, "inventory_level": {"-8": 0.23000000000000398}, "disrupted": false, "holding_cost_incurred": 0.57500000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 81.92499999999998, "revenue_earned": 0.0, "total_cost_incurred": 82.5, "demand_cumul": {"-8": 679.0}, "demand_met_from_stock": {"-8": 23.0}, "demand_met_from_stock_cumul": {"-8": 656.8900000000001}, "fill_rate": {"-8": 0.967437407952872}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 18.999999999999986]}}, "inbound_shipment": {"5": {"-10": 33.06999999999999}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 18.999999999999986}}, "outbound_shipment": {"3": {"-8": 18.999999999999986}}, "on_order_by_predecessor": {"5": {"-10": 18.999999999999986}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 18.999999999999986}}, "order_quantity_fg": {"-8": 18.999999999999986}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 18.999999999999986}, "inventory_level": {"-8": 14.300000000000011}, "disrupted": false, "holding_cost_incurred": 35.75000000000003, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 47.499999999999964, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 698.0}, "demand_met_from_stock": {"-8": 18.999999999999986}, "demand_met_from_stock_cumul": {"-8": 675.8900000000001}, "fill_rate": {"-8": 0.9683237822349572}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 30.0]}}, "inbound_shipment": {"5": {"-10": 18.999999999999986}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 30.0}}, "outbound_shipment": {"3": {"-8": 30.0}}, "on_order_by_predecessor": {"5": {"-10": 30.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 30.0}}, "order_quantity_fg": {"-8": 30.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 30.0}, "inventory_level": {"-8": 3.299999999999997}, "disrupted": false, "holding_cost_incurred": 8.249999999999993, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 75.0, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 728.0}, "demand_met_from_stock": {"-8": 30.0}, "demand_met_from_stock_cumul": {"-8": 705.8900000000001}, "fill_rate": {"-8": 0.969629120879121}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 32.92999999999999]}}, "inbound_shipment": {"5": {"-10": 30.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 38.0}}, "outbound_shipment": {"3": {"-8": 33.3}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 38.0}}, "order_quantity_fg": {"-8": 38.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 83.25, "revenue_earned": 0.0, "total_cost_incurred": 83.25, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 33.3}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0.9650000000000001}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [32.92999999999999, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 38.0}}, "backorders_by_successor": {"3": {"-8": 4.700000000000003}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-8": 38.0}, "inventory_level": {"-8": -4.700000000000003}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 766.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 739.19}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 36.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 36.0}}, "backorders_by_successor": {"2": {"-6": 0.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 36.0}}, "order_quantity_fg": {"-6": 36.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 36.0}, "inventory_level": {"-6": -0.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 66.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 65.14}, "fill_rate": {"-6": 0.9869696969696969}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 27.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 25.0}}, "outbound_shipment": {"2": {"-6": 25.86}}, "on_order_by_predecessor": {"4": {"-8": 27.700000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 25.0}}, "order_quantity_fg": {"-6": 25.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 27.700000000000003}, "inventory_level": {"-6": 7.439999999999998}, "disrupted": false, "holding_cost_incurred": 11.159999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 38.79, "revenue_earned": 0.0, "total_cost_incurred": 49.949999999999996, "demand_cumul": {"-6": 91.0}, "demand_met_from_stock": {"-6": 25.0}, "demand_met_from_stock_cumul": {"-6": 90.14}, "fill_rate": {"-6": 0.9905494505494505}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 27.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 124.14}, "fill_rate": {"-6": 0.99312}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.93]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 34.44}}, "on_order_by_predecessor": {"4": {"-8": 38.7}}, "backorders_by_successor": {"2": {"-6": 3.5600000000000023}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.7}, "inventory_level": {"-6": -3.5600000000000023}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 51.66, "revenue_earned": 0.0, "total_cost_incurred": 51.66, "demand_cumul": {"-6": 163.0}, "demand_met_from_stock": {"-6": 34.44}, "demand_met_from_stock_cumul": {"-6": 158.57999999999998}, "fill_rate": {"-6": 0.972883435582822}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.770000000000003]}}, "inbound_shipment": {"4": {"-8": 32.93}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 29.560000000000002}}, "on_order_by_predecessor": {"4": {"-8": 31.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.770000000000003}, "inventory_level": {"-6": 3.3699999999999974}, "disrupted": false, "holding_cost_incurred": 5.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 44.34, "revenue_earned": 0.0, "total_cost_incurred": 49.394999999999996, "demand_cumul": {"-6": 189.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 184.57999999999998}, "fill_rate": {"-6": 0.9766137566137565}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.000000000000007]}}, "inbound_shipment": {"4": {"-8": 31.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.000000000000007}}, "outbound_shipment": {"2": {"-6": 29.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.000000000000007}}, "order_quantity_fg": {"-6": 29.000000000000007}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.500000000000014, "revenue_earned": 0.0, "total_cost_incurred": 52.71000000000001, "demand_cumul": {"-6": 218.0}, "demand_met_from_stock": {"-6": 29.000000000000007}, "demand_met_from_stock_cumul": {"-6": 213.57999999999998}, "fill_rate": {"-6": 0.9797247706422018}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 29.000000000000007}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 249.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 244.57999999999998}, "fill_rate": {"-6": 0.9822489959839357}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.300000000000004]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 283.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 278.58}, "fill_rate": {"-6": 0.984381625441696}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.69999999999999]}}, "inbound_shipment": {"4": {"-8": 33.300000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 27.999999999999993}}, "outbound_shipment": {"2": {"-6": 27.999999999999993}}, "on_order_by_predecessor": {"4": {"-8": 28.69999999999999}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 27.999999999999993}}, "order_quantity_fg": {"-6": 27.999999999999993}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.69999999999999}, "inventory_level": {"-6": 6.440000000000012}, "disrupted": false, "holding_cost_incurred": 9.660000000000018, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 41.999999999999986, "revenue_earned": 0.0, "total_cost_incurred": 51.660000000000004, "demand_cumul": {"-6": 311.0}, "demand_met_from_stock": {"-6": 27.999999999999993}, "demand_met_from_stock_cumul": {"-6": 306.58}, "fill_rate": {"-6": 0.9857877813504823}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 31.0]}}, "inbound_shipment": {"4": {"-8": 28.69999999999999}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 31.0}}, "outbound_shipment": {"2": {"-6": 31.0}}, "on_order_by_predecessor": {"4": {"-8": 31.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 31.0}}, "order_quantity_fg": {"-6": 31.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 31.0}, "inventory_level": {"-6": 4.140000000000001}, "disrupted": false, "holding_cost_incurred": 6.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 342.0}, "demand_met_from_stock": {"-6": 31.0}, "demand_met_from_stock_cumul": {"-6": 337.58}, "fill_rate": {"-6": 0.9870760233918128}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 26.0]}}, "inbound_shipment": {"4": {"-8": 31.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 26.0}}, "outbound_shipment": {"2": {"-6": 26.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 26.0}}, "order_quantity_fg": {"-6": 26.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 9.14}, "disrupted": false, "holding_cost_incurred": 13.71, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 39.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 368.0}, "demand_met_from_stock": {"-6": 26.0}, "demand_met_from_stock_cumul": {"-6": 363.58}, "fill_rate": {"-6": 0.9879891304347825}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 26.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.0}, "inventory_level": {"-6": 2.1400000000000006}, "disrupted": false, "holding_cost_incurred": 3.210000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 401.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 396.58}, "fill_rate": {"-6": 0.9889775561097256}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.23]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 34.0}}, "outbound_shipment": {"2": {"-6": 34.0}}, "on_order_by_predecessor": {"4": {"-8": 34.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 34.0}}, "order_quantity_fg": {"-6": 34.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 34.0}, "inventory_level": {"-6": 1.1400000000000006}, "disrupted": false, "holding_cost_incurred": 1.7100000000000009, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 51.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 435.0}, "demand_met_from_stock": {"-6": 34.0}, "demand_met_from_stock_cumul": {"-6": 430.58}, "fill_rate": {"-6": 0.9898390804597701}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.770000000000003]}}, "inbound_shipment": {"4": {"-8": 33.23}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.770000000000003}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.770000000000003}, "inventory_level": {"-6": 5.369999999999997}, "disrupted": false, "holding_cost_incurred": 8.054999999999996, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 51.55499999999999, "demand_cumul": {"-6": 464.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 459.58}, "fill_rate": {"-6": 0.9904741379310344}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 29.770000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 35.0}}, "outbound_shipment": {"2": {"-6": 35.0}}, "on_order_by_predecessor": {"4": {"-8": 35.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 35.0}}, "order_quantity_fg": {"-6": 35.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 35.00000000000001}, "inventory_level": {"-6": 0.14000000000000057}, "disrupted": false, "holding_cost_incurred": 0.21000000000000085, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 52.5, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 499.0}, "demand_met_from_stock": {"-6": 35.0}, "demand_met_from_stock_cumul": {"-6": 494.58}, "fill_rate": {"-6": 0.9911422845691382}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 25.700000000000003]}}, "inbound_shipment": {"4": {"-8": 33.3}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 24.000000000000007}}, "outbound_shipment": {"2": {"-6": 24.000000000000007}}, "on_order_by_predecessor": {"4": {"-8": 25.70000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 24.0}}, "order_quantity_fg": {"-6": 24.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.70000000000001}, "inventory_level": {"-6": 9.43999999999999}, "disrupted": false, "holding_cost_incurred": 14.159999999999986, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 36.000000000000014, "revenue_earned": 0.0, "total_cost_incurred": 50.16, "demand_cumul": {"-6": 523.0}, "demand_met_from_stock": {"-6": 24.000000000000007}, "demand_met_from_stock_cumul": {"-6": 518.58}, "fill_rate": {"-6": 0.9915487571701722}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 28.0]}}, "inbound_shipment": {"4": {"-8": 25.700000000000003}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 28.0}}, "outbound_shipment": {"2": {"-6": 28.0}}, "on_order_by_predecessor": {"4": {"-8": 28.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 28.0}}, "order_quantity_fg": {"-6": 28.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 28.000000000000007}, "inventory_level": {"-6": 7.1399999999999935}, "disrupted": false, "holding_cost_incurred": 10.70999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 42.0, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 551.0}, "demand_met_from_stock": {"-6": 28.0}, "demand_met_from_stock_cumul": {"-6": 546.58}, "fill_rate": {"-6": 0.9919782214156081}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 29.0]}}, "inbound_shipment": {"4": {"-8": 28.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 29.0}}, "outbound_shipment": {"2": {"-6": 29.0}}, "on_order_by_predecessor": {"4": {"-8": 29.000000000000007}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 29.0}}, "order_quantity_fg": {"-6": 29.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 29.000000000000007}, "inventory_level": {"-6": 6.1399999999999935}, "disrupted": false, "holding_cost_incurred": 9.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 43.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 580.0}, "demand_met_from_stock": {"-6": 29.0}, "demand_met_from_stock_cumul": {"-6": 575.58}, "fill_rate": {"-6": 0.9923793103448276}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.0]}}, "inbound_shipment": {"4": {"-8": 29.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 33.0}}, "outbound_shipment": {"2": {"-6": 33.0}}, "on_order_by_predecessor": {"4": {"-8": 33.00000000000001}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 33.0}}, "order_quantity_fg": {"-6": 33.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 33.00000000000001}, "inventory_level": {"-6": 2.1399999999999935}, "disrupted": false, "holding_cost_incurred": 3.20999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 49.5, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 613.0}, "demand_met_from_stock": {"-6": 33.0}, "demand_met_from_stock_cumul": {"-6": 608.58}, "fill_rate": {"-6": 0.9927895595432301}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.230000000000004]}}, "inbound_shipment": {"4": {"-8": 33.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 43.0}}, "outbound_shipment": {"2": {"-6": 35.13999999999999}}, "on_order_by_predecessor": {"4": {"-8": 43.0}}, "backorders_by_successor": {"2": {"-6": 7.8600000000000065}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 43.0}}, "order_quantity_fg": {"-6": 43.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 43.0}, "inventory_level": {"-6": -7.8600000000000065}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.709999999999994, "revenue_earned": 0.0, "total_cost_incurred": 52.709999999999994, "demand_cumul": {"-6": 656.0}, "demand_met_from_stock": {"-6": 35.13999999999999}, "demand_met_from_stock_cumul": {"-6": 643.72}, "fill_rate": {"-6": 0.9812804878048781}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 32.769999999999996]}}, "inbound_shipment": {"4": {"-8": 33.230000000000004}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 22.999999999999993}}, "outbound_shipment": {"2": {"-6": 30.86}}, "on_order_by_predecessor": {"4": {"-8": 32.769999999999996}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 23.0}}, "order_quantity_fg": {"-6": 23.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 32.769999999999996}, "inventory_level": {"-6": 2.3700000000000045}, "disrupted": false, "holding_cost_incurred": 3.555000000000007, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 46.29, "revenue_earned": 0.0, "total_cost_incurred": 49.845000000000006, "demand_cumul": {"-6": 679.0}, "demand_met_from_stock": {"-6": 22.999999999999993}, "demand_met_from_stock_cumul": {"-6": 666.72}, "fill_rate": {"-6": 0.9819145802650958}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 18.999999999999986]}}, "inbound_shipment": {"4": {"-8": 32.769999999999996}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 18.999999999999986}}, "outbound_shipment": {"2": {"-6": 18.999999999999986}}, "on_order_by_predecessor": {"4": {"-8": 18.999999999999986}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 18.999999999999986}}, "order_quantity_fg": {"-6": 18.999999999999986}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.999999999999986}, "inventory_level": {"-6": 16.140000000000015}, "disrupted": false, "holding_cost_incurred": 24.210000000000022, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.49999999999998, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 698.0}, "demand_met_from_stock": {"-6": 18.999999999999986}, "demand_met_from_stock_cumul": {"-6": 685.72}, "fill_rate": {"-6": 0.9824068767908309}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 30.0]}}, "inbound_shipment": {"4": {"-8": 18.999999999999986}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 30.0}}, "outbound_shipment": {"2": {"-6": 30.0}}, "on_order_by_predecessor": {"4": {"-8": 30.0}}, "backorders_by_successor": {"2": {"-6": 0.0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 30.0}}, "order_quantity_fg": {"-6": 30.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 30.0}, "inventory_level": {"-6": 5.140000000000001}, "disrupted": false, "holding_cost_incurred": 7.710000000000001, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 45.0, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 728.0}, "demand_met_from_stock": {"-6": 30.0}, "demand_met_from_stock_cumul": {"-6": 715.72}, "fill_rate": {"-6": 0.9831318681318681}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 33.3]}}, "inbound_shipment": {"4": {"-8": 30.0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 38.0}}, "outbound_shipment": {"2": {"-6": 35.14}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 38.0}}, "order_quantity_fg": {"-6": 38.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 52.71, "revenue_earned": 0.0, "total_cost_incurred": 52.71, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 35.14}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0.9802349869451698}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [33.3, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 38.0}}, "backorders_by_successor": {"2": {"-6": 2.8599999999999994}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 38.0}, "inventory_level": {"-6": -2.8599999999999994}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 766.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 750.86}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"2": {"-6": [0]}}, "inbound_order": {"2": {"-6": 0}}, "outbound_shipment": {"2": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"2": {"-6": 0}}, "outbound_disrupted_items": {"2": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.0}, "inventory_level": {"-4": 3.8699999999999974}, "disrupted": false, "holding_cost_incurred": 3.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 36.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 36.0}}, "backorders_by_successor": {"1": {"-4": 2.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 36.0}}, "order_quantity_fg": {"-4": 36.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 36.0}, "inventory_level": {"-4": -2.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 66.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 63.87}, "fill_rate": {"-4": 0.9677272727272727}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"3": {"-6": [0, 25.86]}}, "inbound_shipment": {"3": {"-6": 35.14}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 25.0}}, "outbound_shipment": {"1": {"-4": 27.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 25.86}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 25.0}}, "order_quantity_fg": {"-4": 25.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 25.86}, "inventory_level": {"-4": 8.009999999999998}, "disrupted": false, "holding_cost_incurred": 8.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 27.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 35.14, "demand_cumul": {"-4": 91.0}, "demand_met_from_stock": {"-4": 25.0}, "demand_met_from_stock_cumul": {"-4": 88.87}, "fill_rate": {"-4": 0.9765934065934067}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 25.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 122.74000000000001}, "fill_rate": {"-4": 0.9819200000000001}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.44]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 34.0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 34.0, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 163.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 156.61}, "fill_rate": {"-4": 0.9607975460122701}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.560000000000002]}}, "inbound_shipment": {"3": {"-6": 34.44}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 30.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.560000000000002}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.560000000000002}, "inventory_level": {"-4": 4.309999999999995}, "disrupted": false, "holding_cost_incurred": 4.309999999999995, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.44, "demand_cumul": {"-4": 189.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 182.61}, "fill_rate": {"-4": 0.9661904761904763}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.000000000000007]}}, "inbound_shipment": {"3": {"-6": 29.560000000000002}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.000000000000007}}, "outbound_shipment": {"1": {"-4": 29.000000000000007}}, "on_order_by_predecessor": {"3": {"-6": 29.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.000000000000007}}, "order_quantity_fg": {"-4": 29.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.000000000000007}, "inventory_level": {"-4": 4.86999999999999}, "disrupted": false, "holding_cost_incurred": 4.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.000000000000007, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 218.0}, "demand_met_from_stock": {"-4": 29.000000000000007}, "demand_met_from_stock_cumul": {"-4": 211.61}, "fill_rate": {"-4": 0.9706880733944955}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 29.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 249.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 242.61}, "fill_rate": {"-4": 0.9743373493975904}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 283.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 276.48}, "fill_rate": {"-4": 0.9769611307420495}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"3": {"-6": [0, 27.999999999999993]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 27.999999999999993}}, "outbound_shipment": {"1": {"-4": 28.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 27.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 27.999999999999993}}, "order_quantity_fg": {"-4": 27.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 27.999999999999993}, "inventory_level": {"-4": 5.8700000000000045}, "disrupted": false, "holding_cost_incurred": 5.8700000000000045, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 311.0}, "demand_met_from_stock": {"-4": 27.999999999999993}, "demand_met_from_stock_cumul": {"-4": 304.48}, "fill_rate": {"-4": 0.9790353697749197}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"3": {"-6": [0, 31.0]}}, "inbound_shipment": {"3": {"-6": 27.999999999999993}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 31.0}}, "outbound_shipment": {"1": {"-4": 31.0}}, "on_order_by_predecessor": {"3": {"-6": 31.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 31.0}}, "order_quantity_fg": {"-4": 31.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 31.0}, "inventory_level": {"-4": 2.8699999999999974}, "disrupted": false, "holding_cost_incurred": 2.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 31.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 342.0}, "demand_met_from_stock": {"-4": 31.0}, "demand_met_from_stock_cumul": {"-4": 335.48}, "fill_rate": {"-4": 0.9809356725146199}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"3": {"-6": [0, 26.0]}}, "inbound_shipment": {"3": {"-6": 31.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 26.0}}, "outbound_shipment": {"1": {"-4": 26.0}}, "on_order_by_predecessor": {"3": {"-6": 26.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 26.0}}, "order_quantity_fg": {"-4": 26.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 26.0}, "inventory_level": {"-4": 7.869999999999997}, "disrupted": false, "holding_cost_incurred": 7.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 26.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 368.0}, "demand_met_from_stock": {"-4": 26.0}, "demand_met_from_stock_cumul": {"-4": 361.48}, "fill_rate": {"-4": 0.9822826086956522}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 26.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 401.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 394.48}, "fill_rate": {"-4": 0.9837406483790524}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"3": {"-6": [0, 34.0]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 34.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 34.0}}, "backorders_by_successor": {"1": {"-4": 0.13000000000000256}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 34.0}}, "order_quantity_fg": {"-4": 34.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 34.0}, "inventory_level": {"-4": -0.13000000000000256}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 435.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 428.35}, "fill_rate": {"-4": 0.984712643678161}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 34.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.130000000000003}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.130000000000003, "revenue_earned": 0.0, "total_cost_incurred": 34.0, "demand_cumul": {"-4": 464.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 457.35}, "fill_rate": {"-4": 0.9856681034482759}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 35.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 35.0}}, "backorders_by_successor": {"1": {"-4": 1.1300000000000026}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 35.0}}, "order_quantity_fg": {"-4": 35.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 35.0}, "inventory_level": {"-4": -1.1300000000000026}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 499.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 491.22}, "fill_rate": {"-4": 0.9844088176352705}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"3": {"-6": [0, 24.000000000000007]}}, "inbound_shipment": {"3": {"-6": 35.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 24.000000000000007}}, "outbound_shipment": {"1": {"-4": 25.13000000000001}}, "on_order_by_predecessor": {"3": {"-6": 24.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 24.000000000000007}}, "order_quantity_fg": {"-4": 24.000000000000007}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 24.000000000000007}, "inventory_level": {"-4": 9.86999999999999}, "disrupted": false, "holding_cost_incurred": 9.86999999999999, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 25.13000000000001, "revenue_earned": 0.0, "total_cost_incurred": 35.0, "demand_cumul": {"-4": 523.0}, "demand_met_from_stock": {"-4": 24.000000000000007}, "demand_met_from_stock_cumul": {"-4": 515.22}, "fill_rate": {"-4": 0.9851242829827916}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"3": {"-6": [0, 28.0]}}, "inbound_shipment": {"3": {"-6": 24.000000000000007}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 28.0}}, "outbound_shipment": {"1": {"-4": 28.0}}, "on_order_by_predecessor": {"3": {"-6": 28.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 28.0}}, "order_quantity_fg": {"-4": 28.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 28.0}, "inventory_level": {"-4": 5.869999999999997}, "disrupted": false, "holding_cost_incurred": 5.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 28.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 551.0}, "demand_met_from_stock": {"-4": 28.0}, "demand_met_from_stock_cumul": {"-4": 543.22}, "fill_rate": {"-4": 0.985880217785844}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"3": {"-6": [0, 29.0]}}, "inbound_shipment": {"3": {"-6": 28.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 29.0}}, "outbound_shipment": {"1": {"-4": 29.0}}, "on_order_by_predecessor": {"3": {"-6": 29.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 29.0}}, "order_quantity_fg": {"-4": 29.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 29.0}, "inventory_level": {"-4": 4.869999999999997}, "disrupted": false, "holding_cost_incurred": 4.869999999999997, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 29.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 580.0}, "demand_met_from_stock": {"-4": 29.0}, "demand_met_from_stock_cumul": {"-4": 572.22}, "fill_rate": {"-4": 0.9865862068965517}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"3": {"-6": [0, 33.0]}}, "inbound_shipment": {"3": {"-6": 29.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 33.0}}, "outbound_shipment": {"1": {"-4": 33.0}}, "on_order_by_predecessor": {"3": {"-6": 33.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 33.0}}, "order_quantity_fg": {"-4": 33.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 33.0}, "inventory_level": {"-4": 0.8699999999999974}, "disrupted": false, "holding_cost_incurred": 0.8699999999999974, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 33.0, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 613.0}, "demand_met_from_stock": {"-4": 33.0}, "demand_met_from_stock_cumul": {"-4": 605.22}, "fill_rate": {"-4": 0.9873083197389886}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.13999999999999]}}, "inbound_shipment": {"3": {"-6": 33.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 43.0}}, "outbound_shipment": {"1": {"-4": 33.87}}, "on_order_by_predecessor": {"3": {"-6": 43.0}}, "backorders_by_successor": {"1": {"-4": 9.130000000000003}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 43.0}}, "order_quantity_fg": {"-4": 43.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 43.0}, "inventory_level": {"-4": -9.130000000000003}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.87, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 656.0}, "demand_met_from_stock": {"-4": 33.87}, "demand_met_from_stock_cumul": {"-4": 639.09}, "fill_rate": {"-4": 0.9742225609756098}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.86]}}, "inbound_shipment": {"3": {"-6": 35.13999999999999}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 22.999999999999993}}, "outbound_shipment": {"1": {"-4": 32.129999999999995}}, "on_order_by_predecessor": {"3": {"-6": 30.860000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 22.999999999999993}}, "order_quantity_fg": {"-4": 22.999999999999993}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.860000000000007}, "inventory_level": {"-4": 3.009999999999998}, "disrupted": false, "holding_cost_incurred": 3.009999999999998, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 32.129999999999995, "revenue_earned": 0.0, "total_cost_incurred": 35.13999999999999, "demand_cumul": {"-4": 679.0}, "demand_met_from_stock": {"-4": 22.999999999999993}, "demand_met_from_stock_cumul": {"-4": 662.09}, "fill_rate": {"-4": 0.9750957290132548}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"3": {"-6": [0, 18.999999999999986]}}, "inbound_shipment": {"3": {"-6": 30.86}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 18.999999999999993}}, "outbound_shipment": {"1": {"-4": 18.999999999999993}}, "on_order_by_predecessor": {"3": {"-6": 18.999999999999993}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 18.999999999999986}}, "order_quantity_fg": {"-4": 18.999999999999986}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 18.999999999999993}, "inventory_level": {"-4": 14.870000000000005}, "disrupted": false, "holding_cost_incurred": 14.870000000000005, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 18.999999999999993, "revenue_earned": 0.0, "total_cost_incurred": 33.87, "demand_cumul": {"-4": 698.0}, "demand_met_from_stock": {"-4": 18.999999999999993}, "demand_met_from_stock_cumul": {"-4": 681.09}, "fill_rate": {"-4": 0.9757736389684815}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"3": {"-6": [0, 30.0]}}, "inbound_shipment": {"3": {"-6": 18.999999999999986}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 30.0}}, "outbound_shipment": {"1": {"-4": 30.0}}, "on_order_by_predecessor": {"3": {"-6": 30.000000000000007}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 30.0}}, "order_quantity_fg": {"-4": 30.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 30.000000000000007}, "inventory_level": {"-4": 3.8699999999999903}, "disrupted": false, "holding_cost_incurred": 3.8699999999999903, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 30.0, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 728.0}, "demand_met_from_stock": {"-4": 30.0}, "demand_met_from_stock_cumul": {"-4": 711.09}, "fill_rate": {"-4": 0.976771978021978}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"3": {"-6": [0, 35.14]}}, "inbound_shipment": {"3": {"-6": 30.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 38.0}}, "outbound_shipment": {"1": {"-4": 33.86999999999999}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 38.0}}, "order_quantity_fg": {"-4": 38.0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 33.86999999999999, "revenue_earned": 0.0, "total_cost_incurred": 33.86999999999999, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 33.86999999999999}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0.972532637075718}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"3": {"-6": [35.14, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 38.0}}, "backorders_by_successor": {"1": {"-4": 4.13000000000001}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0.0}, "pending_finished_goods": {"-4": 38.0}, "inventory_level": {"-4": -4.13000000000001}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 766.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 744.96}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"3": {"-6": [0, 0]}}, "inbound_shipment": {"3": {"-6": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"3": {"-6": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"3": {"-6": 0}}, "order_quantity": {"3": {"-6": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-6": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30}}, "on_order_by_predecessor": {"2": {"-4": 30.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.0}, "inventory_level": {"-2": 10.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.295000000000002, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 30}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 36}}, "outbound_shipment": {"null": {"-2": 36}}, "on_order_by_predecessor": {"2": {"-4": 36.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 36.0}}, "order_quantity_fg": {"-2": 36.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 36.0}, "inventory_level": {"-2": 4.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.2950000000000017, "demand_cumul": {"-2": 66}, "demand_met_from_stock": {"-2": 36.0}, "demand_met_from_stock_cumul": {"-2": 66}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 27.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 25}}, "outbound_shipment": {"null": {"-2": 25}}, "on_order_by_predecessor": {"2": {"-4": 27.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 25.0}}, "order_quantity_fg": {"-2": 25.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.130000000000003}, "inventory_level": {"-2": 13.46}, "disrupted": false, "holding_cost_incurred": 6.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.73, "demand_cumul": {"-2": 91}, "demand_met_from_stock": {"-2": 25.0}, "demand_met_from_stock_cumul": {"-2": 91}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 27.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 125}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 34.0]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38}}, "on_order_by_predecessor": {"2": {"-4": 38.13}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.13}, "inventory_level": {"-2": 2.460000000000001}, "disrupted": false, "holding_cost_incurred": 1.2300000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2300000000000004, "demand_cumul": {"-2": 163}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 163}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.130000000000003]}}, "inbound_shipment": {"2": {"-4": 34.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 30.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.129999999999995}, "inventory_level": {"-2": 10.46}, "disrupted": false, "holding_cost_incurred": 5.23, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.23, "demand_cumul": {"-2": 189}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 189}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.000000000000007]}}, "inbound_shipment": {"2": {"-4": 30.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.000000000000007}}, "order_quantity_fg": {"-2": 29.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.0}, "inventory_level": {"-2": 11.590000000000003}, "disrupted": false, "holding_cost_incurred": 5.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000002, "demand_cumul": {"-2": 218}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 218}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 29.000000000000007}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 30.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.999999999999993}, "inventory_level": {"-2": 9.59000000000001}, "disrupted": false, "holding_cost_incurred": 4.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000005, "demand_cumul": {"-2": 249}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 249}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.2950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000053, "demand_cumul": {"-2": 283}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 283}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 28.129999999999995}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 27.999999999999993}}, "order_quantity_fg": {"-2": 27.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.129999999999995}, "inventory_level": {"-2": 12.460000000000008}, "disrupted": false, "holding_cost_incurred": 6.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.230000000000004, "demand_cumul": {"-2": 311}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 311}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 31.0]}}, "inbound_shipment": {"2": {"-4": 28.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 31}}, "outbound_shipment": {"null": {"-2": 31}}, "on_order_by_predecessor": {"2": {"-4": 31.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 31.0}}, "order_quantity_fg": {"-2": 31.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 31.0}, "inventory_level": {"-2": 9.590000000000003}, "disrupted": false, "holding_cost_incurred": 4.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.795000000000002, "demand_cumul": {"-2": 342}, "demand_met_from_stock": {"-2": 31.0}, "demand_met_from_stock_cumul": {"-2": 342}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 26.0]}}, "inbound_shipment": {"2": {"-4": 31.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 26}}, "outbound_shipment": {"null": {"-2": 26}}, "on_order_by_predecessor": {"2": {"-4": 26.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 26.0}}, "order_quantity_fg": {"-2": 26.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 26.0}, "inventory_level": {"-2": 14.590000000000003}, "disrupted": false, "holding_cost_incurred": 7.295000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.295000000000002, "demand_cumul": {"-2": 368}, "demand_met_from_stock": {"-2": 26.0}, "demand_met_from_stock_cumul": {"-2": 368}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 26.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 33.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 33.0}, "inventory_level": {"-2": 7.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000017, "demand_cumul": {"-2": 401}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 401}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 34}}, "outbound_shipment": {"null": {"-2": 34}}, "on_order_by_predecessor": {"2": {"-4": 34.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 34.0}}, "order_quantity_fg": {"-2": 34.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.0}, "inventory_level": {"-2": 6.590000000000003}, "disrupted": false, "holding_cost_incurred": 3.2950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.2950000000000017, "demand_cumul": {"-2": 435}, "demand_met_from_stock": {"-2": 34.0}, "demand_met_from_stock_cumul": {"-2": 435}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.130000000000003]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 29.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 29.130000000000003}, "inventory_level": {"-2": 11.46}, "disrupted": false, "holding_cost_incurred": 5.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.73, "demand_cumul": {"-2": 464}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 464}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 29.130000000000003}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 35}}, "outbound_shipment": {"null": {"-2": 35}}, "on_order_by_predecessor": {"2": {"-4": 34.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 35.0}}, "order_quantity_fg": {"-2": 35.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 34.99999999999999}, "inventory_level": {"-2": 5.590000000000003}, "disrupted": false, "holding_cost_incurred": 2.7950000000000017, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 2.7950000000000017, "demand_cumul": {"-2": 499}, "demand_met_from_stock": {"-2": 35.0}, "demand_met_from_stock_cumul": {"-2": 499}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 25.13000000000001]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 24}}, "outbound_shipment": {"null": {"-2": 24}}, "on_order_by_predecessor": {"2": {"-4": 25.130000000000003}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 24.000000000000007}}, "order_quantity_fg": {"-2": 24.000000000000007}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 25.130000000000003}, "inventory_level": {"-2": 15.46}, "disrupted": false, "holding_cost_incurred": 7.73, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 7.73, "demand_cumul": {"-2": 523}, "demand_met_from_stock": {"-2": 24.0}, "demand_met_from_stock_cumul": {"-2": 523}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 28.0]}}, "inbound_shipment": {"2": {"-4": 25.13000000000001}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 28}}, "outbound_shipment": {"null": {"-2": 28}}, "on_order_by_predecessor": {"2": {"-4": 27.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 28.0}}, "order_quantity_fg": {"-2": 28.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 27.999999999999993}, "inventory_level": {"-2": 12.59000000000001}, "disrupted": false, "holding_cost_incurred": 6.295000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 6.295000000000005, "demand_cumul": {"-2": 551}, "demand_met_from_stock": {"-2": 28.0}, "demand_met_from_stock_cumul": {"-2": 551}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 29.0]}}, "inbound_shipment": {"2": {"-4": 28.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 29}}, "outbound_shipment": {"null": {"-2": 29}}, "on_order_by_predecessor": {"2": {"-4": 28.999999999999993}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 29.0}}, "order_quantity_fg": {"-2": 29.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 28.999999999999993}, "inventory_level": {"-2": 11.59000000000001}, "disrupted": false, "holding_cost_incurred": 5.795000000000005, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.795000000000005, "demand_cumul": {"-2": 580}, "demand_met_from_stock": {"-2": 29.0}, "demand_met_from_stock_cumul": {"-2": 580}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.0]}}, "inbound_shipment": {"2": {"-4": 29.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 33}}, "outbound_shipment": {"null": {"-2": 33}}, "on_order_by_predecessor": {"2": {"-4": 32.99999999999999}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 33.0}}, "order_quantity_fg": {"-2": 33.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.99999999999999}, "inventory_level": {"-2": 7.5900000000000105}, "disrupted": false, "holding_cost_incurred": 3.7950000000000053, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 3.7950000000000053, "demand_cumul": {"-2": 613}, "demand_met_from_stock": {"-2": 33.0}, "demand_met_from_stock_cumul": {"-2": 613}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.87]}}, "inbound_shipment": {"2": {"-4": 33.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 43}}, "outbound_shipment": {"null": {"-2": 40.59000000000001}}, "on_order_by_predecessor": {"2": {"-4": 43.0}}, "backorders_by_successor": {"null": {"-2": 2.4099999999999895}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 43.0}}, "order_quantity_fg": {"-2": 43.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 43.0}, "inventory_level": {"-2": -2.4099999999999895}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 28.919999999999874, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 28.919999999999874, "demand_cumul": {"-2": 656}, "demand_met_from_stock": {"-2": 40.59000000000001}, "demand_met_from_stock_cumul": {"-2": 653.59}, "fill_rate": {"-2": 0.9963262195121951}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 32.129999999999995]}}, "inbound_shipment": {"2": {"-4": 33.87}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 23}}, "outbound_shipment": {"null": {"-2": 25.40999999999999}}, "on_order_by_predecessor": {"2": {"-4": 32.13}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 22.999999999999993}}, "order_quantity_fg": {"-2": 22.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 32.13}, "inventory_level": {"-2": 8.460000000000008}, "disrupted": false, "holding_cost_incurred": 4.230000000000004, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 4.230000000000004, "demand_cumul": {"-2": 679}, "demand_met_from_stock": {"-2": 23.0}, "demand_met_from_stock_cumul": {"-2": 676.59}, "fill_rate": {"-2": 0.9964506627393226}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 18.999999999999993]}}, "inbound_shipment": {"2": {"-4": 32.129999999999995}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 19}}, "outbound_shipment": {"null": {"-2": 19.0}}, "on_order_by_predecessor": {"2": {"-4": 19.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 18.999999999999993}}, "order_quantity_fg": {"-2": 18.999999999999993}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 19.0}, "inventory_level": {"-2": 21.590000000000003}, "disrupted": false, "holding_cost_incurred": 10.795000000000002, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 10.795000000000002, "demand_cumul": {"-2": 698}, "demand_met_from_stock": {"-2": 19.0}, "demand_met_from_stock_cumul": {"-2": 695.59}, "fill_rate": {"-2": 0.9965472779369628}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 30.0]}}, "inbound_shipment": {"2": {"-4": 18.999999999999993}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 30}}, "outbound_shipment": {"null": {"-2": 30.0}}, "on_order_by_predecessor": {"2": {"-4": 30.000000000000007}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 30.0}}, "order_quantity_fg": {"-2": 30.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 30.000000000000007}, "inventory_level": {"-2": 10.589999999999996}, "disrupted": false, "holding_cost_incurred": 5.294999999999998, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 5.294999999999998, "demand_cumul": {"-2": 728}, "demand_met_from_stock": {"-2": 30.0}, "demand_met_from_stock_cumul": {"-2": 725.59}, "fill_rate": {"-2": 0.9966895604395605}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 33.86999999999999]}}, "inbound_shipment": {"2": {"-4": 30.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 38}}, "outbound_shipment": {"null": {"-2": 38.0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 38.0}}, "order_quantity_fg": {"-2": 38.0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 1.2949999999999982, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 1.2949999999999982, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 38.0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0.9968537859007833}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [33.86999999999999, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 38.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0.0}, "pending_finished_goods": {"-2": 38.0}, "inventory_level": {"-2": 2.5899999999999963}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 766}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 763.59}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}}, "order_quantity": {"2": {"-4": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}], "_local_products": [], "_products": [{"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:13.702213"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json index 7bc4f8a..1ece2cd 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_false_rosling_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "order_quantity_fg": {"-2": 9.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 9.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "order_quantity_fg": {"-2": 0.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "order_quantity_fg": {"-4": 14.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "order_quantity_fg": {"-4": 11.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "order_quantity_fg": {"-4": 6.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "order_quantity_fg": {"-6": 14.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "order_quantity_fg": {"-6": 8.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "order_quantity_fg": {"-6": 0.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 8.0, "-12": 0.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 20.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 16.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 6.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 5.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "order_quantity_fg": {"-8": 18.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 18.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 23.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "order_quantity_fg": {"-8": 12.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 12.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "order_quantity_fg": {"-8": 7.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "order_quantity_fg": {"-8": 10.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 11.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "order_quantity_fg": {"-8": 2.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 2.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "order_quantity_fg": {"-8": 8.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0.0, "-12": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-14": 0, "-12": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "order_quantity_fg": {"-10": 22.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "order_quantity_fg": {"-10": 3.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "order_quantity_fg": {"-10": 2.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "order_quantity_fg": {"-12": 44.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "order_quantity_fg": {"-12": 27.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "order_quantity_fg": {"-12": 22.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "order_quantity_fg": {"-12": 9.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "order_quantity_fg": {"-12": 14.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "order_quantity_fg": {"-12": 10.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "order_quantity_fg": {"-12": 4.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "order_quantity_fg": {"-12": 16.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "order_quantity_fg": {"-12": 6.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "order_quantity_fg": {"-14": 64.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "order_quantity_fg": {"-14": 21.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "order_quantity_fg": {"-14": 14.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "order_quantity_fg": {"-14": 10.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "order_quantity_fg": {"-14": 1.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "order_quantity_fg": {"-14": 2.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "order_quantity_fg": {"-14": 16.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "order_quantity_fg": {"-14": 6.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_local_products": [{"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.609999"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_false_rosling", "description": "this is test_omit_state_vars_false_rosling", "data": {"nodes": [{"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "UD", "mean": 5.0, "standard_deviation": 3.1622776601683795, "demand_list": null, "probabilities": null, "lo": 0, "hi": 10, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 1, "product": null, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 1, "period": 0, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 6}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 6}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 1, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 9}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 9}, "fill_rate": {"-2": 1.0}}, {"node": 1, "period": 2, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 19}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 17.0}, "fill_rate": {"-2": 0.8947368421052632}}, {"node": 1, "period": 3, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 26}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 24.0}, "fill_rate": {"-2": 0.9230769230769231}}, {"node": 1, "period": 4, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 30}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 28.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 5, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 36}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 34.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 6, "inbound_shipment_pipeline": {"2": {"-4": [0, 9.0]}, "3": {"-6": [0, 9.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 9}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "backorders_by_successor": {"null": {"-2": 1.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "order_quantity_fg": {"-2": 9.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 9.0}, "inventory_level": {"-2": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 45}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 42.0}, "fill_rate": {"-2": 0.9333333333333333}}, {"node": 1, "period": 7, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 9.0}, "3": {"-6": 9.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 47}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 44.0}, "fill_rate": {"-2": 0.9361702127659575}}, {"node": 1, "period": 8, "inbound_shipment_pipeline": {"2": {"-4": [0, 6.0]}, "3": {"-6": [0, 6.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 6}}, "outbound_shipment": {"null": {"-2": 6.0}}, "on_order_by_predecessor": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "order_quantity_fg": {"-2": 6.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 6.0}, "inventory_level": {"-2": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 53}, "demand_met_from_stock": {"-2": 6.0}, "demand_met_from_stock_cumul": {"-2": 50.0}, "fill_rate": {"-2": 0.9433962264150944}}, {"node": 1, "period": 9, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 6.0}, "3": {"-6": 6.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 8.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 63}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 58.0}, "fill_rate": {"-2": 0.9206349206349206}}, {"node": 1, "period": 10, "inbound_shipment_pipeline": {"2": {"-4": [0, 10.0]}, "3": {"-6": [0, 10.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 10}}, "outbound_shipment": {"null": {"-2": 10.0}}, "on_order_by_predecessor": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "backorders_by_successor": {"null": {"-2": 2.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "order_quantity_fg": {"-2": 10.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 10.0}, "inventory_level": {"-2": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 73}, "demand_met_from_stock": {"-2": 8.0}, "demand_met_from_stock_cumul": {"-2": 66.0}, "fill_rate": {"-2": 0.9041095890410958}}, {"node": 1, "period": 11, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 10.0}, "3": {"-6": 10.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 9.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 80}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 73.0}, "fill_rate": {"-2": 0.9125}}, {"node": 1, "period": 12, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 84}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 77.0}, "fill_rate": {"-2": 0.9166666666666666}}, {"node": 1, "period": 13, "inbound_shipment_pipeline": {"2": {"-4": [0, 3.0]}, "3": {"-6": [0, 3.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 3}}, "outbound_shipment": {"null": {"-2": 3.0}}, "on_order_by_predecessor": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "order_quantity_fg": {"-2": 3.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 3.0}, "inventory_level": {"-2": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 87}, "demand_met_from_stock": {"-2": 3.0}, "demand_met_from_stock_cumul": {"-2": 80.0}, "fill_rate": {"-2": 0.9195402298850575}}, {"node": 1, "period": 14, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 3.0}, "3": {"-6": 3.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 94}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 87.0}, "fill_rate": {"-2": 0.925531914893617}}, {"node": 1, "period": 15, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 101}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 94.0}, "fill_rate": {"-2": 0.9306930693069307}}, {"node": 1, "period": 16, "inbound_shipment_pipeline": {"2": {"-4": [0, 2.0]}, "3": {"-6": [0, 2.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 2}}, "outbound_shipment": {"null": {"-2": 2.0}}, "on_order_by_predecessor": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "order_quantity_fg": {"-2": 2.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 2.0}, "inventory_level": {"-2": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 103}, "demand_met_from_stock": {"-2": 2.0}, "demand_met_from_stock_cumul": {"-2": 96.0}, "fill_rate": {"-2": 0.9320388349514563}}, {"node": 1, "period": 17, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 2.0}, "3": {"-6": 2.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 108}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 101.0}, "fill_rate": {"-2": 0.9351851851851852}}, {"node": 1, "period": 18, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 112}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 105.0}, "fill_rate": {"-2": 0.9375}}, {"node": 1, "period": 19, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 113}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 106.0}, "fill_rate": {"-2": 0.9380530973451328}}, {"node": 1, "period": 20, "inbound_shipment_pipeline": {"2": {"-4": [0, 7.0]}, "3": {"-6": [0, 7.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 7}}, "outbound_shipment": {"null": {"-2": 7.0}}, "on_order_by_predecessor": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "order_quantity_fg": {"-2": 7.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 7.0}, "inventory_level": {"-2": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 120}, "demand_met_from_stock": {"-2": 7.0}, "demand_met_from_stock_cumul": {"-2": 113.0}, "fill_rate": {"-2": 0.9416666666666667}}, {"node": 1, "period": 21, "inbound_shipment_pipeline": {"2": {"-4": [0, 5.0]}, "3": {"-6": [0, 5.0]}}, "inbound_shipment": {"2": {"-4": 7.0}, "3": {"-6": 7.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 5}}, "outbound_shipment": {"null": {"-2": 5.0}}, "on_order_by_predecessor": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "order_quantity_fg": {"-2": 5.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 5.0}, "inventory_level": {"-2": 3.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 125}, "demand_met_from_stock": {"-2": 5.0}, "demand_met_from_stock_cumul": {"-2": 118.0}, "fill_rate": {"-2": 0.944}}, {"node": 1, "period": 22, "inbound_shipment_pipeline": {"2": {"-4": [0, 1.0]}, "3": {"-6": [0, 1.0]}}, "inbound_shipment": {"2": {"-4": 5.0}, "3": {"-6": 5.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 1}}, "outbound_shipment": {"null": {"-2": 1.0}}, "on_order_by_predecessor": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "order_quantity_fg": {"-2": 1.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 1.0}, "inventory_level": {"-2": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 126}, "demand_met_from_stock": {"-2": 1.0}, "demand_met_from_stock_cumul": {"-2": 119.0}, "fill_rate": {"-2": 0.9444444444444444}}, {"node": 1, "period": 23, "inbound_shipment_pipeline": {"2": {"-4": [0, 4.0]}, "3": {"-6": [0, 4.0]}}, "inbound_shipment": {"2": {"-4": 1.0}, "3": {"-6": 1.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 4}}, "outbound_shipment": {"null": {"-2": 4.0}}, "on_order_by_predecessor": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "order_quantity_fg": {"-2": 4.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 4.0}, "inventory_level": {"-2": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 4.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 24, "inbound_shipment_pipeline": {"2": {"-4": [0, 0.0]}, "3": {"-6": [0, 0.0]}}, "inbound_shipment": {"2": {"-4": 4.0}, "3": {"-6": 4.0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0.0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "order_quantity_fg": {"-2": 0.0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0.0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0.9461538461538461}}, {"node": 1, "period": 25, "inbound_shipment_pipeline": {"2": {"-4": [0.0, 0]}, "3": {"-6": [0.0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0.0}, "3": {"-6": 0.0}}, "backorders_by_successor": {"null": {"-2": 0.0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0.0, "-4": 0.0}, "pending_finished_goods": {"-2": 0.0}, "inventory_level": {"-2": 8.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 130}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 123.0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 26, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 27, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 28, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 29, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}, {"node": 1, "period": 30, "inbound_shipment_pipeline": {"2": {"-4": [0, 0]}, "3": {"-6": [0, 0]}}, "inbound_shipment": {"2": {"-4": 0}, "3": {"-6": 0}}, "inbound_order_pipeline": {"null": {"-2": [0]}}, "inbound_order": {"null": {"-2": 0}}, "outbound_shipment": {"null": {"-2": 0}}, "on_order_by_predecessor": {"2": {"-4": 0}, "3": {"-6": 0}}, "backorders_by_successor": {"null": {"-2": 0}}, "outbound_disrupted_items": {"null": {"-2": 0}}, "inbound_disrupted_items": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity": {"2": {"-4": 0}, "3": {"-6": 0}}, "order_quantity_fg": {"-2": 0}, "raw_material_inventory": {"-6": 0, "-4": 0}, "pending_finished_goods": {"-2": 0}, "inventory_level": {"-2": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-2": 0}, "demand_met_from_stock": {"-2": 0}, "demand_met_from_stock_cumul": {"-2": 0}, "fill_rate": {"-2": 0}}]}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [5], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 2, "product": null, "base_stock_level": 24, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 2, "period": 0, "inbound_shipment_pipeline": {"5": {"-10": [0, 14.0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 14.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 14.0}}, "order_quantity_fg": {"-4": 14.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 14.0}, "inventory_level": {"-4": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 6.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 6.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 1, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 14.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 9.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 9.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 2, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 19.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 19.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 3, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 26.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 26.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 4, "inbound_shipment_pipeline": {"5": {"-10": [0, 11.0]}}, "inbound_shipment": {"5": {"-10": 0.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 11.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 11.0}}, "order_quantity_fg": {"-4": 11.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 11.0}, "inventory_level": {"-4": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 30.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 30.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 5, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 11.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 36.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 36.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 6, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 9.0}}, "outbound_shipment": {"1": {"-4": 9.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 45.0}, "demand_met_from_stock": {"-4": 9.0}, "demand_met_from_stock_cumul": {"-4": 45.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 7, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 47.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 47.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 8, "inbound_shipment_pipeline": {"5": {"-10": [0, 6.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 6.0}}, "outbound_shipment": {"1": {"-4": 6.0}}, "on_order_by_predecessor": {"5": {"-10": 6.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 6.0}}, "order_quantity_fg": {"-4": 6.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 6.0}, "inventory_level": {"-4": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 53.0}, "demand_met_from_stock": {"-4": 6.0}, "demand_met_from_stock_cumul": {"-4": 53.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 9, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 6.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 63.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 63.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 10, "inbound_shipment_pipeline": {"5": {"-10": [0, 10.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 10.0}}, "outbound_shipment": {"1": {"-4": 10.0}}, "on_order_by_predecessor": {"5": {"-10": 10.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 10.0}}, "order_quantity_fg": {"-4": 10.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 10.0}, "inventory_level": {"-4": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 73.0}, "demand_met_from_stock": {"-4": 10.0}, "demand_met_from_stock_cumul": {"-4": 73.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 11, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 10.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 80.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 80.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 12, "inbound_shipment_pipeline": {"5": {"-10": [0, 3.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 3.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 3.0}}, "order_quantity_fg": {"-4": 3.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 3.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 84.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 84.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 13, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 3.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 3.0}}, "outbound_shipment": {"1": {"-4": 3.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 87.0}, "demand_met_from_stock": {"-4": 3.0}, "demand_met_from_stock_cumul": {"-4": 87.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 14, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 94.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 94.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 15, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 101.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 101.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 16, "inbound_shipment_pipeline": {"5": {"-10": [0, 2.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 2.0}}, "outbound_shipment": {"1": {"-4": 2.0}}, "on_order_by_predecessor": {"5": {"-10": 2.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 2.0}}, "order_quantity_fg": {"-4": 2.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 2.0}, "inventory_level": {"-4": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 103.0}, "demand_met_from_stock": {"-4": 2.0}, "demand_met_from_stock_cumul": {"-4": 103.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 17, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 2.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 108.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 108.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 18, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 112.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 112.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 19, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 113.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 113.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 20, "inbound_shipment_pipeline": {"5": {"-10": [0, 7.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 7.0}}, "outbound_shipment": {"1": {"-4": 7.0}}, "on_order_by_predecessor": {"5": {"-10": 7.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 7.0}}, "order_quantity_fg": {"-4": 7.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 7.0}, "inventory_level": {"-4": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 120.0}, "demand_met_from_stock": {"-4": 7.0}, "demand_met_from_stock_cumul": {"-4": 120.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 21, "inbound_shipment_pipeline": {"5": {"-10": [0, 5.0]}}, "inbound_shipment": {"5": {"-10": 7.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 5.0}}, "outbound_shipment": {"1": {"-4": 5.0}}, "on_order_by_predecessor": {"5": {"-10": 5.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 5.0}}, "order_quantity_fg": {"-4": 5.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 5.0}, "inventory_level": {"-4": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 125.0}, "demand_met_from_stock": {"-4": 5.0}, "demand_met_from_stock_cumul": {"-4": 125.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 22, "inbound_shipment_pipeline": {"5": {"-10": [0, 1.0]}}, "inbound_shipment": {"5": {"-10": 5.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 1.0}}, "outbound_shipment": {"1": {"-4": 1.0}}, "on_order_by_predecessor": {"5": {"-10": 1.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 1.0}}, "order_quantity_fg": {"-4": 1.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 1.0}, "inventory_level": {"-4": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 126.0}, "demand_met_from_stock": {"-4": 1.0}, "demand_met_from_stock_cumul": {"-4": 126.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 23, "inbound_shipment_pipeline": {"5": {"-10": [0, 4.0]}}, "inbound_shipment": {"5": {"-10": 1.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 4.0}}, "outbound_shipment": {"1": {"-4": 4.0}}, "on_order_by_predecessor": {"5": {"-10": 4.0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 4.0}}, "order_quantity_fg": {"-4": 4.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 4.0}, "inventory_level": {"-4": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 4.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 24, "inbound_shipment_pipeline": {"5": {"-10": [0, 0.0]}}, "inbound_shipment": {"5": {"-10": 4.0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0.0}}, "outbound_shipment": {"1": {"-4": 0.0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0.0}}, "order_quantity_fg": {"-4": 0.0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0.0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 1.0}}, {"node": 2, "period": 25, "inbound_shipment_pipeline": {"5": {"-10": [0.0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0.0}}, "backorders_by_successor": {"1": {"-4": 0.0}}, "outbound_disrupted_items": {"1": {"-4": 0.0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0.0}, "pending_finished_goods": {"-4": 0.0}, "inventory_level": {"-4": 16.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 130.0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 130.0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 26, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 27, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 28, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 29, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}, {"node": 2, "period": 30, "inbound_shipment_pipeline": {"5": {"-10": [0, 0]}}, "inbound_shipment": {"5": {"-10": 0}}, "inbound_order_pipeline": {"1": {"-4": [0]}}, "inbound_order": {"1": {"-4": 0}}, "outbound_shipment": {"1": {"-4": 0}}, "on_order_by_predecessor": {"5": {"-10": 0}}, "backorders_by_successor": {"1": {"-4": 0}}, "outbound_disrupted_items": {"1": {"-4": 0}}, "inbound_disrupted_items": {"5": {"-10": 0}}, "order_quantity": {"5": {"-10": 0}}, "order_quantity_fg": {"-4": 0}, "raw_material_inventory": {"-10": 0}, "pending_finished_goods": {"-4": 0}, "inventory_level": {"-4": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-4": 0}, "demand_met_from_stock": {"-4": 0}, "demand_met_from_stock_cumul": {"-4": 0}, "fill_rate": {"-4": 0}}]}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 24, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 3, "product": null, "base_stock_level": 40, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 3, "period": 0, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 14.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 14.0}}, "order_quantity_fg": {"-6": 14.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 6.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 6.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 1, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 14.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 9.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 9.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 2, "inbound_shipment_pipeline": {"4": {"-8": [0, 14.0, 2.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 19.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 19.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 3, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 14.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 26.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 26.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 4, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 30.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 30.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 5, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 20.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 8.0}}, "order_quantity_fg": {"-6": 8.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 20.0}, "inventory_level": {"-6": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 36.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 36.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 6, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 8.0, 9.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 9.0}}, "outbound_shipment": {"1": {"-6": 9.0}}, "on_order_by_predecessor": {"4": {"-8": 22.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 9.0}}, "order_quantity_fg": {"-6": 9.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 22.0}, "inventory_level": {"-6": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 45.0}, "demand_met_from_stock": {"-6": 9.0}, "demand_met_from_stock_cumul": {"-6": 45.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 7, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 9.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 19.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 19.0}, "inventory_level": {"-6": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 47.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 47.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 8, "inbound_shipment_pipeline": {"4": {"-8": [0, 9.0, 2.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 6.0}}, "outbound_shipment": {"1": {"-6": 6.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 53.0}, "demand_met_from_stock": {"-6": 6.0}, "demand_met_from_stock_cumul": {"-6": 53.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 9, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 6.0, 10.0]}}, "inbound_shipment": {"4": {"-8": 9.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 18.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 18.0}, "inventory_level": {"-6": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 63.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 63.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 10, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 10.0, 8.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 10.0}}, "outbound_shipment": {"1": {"-6": 10.0}}, "on_order_by_predecessor": {"4": {"-8": 26.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 10.0}}, "order_quantity_fg": {"-6": 10.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 26.0}, "inventory_level": {"-6": 6.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 73.0}, "demand_met_from_stock": {"-6": 10.0}, "demand_met_from_stock_cumul": {"-6": 73.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 11, "inbound_shipment_pipeline": {"4": {"-8": [0, 10.0, 8.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 25.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 25.0}, "inventory_level": {"-6": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 80.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 80.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 12, "inbound_shipment_pipeline": {"4": {"-8": [0, 8.0, 7.0, 6.0]}}, "inbound_shipment": {"4": {"-8": 10.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 21.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 6.0}}, "order_quantity_fg": {"-6": 6.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 21.0}, "inventory_level": {"-6": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 84.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 84.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 13, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 6.0, 3.0]}}, "inbound_shipment": {"4": {"-8": 8.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 3.0}}, "outbound_shipment": {"1": {"-6": 3.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 3.0}}, "order_quantity_fg": {"-6": 3.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 87.0}, "demand_met_from_stock": {"-6": 3.0}, "demand_met_from_stock_cumul": {"-6": 87.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 14, "inbound_shipment_pipeline": {"4": {"-8": [0, 6.0, 3.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 94.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 94.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 15, "inbound_shipment_pipeline": {"4": {"-8": [0, 3.0, 7.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 6.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 17.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 17.0}, "inventory_level": {"-6": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 101.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 101.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 16, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 7.0, 2.0]}}, "inbound_shipment": {"4": {"-8": 3.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 2.0}}, "outbound_shipment": {"1": {"-6": 2.0}}, "on_order_by_predecessor": {"4": {"-8": 16.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 2.0}}, "order_quantity_fg": {"-6": 2.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 16.0}, "inventory_level": {"-6": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 103.0}, "demand_met_from_stock": {"-6": 2.0}, "demand_met_from_stock_cumul": {"-6": 103.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 17, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 14.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 14.0}, "inventory_level": {"-6": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 108.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 108.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 18, "inbound_shipment_pipeline": {"4": {"-8": [0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 11.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 11.0}, "inventory_level": {"-6": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 112.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 112.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 19, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 2.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 113.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 113.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 20, "inbound_shipment_pipeline": {"4": {"-8": [0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 7.0}}, "outbound_shipment": {"1": {"-6": 7.0}}, "on_order_by_predecessor": {"4": {"-8": 12.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 7.0}}, "order_quantity_fg": {"-6": 7.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 12.0}, "inventory_level": {"-6": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 120.0}, "demand_met_from_stock": {"-6": 7.0}, "demand_met_from_stock_cumul": {"-6": 120.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 21, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"4": {"-8": 4.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 5.0}}, "outbound_shipment": {"1": {"-6": 5.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 5.0}}, "order_quantity_fg": {"-6": 5.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 125.0}, "demand_met_from_stock": {"-6": 5.0}, "demand_met_from_stock_cumul": {"-6": 125.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 22, "inbound_shipment_pipeline": {"4": {"-8": [0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"4": {"-8": 1.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 1.0}}, "outbound_shipment": {"1": {"-6": 1.0}}, "on_order_by_predecessor": {"4": {"-8": 13.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 1.0}}, "order_quantity_fg": {"-6": 1.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 13.0}, "inventory_level": {"-6": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 126.0}, "demand_met_from_stock": {"-6": 1.0}, "demand_met_from_stock_cumul": {"-6": 126.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 23, "inbound_shipment_pipeline": {"4": {"-8": [0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"4": {"-8": 7.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 4.0}}, "outbound_shipment": {"1": {"-6": 4.0}}, "on_order_by_predecessor": {"4": {"-8": 10.0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 4.0}}, "order_quantity_fg": {"-6": 4.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 10.0}, "inventory_level": {"-6": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 4.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 24, "inbound_shipment_pipeline": {"4": {"-8": [0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"4": {"-8": 5.0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0.0}}, "outbound_shipment": {"1": {"-6": 0.0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0.0}}, "order_quantity_fg": {"-6": 0.0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0.0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 1.0}}, {"node": 3, "period": 25, "inbound_shipment_pipeline": {"4": {"-8": [1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 5.0}}, "backorders_by_successor": {"1": {"-6": 0.0}}, "outbound_disrupted_items": {"1": {"-6": 0.0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0.0}, "pending_finished_goods": {"-6": 5.0}, "inventory_level": {"-6": 27.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 130.0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 130.0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 26, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 27, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 28, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 29, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}, {"node": 3, "period": 30, "inbound_shipment_pipeline": {"4": {"-8": [0, 0, 0, 0]}}, "inbound_shipment": {"4": {"-8": 0}}, "inbound_order_pipeline": {"1": {"-6": [0]}}, "inbound_order": {"1": {"-6": 0}}, "outbound_shipment": {"1": {"-6": 0}}, "on_order_by_predecessor": {"4": {"-8": 0}}, "backorders_by_successor": {"1": {"-6": 0}}, "outbound_disrupted_items": {"1": {"-6": 0}}, "inbound_disrupted_items": {"4": {"-8": 0}}, "order_quantity": {"4": {"-8": 0}}, "order_quantity_fg": {"-6": 0}, "raw_material_inventory": {"-8": 0}, "pending_finished_goods": {"-6": 0}, "inventory_level": {"-6": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-6": 0}, "demand_met_from_stock": {"-6": 0}, "demand_met_from_stock_cumul": {"-6": 0}, "fill_rate": {"-6": 0}}]}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [6, 7], "_successors": [3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 4, "product": null, "base_stock_level": 76, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 4, "period": 0, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 8.0]}, "7": {"-14": [0, 0, 16.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 14.0}}, "outbound_shipment": {"3": {"-8": 14.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "order_quantity_fg": {"-8": 36.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": 2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 14.0}, "demand_met_from_stock": {"-8": 14.0}, "demand_met_from_stock_cumul": {"-8": 14.0}, "fill_rate": {"-8": 1.0}}, {"node": 4, "period": 1, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 28.0]}, "7": {"-14": [0, 16.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 36.0}, "7": {"-14": 36.0}}, "backorders_by_successor": {"3": {"-8": 1.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 36.0}, "inventory_level": {"-8": -1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 17.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 16.0}, "fill_rate": {"-8": 0.9411764705882353}}, {"node": 4, "period": 2, "inbound_shipment_pipeline": {"6": {"-12": [0, 28.0, 6.0]}, "7": {"-14": [0, 0.0, 26.0]}}, "inbound_shipment": {"6": {"-12": 8.0}, "7": {"-14": 16.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 34.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-12": 0.0, "-14": 8.0}, "pending_finished_goods": {"-8": 34.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 26.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 23.0}, "fill_rate": {"-8": 0.8846153846153846}}, {"node": 4, "period": 3, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 0.0]}, "7": {"-14": [0, 26.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 28.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-12": 20.0, "-14": 0.0}, "pending_finished_goods": {"-8": 26.0}, "inventory_level": {"-8": 1.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 31.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 28.0}, "fill_rate": {"-8": 0.9032258064516129}}, {"node": 4, "period": 4, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 26.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 36.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 33.0}, "fill_rate": {"-8": 0.9166666666666666}}, {"node": 4, "period": 5, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 8.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 44.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 41.0}, "fill_rate": {"-8": 0.9318181818181818}}, {"node": 4, "period": 6, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 1.0]}, "7": {"-14": [0, 15.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 9.0}}, "outbound_shipment": {"3": {"-8": 9.0}}, "on_order_by_predecessor": {"6": {"-12": 16.0}, "7": {"-14": 16.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 16.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 53.0}, "demand_met_from_stock": {"-8": 9.0}, "demand_met_from_stock_cumul": {"-8": 50.0}, "fill_rate": {"-8": 0.9433962264150944}}, {"node": 4, "period": 7, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 5.0]}, "7": {"-14": [0, 1.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 6.0}, "inventory_level": {"-8": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 55.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 52.0}, "fill_rate": {"-8": 0.9454545454545454}}, {"node": 4, "period": 8, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 0.0]}, "7": {"-14": [0, 5.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 5.0}, "inventory_level": {"-8": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 61.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 58.0}, "fill_rate": {"-8": 0.9508196721311475}}, {"node": 4, "period": 9, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 18.0]}, "7": {"-14": [0, 0.0, 18.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 10.0}}, "on_order_by_predecessor": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "order_quantity_fg": {"-8": 18.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 18.0}, "inventory_level": {"-8": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 71.0}, "demand_met_from_stock": {"-8": 10.0}, "demand_met_from_stock_cumul": {"-8": 68.0}, "fill_rate": {"-8": 0.9577464788732394}}, {"node": 4, "period": 10, "inbound_shipment_pipeline": {"6": {"-12": [0, 18.0, 5.0]}, "7": {"-14": [0, 18.0, 5.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 10.0}}, "outbound_shipment": {"3": {"-8": 8.0}}, "on_order_by_predecessor": {"6": {"-12": 23.0}, "7": {"-14": 23.0}}, "backorders_by_successor": {"3": {"-8": 2.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "order_quantity_fg": {"-8": 5.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 23.0}, "inventory_level": {"-8": -2.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 81.0}, "demand_met_from_stock": {"-8": 8.0}, "demand_met_from_stock_cumul": {"-8": 76.0}, "fill_rate": {"-8": 0.9382716049382716}}, {"node": 4, "period": 11, "inbound_shipment_pipeline": {"6": {"-12": [0, 5.0, 12.0]}, "7": {"-14": [0, 5.0, 12.0]}}, "inbound_shipment": {"6": {"-12": 18.0}, "7": {"-14": 18.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "order_quantity_fg": {"-8": 12.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 86.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 81.0}, "fill_rate": {"-8": 0.9418604651162791}}, {"node": 4, "period": 12, "inbound_shipment_pipeline": {"6": {"-12": [0, 12.0, 0.0]}, "7": {"-14": [0, 12.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 5.0}, "7": {"-14": 5.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 6.0}}, "outbound_shipment": {"3": {"-8": 6.0}}, "on_order_by_predecessor": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 12.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 92.0}, "demand_met_from_stock": {"-8": 6.0}, "demand_met_from_stock_cumul": {"-8": 87.0}, "fill_rate": {"-8": 0.9456521739130435}}, {"node": 4, "period": 13, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 12.0}, "7": {"-14": 12.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 3.0}}, "outbound_shipment": {"3": {"-8": 3.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 95.0}, "demand_met_from_stock": {"-8": 3.0}, "demand_met_from_stock_cumul": {"-8": 90.0}, "fill_rate": {"-8": 0.9473684210526315}}, {"node": 4, "period": 14, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 7.0]}, "7": {"-14": [0, 0.0, 7.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "order_quantity_fg": {"-8": 7.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 102.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 97.0}, "fill_rate": {"-8": 0.9509803921568627}}, {"node": 4, "period": 15, "inbound_shipment_pipeline": {"6": {"-12": [0, 7.0, 10.0]}, "7": {"-14": [0, 7.0, 10.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 17.0}, "7": {"-14": 17.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "order_quantity_fg": {"-8": 10.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 17.0}, "inventory_level": {"-8": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 109.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 104.0}, "fill_rate": {"-8": 0.9541284403669725}}, {"node": 4, "period": 16, "inbound_shipment_pipeline": {"6": {"-12": [0, 10.0, 1.0]}, "7": {"-14": [0, 10.0, 1.0]}}, "inbound_shipment": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 2.0}}, "outbound_shipment": {"3": {"-8": 2.0}}, "on_order_by_predecessor": {"6": {"-12": 11.0}, "7": {"-14": 11.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "order_quantity_fg": {"-8": 1.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 11.0}, "inventory_level": {"-8": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 111.0}, "demand_met_from_stock": {"-8": 2.0}, "demand_met_from_stock_cumul": {"-8": 106.0}, "fill_rate": {"-8": 0.954954954954955}}, {"node": 4, "period": 17, "inbound_shipment_pipeline": {"6": {"-12": [0, 1.0, 6.0]}, "7": {"-14": [0, 1.0, 6.0]}}, "inbound_shipment": {"6": {"-12": 10.0}, "7": {"-14": 10.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 7.0}, "7": {"-14": 7.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "order_quantity_fg": {"-8": 6.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 7.0}, "inventory_level": {"-8": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 116.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 111.0}, "fill_rate": {"-8": 0.9568965517241379}}, {"node": 4, "period": 18, "inbound_shipment_pipeline": {"6": {"-12": [0, 6.0, 2.0]}, "7": {"-14": [0, 6.0, 2.0]}}, "inbound_shipment": {"6": {"-12": 1.0}, "7": {"-14": 1.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "order_quantity_fg": {"-8": 2.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 120.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 115.0}, "fill_rate": {"-8": 0.9583333333333334}}, {"node": 4, "period": 19, "inbound_shipment_pipeline": {"6": {"-12": [0, 2.0, 0.0]}, "7": {"-14": [0, 2.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 6.0}, "7": {"-14": 6.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 2.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 121.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 116.0}, "fill_rate": {"-8": 0.9586776859504132}}, {"node": 4, "period": 20, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 15.0]}, "7": {"-14": [0, 0.0, 15.0]}}, "inbound_shipment": {"6": {"-12": 2.0}, "7": {"-14": 2.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 7.0}}, "outbound_shipment": {"3": {"-8": 7.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "order_quantity_fg": {"-8": 15.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 128.0}, "demand_met_from_stock": {"-8": 7.0}, "demand_met_from_stock_cumul": {"-8": 123.0}, "fill_rate": {"-8": 0.9609375}}, {"node": 4, "period": 21, "inbound_shipment_pipeline": {"6": {"-12": [0, 15.0, 0.0]}, "7": {"-14": [0, 15.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 5.0}}, "outbound_shipment": {"3": {"-8": 5.0}}, "on_order_by_predecessor": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 15.0}, "inventory_level": {"-8": 7.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 133.0}, "demand_met_from_stock": {"-8": 5.0}, "demand_met_from_stock_cumul": {"-8": 128.0}, "fill_rate": {"-8": 0.9624060150375939}}, {"node": 4, "period": 22, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 0.0]}, "7": {"-14": [0, 0.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 15.0}, "7": {"-14": 15.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 1.0}}, "outbound_shipment": {"3": {"-8": 1.0}}, "on_order_by_predecessor": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 0.0}, "inventory_level": {"-8": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 134.0}, "demand_met_from_stock": {"-8": 1.0}, "demand_met_from_stock_cumul": {"-8": 129.0}, "fill_rate": {"-8": 0.9626865671641791}}, {"node": 4, "period": 23, "inbound_shipment_pipeline": {"6": {"-12": [0, 0.0, 8.0]}, "7": {"-14": [0, 0.0, 8.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 4.0}}, "outbound_shipment": {"3": {"-8": 4.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "order_quantity_fg": {"-8": 8.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 4.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 24, "inbound_shipment_pipeline": {"6": {"-12": [0, 8.0, 0.0]}, "7": {"-14": [0, 8.0, 0.0]}}, "inbound_shipment": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0.0}}, "outbound_shipment": {"3": {"-8": 0.0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0.0}, "7": {"-14": 0.0}}, "order_quantity_fg": {"-8": 0.0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0.0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0.9637681159420289}}, {"node": 4, "period": 25, "inbound_shipment_pipeline": {"6": {"-12": [8.0, 0.0, 0]}, "7": {"-14": [8.0, 0.0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 8.0}, "7": {"-14": 8.0}}, "backorders_by_successor": {"3": {"-8": 0.0}}, "outbound_disrupted_items": {"3": {"-8": 0.0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-12": 0.0, "-14": 0.0}, "pending_finished_goods": {"-8": 8.0}, "inventory_level": {"-8": 17.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 138.0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 133.0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 26, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-12": 0, "-14": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 27, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-12": 0, "-14": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 28, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-12": 0, "-14": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 29, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-12": 0, "-14": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}, {"node": 4, "period": 30, "inbound_shipment_pipeline": {"6": {"-12": [0, 0, 0]}, "7": {"-14": [0, 0, 0]}}, "inbound_shipment": {"6": {"-12": 0}, "7": {"-14": 0}}, "inbound_order_pipeline": {"3": {"-8": [0]}}, "inbound_order": {"3": {"-8": 0}}, "outbound_shipment": {"3": {"-8": 0}}, "on_order_by_predecessor": {"6": {"-12": 0}, "7": {"-14": 0}}, "backorders_by_successor": {"3": {"-8": 0}}, "outbound_disrupted_items": {"3": {"-8": 0}}, "inbound_disrupted_items": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity": {"6": {"-12": 0}, "7": {"-14": 0}}, "order_quantity_fg": {"-8": 0}, "raw_material_inventory": {"-12": 0, "-14": 0}, "pending_finished_goods": {"-8": 0}, "inventory_level": {"-8": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-8": 0}, "demand_met_from_stock": {"-8": 0}, "demand_met_from_stock_cumul": {"-8": 0}, "fill_rate": {"-8": 0}}]}, {"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [2], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 4, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 32, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 5, "product": null, "base_stock_level": 62, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 5, "period": 0, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 22.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 14.0}}, "outbound_shipment": {"2": {"-10": 14.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 22.0}}, "order_quantity_fg": {"-10": 22.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 14.0}, "demand_met_from_stock": {"-10": 14.0}, "demand_met_from_stock_cumul": {"-10": 14.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 1, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 22.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 22.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 22.0}, "inventory_level": {"-10": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 17.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 17.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 2, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 22.0, 0.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 3, "inbound_shipment_pipeline": {"null": {"-11": [0, 22.0, 0.0, 11.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 27.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 27.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 4, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 11.0, 0.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 22.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 11.0}}, "outbound_shipment": {"2": {"-10": 11.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 38.0}, "demand_met_from_stock": {"-10": 11.0}, "demand_met_from_stock_cumul": {"-10": 38.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 5, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 0.0, 10.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 43.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 43.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 6, "inbound_shipment_pipeline": {"null": {"-11": [0, 0.0, 10.0, 6.0, 11.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 11.0}}, "order_quantity_fg": {"-10": 11.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 12.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 53.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 53.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 7, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 6.0, 11.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 0.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 55.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 55.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 8, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 11.0, 1.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 6.0}}, "outbound_shipment": {"2": {"-10": 6.0}}, "on_order_by_predecessor": {"null": {"-11": 24.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 24.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 61.0}, "demand_met_from_stock": {"-10": 6.0}, "demand_met_from_stock_cumul": {"-10": 61.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 9, "inbound_shipment_pipeline": {"null": {"-11": [0, 11.0, 1.0, 6.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 28.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 28.0}, "inventory_level": {"-10": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 71.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 71.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 10, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 6.0, 10.0, 10.0]}}, "inbound_shipment": {"null": {"-11": 11.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 10.0}}, "outbound_shipment": {"2": {"-10": 10.0}}, "on_order_by_predecessor": {"null": {"-11": 27.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 10.0}}, "order_quantity_fg": {"-10": 10.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 27.0}, "inventory_level": {"-10": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 81.0}, "demand_met_from_stock": {"-10": 10.0}, "demand_met_from_stock_cumul": {"-10": 81.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 11, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 10.0, 10.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 33.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 33.0}, "inventory_level": {"-10": 5.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 88.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 88.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 12, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 10.0, 7.0, 3.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 3.0}}, "outbound_shipment": {"2": {"-10": 3.0}}, "on_order_by_predecessor": {"null": {"-11": 30.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 3.0}}, "order_quantity_fg": {"-10": 3.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 30.0}, "inventory_level": {"-10": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 91.0}, "demand_met_from_stock": {"-10": 3.0}, "demand_met_from_stock_cumul": {"-10": 91.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 13, "inbound_shipment_pipeline": {"null": {"-11": [0, 10.0, 7.0, 3.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 25.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 25.0}, "inventory_level": {"-10": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 95.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 95.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 14, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 3.0, 5.0, 6.0]}}, "inbound_shipment": {"null": {"-11": 10.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 6.0}}, "order_quantity_fg": {"-10": 6.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 102.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 102.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 15, "inbound_shipment_pipeline": {"null": {"-11": [0, 3.0, 5.0, 6.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 21.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 21.0}, "inventory_level": {"-10": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 109.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 109.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 16, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 6.0, 7.0, 2.0]}}, "inbound_shipment": {"null": {"-11": 3.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 2.0}}, "outbound_shipment": {"2": {"-10": 2.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 2.0}}, "order_quantity_fg": {"-10": 2.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 111.0}, "demand_met_from_stock": {"-10": 2.0}, "demand_met_from_stock_cumul": {"-10": 111.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 17, "inbound_shipment_pipeline": {"null": {"-11": [0, 6.0, 7.0, 2.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 20.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 20.0}, "inventory_level": {"-10": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 116.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 116.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 18, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 2.0, 5.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 6.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 18.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 18.0}, "inventory_level": {"-10": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 120.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 120.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 19, "inbound_shipment_pipeline": {"null": {"-11": [0, 2.0, 5.0, 4.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 12.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 12.0}, "inventory_level": {"-10": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 121.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 121.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 20, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 4.0, 1.0, 7.0]}}, "inbound_shipment": {"null": {"-11": 2.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 7.0}}, "outbound_shipment": {"2": {"-10": 7.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 7.0}}, "order_quantity_fg": {"-10": 7.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 128.0}, "demand_met_from_stock": {"-10": 7.0}, "demand_met_from_stock_cumul": {"-10": 128.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 21, "inbound_shipment_pipeline": {"null": {"-11": [0, 4.0, 1.0, 7.0, 5.0]}}, "inbound_shipment": {"null": {"-11": 5.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 5.0}}, "outbound_shipment": {"2": {"-10": 5.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 5.0}}, "order_quantity_fg": {"-10": 5.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 133.0}, "demand_met_from_stock": {"-10": 5.0}, "demand_met_from_stock_cumul": {"-10": 133.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 22, "inbound_shipment_pipeline": {"null": {"-11": [0, 1.0, 7.0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-11": 4.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 1.0}}, "outbound_shipment": {"2": {"-10": 1.0}}, "on_order_by_predecessor": {"null": {"-11": 14.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 1.0}}, "order_quantity_fg": {"-10": 1.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 14.0}, "inventory_level": {"-10": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 134.0}, "demand_met_from_stock": {"-10": 1.0}, "demand_met_from_stock_cumul": {"-10": 134.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 23, "inbound_shipment_pipeline": {"null": {"-11": [0, 7.0, 5.0, 1.0, 4.0]}}, "inbound_shipment": {"null": {"-11": 1.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 4.0}}, "outbound_shipment": {"2": {"-10": 4.0}}, "on_order_by_predecessor": {"null": {"-11": 17.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 4.0}}, "order_quantity_fg": {"-10": 4.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 17.0}, "inventory_level": {"-10": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 4.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 24, "inbound_shipment_pipeline": {"null": {"-11": [0, 5.0, 1.0, 4.0, 0.0]}}, "inbound_shipment": {"null": {"-11": 7.0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0.0}}, "outbound_shipment": {"2": {"-10": 0.0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0.0}}, "order_quantity_fg": {"-10": 0.0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0.0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 1.0}}, {"node": 5, "period": 25, "inbound_shipment_pipeline": {"null": {"-11": [5.0, 1.0, 4.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 10.0}}, "backorders_by_successor": {"2": {"-10": 0.0}}, "outbound_disrupted_items": {"2": {"-10": 0.0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0.0}, "pending_finished_goods": {"-10": 10.0}, "inventory_level": {"-10": 28.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 138.0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 138.0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 26, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 27, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 28, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 29, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}, {"node": 5, "period": 30, "inbound_shipment_pipeline": {"null": {"-11": [0, 0, 0, 0, 0]}}, "inbound_shipment": {"null": {"-11": 0}}, "inbound_order_pipeline": {"2": {"-10": [0]}}, "inbound_order": {"2": {"-10": 0}}, "outbound_shipment": {"2": {"-10": 0}}, "on_order_by_predecessor": {"null": {"-11": 0}}, "backorders_by_successor": {"2": {"-10": 0}}, "outbound_disrupted_items": {"2": {"-10": 0}}, "inbound_disrupted_items": {"null": {"-11": 0}}, "order_quantity": {"null": {"-11": 0}}, "order_quantity_fg": {"-10": 0}, "raw_material_inventory": {"-11": 0}, "pending_finished_goods": {"-10": 0}, "inventory_level": {"-10": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-10": 0}, "demand_met_from_stock": {"-10": 0}, "demand_met_from_stock_cumul": {"-10": 0}, "fill_rate": {"-10": 0}}]}, {"_index": 6, "name": null, "network": null, "_products_by_index": {"-12": -12}, "_dummy_product": -12, "_external_supplier_dummy_product": -13, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 8, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 6, "product": null, "base_stock_level": 84, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 6, "period": 0, "inbound_shipment_pipeline": {"null": {"-13": [0, 44.0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 36.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 44.0}}, "backorders_by_successor": {"4": {"-12": 28.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 44.0}}, "order_quantity_fg": {"-12": 44.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 44.0}, "inventory_level": {"-12": -28.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 1, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 44.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 28.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 16.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 36.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 8.0}, "fill_rate": {"-12": 0.2222222222222222}}, {"node": 6, "period": 2, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 3, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 10.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 4, "inbound_shipment_pipeline": {"null": {"-13": [0, 27.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 27.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 27.0}}, "order_quantity_fg": {"-12": 27.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 27.0}, "inventory_level": {"-12": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 42.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 14.0}, "fill_rate": {"-12": 0.3333333333333333}}, {"node": 6, "period": 5, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 27.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 57.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 29.0}, "fill_rate": {"-12": 0.5087719298245614}}, {"node": 6, "period": 6, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 58.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 30.0}, "fill_rate": {"-12": 0.5172413793103449}}, {"node": 6, "period": 7, "inbound_shipment_pipeline": {"null": {"-13": [0, 3.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 3.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 3.0}}, "order_quantity_fg": {"-12": 3.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 3.0}, "inventory_level": {"-12": 19.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 8, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 3.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 63.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 35.0}, "fill_rate": {"-12": 0.5555555555555556}}, {"node": 6, "period": 9, "inbound_shipment_pipeline": {"null": {"-13": [0, 22.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 18.0}}, "outbound_shipment": {"4": {"-12": 18.0}}, "on_order_by_predecessor": {"null": {"-13": 22.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 22.0}}, "order_quantity_fg": {"-12": 22.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 22.0}, "inventory_level": {"-12": 4.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 81.0}, "demand_met_from_stock": {"-12": 18.0}, "demand_met_from_stock_cumul": {"-12": 53.0}, "fill_rate": {"-12": 0.654320987654321}}, {"node": 6, "period": 10, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 22.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 5.0}}, "outbound_shipment": {"4": {"-12": 5.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 21.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 86.0}, "demand_met_from_stock": {"-12": 5.0}, "demand_met_from_stock_cumul": {"-12": 58.0}, "fill_rate": {"-12": 0.6744186046511628}}, {"node": 6, "period": 11, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 12.0}}, "outbound_shipment": {"4": {"-12": 12.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 12.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 12, "inbound_shipment_pipeline": {"null": {"-13": [0, 9.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 9.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 9.0}}, "order_quantity_fg": {"-12": 9.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 9.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 13, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 9.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 98.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 70.0}, "fill_rate": {"-12": 0.7142857142857143}}, {"node": 6, "period": 14, "inbound_shipment_pipeline": {"null": {"-13": [0, 14.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 7.0}}, "outbound_shipment": {"4": {"-12": 7.0}}, "on_order_by_predecessor": {"null": {"-13": 14.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 14.0}}, "order_quantity_fg": {"-12": 14.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 14.0}, "inventory_level": {"-12": 11.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 105.0}, "demand_met_from_stock": {"-12": 7.0}, "demand_met_from_stock_cumul": {"-12": 77.0}, "fill_rate": {"-12": 0.7333333333333333}}, {"node": 6, "period": 15, "inbound_shipment_pipeline": {"null": {"-13": [0, 10.0]}}, "inbound_shipment": {"null": {"-13": 14.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 10.0}}, "outbound_shipment": {"4": {"-12": 10.0}}, "on_order_by_predecessor": {"null": {"-13": 10.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 10.0}}, "order_quantity_fg": {"-12": 10.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 10.0}, "inventory_level": {"-12": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 115.0}, "demand_met_from_stock": {"-12": 10.0}, "demand_met_from_stock_cumul": {"-12": 87.0}, "fill_rate": {"-12": 0.7565217391304347}}, {"node": 6, "period": 16, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 10.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 1.0}}, "outbound_shipment": {"4": {"-12": 1.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 116.0}, "demand_met_from_stock": {"-12": 1.0}, "demand_met_from_stock_cumul": {"-12": 88.0}, "fill_rate": {"-12": 0.7586206896551724}}, {"node": 6, "period": 17, "inbound_shipment_pipeline": {"null": {"-13": [0, 4.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 6.0}}, "outbound_shipment": {"4": {"-12": 6.0}}, "on_order_by_predecessor": {"null": {"-13": 4.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 4.0}}, "order_quantity_fg": {"-12": 4.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 4.0}, "inventory_level": {"-12": 18.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 122.0}, "demand_met_from_stock": {"-12": 6.0}, "demand_met_from_stock_cumul": {"-12": 94.0}, "fill_rate": {"-12": 0.7704918032786885}}, {"node": 6, "period": 18, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 4.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 2.0}}, "outbound_shipment": {"4": {"-12": 2.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 2.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 19, "inbound_shipment_pipeline": {"null": {"-13": [0, 2.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 2.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 2.0}}, "order_quantity_fg": {"-12": 2.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 2.0}, "inventory_level": {"-12": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 124.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 96.0}, "fill_rate": {"-12": 0.7741935483870968}}, {"node": 6, "period": 20, "inbound_shipment_pipeline": {"null": {"-13": [0, 16.0]}}, "inbound_shipment": {"null": {"-13": 2.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 15.0}}, "outbound_shipment": {"4": {"-12": 15.0}}, "on_order_by_predecessor": {"null": {"-13": 16.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 16.0}}, "order_quantity_fg": {"-12": 16.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 16.0}, "inventory_level": {"-12": 9.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 15.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 21, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 16.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 22, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 139.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 111.0}, "fill_rate": {"-12": 0.7985611510791367}}, {"node": 6, "period": 23, "inbound_shipment_pipeline": {"null": {"-13": [0, 6.0]}}, "inbound_shipment": {"null": {"-13": 0.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 8.0}}, "outbound_shipment": {"4": {"-12": 8.0}}, "on_order_by_predecessor": {"null": {"-13": 6.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 6.0}}, "order_quantity_fg": {"-12": 6.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 6.0}, "inventory_level": {"-12": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 8.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 24, "inbound_shipment_pipeline": {"null": {"-13": [0, 0.0]}}, "inbound_shipment": {"null": {"-13": 6.0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0.0}}, "outbound_shipment": {"4": {"-12": 0.0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0.0}}, "order_quantity_fg": {"-12": 0.0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0.0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0.8095238095238095}}, {"node": 6, "period": 25, "inbound_shipment_pipeline": {"null": {"-13": [0.0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0.0}}, "backorders_by_successor": {"4": {"-12": 0.0}}, "outbound_disrupted_items": {"4": {"-12": 0.0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0.0}, "pending_finished_goods": {"-12": 0.0}, "inventory_level": {"-12": 23.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 147.0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 119.0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 26, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 27, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 28, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 29, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}, {"node": 6, "period": 30, "inbound_shipment_pipeline": {"null": {"-13": [0, 0]}}, "inbound_shipment": {"null": {"-13": 0}}, "inbound_order_pipeline": {"4": {"-12": [0]}}, "inbound_order": {"4": {"-12": 0}}, "outbound_shipment": {"4": {"-12": 0}}, "on_order_by_predecessor": {"null": {"-13": 0}}, "backorders_by_successor": {"4": {"-12": 0}}, "outbound_disrupted_items": {"4": {"-12": 0}}, "inbound_disrupted_items": {"null": {"-13": 0}}, "order_quantity": {"null": {"-13": 0}}, "order_quantity_fg": {"-12": 0}, "raw_material_inventory": {"-13": 0}, "pending_finished_goods": {"-12": 0}, "inventory_level": {"-12": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-12": 0}, "demand_met_from_stock": {"-12": 0}, "demand_met_from_stock_cumul": {"-12": 0}, "fill_rate": {"-12": 0}}]}, {"_index": 7, "name": null, "network": null, "_products_by_index": {"-14": -14}, "_dummy_product": -14, "_external_supplier_dummy_product": -15, "_predecessors": [null], "_successors": [4], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": 16, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BEBS", "node": 7, "product": null, "base_stock_level": 92, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": [{"node": 7, "period": 0, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 64.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 36.0}}, "outbound_shipment": {"4": {"-14": 16.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 64.0}}, "order_quantity_fg": {"-14": 64.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 16.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 1, "inbound_shipment_pipeline": {"null": {"-15": [0, 64.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 64.0}}, "backorders_by_successor": {"4": {"-14": 20.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 64.0}, "inventory_level": {"-14": -20.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0.0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 36.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 16.0}, "fill_rate": {"-14": 0.4444444444444444}}, {"node": 7, "period": 2, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 64.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 26.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 3, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 4, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 38.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 42.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 22.0}, "fill_rate": {"-14": 0.5238095238095238}}, {"node": 7, "period": 5, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 23.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 57.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 37.0}, "fill_rate": {"-14": 0.6491228070175439}}, {"node": 7, "period": 6, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 58.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 38.0}, "fill_rate": {"-14": 0.6551724137931034}}, {"node": 7, "period": 7, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 8, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 63.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 43.0}, "fill_rate": {"-14": 0.6825396825396826}}, {"node": 7, "period": 9, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 21.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 18.0}}, "outbound_shipment": {"4": {"-14": 18.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 21.0}}, "order_quantity_fg": {"-14": 21.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 13.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 81.0}, "demand_met_from_stock": {"-14": 18.0}, "demand_met_from_stock_cumul": {"-14": 61.0}, "fill_rate": {"-14": 0.7530864197530864}}, {"node": 7, "period": 10, "inbound_shipment_pipeline": {"null": {"-15": [0, 21.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 5.0}}, "outbound_shipment": {"4": {"-14": 5.0}}, "on_order_by_predecessor": {"null": {"-15": 21.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 21.0}, "inventory_level": {"-14": 8.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 86.0}, "demand_met_from_stock": {"-14": 5.0}, "demand_met_from_stock_cumul": {"-14": 66.0}, "fill_rate": {"-14": 0.7674418604651163}}, {"node": 7, "period": 11, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 14.0]}}, "inbound_shipment": {"null": {"-15": 21.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 12.0}}, "outbound_shipment": {"4": {"-14": 12.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 14.0}}, "order_quantity_fg": {"-14": 14.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 12.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 12, "inbound_shipment_pipeline": {"null": {"-15": [0, 14.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 14.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 14.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 13, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 14.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 31.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 98.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 78.0}, "fill_rate": {"-14": 0.7959183673469388}}, {"node": 7, "period": 14, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 9.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 7.0}}, "outbound_shipment": {"4": {"-14": 7.0}}, "on_order_by_predecessor": {"null": {"-15": 9.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 9.0}}, "order_quantity_fg": {"-14": 9.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 9.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 105.0}, "demand_met_from_stock": {"-14": 7.0}, "demand_met_from_stock_cumul": {"-14": 85.0}, "fill_rate": {"-14": 0.8095238095238095}}, {"node": 7, "period": 15, "inbound_shipment_pipeline": {"null": {"-15": [0, 9.0, 10.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 10.0}}, "outbound_shipment": {"4": {"-14": 10.0}}, "on_order_by_predecessor": {"null": {"-15": 19.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 10.0}}, "order_quantity_fg": {"-14": 10.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 19.0}, "inventory_level": {"-14": 14.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 115.0}, "demand_met_from_stock": {"-14": 10.0}, "demand_met_from_stock_cumul": {"-14": 95.0}, "fill_rate": {"-14": 0.8260869565217391}}, {"node": 7, "period": 16, "inbound_shipment_pipeline": {"null": {"-15": [0, 10.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 9.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 1.0}}, "outbound_shipment": {"4": {"-14": 1.0}}, "on_order_by_predecessor": {"null": {"-15": 10.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 10.0}, "inventory_level": {"-14": 22.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 116.0}, "demand_met_from_stock": {"-14": 1.0}, "demand_met_from_stock_cumul": {"-14": 96.0}, "fill_rate": {"-14": 0.8275862068965517}}, {"node": 7, "period": 17, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 5.0]}}, "inbound_shipment": {"null": {"-15": 10.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 6.0}}, "outbound_shipment": {"4": {"-14": 6.0}}, "on_order_by_predecessor": {"null": {"-15": 5.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 5.0}}, "order_quantity_fg": {"-14": 5.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 5.0}, "inventory_level": {"-14": 26.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 122.0}, "demand_met_from_stock": {"-14": 6.0}, "demand_met_from_stock_cumul": {"-14": 102.0}, "fill_rate": {"-14": 0.8360655737704918}}, {"node": 7, "period": 18, "inbound_shipment_pipeline": {"null": {"-15": [0, 5.0, 1.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 2.0}}, "outbound_shipment": {"4": {"-14": 2.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 1.0}}, "order_quantity_fg": {"-14": 1.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 24.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 2.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 19, "inbound_shipment_pipeline": {"null": {"-15": [0, 1.0, 2.0]}}, "inbound_shipment": {"null": {"-15": 5.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 3.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 2.0}}, "order_quantity_fg": {"-14": 2.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 3.0}, "inventory_level": {"-14": 29.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 124.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 104.0}, "fill_rate": {"-14": 0.8387096774193549}}, {"node": 7, "period": 20, "inbound_shipment_pipeline": {"null": {"-15": [0, 2.0, 16.0]}}, "inbound_shipment": {"null": {"-15": 1.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 15.0}}, "outbound_shipment": {"4": {"-14": 15.0}}, "on_order_by_predecessor": {"null": {"-15": 18.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 16.0}}, "order_quantity_fg": {"-14": 16.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 18.0}, "inventory_level": {"-14": 15.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 15.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 21, "inbound_shipment_pipeline": {"null": {"-15": [0, 16.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 2.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 16.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 16.0}, "inventory_level": {"-14": 17.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 22, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 16.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 0.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 0.0}, "inventory_level": {"-14": 33.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 139.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 119.0}, "fill_rate": {"-14": 0.8561151079136691}}, {"node": 7, "period": 23, "inbound_shipment_pipeline": {"null": {"-15": [0, 0.0, 6.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 8.0}}, "outbound_shipment": {"4": {"-14": 8.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 6.0}}, "order_quantity_fg": {"-14": 6.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 8.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 24, "inbound_shipment_pipeline": {"null": {"-15": [0, 6.0, 0.0]}}, "inbound_shipment": {"null": {"-15": 0.0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0.0}}, "outbound_shipment": {"4": {"-14": 0.0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0.0}}, "order_quantity_fg": {"-14": 0.0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0.0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0.0, "revenue_earned": 0.0, "total_cost_incurred": 0.0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0.0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0.8639455782312925}}, {"node": 7, "period": 25, "inbound_shipment_pipeline": {"null": {"-15": [6.0, 0.0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 6.0}}, "backorders_by_successor": {"4": {"-14": 0.0}}, "outbound_disrupted_items": {"4": {"-14": 0.0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0.0}, "pending_finished_goods": {"-14": 6.0}, "inventory_level": {"-14": 25.0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 147.0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 127.0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 26, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 27, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 28, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 29, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}, {"node": 7, "period": 30, "inbound_shipment_pipeline": {"null": {"-15": [0, 0, 0]}}, "inbound_shipment": {"null": {"-15": 0}}, "inbound_order_pipeline": {"4": {"-14": [0]}}, "inbound_order": {"4": {"-14": 0}}, "outbound_shipment": {"4": {"-14": 0}}, "on_order_by_predecessor": {"null": {"-15": 0}}, "backorders_by_successor": {"4": {"-14": 0}}, "outbound_disrupted_items": {"4": {"-14": 0}}, "inbound_disrupted_items": {"null": {"-15": 0}}, "order_quantity": {"null": {"-15": 0}}, "order_quantity_fg": {"-14": 0}, "raw_material_inventory": {"-15": 0}, "pending_finished_goods": {"-14": 0}, "inventory_level": {"-14": 0}, "disrupted": false, "holding_cost_incurred": 0, "stockout_cost_incurred": 0, "in_transit_holding_cost_incurred": 0, "revenue_earned": 0, "total_cost_incurred": 0, "demand_cumul": {"-14": 0}, "demand_met_from_stock": {"-14": 0}, "demand_met_from_stock_cumul": {"-14": 0}, "fill_rate": {"-14": 0}}]}], "_local_products": [], "_products": [{"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -12, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -13, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -14, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -15, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:13.906264"} \ No newline at end of file diff --git a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json index df667c6..8744dae 100644 --- a/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json +++ b/tests/additional_files/test_instances_TestSaveInstance_omit_state_vars_true_correct.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 11:24:41.240524"} \ No newline at end of file +{"_id": "", "instances": [{"name": "test_omit_state_vars_true", "description": "this is test_omit_state_vars_true", "data": {"nodes": [{"_index": 5, "name": null, "network": null, "_products_by_index": {"-10": -10}, "_dummy_product": -10, "_external_supplier_dummy_product": -11, "_predecessors": [null], "_successors": [4], "local_holding_cost": 3.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 5, "product": null, "base_stock_level": 32.93, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 4, "name": null, "network": null, "_products_by_index": {"-8": -8}, "_dummy_product": -8, "_external_supplier_dummy_product": -9, "_predecessors": [5], "_successors": [3], "local_holding_cost": 2.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 4, "product": null, "base_stock_level": 33.3, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [2], "local_holding_cost": 1.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 35.14, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 1.0, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 33.87, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 0.5, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 12.0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 32.0, "standard_deviation": 5.656854249492381, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 40.59, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -10, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -11, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -8, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 24, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:13.630444"} \ No newline at end of file diff --git a/tests/additional_files/test_multiproduct_5_7.json b/tests/additional_files/test_multiproduct_5_7.json index 39ee45b..8fa01ad 100644 --- a/tests/additional_files/test_multiproduct_5_7.json +++ b/tests/additional_files/test_multiproduct_5_7.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"5": {"type": "BS", "node": 4, "product": 5, "base_stock_level": 1500, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "6": {"type": "BS", "node": 4, "product": 6, "base_stock_level": 7500, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product": -5, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": {"2": 6, "3": 5, "4": 4}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"2": {"type": "BS", "node": 2, "product": 2, "base_stock_level": 50, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "3": {"type": "BS", "node": 2, "product": 3, "base_stock_level": 300, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "4": {"type": "BS", "node": 2, "product": 4, "base_stock_level": 60, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": {"2": 5, "4": 4}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"2": {"type": "BS", "node": 3, "product": 2, "base_stock_level": 20, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "4": {"type": "BS", "node": 3, "product": 4, "base_stock_level": 20, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product": -1001, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 5, "standard_deviation": 2.23606797749979, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": 0, "base_stock_level": 5, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": {"0": 12, "1": 20}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"0": {"type": "P", "mean": 4, "standard_deviation": 2.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "1": {"type": "P", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "dict_type": "product_keyed_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"0": {"type": "BS", "node": 1, "product": 0, "base_stock_level": 4, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "1": {"type": "BS", "node": 1, "product": 1, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": 0.3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": 10, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 350, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-04 08:54:50.372064"} \ No newline at end of file +{"_id": "", "instances": [{"name": "bom_structure", "description": "", "data": {"nodes": [{"_index": 4, "name": null, "network": null, "_products_by_index": {"5": 5, "6": 6}, "_dummy_product": null, "_external_supplier_dummy_product": -9, "_predecessors": [null], "_successors": [2, 3], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 5, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"5": {"type": "BS", "node": 4, "product": 5, "base_stock_level": 1500, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "6": {"type": "BS", "node": 4, "product": 6, "base_stock_level": 7500, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"2": 2, "3": 3, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product": -5, "_predecessors": [4], "_successors": [0, 1], "local_holding_cost": {"2": 6, "3": 5, "4": 4}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"2": {"type": "BS", "node": 2, "product": 2, "base_stock_level": 50, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "3": {"type": "BS", "node": 2, "product": 3, "base_stock_level": 300, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "4": {"type": "BS", "node": 2, "product": 4, "base_stock_level": 60, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 3, "name": null, "network": null, "_products_by_index": {"2": 2, "4": 4}, "_dummy_product": null, "_external_supplier_dummy_product": -7, "_predecessors": [4], "_successors": [1], "local_holding_cost": {"2": 5, "4": 4}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 3, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"2": {"type": "BS", "node": 3, "product": 2, "base_stock_level": 20, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "4": {"type": "BS", "node": 3, "product": 4, "base_stock_level": 20, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 0, "name": null, "network": null, "_products_by_index": {"0": 0}, "_dummy_product": null, "_external_supplier_dummy_product": -1001, "_predecessors": [2], "_successors": [null], "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "P", "mean": 5, "standard_deviation": 2.23606797749979, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 0, "product": 0, "base_stock_level": 5, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"0": 0, "1": 1}, "_dummy_product": null, "_external_supplier_dummy_product": -3, "_predecessors": [2, 3], "_successors": [null], "local_holding_cost": {"0": 12, "1": 20}, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"0": {"type": "P", "mean": 4, "standard_deviation": 2.0, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "1": {"type": "P", "mean": 8, "standard_deviation": 2.8284271247461903, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "dict_type": "product_keyed_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"0": {"type": "BS", "node": 1, "product": 0, "base_stock_level": 4, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "1": {"type": "BS", "node": 1, "product": 1, "base_stock_level": 8, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "dict_type": "product_keyed_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": 5, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": 0.2, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 6, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {}, "local_holding_cost": 0.3, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -9, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 2, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 0.2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 3, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"5": 2}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 4, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"6": 50}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 0, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"2": 2.5, "3": 7}, "local_holding_cost": 10, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 350, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -1001, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": 1, "name": null, "network": null, "is_dummy": false, "_bill_of_materials": {"3": 10, "4": 3.8}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:19.438192"} \ No newline at end of file diff --git a/tests/additional_files/test_policy_TestFromDict_data.json b/tests/additional_files/test_policy_TestFromDict_data.json index 8652530..42895c3 100644 --- a/tests/additional_files/test_policy_TestFromDict_data.json +++ b/tests/additional_files/test_policy_TestFromDict_data.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "missing_base_stock_level", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_type", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.540582"} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_base_stock_level", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_type", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:00.844016"} \ No newline at end of file diff --git a/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json b/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json index 5d983b7..7f6336f 100644 --- a/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json +++ b/tests/additional_files/test_supply_chain_network_TestToFromDict_data.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "missing_period", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_nodes", "description": "", "data": {"_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.599466"} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_period", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_nodes", "description": "", "data": {"_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:00.872837"} \ No newline at end of file diff --git a/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json b/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json index fa9f8be..beb8aba 100644 --- a/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json +++ b/tests/additional_files/test_supply_chain_node_TestNodeToFromDict_data.json @@ -1 +1 @@ -{"_id": "", "instances": [{"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [{"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-04-21 22:58:09.552322"} \ No newline at end of file +{"_id": "", "instances": [{"name": "missing_local_holding_cost_node_3", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_demand_source_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}, {"name": "missing_recovery_probability_node_1", "description": "", "data": {"nodes": [{"_index": 3, "name": null, "network": null, "_products_by_index": {"-6": -6}, "_dummy_product": -6, "_external_supplier_dummy_product": -7, "_predecessors": [null], "_successors": [2], "local_holding_cost": 2, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 2, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 3, "product": null, "base_stock_level": 10.69, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": "U", "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 2, "name": null, "network": null, "_products_by_index": {"-4": -4}, "_dummy_product": -4, "_external_supplier_dummy_product": -5, "_predecessors": [3], "_successors": [1], "local_holding_cost": 4, "echelon_holding_cost": 2, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 0, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 2, "product": null, "base_stock_level": 5.53, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "recovery_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}, {"_index": 1, "name": null, "network": null, "_products_by_index": {"-2": -2}, "_dummy_product": -2, "_external_supplier_dummy_product": -3, "_predecessors": [2], "_successors": [null], "local_holding_cost": 7, "echelon_holding_cost": 3, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": 37.12, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": 1, "order_lead_time": null, "demand_source": {"type": "N", "mean": 5, "standard_deviation": 1, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null, "dict_type": "singleton_attribute"}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": "BS", "node": 1, "product": null, "base_stock_level": 6.49, "order_quantity": null, "reorder_point": null, "order_up_to_level": null, "dict_type": "singleton_attribute"}, "supply_type": null, "disruption_process": {"random_process_type": null, "disruption_type": "OP", "disruption_probability": null, "disruption_state_list": null, "disrupted": false, "dict_type": "singleton_attribute"}, "order_capacity": null, "processing_time": null, "external_inbound_cst": null, "external_outbound_cst": null, "demand_bound_constant": null, "units_required": null, "original_label": null, "net_demand_mean": null, "net_demand_standard_deviation": null, "larger_adjacent_node": null, "larger_adjacent_node_is_downstream": null, "max_replenishment_time": null, "state_vars": null}], "_local_products": [], "_products": [{"_index": -6, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -7, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -4, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -5, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -2, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}, {"_index": -3, "name": null, "network": null, "is_dummy": true, "_bill_of_materials": {}, "local_holding_cost": null, "echelon_holding_cost": null, "local_holding_cost_function": null, "in_transit_holding_cost": null, "stockout_cost": null, "stockout_cost_function": null, "revenue": null, "shipment_lead_time": null, "order_lead_time": null, "demand_source": {"type": null, "mean": null, "standard_deviation": null, "demand_list": null, "probabilities": null, "lo": null, "hi": null, "n": null, "p": null, "round_to_int": null}, "initial_inventory_level": null, "initial_orders": null, "initial_shipments": null, "_inventory_policy": {"type": null, "node": null, "product": null, "base_stock_level": null, "order_quantity": null, "reorder_point": null, "order_up_to_level": null}, "supply_type": null, "order_capacity": null, "state_vars": []}], "period": 0, "max_max_replenishment_time": null}, "type": "network"}], "last_updated": "2024-05-10 22:09:00.854663"} \ No newline at end of file diff --git a/tests/test_helpers.py b/tests/test_helpers.py index 36f1722..df29d91 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -3,6 +3,8 @@ import numpy as np import stockpyl.helpers as helpers +from stockpyl.supply_chain_node import SupplyChainNode +from stockpyl.supply_chain_product import SupplyChainProduct from tests.settings import * @@ -1120,6 +1122,55 @@ def test_nesting(self): self.assertDictEqual(c_new, {"0": 5, 3: "hello", 2: -1, 9: {0: 5, 3: "hello", None: -1, "9": None}, None: {None: -5, "4": 2, "d": None, 6: "foo"}}) +class TestCompareUnhashableLists(unittest.TestCase): + @classmethod + def set_up_class(cls): + """Called once, before any tests.""" + print_status('TestCompareUnhashableLists', 'set_up_class()') + + @classmethod + def tear_down_class(cls): + """Called once, after all tests, if set_up_class successful.""" + print_status('TestCompareUnhashableLists', 'tear_down_class()') + + def test_basic(self): + """Test compare_unhashable_lists(). + """ + print_status('TestCompareUnhashableLists', 'test_basic()') + + nodes = [SupplyChainNode(i) for i in range(5)] + prods = [SupplyChainProduct(i) for i in range(5)] + + list1 = [nodes[0], nodes[1]] + list2 = [nodes[0], nodes[1]] + self.assertTrue(helpers.compare_unhashable_lists(list1, list2)) + list3 = [nodes[1], nodes[3]] + self.assertFalse(helpers.compare_unhashable_lists(list1, list3)) + + list1 = [nodes[3], nodes[4], prods[2]] + list2 = [nodes[3], nodes[4], prods[2]] + self.assertTrue(helpers.compare_unhashable_lists(list1, list2)) + list3 = [nodes[1], nodes[3], prods[2]] + self.assertFalse(helpers.compare_unhashable_lists(list1, list3)) + + list1 = [nodes[3], nodes[4], nodes[3], prods[2]] + list2 = [nodes[3], nodes[4], prods[2], nodes[3]] + self.assertTrue(helpers.compare_unhashable_lists(list1, list2)) + list3 = [nodes[3], nodes[4], prods[0], nodes[3]] + self.assertFalse(helpers.compare_unhashable_lists(list1, list3)) + + list1 = nodes + [nodes[3], prods[4], nodes[4], nodes[3], prods[2], prods[4]] + list2 = [nodes[3], nodes[4], prods[2], nodes[3], nodes[1], nodes[2], nodes[0], nodes[4], nodes[3], prods[4], prods[4]] + self.assertTrue(helpers.compare_unhashable_lists(list1, list2)) + list3 = [nodes[0], nodes[4], prods[2], nodes[3], nodes[1], nodes[2], nodes[0], nodes[4], nodes[3], prods[4], prods[4]] + self.assertFalse(helpers.compare_unhashable_lists(list1, list3)) + + list1 = [nodes[3], nodes[4], 42, 9, nodes[3], prods[2], 42] + list2 = [42, 9, 42, nodes[3], nodes[4], prods[2], nodes[3]] + self.assertTrue(helpers.compare_unhashable_lists(list1, list2)) + list3 = [41, 9, 42, nodes[3], nodes[4], prods[2], nodes[3]] + self.assertFalse(helpers.compare_unhashable_lists(list1, list3)) + class TestConvolveMany(unittest.TestCase): @classmethod def set_up_class(cls): diff --git a/tests/test_sim.py b/tests/test_sim.py index 1dde45f..af881cf 100644 --- a/tests/test_sim.py +++ b/tests/test_sim.py @@ -481,10 +481,10 @@ def test_assembly_3_stage_as_multiproduct(self): nodes = {n.index: n for n in network.nodes} products = {prod_index: SupplyChainProduct(index=prod_index) for prod_index in [0, 1, 2, 11, 12]} - products[0].set_bill_of_materials(rm_index=1, num_needed=1) - products[0].set_bill_of_materials(rm_index=2, num_needed=1) - products[1].set_bill_of_materials(rm_index=11, num_needed=1) - products[2].set_bill_of_materials(rm_index=12, num_needed=1) + products[0].set_bill_of_materials(raw_material=1, num_needed=1) + products[0].set_bill_of_materials(raw_material=2, num_needed=1) + products[1].set_bill_of_materials(raw_material=11, num_needed=1) + products[2].set_bill_of_materials(raw_material=12, num_needed=1) nodes[0].add_product(products[0]) nodes[1].add_products([products[1], products[2]]) @@ -585,15 +585,15 @@ def test_rosling_figure_1_as_multiproduct_LBS(self): nodes = {n.index: n for n in network.nodes} products = {prod_index: SupplyChainProduct(index=prod_index) for prod_index in [1, 2, 3, 4, 5, 6, 7, 55, 66, 77]} - products[1].set_bill_of_materials(rm_index=3, num_needed=1) - products[1].set_bill_of_materials(rm_index=2, num_needed=1) - products[3].set_bill_of_materials(rm_index=4, num_needed=1) - products[2].set_bill_of_materials(rm_index=5, num_needed=1) - products[4].set_bill_of_materials(rm_index=7, num_needed=1) - products[4].set_bill_of_materials(rm_index=6, num_needed=1) - products[6].set_bill_of_materials(rm_index=66, num_needed=1) - products[7].set_bill_of_materials(rm_index=77, num_needed=1) - products[5].set_bill_of_materials(rm_index=55, num_needed=1) + products[1].set_bill_of_materials(raw_material=3, num_needed=1) + products[1].set_bill_of_materials(raw_material=2, num_needed=1) + products[3].set_bill_of_materials(raw_material=4, num_needed=1) + products[2].set_bill_of_materials(raw_material=5, num_needed=1) + products[4].set_bill_of_materials(raw_material=7, num_needed=1) + products[4].set_bill_of_materials(raw_material=6, num_needed=1) + products[6].set_bill_of_materials(raw_material=66, num_needed=1) + products[7].set_bill_of_materials(raw_material=77, num_needed=1) + products[5].set_bill_of_materials(raw_material=55, num_needed=1) nodes[0].add_product(products[1]) nodes[1].add_products([products[3], products[2]]) @@ -725,8 +725,8 @@ def test_example_6_1_order_quantity_override(self): for t in range(T): if t == 40: step(network2, consistency_checks='E', order_quantity_override={ - nodes2[2]: {nodes2[3]: {nodes2[3]._dummy_product: 33}}, - nodes2[3]: {None: {nodes2[3]._external_supplier_dummy_product: 77}} + 2: {3: {nodes2[3]._dummy_product.index: 33}}, + 3: {None: {nodes2[3]._external_supplier_dummy_product.index: 77}} }) else: step(network2, consistency_checks='E') diff --git a/tests/test_supply_chain_network.py b/tests/test_supply_chain_network.py index af6adb1..9c52f69 100644 --- a/tests/test_supply_chain_network.py +++ b/tests/test_supply_chain_network.py @@ -830,8 +830,8 @@ def test_basic(self): network.add_product(prod0) network.add_product(prod1) - self.assertSetEqual(set(network.products), {prod0, prod1}) - self.assertSetEqual(set(network.product_indices), {0, 1}) + self.assertListEqual(network.products, [prod0, prod1]) + self.assertListEqual(network.product_indices, [0, 1]) self.assertDictEqual(network.products_by_index, {0: prod0, 1: prod1}) def test_multiproduct_5_7(self): @@ -844,8 +844,8 @@ def test_multiproduct_5_7(self): network.add_product(SupplyChainProduct(11)) products = {prod.index: prod for prod in network.products} - self.assertSetEqual(set(network.product_indices), set([0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -9, -7, -5, -3])) - self.assertSetEqual(set(network.products), set(products.values())) + self.assertCountEqual(network.product_indices, [0, 1, 2, 3, 4, 5, 6, 10, 11, -1001, -9, -7, -5, -3]) + self.assertListEqual(network.products, list(products.values())) self.assertDictEqual(network.products_by_index, {i: products[i] for i in products.keys()}) diff --git a/tests/test_supply_chain_node.py b/tests/test_supply_chain_node.py index a639173..af4a96d 100644 --- a/tests/test_supply_chain_node.py +++ b/tests/test_supply_chain_node.py @@ -12,6 +12,7 @@ from stockpyl.policy import Policy from stockpyl.instances import * from stockpyl.sim import * +from stockpyl.helpers import compare_unhashable_lists from stockpyl.supply_chain_node import _INDEX_BUMP @@ -383,11 +384,11 @@ def test_example_6_1(self): desc = {} for n in network.nodes: - desc[n.index] = set(n.descendants) + desc[n.index] = n.descendants - self.assertEqual(desc[1], set([])) - self.assertEqual(desc[2], set([network.get_node_from_index(1)])) - self.assertEqual(desc[3], set([network.get_node_from_index(1), network.get_node_from_index(2)])) + self.assertEqual(desc[1], []) + self.assertEqual(desc[2], [network.get_node_from_index(1)]) + self.assertEqual(desc[3], [network.get_node_from_index(1), network.get_node_from_index(2)]) def test_4_node_owmr(self): """Test descendants for 4-node OWMR system. @@ -451,11 +452,11 @@ def test_example_6_1(self): anc = {} for n in network.nodes: - anc[n.index] = set(n.ancestors) + anc[n.index] = n.ancestors - self.assertEqual(anc[1], set([network.get_node_from_index(2), network.get_node_from_index(3)])) - self.assertEqual(anc[2], set([network.get_node_from_index(3)])) - self.assertEqual(anc[3], set([])) + self.assertEqual(anc[1], [network.get_node_from_index(2), network.get_node_from_index(3)]) + self.assertEqual(anc[2], [network.get_node_from_index(3)]) + self.assertEqual(anc[3], []) def test_4_node_owmr(self): """Test ancestors for 4-node OWMR system. @@ -925,8 +926,8 @@ def test_mwor_no_product(self): nodes[2].add_products([prods[2], prods[3]]) nodes[3].add_products([prods[4], prods[5]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=None), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=None, return_indices=True), [1, 2, 3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=None), [nodes[1], nodes[2], nodes[3]])) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=None, return_indices=True), [1, 2, 3]) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_product(product=77) _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True) @@ -951,8 +952,8 @@ def test_mwor_one_product(self): nodes[0].products[0].set_bill_of_materials(4, 15) nodes[0].products[0].set_bill_of_materials(5, 6) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True), [1, 2, 3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=10), [nodes[1], nodes[2], nodes[3]])) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True), [1, 2, 3]) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_product(product=None) _ = nodes[0].raw_material_suppliers_by_product(product=77) @@ -980,12 +981,12 @@ def test_mwor_multiple_products(self): nodes[0].products_by_index[11].set_bill_of_materials(4, 15) nodes[0].products_by_index[12].set_bill_of_materials(5, 6) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11, return_indices=True), [2, 3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12, return_indices=True), [3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=10), [nodes[1], nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=11), [nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=12), [nodes[3]])) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True), [1, 2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=11, return_indices=True), [2, 3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=12, return_indices=True), [3]) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_product(product=None) _ = nodes[0].raw_material_suppliers_by_product(product=77) @@ -1000,26 +1001,26 @@ def test_multiproduct_5_7(self): network = load_instance("bom_structure", "tests/additional_files/test_multiproduct_5_7.json") nodes = {i: network.get_node_from_index(i) for i in network.node_indices} - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0), [nodes[2]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4), [nodes[4]]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5), [None]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6), [None]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0, return_indices=True), [2]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0, return_indices=True), [2, 3]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1, return_indices=True), [2, 3]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2, return_indices=True), [4]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3, return_indices=True), [4]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4, return_indices=True), [4]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2, return_indices=True), [4]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4, return_indices=True), [4]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5, return_indices=True), [None]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6, return_indices=True), [None]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=0), [nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_material_suppliers_by_product(product=0), [nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_material_suppliers_by_product(product=1), [nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_material_suppliers_by_product(product=2), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_material_suppliers_by_product(product=3), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_material_suppliers_by_product(product=4), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_material_suppliers_by_product(product=2), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_material_suppliers_by_product(product=4), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_material_suppliers_by_product(product=5), [None])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_material_suppliers_by_product(product=6), [None])) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=0, return_indices=True), [2]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_product(product=0, return_indices=True), [2, 3]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_product(product=1, return_indices=True), [2, 3]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_product(product=2, return_indices=True), [4]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_product(product=3, return_indices=True), [4]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_product(product=4, return_indices=True), [4]) + self.assertCountEqual(nodes[3].raw_material_suppliers_by_product(product=2, return_indices=True), [4]) + self.assertCountEqual(nodes[3].raw_material_suppliers_by_product(product=4, return_indices=True), [4]) + self.assertCountEqual(nodes[4].raw_material_suppliers_by_product(product=5, return_indices=True), [None]) + self.assertCountEqual(nodes[4].raw_material_suppliers_by_product(product=6, return_indices=True), [None]) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_product(product=None) _ = nodes[0].raw_material_suppliers_by_product(product=77) @@ -1239,56 +1240,56 @@ def test_mwor_no_product(self): nodes[3].add_products([prods[4], prods[5]]) # Raw materials by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True), list(prods.keys())) - self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), list(prods.keys())) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), list(prods.keys())) - self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=True), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=True), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=True), list(prods.values())) + self.assertCountEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True), list(prods.keys())) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), list(prods.keys())) + self.assertCountEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), list(prods.keys())) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(network_BOM=True), list(prods.values()))) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=True), list(prods.values()))) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product='all', network_BOM=True), list(prods.values()))) with self.assertRaises(ValueError): _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) # Raw materials by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False), []) - self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), []) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), []) - self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=False), []) - self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=False), []) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=False), []) + self.assertCountEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False), []) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), []) + self.assertCountEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), []) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product='all', network_BOM=False), [])) with self.assertRaises(ValueError): _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) # Raw material suppliers by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True), [1, 2, 3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), [1, 2, 3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=True), [nodes[1], nodes[2], nodes[3]]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True), [1, 2, 3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), [1, 2, 3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[1], nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=True), [nodes[1], nodes[2], nodes[3]])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=True) _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=True) # Raw material suppliers by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False), []) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), []) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=False), []) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=False), []) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False), []) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), []) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=False), [])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=False) _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=False) # Raw material suppliers by raw_material, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=True), [1]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=True), [nodes[1]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=True), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=True), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=True), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=True), [nodes[3]]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=True), [1]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [1, 2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=True), [nodes[1]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=True), [nodes[1], nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=True), [nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=True), [nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=True), [nodes[3]])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=True) _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=True) @@ -1330,71 +1331,71 @@ def test_mwor_one_product(self): prod10.set_bill_of_materials(5, 6) # Raw materials by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True), list(prods.keys())) - self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), list(prods.keys())) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), list(prods.keys())) - self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=True), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=True), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=True), list(prods.values())) + self.assertCountEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True), list(prods.keys())) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), list(prods.keys())) + self.assertCountEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), list(prods.keys())) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(network_BOM=True), list(prods.values()))) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=True), list(prods.values()))) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product='all', network_BOM=True), list(prods.values()))) with self.assertRaises(ValueError): _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) # Raw materials by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False), list(prods.keys())) - self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), list(prods.keys())) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), list(prods.keys())) - self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=False), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=False), list(prods.values())) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=False), list(prods.values())) + self.assertCountEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False), list(prods.keys())) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), list(prods.keys())) + self.assertCountEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), list(prods.keys())) + self.assertTrue((nodes[0].raw_materials_by_product(network_BOM=False), list(prods.values()))) + self.assertTrue((nodes[0].raw_materials_by_product(product=nodes[0].product_indices[0], network_BOM=False), list(prods.values()))) + self.assertTrue((nodes[0].raw_materials_by_product(product='all', network_BOM=False), list(prods.values()))) with self.assertRaises(ValueError): _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) # Raw material suppliers by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True), [1, 2, 3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), [1, 2, 3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=True), [nodes[1], nodes[2], nodes[3]]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True), [1, 2, 3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=True), [1, 2, 3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[1], nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=True), [nodes[1], nodes[2], nodes[3]])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=True) _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=True) # Raw material suppliers by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False), [1, 2, 3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), [1, 2, 3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=False), [nodes[1], nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=False), [nodes[1], nodes[2], nodes[3]]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False), [1, 2, 3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], return_indices=True, network_BOM=False), [1, 2, 3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(network_BOM=False), [nodes[1], nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=nodes[0].product_indices[0], network_BOM=False), [nodes[1], nodes[2], nodes[3]])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_product(product=77, return_indices=True, network_BOM=False) _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=False) # Raw material suppliers by raw_material, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=True), [1]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=True), [nodes[1]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=True), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=True), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=True), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=True), [nodes[3]]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=True), [1]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [1, 2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=True), [nodes[1]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=True), [nodes[1], nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=True), [nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=True), [nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=True), [nodes[3]])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=True) _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=True) # Raw material suppliers by raw_material, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=False), [1]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [1, 2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=False), [nodes[1]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=False), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=False), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=False), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=False), [nodes[3]]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=False), [1]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [1, 2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False), [3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=False), [nodes[1]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=False), [nodes[1], nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=False), [nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=False), [nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=False), [nodes[3]])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=False) _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=False) @@ -1421,14 +1422,14 @@ def test_mwor_multiple_products(self): nodes[0].products_by_index[12].set_bill_of_materials(5, 6) # Raw materials by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_materials_by_product(product=10, return_indices=True, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=11, return_indices=True, network_BOM=True), [3, 4]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=12, return_indices=True, network_BOM=True), [5]) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [1, 2, 3, 4, 5]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=10, network_BOM=True), [prods[1], prods[2]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=11, network_BOM=True), [prods[3], prods[4]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=12, network_BOM=True), [prods[5]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=True), [prods[1], prods[2], prods[3], prods[4], prods[5]]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=10, return_indices=True, network_BOM=True), [1, 2]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=11, return_indices=True, network_BOM=True), [3, 4]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=12, return_indices=True, network_BOM=True), [5]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [1, 2, 3, 4, 5]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=10, network_BOM=True), [prods[1], prods[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=11, network_BOM=True), [prods[3], prods[4]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=12, network_BOM=True), [prods[5]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product='all', network_BOM=True), [prods[1], prods[2], prods[3], prods[4], prods[5]])) with self.assertRaises(ValueError): _ = nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True) _ = nodes[0].raw_materials_by_product(network_BOM=True) @@ -1436,14 +1437,14 @@ def test_mwor_multiple_products(self): _ = nodes[0].raw_materials_by_product(product=77, network_BOM=True) # Raw materials by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_materials_by_product(product=10, return_indices=True, network_BOM=False), [1, 2]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=11, return_indices=True, network_BOM=False), [3, 4]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=12, return_indices=True, network_BOM=False), [5]) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [1, 2, 3, 4, 5]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=10, network_BOM=False), [prods[1], prods[2]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=11, network_BOM=False), [prods[3], prods[4]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=12, network_BOM=False), [prods[5]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=False), [prods[1], prods[2], prods[3], prods[4], prods[5]]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=10, return_indices=True, network_BOM=False), [1, 2]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=11, return_indices=True, network_BOM=False), [3, 4]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=12, return_indices=True, network_BOM=False), [5]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [1, 2, 3, 4, 5]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=10, network_BOM=False), [prods[1], prods[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=11, network_BOM=False), [prods[3], prods[4]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=12, network_BOM=False), [prods[5]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product='all', network_BOM=False), [prods[1], prods[2], prods[3], prods[4], prods[5]])) with self.assertRaises(ValueError): _ = nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False) _ = nodes[0].raw_materials_by_product(network_BOM=False) @@ -1451,12 +1452,12 @@ def test_mwor_multiple_products(self): _ = nodes[0].raw_materials_by_product(product=77, network_BOM=False) # Raw material suppliers by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11, return_indices=True, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12, return_indices=True, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, network_BOM=True), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11, network_BOM=True), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12, network_BOM=True), [nodes[3]]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True, network_BOM=True), [1, 2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=11, return_indices=True, network_BOM=True), [2, 3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=12, return_indices=True, network_BOM=True), [3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=10, network_BOM=True), [nodes[1], nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=11, network_BOM=True), [nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=12, network_BOM=True), [nodes[3]])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True) _ = nodes[0].raw_material_suppliers_by_product(network_BOM=True) @@ -1464,12 +1465,12 @@ def test_mwor_multiple_products(self): _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=True) # Raw material suppliers by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True, network_BOM=False), [1, 2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11, return_indices=True, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12, return_indices=True, network_BOM=False), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=10, network_BOM=False), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=11, network_BOM=False), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=12, network_BOM=False), [nodes[3]]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=10, return_indices=True, network_BOM=False), [1, 2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=11, return_indices=True, network_BOM=False), [2, 3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=12, return_indices=True, network_BOM=False), [3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=10, network_BOM=False), [nodes[1], nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=11, network_BOM=False), [nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=12, network_BOM=False), [nodes[3]])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False) _ = nodes[0].raw_material_suppliers_by_product(network_BOM=False) @@ -1477,31 +1478,31 @@ def test_mwor_multiple_products(self): _ = nodes[0].raw_material_suppliers_by_product(product=77, network_BOM=False) # Raw material suppliers by raw_material, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=True), [1]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [1, 2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=True), [nodes[1]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=True), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=True), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=True), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=True), [nodes[3]]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=True), [1]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [1, 2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=True), [nodes[1]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=True), [nodes[1], nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=True), [nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=True), [nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=True), [nodes[3]])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=True) _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=True) # Raw material suppliers by raw_material, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=False), [1]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [1, 2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [3]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=False), [nodes[1]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=False), [nodes[1], nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=False), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=False), [nodes[3]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=False), [nodes[3]]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, return_indices=True, network_BOM=False), [1]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [1, 2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False), [3]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [3]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=1, network_BOM=False), [nodes[1]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, network_BOM=False), [nodes[1], nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, network_BOM=False), [nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, network_BOM=False), [nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_raw_material(raw_material=5, network_BOM=False), [nodes[3]])) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=False) _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, network_BOM=False) @@ -1516,38 +1517,38 @@ def test_multiproduct_5_7(self): prods = network.products_by_index # Raw materials by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=0, return_indices=True, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[1].raw_materials_by_product(product=0, return_indices=True, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[1].raw_materials_by_product(product=1, return_indices=True, network_BOM=True), [3, 4]) - self.assertListEqual(nodes[1].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [2, 3, 4]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=2, return_indices=True, network_BOM=True), [5]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=3, return_indices=True, network_BOM=True), [5]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=4, return_indices=True, network_BOM=True), [6]) - self.assertListEqual(nodes[2].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [5, 6]) - self.assertListEqual(nodes[3].raw_materials_by_product(product=2, return_indices=True, network_BOM=True), [5]) - self.assertListEqual(nodes[3].raw_materials_by_product(product=4, return_indices=True, network_BOM=True), [6]) - self.assertListEqual(nodes[3].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [5, 6]) - self.assertListEqual(nodes[4].raw_materials_by_product(product=5, return_indices=True, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) - self.assertListEqual(nodes[4].raw_materials_by_product(product=6, return_indices=True, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) - self.assertListEqual(nodes[4].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) - self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=True), [prods[2], prods[3]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=0, network_BOM=True), [prods[2], prods[3]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=True), [prods[2], prods[3]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product=0, network_BOM=True), [prods[2], prods[3]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product=1, network_BOM=True), [prods[3], prods[4]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product='all', network_BOM=True), [prods[2], prods[3], prods[4]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=2, network_BOM=True), [prods[5]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=3, network_BOM=True), [prods[5]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=4, network_BOM=True), [prods[6]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product='all', network_BOM=True), [prods[5], prods[6]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product=2, network_BOM=True), [prods[5]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product=4, network_BOM=True), [prods[6]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product='all', network_BOM=True), [prods[5], prods[6]]) - self.assertListEqual(nodes[4].raw_materials_by_product(product=5, network_BOM=True), [nodes[4]._external_supplier_dummy_product]) - self.assertListEqual(nodes[4].raw_materials_by_product(product=6, network_BOM=True), [nodes[4]._external_supplier_dummy_product]) - self.assertListEqual(nodes[4].raw_materials_by_product(product='all', network_BOM=True), [nodes[4]._external_supplier_dummy_product]) + self.assertCountEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=True), [2, 3]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=0, return_indices=True, network_BOM=True), [2, 3]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [2, 3]) + self.assertCountEqual(nodes[1].raw_materials_by_product(product=0, return_indices=True, network_BOM=True), [2, 3]) + self.assertCountEqual(nodes[1].raw_materials_by_product(product=1, return_indices=True, network_BOM=True), [3, 4]) + self.assertCountEqual(nodes[1].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [2, 3, 4]) + self.assertCountEqual(nodes[2].raw_materials_by_product(product=2, return_indices=True, network_BOM=True), [5]) + self.assertCountEqual(nodes[2].raw_materials_by_product(product=3, return_indices=True, network_BOM=True), [5]) + self.assertCountEqual(nodes[2].raw_materials_by_product(product=4, return_indices=True, network_BOM=True), [6]) + self.assertCountEqual(nodes[2].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [5, 6]) + self.assertCountEqual(nodes[3].raw_materials_by_product(product=2, return_indices=True, network_BOM=True), [5]) + self.assertCountEqual(nodes[3].raw_materials_by_product(product=4, return_indices=True, network_BOM=True), [6]) + self.assertCountEqual(nodes[3].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [5, 6]) + self.assertCountEqual(nodes[4].raw_materials_by_product(product=5, return_indices=True, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) + self.assertCountEqual(nodes[4].raw_materials_by_product(product=6, return_indices=True, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) + self.assertCountEqual(nodes[4].raw_materials_by_product(product='all', return_indices=True, network_BOM=True), [nodes[4]._external_supplier_dummy_product.index]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(network_BOM=True), [prods[2], prods[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=0, network_BOM=True), [prods[2], prods[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product='all', network_BOM=True), [prods[2], prods[3]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_materials_by_product(product=0, network_BOM=True), [prods[2], prods[3]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_materials_by_product(product=1, network_BOM=True), [prods[3], prods[4]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_materials_by_product(product='all', network_BOM=True), [prods[2], prods[3], prods[4]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_materials_by_product(product=2, network_BOM=True), [prods[5]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_materials_by_product(product=3, network_BOM=True), [prods[5]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_materials_by_product(product=4, network_BOM=True), [prods[6]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_materials_by_product(product='all', network_BOM=True), [prods[5], prods[6]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_materials_by_product(product=2, network_BOM=True), [prods[5]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_materials_by_product(product=4, network_BOM=True), [prods[6]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_materials_by_product(product='all', network_BOM=True), [prods[5], prods[6]])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_materials_by_product(product=5, network_BOM=True), [nodes[4]._external_supplier_dummy_product])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_materials_by_product(product=6, network_BOM=True), [nodes[4]._external_supplier_dummy_product])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_materials_by_product(product='all', network_BOM=True), [nodes[4]._external_supplier_dummy_product])) with self.assertRaises(ValueError): _ = nodes[1].raw_materials_by_product(return_indices=True, network_BOM=True) _ = nodes[1].raw_materials_by_product(network_BOM=True) @@ -1555,38 +1556,38 @@ def test_multiproduct_5_7(self): _ = nodes[1].raw_materials_by_product(product=77, network_BOM=True) # Raw materials by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[0].raw_materials_by_product(product=0, return_indices=True, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[1].raw_materials_by_product(product=0, return_indices=True, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[1].raw_materials_by_product(product=1, return_indices=True, network_BOM=False), [3, 4]) - self.assertListEqual(nodes[1].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [2, 3, 4]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=2, return_indices=True, network_BOM=False), [5]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=3, return_indices=True, network_BOM=False), [5]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=4, return_indices=True, network_BOM=False), [6]) - self.assertListEqual(nodes[2].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [5, 6]) - self.assertListEqual(nodes[3].raw_materials_by_product(product=2, return_indices=True, network_BOM=False), [5]) - self.assertListEqual(nodes[3].raw_materials_by_product(product=4, return_indices=True, network_BOM=False), [6]) - self.assertListEqual(nodes[3].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [5, 6]) - self.assertListEqual(nodes[0].raw_materials_by_product(network_BOM=False), [prods[2], prods[3]]) - self.assertListEqual(nodes[4].raw_materials_by_product(product=5, return_indices=True, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_materials_by_product(product=6, return_indices=True, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), []) - self.assertListEqual(nodes[0].raw_materials_by_product(product=0, network_BOM=False), [prods[2], prods[3]]) - self.assertListEqual(nodes[0].raw_materials_by_product(product='all', network_BOM=False), [prods[2], prods[3]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product=0, network_BOM=False), [prods[2], prods[3]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product=1, network_BOM=False), [prods[3], prods[4]]) - self.assertListEqual(nodes[1].raw_materials_by_product(product='all', network_BOM=False), [prods[2], prods[3], prods[4]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=2, network_BOM=False), [prods[5]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=3, network_BOM=False), [prods[5]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product=4, network_BOM=False), [prods[6]]) - self.assertListEqual(nodes[2].raw_materials_by_product(product='all', network_BOM=False), [prods[5], prods[6]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product=2, network_BOM=False), [prods[5]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product=4, network_BOM=False), [prods[6]]) - self.assertListEqual(nodes[3].raw_materials_by_product(product='all', network_BOM=False), [prods[5], prods[6]]) - self.assertListEqual(nodes[4].raw_materials_by_product(product=5, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_materials_by_product(product=6, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_materials_by_product(product='all', network_BOM=False), []) + self.assertCountEqual(nodes[0].raw_materials_by_product(return_indices=True, network_BOM=False), [2, 3]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product=0, return_indices=True, network_BOM=False), [2, 3]) + self.assertCountEqual(nodes[0].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [2, 3]) + self.assertCountEqual(nodes[1].raw_materials_by_product(product=0, return_indices=True, network_BOM=False), [2, 3]) + self.assertCountEqual(nodes[1].raw_materials_by_product(product=1, return_indices=True, network_BOM=False), [3, 4]) + self.assertCountEqual(nodes[1].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [2, 3, 4]) + self.assertCountEqual(nodes[2].raw_materials_by_product(product=2, return_indices=True, network_BOM=False), [5]) + self.assertCountEqual(nodes[2].raw_materials_by_product(product=3, return_indices=True, network_BOM=False), [5]) + self.assertCountEqual(nodes[2].raw_materials_by_product(product=4, return_indices=True, network_BOM=False), [6]) + self.assertCountEqual(nodes[2].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [5, 6]) + self.assertCountEqual(nodes[3].raw_materials_by_product(product=2, return_indices=True, network_BOM=False), [5]) + self.assertCountEqual(nodes[3].raw_materials_by_product(product=4, return_indices=True, network_BOM=False), [6]) + self.assertCountEqual(nodes[3].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [5, 6]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(network_BOM=False), [prods[2], prods[3]])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_materials_by_product(product=5, return_indices=True, network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_materials_by_product(product=6, return_indices=True, network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_materials_by_product(product='all', return_indices=True, network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product=0, network_BOM=False), [prods[2], prods[3]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_materials_by_product(product='all', network_BOM=False), [prods[2], prods[3]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_materials_by_product(product=0, network_BOM=False), [prods[2], prods[3]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_materials_by_product(product=1, network_BOM=False), [prods[3], prods[4]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_materials_by_product(product='all', network_BOM=False), [prods[2], prods[3], prods[4]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_materials_by_product(product=2, network_BOM=False), [prods[5]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_materials_by_product(product=3, network_BOM=False), [prods[5]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_materials_by_product(product=4, network_BOM=False), [prods[6]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_materials_by_product(product='all', network_BOM=False), [prods[5], prods[6]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_materials_by_product(product=2, network_BOM=False), [prods[5]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_materials_by_product(product=4, network_BOM=False), [prods[6]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_materials_by_product(product='all', network_BOM=False), [prods[5], prods[6]])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_materials_by_product(product=5, network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_materials_by_product(product=6, network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_materials_by_product(product='all', network_BOM=False), [])) with self.assertRaises(ValueError): _ = nodes[1].raw_materials_by_product(return_indices=True, network_BOM=False) _ = nodes[1].raw_materials_by_product(network_BOM=False) @@ -1594,28 +1595,28 @@ def test_multiproduct_5_7(self): _ = nodes[1].raw_materials_by_product(product=77, network_BOM=False) # Raw material suppliers by product, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True), [2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=True), [2]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1, return_indices=True, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=True), [4]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3, return_indices=True, network_BOM=True), [4]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=True), [4]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=True), [4]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=True), [4]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5, return_indices=True, network_BOM=True), [None]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6, return_indices=True, network_BOM=True), [None]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0, network_BOM=True), [nodes[2]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0, network_BOM=True), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1, network_BOM=True), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2, network_BOM=True), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3, network_BOM=True), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4, network_BOM=True), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2, network_BOM=True), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4, network_BOM=True), [nodes[4]]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5, network_BOM=True), [None]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6, network_BOM=True), [None]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=True), [2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=True), [2]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=True), [2, 3]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_product(product=1, return_indices=True, network_BOM=True), [2, 3]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=True), [4]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_product(product=3, return_indices=True, network_BOM=True), [4]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=True), [4]) + self.assertCountEqual(nodes[3].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=True), [4]) + self.assertCountEqual(nodes[3].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=True), [4]) + self.assertCountEqual(nodes[4].raw_material_suppliers_by_product(product=5, return_indices=True, network_BOM=True), [None]) + self.assertCountEqual(nodes[4].raw_material_suppliers_by_product(product=6, return_indices=True, network_BOM=True), [None]) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(network_BOM=True), [nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=0, network_BOM=True), [nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_material_suppliers_by_product(product=0, network_BOM=True), [nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_material_suppliers_by_product(product=1, network_BOM=True), [nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_material_suppliers_by_product(product=2, network_BOM=True), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_material_suppliers_by_product(product=3, network_BOM=True), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_material_suppliers_by_product(product=4, network_BOM=True), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_material_suppliers_by_product(product=2, network_BOM=True), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_material_suppliers_by_product(product=4, network_BOM=True), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_material_suppliers_by_product(product=5, network_BOM=True), [None])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_material_suppliers_by_product(product=6, network_BOM=True), [None])) with self.assertRaises(ValueError): _ = nodes[1].raw_material_suppliers_by_product(return_indices=True, network_BOM=True) _ = nodes[1].raw_material_suppliers_by_product(network_BOM=True) @@ -1623,28 +1624,28 @@ def test_multiproduct_5_7(self): _ = nodes[1].raw_material_suppliers_by_product(product=77, network_BOM=True) # # Raw material suppliers by product, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False), [2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=False), [2]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1, return_indices=True, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=False), [4]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3, return_indices=True, network_BOM=False), [4]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=False), [4]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=False), [4]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=False), [4]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5, return_indices=True, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6, return_indices=True, network_BOM=False), []) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(network_BOM=False), [nodes[2]]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_product(product=0, network_BOM=False), [nodes[2]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=0, network_BOM=False), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_product(product=1, network_BOM=False), [nodes[2], nodes[3]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=2, network_BOM=False), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=3, network_BOM=False), [nodes[4]]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_product(product=4, network_BOM=False), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=2, network_BOM=False), [nodes[4]]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_product(product=4, network_BOM=False), [nodes[4]]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=5, network_BOM=False), []) - self.assertListEqual(nodes[4].raw_material_suppliers_by_product(product=6, network_BOM=False), []) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(return_indices=True, network_BOM=False), [2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=False), [2]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_product(product=0, return_indices=True, network_BOM=False), [2, 3]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_product(product=1, return_indices=True, network_BOM=False), [2, 3]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=False), [4]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_product(product=3, return_indices=True, network_BOM=False), [4]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=False), [4]) + self.assertCountEqual(nodes[3].raw_material_suppliers_by_product(product=2, return_indices=True, network_BOM=False), [4]) + self.assertCountEqual(nodes[3].raw_material_suppliers_by_product(product=4, return_indices=True, network_BOM=False), [4]) + self.assertCountEqual(nodes[4].raw_material_suppliers_by_product(product=5, return_indices=True, network_BOM=False), []) + self.assertCountEqual(nodes[4].raw_material_suppliers_by_product(product=6, return_indices=True, network_BOM=False), []) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(network_BOM=False), [nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[0].raw_material_suppliers_by_product(product=0, network_BOM=False), [nodes[2]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_material_suppliers_by_product(product=0, network_BOM=False), [nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[1].raw_material_suppliers_by_product(product=1, network_BOM=False), [nodes[2], nodes[3]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_material_suppliers_by_product(product=2, network_BOM=False), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_material_suppliers_by_product(product=3, network_BOM=False), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[2].raw_material_suppliers_by_product(product=4, network_BOM=False), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_material_suppliers_by_product(product=2, network_BOM=False), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[3].raw_material_suppliers_by_product(product=4, network_BOM=False), [nodes[4]])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_material_suppliers_by_product(product=5, network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[4].raw_material_suppliers_by_product(product=6, network_BOM=False), [])) with self.assertRaises(ValueError): _ = nodes[1].raw_material_suppliers_by_product(return_indices=True, network_BOM=False) _ = nodes[1].raw_material_suppliers_by_product(network_BOM=False) @@ -1652,16 +1653,16 @@ def test_multiproduct_5_7(self): _ = nodes[1].raw_material_suppliers_by_product(product=77, network_BOM=False) # # Raw material suppliers by raw_material, network_BOM=True. - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [2, 3]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [4]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=True), [4]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [4]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=True), [4]) - self.assertListEqual(nodes[4].raw_material_suppliers_by_raw_material(raw_material=nodes[4]._external_supplier_dummy_product.index, return_indices=True, network_BOM=True), [None]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=True), [2, 3]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=True), [2]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True), [2, 3]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [4]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=True), [4]) + self.assertCountEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=True), [4]) + self.assertCountEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=True), [4]) + self.assertCountEqual(nodes[4].raw_material_suppliers_by_raw_material(raw_material=nodes[4]._external_supplier_dummy_product.index, return_indices=True, network_BOM=True), [None]) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=True) _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=True) @@ -1670,15 +1671,15 @@ def test_multiproduct_5_7(self): _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=77, network_BOM=True) # # Raw material suppliers by raw_material, network_BOM=False. - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [2]) - self.assertListEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) - self.assertListEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False), [2, 3]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [4]) - self.assertListEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=False), [4]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [4]) - self.assertListEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=False), [4]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [2]) + self.assertCountEqual(nodes[0].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=2, return_indices=True, network_BOM=False), [2, 3]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=3, return_indices=True, network_BOM=False), [2]) + self.assertCountEqual(nodes[1].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False), [2, 3]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [4]) + self.assertCountEqual(nodes[2].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=False), [4]) + self.assertCountEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=5, return_indices=True, network_BOM=False), [4]) + self.assertCountEqual(nodes[3].raw_material_suppliers_by_raw_material(raw_material=6, return_indices=True, network_BOM=False), [4]) with self.assertRaises(ValueError): _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=4, return_indices=True, network_BOM=False) _ = nodes[0].raw_material_suppliers_by_raw_material(raw_material=None, return_indices=True, network_BOM=False) @@ -1910,26 +1911,26 @@ def test_mwor_one_product(self): prods[10].set_bill_of_materials(4, 15) prods[10].set_bill_of_materials(5, 6) - self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=prods[10], return_indices=False, network_BOM=True)), - {(nodes[1], prods[1]), (nodes[1], prods[2]), (nodes[2], prods[2]), (nodes[2], prods[3]), (nodes[3], prods[4]), (nodes[3], prods[5])}) - self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=None, return_indices=False, network_BOM=True)), - {(nodes[1], prods[1]), (nodes[1], prods[2]), (nodes[2], prods[2]), (nodes[2], prods[3]), (nodes[3], prods[4]), (nodes[3], prods[5])}) - self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=None, return_indices=True, network_BOM=True)), - {(1, 1), (1, 2), (2, 2), (2, 3), (3, 4), (3, 5)}) - self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=False, network_BOM=True)), - {(None, nodes[1]._external_supplier_dummy_product)}) - self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=True, network_BOM=True)), - {(None, nodes[1]._external_supplier_dummy_product.index)}) - self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=2, return_indices=False, network_BOM=True)), - {(None, nodes[1]._external_supplier_dummy_product)}) - self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=False)), set()) - self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=True)), - {(None, nodes[2]._external_supplier_dummy_product)}) - self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=2, return_indices=True, network_BOM=True)), - {(None, nodes[2]._external_supplier_dummy_product.index)}) - self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=4, return_indices=False, network_BOM=True)), - {(None, nodes[3]._external_supplier_dummy_product)}) - self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=prods[5], return_indices=True, network_BOM=False)), set()) + self.assertTrue(compare_unhashable_lists(nodes[0].supplier_raw_material_pairs_by_product(product=prods[10], return_indices=False, network_BOM=True), + [(nodes[1], prods[1]), (nodes[1], prods[2]), (nodes[2], prods[2]), (nodes[2], prods[3]), (nodes[3], prods[4]), (nodes[3], prods[5])])) + self.assertTrue(compare_unhashable_lists(nodes[0].supplier_raw_material_pairs_by_product(product=None, return_indices=False, network_BOM=True), + [(nodes[1], prods[1]), (nodes[1], prods[2]), (nodes[2], prods[2]), (nodes[2], prods[3]), (nodes[3], prods[4]), (nodes[3], prods[5])])) + self.assertCountEqual(nodes[0].supplier_raw_material_pairs_by_product(product=None, return_indices=True, network_BOM=True), + [(1, 1), (1, 2), (2, 2), (2, 3), (3, 4), (3, 5)]) + self.assertTrue(compare_unhashable_lists(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=False, network_BOM=True), + [(None, nodes[1]._external_supplier_dummy_product)])) + self.assertCountEqual(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=True, network_BOM=True), + [(None, nodes[1]._external_supplier_dummy_product.index)]) + self.assertTrue(compare_unhashable_lists(nodes[1].supplier_raw_material_pairs_by_product(product=2, return_indices=False, network_BOM=True), + [(None, nodes[1]._external_supplier_dummy_product)])) + self.assertTrue(compare_unhashable_lists(nodes[1].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[2].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=True), + [(None, nodes[2]._external_supplier_dummy_product)])) + self.assertCountEqual(nodes[2].supplier_raw_material_pairs_by_product(product=2, return_indices=True, network_BOM=True), + [(None, nodes[2]._external_supplier_dummy_product.index)]) + self.assertTrue(compare_unhashable_lists(nodes[3].supplier_raw_material_pairs_by_product(product=4, return_indices=False, network_BOM=True), + [(None, nodes[3]._external_supplier_dummy_product)])) + self.assertCountEqual(nodes[3].supplier_raw_material_pairs_by_product(product=prods[5], return_indices=True, network_BOM=False), []) with self.assertRaises(ValueError): _ = nodes[1].supplier_raw_material_pairs_by_product(product=77) @@ -1956,26 +1957,26 @@ def test_mwor_multiple_products(self): prods[11].set_bill_of_materials(4, 15) prods[12].set_bill_of_materials(5, 6) - self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=prods[10], return_indices=False, network_BOM=True)), - {(nodes[1], prods[1]), (nodes[1], prods[2]), (nodes[2], prods[2])}) - self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=11, return_indices=False, network_BOM=True)), - {(nodes[2], prods[3]), (nodes[3], prods[4])}) - self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=12, return_indices=True, network_BOM=True)), - {(3, 5)}) - self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=False, network_BOM=True)), - {(None, nodes[1]._external_supplier_dummy_product)}) - self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=True, network_BOM=True)), - {(None, nodes[1]._external_supplier_dummy_product.index)}) - self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=2, return_indices=False, network_BOM=True)), - {(None, nodes[1]._external_supplier_dummy_product)}) - self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=False)), set()) - self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=True)), - {(None, nodes[2]._external_supplier_dummy_product)}) - self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=2, return_indices=True, network_BOM=True)), - {(None, nodes[2]._external_supplier_dummy_product.index)}) - self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=4, return_indices=False, network_BOM=True)), - {(None, nodes[3]._external_supplier_dummy_product)}) - self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=prods[5], return_indices=True, network_BOM=False)), set()) + self.assertTrue(compare_unhashable_lists(nodes[0].supplier_raw_material_pairs_by_product(product=prods[10], return_indices=False, network_BOM=True), + [(nodes[1], prods[1]), (nodes[1], prods[2]), (nodes[2], prods[2])])) + self.assertTrue(compare_unhashable_lists(nodes[0].supplier_raw_material_pairs_by_product(product=11, return_indices=False, network_BOM=True), + [(nodes[2], prods[3]), (nodes[3], prods[4])])) + self.assertCountEqual(nodes[0].supplier_raw_material_pairs_by_product(product=12, return_indices=True, network_BOM=True), + [(3, 5)]) + self.assertTrue(compare_unhashable_lists(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=False, network_BOM=True), + [(None, nodes[1]._external_supplier_dummy_product)])) + self.assertCountEqual(nodes[1].supplier_raw_material_pairs_by_product(product=prods[1], return_indices=True, network_BOM=True), + [(None, nodes[1]._external_supplier_dummy_product.index)]) + self.assertTrue(compare_unhashable_lists(nodes[1].supplier_raw_material_pairs_by_product(product=2, return_indices=False, network_BOM=True), + [(None, nodes[1]._external_supplier_dummy_product)])) + self.assertTrue(compare_unhashable_lists(nodes[1].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=False), [])) + self.assertTrue(compare_unhashable_lists(nodes[2].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=True), + [(None, nodes[2]._external_supplier_dummy_product)])) + self.assertCountEqual(nodes[2].supplier_raw_material_pairs_by_product(product=2, return_indices=True, network_BOM=True), + [(None, nodes[2]._external_supplier_dummy_product.index)]) + self.assertTrue(compare_unhashable_lists(nodes[3].supplier_raw_material_pairs_by_product(product=4, return_indices=False, network_BOM=True), + [(None, nodes[3]._external_supplier_dummy_product)])) + self.assertCountEqual(nodes[3].supplier_raw_material_pairs_by_product(product=prods[5], return_indices=True, network_BOM=False), []) with self.assertRaises(ValueError): _ = nodes[1].supplier_raw_material_pairs_by_product(product=77) @@ -1990,25 +1991,25 @@ def test_multiproduct_5_7(self): nodes = {i: network.get_node_from_index(i) for i in network.node_indices} prods = {prod.index: prod for prod in network.products} - self.assertEqual(set(nodes[0].supplier_raw_material_pairs_by_product(product=prods[0], return_indices=False, network_BOM=True)), - {(nodes[2], prods[2]), (nodes[2], prods[3])}) - self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=0, return_indices=False, network_BOM=True)), - {(nodes[2], prods[2]), (nodes[2], prods[3]), (nodes[3], prods[2])}) - self.assertEqual(set(nodes[1].supplier_raw_material_pairs_by_product(product=1, return_indices=True, network_BOM=True)), - {(2, 3), (2, 4), (3, 4)}) - self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=True)), - {(nodes[4], prods[5])}) - self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=prods[3], return_indices=True, network_BOM=True)), - {(4, 5)}) - self.assertEqual(set(nodes[2].supplier_raw_material_pairs_by_product(product=4, return_indices=False, network_BOM=True)), - {(nodes[4], prods[6])}) - self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=False)), - {(nodes[4], prods[5])}) - self.assertEqual(set(nodes[3].supplier_raw_material_pairs_by_product(product=4, return_indices=True, network_BOM=True)), - {(4, 6)}) - self.assertEqual(set(nodes[4].supplier_raw_material_pairs_by_product(product=5, return_indices=True, network_BOM=True)), - {(None, nodes[4]._external_supplier_dummy_product.index)}) - self.assertEqual(set(nodes[4].supplier_raw_material_pairs_by_product(product=prods[6], return_indices=False, network_BOM=False)), set()) + self.assertTrue(compare_unhashable_lists(nodes[0].supplier_raw_material_pairs_by_product(product=prods[0], return_indices=False, network_BOM=True), + [(nodes[2], prods[2]), (nodes[2], prods[3])])) + self.assertTrue(compare_unhashable_lists(nodes[1].supplier_raw_material_pairs_by_product(product=0, return_indices=False, network_BOM=True), + [(nodes[2], prods[2]), (nodes[2], prods[3]), (nodes[3], prods[2])])) + self.assertCountEqual(nodes[1].supplier_raw_material_pairs_by_product(product=1, return_indices=True, network_BOM=True), + [(2, 3), (2, 4), (3, 4)]) + self.assertTrue(compare_unhashable_lists(nodes[2].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=True), + [(nodes[4], prods[5])])) + self.assertCountEqual(nodes[2].supplier_raw_material_pairs_by_product(product=prods[3], return_indices=True, network_BOM=True), + [(4, 5)]) + self.assertTrue(compare_unhashable_lists(nodes[2].supplier_raw_material_pairs_by_product(product=4, return_indices=False, network_BOM=True), + [(nodes[4], prods[6])])) + self.assertTrue(compare_unhashable_lists(nodes[3].supplier_raw_material_pairs_by_product(product=prods[2], return_indices=False, network_BOM=False), + [(nodes[4], prods[5])])) + self.assertCountEqual(nodes[3].supplier_raw_material_pairs_by_product(product=4, return_indices=True, network_BOM=True), + [(4, 6)]) + self.assertCountEqual(nodes[4].supplier_raw_material_pairs_by_product(product=5, return_indices=True, network_BOM=True), + [(None, nodes[4]._external_supplier_dummy_product.index)]) + self.assertTrue(compare_unhashable_lists(nodes[4].supplier_raw_material_pairs_by_product(product=prods[6], return_indices=False, network_BOM=False), [])) with self.assertRaises(ValueError): _ = nodes[1].supplier_raw_material_pairs_by_product(product=77) From 6f4bbeecab1156c9d9533858d3745fb755524f6e Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sat, 11 May 2024 14:11:20 -0400 Subject: [PATCH 63/94] Parameter naming consistency for product-related functions #150 --- src/stockpyl/node_state_vars.py | 323 ++++++++++++++++-------------- src/stockpyl/policy.py | 44 ++-- src/stockpyl/sim.py | 4 +- src/stockpyl/supply_chain_node.py | 19 +- tests/test_node_state_vars.py | 8 +- 5 files changed, 212 insertions(+), 186 deletions(-) diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index 5ae43c1..91ecabd 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -722,19 +722,20 @@ def backorders(self): else: return max(0, -self.inventory_level[self.node._dummy_product.index]) - def in_transit_to(self, successor, prod_index=None): - """Return current total inventory of product ``prod_index`` in transit to a given successor. + def in_transit_to(self, successor, product=None): + """Return current total inventory of ``product`` in transit to ``successor``. Includes items that will be/have been delivered during the current period. - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. + If the node is single-product, either set ``product`` to the single product, or to ``None`` + and the function will determine the product automatically. Parameters ---------- successor : |class_node| The successor node. - prod_index : int, optional - The outbound product index, or ``None`` if ``successor`` is single-product. + product : |class_product| or int, optional + The outbound product (as a |class_product| object or index), or + ``None`` if ``successor`` is single-product. Returns ------- @@ -742,59 +743,64 @@ def in_transit_to(self, successor, prod_index=None): The current inventory in transit to the successor. """ # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - elif prod_index is not None and (self.node.index, prod_index) not in \ + _, prod_ind = self.node.validate_product(product) + # if prod_index is not None and prod_index not in self.node.product_indices: + # raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + if prod_ind is not None and (self.node.index, prod_ind) not in \ successor.supplier_raw_material_pairs_by_product(product='all', return_indices=True, network_BOM=True): - raise ValueError(f'Node {self.node.index} does not provide product {prod_index} to node {successor.index}.') + raise ValueError(f'Node {self.node.index} does not provide product {prod_ind} to node {successor.index}.') - # Determine product index. - prod_index = prod_index or self.node._dummy_product.index - - return np.sum([successor.state_vars[self.period].inbound_shipment_pipeline[self.node.index][prod_index][:]]) + return np.sum([successor.state_vars[self.period].inbound_shipment_pipeline[self.node.index][prod_ind][:]]) - def in_transit_from(self, predecessor=None, prod_index=None): - """Return current total inventory of product ``prod_index`` in transit from a given predecessor. + def in_transit_from(self, predecessor=None, raw_material=None): + """Return current total inventory of ``raw_material`` in transit from a given predecessor. Includes items that will be/have been delivered during the current period. Set ``predecessor`` to ``None`` if the predecessor is the external supplier. - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. + If the node has a single raw material, either set ``raw_material`` to the single raw material, or to ``None`` + and the function will determine the raw material automatically. Parameters ---------- predecessor : |class_node| The predecessor node. - prod_index : int, optional - The inbound product index, or ``None`` if ``predecessor`` is single-product or external supplier. + raw_material : |class_product| or int, optional + The inbound raw_material (as a |class_product| object or index), or ``None`` if + ``predecessor`` has a single product or external supplier. Returns ------- float The current inventory in transit from the predecessor. """ - # Get predecessor index. Also get prod_index if it's None. - if predecessor is None: - p_ind = None - if prod_index is None: - prod_index = self.node._external_supplier_dummy_product.index - else: - p_ind = predecessor.index - if prod_index is None: - prod_index = predecessor.products[0].index - # Validate parameters. - if prod_index is not None and prod_index not in self.inbound_shipment_pipeline[p_ind].keys(): - raise ValueError(f'{prod_index} is not a product at node {p_ind}.') - - return np.sum(self.inbound_shipment_pipeline[p_ind][prod_index][:]) - - def in_transit(self, prod_index=None): - """Current inventory of raw materials for product ``prod_index`` that is in transit to the node. Read only. + _, rm_ind = self.node.validate_raw_material(raw_material, predecessor) + # if rm_ind is None: + # rm_ind = self.node._external_supplier_dummy_product.index + _, pred_ind = self.node.validate_predecessor(predecessor, rm_ind) + + # Get predecessor index. Also get prod_index if it's None. + # if predecessor is None: + # p_ind = None + # if prod_index is None: + # prod_index = self.node._external_supplier_dummy_product.index + # else: + # p_ind = predecessor.index + # if prod_index is None: + # prod_index = predecessor.products[0].index + + # # Validate parameters. + # if prod_index is not None and prod_index not in self.inbound_shipment_pipeline[p_ind].keys(): + # raise ValueError(f'{prod_index} is not a product at node {p_ind}.') + + return np.sum(self.inbound_shipment_pipeline[pred_ind][rm_ind][:]) + + def in_transit(self, product=None): + """Current inventory of raw materials for ``product`` that is in transit to the node. Read only. In-transit items are counted using the "units" of the node (or node-product pair) itself. That is, each in-transit quantity is divided by the number of units of the inbound item - required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + required to make one unit of ``product`` at this node, according to the bill of materials; and then the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). For example, if the bill of materials specifies that to make one unit at the node requires @@ -805,20 +811,21 @@ def in_transit(self, prod_index=None): \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. + If the node is single-product, either set ``product`` to the single product, or to ``None`` + and the function will determine the product automatically. If the node has multiple products that use the same raw material, this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. + raw material, even though some of them may wind up being used to make products other than ``product``. To get the number of units in transit by predecessor and/or product, use :func:`in_transit_from`. - **Note:** This was a property prior to version [VERSION] and is now a function. + ..note:: This was a property prior to version [VERSION] and is now a function. Parameters ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. + product : |class_product| or int, optional + The product (as a |class_product| object or index), or ``None`` to set the product + automatically if node is single-product. Returns ------- @@ -826,30 +833,31 @@ def in_transit(self, prod_index=None): The current inventory in transit from predecessors. """ # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + _, prod_ind = self.node.validate_product(product) + # if prod_index is not None and prod_index not in self.node.product_indices: + # raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] + # # Determine product index. + # prod_index = prod_index or self.node.product_indices[0] total_in_transit = np.sum([ self.in_transit_from(p, rm_index) - * self.node.NBOM(product=prod_index, predecessor=p.index if p is not None else None, raw_material=rm_index) - for rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True) + * self.node.NBOM(product=prod_ind, predecessor=p.index if p is not None else None, raw_material=rm_index) + for rm_index in self.node.raw_materials_by_product(product=prod_ind, return_indices=True, network_BOM=True) for p in self.node.raw_material_suppliers_by_raw_material(raw_material=rm_index, network_BOM=True) ]) if total_in_transit == 0: return 0 else: - return total_in_transit / len(self.node.raw_materials_by_product(product=prod_index, network_BOM=True)) + return total_in_transit / len(self.node.raw_materials_by_product(product=prod_ind, network_BOM=True)) - def on_order(self, prod_index=None): - """Current inventory of raw materials for product ``prod_index`` that is on order to the node. Read only. + def on_order(self, product=None): + """Current inventory of raw materials for ``product`` that is on order to the node. Read only. On-order items are counted using the "units" of the node (or node-product pair) itself. That is, each on-order quantity is divided by the number of units of the inbound item - required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + required to make one unit of product ``product`` at this node, according to the bill of materials; and then the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). For example, if the bill of materials specifies that to make one unit at the node requires @@ -860,18 +868,19 @@ def on_order(self, prod_index=None): \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. + If the node is single-product, either set ``product`` to the single product, or to ``None`` + and the function will determine the product automatically. If the node has multiple products that use the same raw material, this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. + raw material, even though some of them may wind up being used to make products other than ``product``. - **Note:** This was a property prior to version [VERSION] and is now a function. + ..note:: This was a property prior to version [VERSION] and is now a function. Parameters ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. + product : |class_product| or int, optional + The product (as a |class_product| object or index), or ``None`` to set the product + automatically if node is single-product. Returns ------- @@ -879,30 +888,31 @@ def on_order(self, prod_index=None): The current inventory on order from predecessors. """ # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + _, prod_ind = self.node.validate_product(product) + # if prod_index is not None and prod_index not in self.node.product_indices: + # raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] + # # Determine product index. + # prod_index = prod_index or self.node.product_indices[0] total_on_order = np.sum([ self.on_order_by_predecessor[p][rm_index] - / self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) - for rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True) + / self.node.NBOM(product=prod_ind, predecessor=p, raw_material=rm_index) + for rm_index in self.node.raw_materials_by_product(product=prod_ind, return_indices=True, network_BOM=True) for p in self.node.raw_material_suppliers_by_raw_material(raw_material=rm_index, return_indices=True, network_BOM=True) ]) if total_on_order == 0: return 0 else: - return total_on_order / len(self.node.raw_materials_by_product(product=prod_index, network_BOM=True)) + return total_on_order / len(self.node.raw_materials_by_product(product=prod_ind, network_BOM=True)) - def raw_material_aggregate(self, prod_index=None): - """Current raw materials for product ``prod_index`` that are in raw-material inventory at the node. Read only. + def raw_material_aggregate(self, product=None): + """Current raw materials for ``product`` that are in raw-material inventory at the node. Read only. Raw materials are counted using the "units" of the node (or node-product pair) itself. That is, each raw material quantity is divided by the number of units of the raw material - required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + required to make one unit of product ``product`` at this node, according to the bill of materials; and then the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). For example, if the bill of materials specifies that to make one unit at the node requires @@ -913,18 +923,19 @@ def raw_material_aggregate(self, prod_index=None): \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. + If the node is single-product, either set ``product`` to the single product, or to ``None`` + and the function will determine the product automatically. If the node has multiple products that use the same raw material, this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. + raw material, even though some of them may wind up being used to make products other than ``product``. - **Note:** This was a property prior to version [VERSION] and is now a function. + ..note:: This was a property prior to version [VERSION] and is now a function. Parameters ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. + product : |class_product| or int, optional + The product (as a |class_product| object or index), or ``None`` to set the product + automatically if node is single-product. Returns ------- @@ -932,16 +943,17 @@ def raw_material_aggregate(self, prod_index=None): The current raw material inventory. """ # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + prod_obj, prod_ind = self.node.validate_product(product) + # if prod_index is not None and prod_index not in self.node.product_indices: + # raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] - prod = self.node.products_by_index[prod_index] + # # Determine product index. + # prod_index = prod_index or self.node.product_indices[0] + # prod = self.node.products_by_index[prod_index] total_raw_material = 0 - for rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True): - BOM = prod.BOM(rm_index) + for rm_index in self.node.raw_materials_by_product(product=prod_ind, return_indices=True, network_BOM=True): + BOM = prod_obj.BOM(rm_index) if BOM == 0: # rm_index has no BOM relationship, so it is only in the network BOM; therefore, # its BOM number is 1. @@ -952,14 +964,14 @@ def raw_material_aggregate(self, prod_index=None): if total_raw_material == 0: return 0 else: - return total_raw_material / len(self.node.raw_materials_by_product(product=prod_index, network_BOM=True)) + return total_raw_material / len(self.node.raw_materials_by_product(product=prod_ind, network_BOM=True)) - def inbound_disrupted_items_aggregate(self, prod_index=None): - """Current total inbound disrupted inventory of raw materials for product ``prod_index``. Read only. + def inbound_disrupted_items_aggregate(self, product=None): + """Current total inbound disrupted inventory of raw materials for ``product``. Read only. Inbound items are counted using the "units" of the node (or node-product pair) itself. That is, each inbound quantity is divided by the number of units of the inbound item - required to make one unit of product ``prod_index`` at this node, according to the bill of materials; and then + required to make one unit of ``product`` at this node, according to the bill of materials; and then the sum of those quantities is divided by the total number of raw materials required for this node (or node-product pair). For example, if the bill of materials specifies that to make one unit at the node requires @@ -970,18 +982,19 @@ def inbound_disrupted_items_aggregate(self, prod_index=None): \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. + If the node is single-product, either set ``product`` to the single product, or to ``None`` + and the function will determine the product automatically. If the node has multiple products that use the same raw material, this function includes all disrupted units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. + raw material, even though some of them may wind up being used to make products other than ``product``. - **Note:** This was a property prior to version [VERSION] and is now a function. + ..note:: This was a property prior to version [VERSION] and is now a function. Parameters ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. + product : |class_product| or int, optional + The product (as a |class_product| object or index), or ``None`` to set the product + automatically if node is single-product. Returns ------- @@ -989,26 +1002,27 @@ def inbound_disrupted_items_aggregate(self, prod_index=None): The current disrupted inventory from predecessors. """ # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + _, prod_ind = self.node.validate_product(product) + # if prod_index is not None and prod_index not in self.node.product_indices: + # raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] + # # Determine product index. + # prod_index = prod_index or self.node.product_indices[0] total_disrupted_items = np.sum([ self.inbound_disrupted_items[p][rm_index] - * self.node.NBOM(product=prod_index, predecessor=p, raw_material=rm_index) - for rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True) + * self.node.NBOM(product=prod_ind, predecessor=p, raw_material=rm_index) + for rm_index in self.node.raw_materials_by_product(product=prod_ind, return_indices=True, network_BOM=True) for p in self.node.raw_material_suppliers_by_raw_material(raw_material=rm_index, return_indices=True, network_BOM=True) ]) if total_disrupted_items == 0: return 0 else: - return total_disrupted_items / len(self.node.raw_materials_by_product(product=prod_index, network_BOM=True)) + return total_disrupted_items / len(self.node.raw_materials_by_product(product=prod_ind, network_BOM=True)) - def inventory_position(self, prod_index=None, exclude_earmarked_units=False): - """Current (local) inventory position at node for product with index ``prod_index``. + def inventory_position(self, product=None, exclude_earmarked_units=False): + """Current (local) inventory position at node for ``product``. Equals inventory level plus pipeline inventory. (Pipeline inventory equals on-order inventory of the raw material, raw material inventory that has not yet been processed, and inbound disrupted items of the raw material due to type-RP disruptions). Inventory position is expressed in the units of the product @@ -1026,17 +1040,18 @@ def inventory_position(self, prod_index=None, exclude_earmarked_units=False): raw material is reduced by the sum, over all _other_ products at the node, of the number of units of that product that are pending times the NBOM for that product/raw material. - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. If the node is multi-product, ``prod_index`` must be - set to the index of a single product at the node. + If the node is single-product, either set ``product`` to the single product, or to ``None`` + and the function will determine the product automatically. If the node is multi-product, ``product`` must be + set to a single product at the node. If the node has multiple products that use the same raw material, the inventory position returned by this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. + raw material, even though some of them may wind up being used to make products other than ``product``. Parameters ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. + product : |class_product| or int, optional + The product (as a |class_product| object or index), or ``None`` to set the product + automatically if node is single-product. Returns ------- @@ -1045,15 +1060,16 @@ def inventory_position(self, prod_index=None, exclude_earmarked_units=False): """ # Validate parameters. - if prod_index is not None and prod_index not in self.node.product_indices: - raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') + _, prod_ind = self.node.validate_product(product) + # if prod_index is not None and prod_index not in self.node.product_indices: + # raise ValueError(f'{prod_index} is not a product at node {self.node.index}.') - # Determine product index. - prod_index = prod_index or self.node.product_indices[0] + # # Determine product index. + # prod_index = prod_index or self.node.product_indices[0] # Determine total units of each RM in the pipeline, converted to units of the downstream product. pipeline = {} - for rm_index in self.node.raw_materials_by_product(product=prod_index, return_indices=True, network_BOM=True): + for rm_index in self.node.raw_materials_by_product(product=prod_ind, return_indices=True, network_BOM=True): # Calculate pipeline, in upstream units. pipeline[rm_index] = self.raw_material_inventory[rm_index] for pred_index in self.node.raw_material_suppliers_by_raw_material(raw_material=rm_index, return_indices=True, network_BOM=True): @@ -1062,21 +1078,21 @@ def inventory_position(self, prod_index=None, exclude_earmarked_units=False): # Subtract earmarked units, if requested. if exclude_earmarked_units: - for other_prod_index in self.node.product_indices: - if other_prod_index != prod_index: + for other_prod_ind in self.node.product_indices: + if other_prod_ind != prod_ind: # Calculate number of earmarked units. - earmarked_units = self.node.state_vars_current.pending_finished_goods[other_prod_index] \ - * self.node.NBOM(product=other_prod_index, predecessor=None, raw_material=rm_index) + earmarked_units = self.node.state_vars_current.pending_finished_goods[other_prod_ind] \ + * self.node.NBOM(product=other_prod_ind, predecessor=None, raw_material=rm_index) # Subtract earmarked units from pipeline. pipeline[rm_index] = max(0, pipeline[rm_index] - earmarked_units) # Convert to downstream units. - pipeline[rm_index] /= self.node.NBOM(product=prod_index, predecessor=None, raw_material=rm_index) + pipeline[rm_index] /= self.node.NBOM(product=prod_ind, predecessor=None, raw_material=rm_index) # Determine number of units of FG that can be made from pipeline inventory. units_from_pipeline = min(pipeline.values()) - return self.inventory_level[prod_index] + units_from_pipeline + return self.inventory_level[prod_ind] + units_from_pipeline @property def echelon_on_hand_inventory(self): @@ -1095,7 +1111,7 @@ def echelon_on_hand_inventory(self): # of self (or equal to self). for p in d.predecessors(): if p.index == self.node.index or p in self.node.descendants: - EOHI += d.state_vars[self.period].in_transit_from(predecessor=p, prod_index=None) + EOHI += d.state_vars[self.period].in_transit_from(predecessor=p, raw_material=None) else: for d in self.node.descendants: # Add on-hand inventory at descendant. @@ -1106,7 +1122,7 @@ def echelon_on_hand_inventory(self): # of self (or equal to self). for p in d.predecessors(): if p.index == self.node.index or p in self.node.descendants: - EOHI[prod_index] += d.state_vars[self.period].in_transit_from(predecessor=p, prod_index=prod_index) + EOHI[prod_index] += d.state_vars[self.period].in_transit_from(predecessor=p, raw_material=prod_index) return EOHI @@ -1132,40 +1148,40 @@ def echelon_inventory_level(self): return EIL - def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm_index=None): - """Current echelon inventory position at node for product with index ``prod_index``. - Equals echelon inventory level plus - on order items. + def echelon_inventory_position(self, product=None, predecessor=None, raw_material=None): + """Current echelon inventory position at node for product with index ``product``. + Equals echelon inventory level plus on order items. On-order includes raw material inventory that has not yet been processed, as well as inbound disrupted items due to type-RP disruptions. - If the node is single-product, either set ``prod_index`` to the index of the single product, or to ``None`` - and the function will determine the index automatically. If the node is multi-product, ``prod_index`` must be - set to the index of a single product at the node. + If the node is single-product, either set ``product`` to the single product, or to ``None`` + and the function will determine the product automatically. If the node is multi-product, ``product`` must be + set to a single product at the node. - If the node has a single predecessor, which provides a single raw material, either set ``predecessor_index`` - and ``rm_index`` to the appropriate indicies, or set them to ``None`` and the function will determine the indices + If the node has a single predecessor, which provides a single raw material, either set ``predecessor`` + and ``raw_material`` to the appropriate indicies, or set them to ``None`` and the function will determine them automatically. - If the node has multiple predecessors and/or raw materials, either set ``predecessor_index`` and ``rm_index`` + If the node has multiple predecessors and/or raw materials, either set ``predecessor`` and ``raw_material`` to the indices of a single predecessor and raw material (to get the raw-material-specific inventory position) or set both to ``None`` to use the aggregate on-order and raw material inventory for all predecessors and raw materials (counting such items using the "units" of the node itself; see documentation for :func:`on_order` for more details). - ``predecessor_index`` and ``rm_index`` must both either be ``None`` or not ``None``. + ``predecessor`` and ``raw_material`` must both either be ``None`` or not ``None``. If the node has multiple products that use the same raw material, this function includes all units of that - raw material, even though some of them may wind up being used to make products other than ``prod_index``. + raw material, even though some of them may wind up being used to make products other than ``product``. Parameters ---------- - prod_index : int, optional - The product index, or ``None`` to set the product automatically if node is single-product. - predecessor_index : int, optional - Predecessor to consider in inventory position calculation (including all others), or ``None`` to - include all predecessors. - rm_index : int, optional - Raw material to consider in inventory position calculation (excluding all others), - or ``None`` to include all raw materials. + product : |class_product| or int, optional + The product (as |class_product| object or index), or ``None`` to set the product + automatically if node is single-product. + predecessor : |class_node| or int, optional + Predecessor (as |class_node| object or index) to consider in inventory position + calculation (including all others), or ``None`` to include all predecessors. + raw_material : |class_product| or int, optional + Raw material (as |class_product| or index) to consider in inventory position + calculation (excluding all others), or ``None`` to include all raw materials. Returns ------- @@ -1175,29 +1191,30 @@ def echelon_inventory_position(self, prod_index=None, predecessor_index=None, rm Raises ------ ValueError - If ``predecessor_index is None`` and ``rm_index is not None``, or vice-versa. + If ``predecessor is None`` and ``raw_material is not None``, or vice-versa. """ # Validate parameters. - if not (predecessor_index is None and rm_index is None): - _, predecessor_index = self.node.validate_predecessor(predecessor_index, raw_material=rm_index) - _, prod_index = self.node.validate_product(prod_index) + if not (predecessor is None and raw_material is None): + _, pred_ind = self.node.validate_predecessor(predecessor, raw_material=raw_material) + _, rm_ind = self.node.validate_raw_material(raw_material, predecessor=predecessor) + _, prod_ind = self.node.validate_product(product) # Calculate echelon inventory level. if self.node.is_singleproduct: EIL = self.echelon_inventory_level else: - EIL = self.echelon_inventory_level[prod_index] + EIL = self.echelon_inventory_level[prod_ind] # Calculate on-order, raw material inventory, and inbound disrupted items. - if rm_index is not None: - OO = self.on_order_by_predecessor[predecessor_index][rm_index] - RMI = self.raw_material_inventory[rm_index] - IDI = self.inbound_disrupted_items[predecessor_index][rm_index] + if raw_material is not None: + OO = self.on_order_by_predecessor[pred_ind][rm_ind] + RMI = self.raw_material_inventory[rm_ind] + IDI = self.inbound_disrupted_items[pred_ind][rm_ind] else: # Note: If <=1 predecessor, raw_material_inventory should always = 0 # (because raw materials are processed right away). - OO = self.on_order(prod_index=prod_index) - RMI = self.raw_material_aggregate(prod_index=prod_index) - IDI = self.inbound_disrupted_items_aggregate(prod_index=prod_index) + OO = self.on_order(product=prod_ind) + RMI = self.raw_material_aggregate(product=prod_ind) + IDI = self.inbound_disrupted_items_aggregate(product=prod_ind) return EIL + OO + RMI + IDI diff --git a/src/stockpyl/policy.py b/src/stockpyl/policy.py index ecf94ef..6fec08e 100644 --- a/src/stockpyl/policy.py +++ b/src/stockpyl/policy.py @@ -304,9 +304,6 @@ def to_dict(self): if attr == '_node': # Use index only. pol_dict['node'] = None if self.node is None else self.node.index - # elif attr == '_product': - # # Use index only. - # pol_dict['product'] = None if self.product is None else self.product.index else: # Remove leading '_' to get property names. prop = attr[1:] if attr[0] == '_' else attr @@ -349,15 +346,16 @@ def from_dict(cls, the_dict): # ORDER QUANTITY METHODS - def get_order_quantity(self, product_index=None, order_capacity=None, include_raw_materials=False, + def get_order_quantity(self, product=None, order_capacity=None, include_raw_materials=False, inventory_position=None, echelon_inventory_position_adjusted=None): """Calculate order quantity for the product using the policy type specified in ``type``. - If ``type`` is ``None``, return ``None``. + If the node is single-product, ``product`` may be set to ``None`` and the function will determine + the product automatically. If ``type`` is ``None``, returns ``None``. If ``include_raw_materials`` is ``False`` (the default), returns a singleton that equals the order - quantity for ``product_index``. If ``include_raw_materials`` is ``True``, returns + quantity for ``product``. If ``include_raw_materials`` is ``True``, returns a nested dict such that ``get_order_quantity[p][rm]`` is the order - quantity to place to predecessor ``p`` for product ``rm``, expressed in units of ``rm``. + quantity to place to predecessor ``p`` for raw material product ``rm``, expressed in units of ``rm``. The dict includes an entry in which ``pred`` and ``rm`` are both ``None``, which corresponds to the order quantity of the product itself, expressed in units of the product. @@ -372,7 +370,7 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra and sometimes others) from ``self.node.network``. The order quantities are set using the bill of materials structure for the node/product. - If the policy's ``node`` attribute is ``None``, the returned dict only contains ``product_index`` itself, + If the policy's ``node`` attribute is ``None``, the returned dict only contains ``product`` itself, no raw materials. If ``inventory_position`` (and ``echelon_inventory_position_adjusted``, for @@ -385,14 +383,14 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra Parameters ---------- - product_index : int, optional - The index of the product for which the order quantity should be calculated. - If the node is single-product, either set ``product_index`` to the index of the single product, + product : |class_product| or int, optional + The product (as a |class_product| object or index) for which the order quantity should be calculated. + If the node is single-product, either set ``product`` to the index of the single product, or to ``None`` and the function will determine the index automatically. order_capacity : float, optional - Maximum number of units of ``product_index`` that can be ordered in the current period. + Maximum number of units of ``product`` that can be ordered in the current period. include_raw_materials : bool, optional - If ``False``, the function will return the order quantity for ``product_index``, as a + If ``False``, the function will return the order quantity for ``product``, as a singleton float. If ``True``, the function will return a dict indicating the order quantities for all raw materials and predecessors. inventory_position : float, optional @@ -407,10 +405,10 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra Returns ------- order_quantity : float or dict - The order quantity for ``product_index`` if ``include_raw_materials`` is ``False``; or, if + The order quantity for ``product`` if ``include_raw_materials`` is ``False``; or, if ``include_raw_materials`` is ``True``, a nested dict such that ``get_order_quantity[p][rm]`` is the order quantity to place to predecessor ``p`` - for product ``rm``, expressed in units of ``rm``. The dict includes an entry in which ``pred`` and ``rm`` + for raw material product ``rm``, expressed in units of ``rm``. The dict includes an entry in which ``pred`` and ``rm`` are both ``None``, which corresponds to the order quantity of the product itself, expressed in units of the product. Raises @@ -437,18 +435,21 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra if self.node.is_multiproduct and self.product is None: raise AttributeError("You must either provide inventory_position or set the product attribute of the Policy object to the product that it refers to (since the node is multi-product). (Usually this shoudl be done when you first creat the Policy object.)") + # Validate product. + _, prod_ind = self.node.validate_product(product) + # Calculate total demand (inbound orders), including successor nodes and # external demand, in FG units. - demand = self.node._get_state_var_total('inbound_order', self.node.network.period, product=product_index) + demand = self.node._get_state_var_total('inbound_order', self.node.network.period, product=prod_ind) # Calculate (local or echelon) inventory position, before demand is subtracted. Exclude from pipeline # RM units that are "earmarked" for other products at this node. if self.type in ('EBS', 'BEBS'): IP_before_demand = \ - self.node.state_vars_current.echelon_inventory_position(prod_index=product_index, predecessor_index=None, rm_index=None) + self.node.state_vars_current.echelon_inventory_position(product=prod_ind, predecessor=None, raw_material=None) else: IP_before_demand = \ - self.node.state_vars_current.inventory_position(prod_index=product_index, exclude_earmarked_units=True) + self.node.state_vars_current.inventory_position(product=prod_ind, exclude_earmarked_units=True) # Calculate current inventory position, after demand is subtracted. IP = IP_before_demand - demand @@ -497,7 +498,7 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra # Loop through raw materials and predecessors, and calculate order quantities for each. if OQ is not None: - for rm_index in self.node.raw_materials_by_product(product_index, return_indices=True): + for rm_index in self.node.raw_materials_by_product(prod_ind, return_indices=True): for pred_index in self.node.raw_material_suppliers_by_raw_material(rm_index, return_indices=True): # Calculate total orders that have already been placed by this node to this supplier for this RM @@ -511,10 +512,7 @@ def get_order_quantity(self, product_index=None, order_capacity=None, include_ra # Convert OQ to raw material units and add it to OQ_dict. OQ_dict[pred_index][rm_index] = \ - OQ * self.node.NBOM(product=product_index, predecessor=pred_index, raw_material=rm_index) - # # Convert OQ to raw material units, adjust for units_already_ordered, and add it to OQ_dict. - # OQ_dict[pred_index][rm_index] = units_already_ordered + \ - # OQ * self.node.NBOM(product=product_index, predecessor=pred_index, raw_material=rm_index) + OQ * self.node.NBOM(product=prod_ind, predecessor=pred_index, raw_material=rm_index) return OQ_dict diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 8dc7bce..10bbb65 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -403,7 +403,7 @@ def _generate_downstream_orders(node_index, network, period, visited, order_quan # Get order quantities for all raw materials (expressed in units of RM). # Dict returned also contains an order quantity for the FG, which will be used # below to set pending_finished_goods. - order_quantity_dict = policy.get_order_quantity(product_index=prod.index, order_capacity=order_capac, include_raw_materials=True) + order_quantity_dict = policy.get_order_quantity(product=prod.index, order_capacity=order_capac, include_raw_materials=True) # Update FG order quantity and pending finished goods. (Convert to downstream units.) node.state_vars_current.order_quantity_fg[prod.index] += order_quantity_dict[None][None] @@ -530,7 +530,7 @@ def _initialize_state_vars(network): init_IL = n.get_attribute('initial_inventory_level', prod) if init_IL is None: # Choose a supplier and RM to use when getting an order quantity to set the initial IL. - init_IL = n.get_attribute('inventory_policy', prod).get_order_quantity(product_index=prod.index, include_raw_materials=False, inventory_position=0) + init_IL = n.get_attribute('inventory_policy', prod).get_order_quantity(product=prod.index, include_raw_materials=False, inventory_position=0) n.state_vars[0].inventory_level[prod.index] = init_IL # Initialize inbound order pipeline. (Exclude external demand.) diff --git a/src/stockpyl/supply_chain_node.py b/src/stockpyl/supply_chain_node.py index 2095b5d..18d5a2d 100644 --- a/src/stockpyl/supply_chain_node.py +++ b/src/stockpyl/supply_chain_node.py @@ -1270,7 +1270,8 @@ def validate_raw_material(self, raw_material, predecessor=None, network_BOM=True ValueError If ``raw_material`` is not a raw material of the node. ValueError - If ``raw_material`` is ``None`` and the node has more than 1 raw material (including + If ``raw_material`` is ``None`` and either ``predecessor`` is supplied and the node receives more than 1 raw + material from ``predecessor`` or ``predecesor`` is ``None`` and the node has more than 1 raw material (including the dummy raw materials). ValueError If ``raw_material`` and ``predecessor`` are both not ``None`` and ``predecessor`` @@ -1279,10 +1280,20 @@ def validate_raw_material(self, raw_material, predecessor=None, network_BOM=True rms = self.raw_materials_by_product(product='all', network_BOM=network_BOM) if raw_material is None: - if len(rms) == 1: - return self.network.parse_product(rms[0]) + if predecessor is None: + if len(rms) == 1: + return self.network.parse_product(rms[0]) + else: + raise ValueError(f'raw_material and predecessor cannot both be None if the node has more than 1 raw material.') else: - raise ValueError(f'raw_material cannot be None if the node has more than 1 raw material.') + _, pred_ind = self.network.parse_node(predecessor) + rms_from_pred = [rm_ind for (p_ind, rm_ind) in \ + self.supplier_raw_material_pairs_by_product(product='all', return_indices=True, network_BOM=True) \ + if p_ind == pred_ind] + if len(rms_from_pred) == 1: + return self.network.parse_product(rms_from_pred[0]) + else: + raise ValueError(f'raw_material cannot be None if the predecessor provides more than 1 raw material to the node.') else: rm_obj, rm_ind = self.network.parse_product(raw_material) # raises TypeError on bad type _, pred_ind = self.network.parse_node(predecessor) diff --git a/tests/test_node_state_vars.py b/tests/test_node_state_vars.py index 136f7e1..46a07b0 100644 --- a/tests/test_node_state_vars.py +++ b/tests/test_node_state_vars.py @@ -225,8 +225,8 @@ def test_assembly_3_stage_per_22(self): self.assertEqual(nodes[0].state_vars[22].echelon_inventory_level, IL0) self.assertEqual(nodes[1].state_vars[22].echelon_inventory_level, OH0+IT10+OH1-BO0) self.assertEqual(nodes[2].state_vars[22].echelon_inventory_level, OH0+IT20+OH2-BO0) - self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(predecessor_index=1), IL0+OO01+RM01) - self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(predecessor_index=2), IL0+OO02+RM02) + self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(predecessor=1), IL0+OO01+RM01) + self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(predecessor=2), IL0+OO02+RM02) self.assertEqual(nodes[0].state_vars[22].echelon_inventory_position(), IL0+OO0+RM0) self.assertEqual(nodes[1].state_vars[22].echelon_inventory_position(), OH0+IT10+OH1-BO0+OO1+RM1) self.assertEqual(nodes[2].state_vars[22].echelon_inventory_position(), OH0+IT20+OH2-BO0+OO2+RM2) @@ -297,8 +297,8 @@ def test_assembly_3_stage_per_43(self): self.assertEqual(nodes[0].state_vars[per].echelon_inventory_level, IL0) self.assertEqual(nodes[1].state_vars[per].echelon_inventory_level, OH0+IT01+OH1-BO0) self.assertEqual(nodes[2].state_vars[per].echelon_inventory_level, OH0+IT02+OH2-BO0) - self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(predecessor_index=1), IL0+OO01+RM01) - self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(predecessor_index=2), IL0+OO02+RM02) + self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(predecessor=1), IL0+OO01+RM01) + self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(predecessor=2), IL0+OO02+RM02) self.assertEqual(nodes[0].state_vars[per].echelon_inventory_position(), IL0+OO0+RM0) self.assertEqual(nodes[1].state_vars[per].echelon_inventory_position(), OH0+IT01+OH1-BO0+OO1+RM1) self.assertEqual(nodes[2].state_vars[per].echelon_inventory_position(), OH0+IT02+OH2-BO0+OO2+RM2) From 0a5031a0ffd09959118b41d56056c587568d26ed Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 09:41:02 -0400 Subject: [PATCH 64/94] Woriking on docs --- .readthedocs.yaml | 2 +- CHANGELOG.md | 1 + docs/api/datatypes/datatypes.rst | 1 + docs/api/datatypes/supply_chain_product.rst | 6 + docs/api/simulation/simulation.rst | 3 +- docs/conf.py | 4 +- docs/tutorial/tutorial_sim_multiproduct.rst | 789 ++++++++++++++++++++ src/stockpyl/sim.py | 7 +- src/stockpyl/supply_chain_product.py | 44 +- 9 files changed, 838 insertions(+), 19 deletions(-) create mode 100644 docs/api/datatypes/supply_chain_product.rst create mode 100644 docs/tutorial/tutorial_sim_multiproduct.rst diff --git a/.readthedocs.yaml b/.readthedocs.yaml index ebc684a..ec742d5 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -9,7 +9,7 @@ version: 2 build: os: ubuntu-20.04 tools: - python: "3.7" + python: "3.8" # You can also specify other tool versions: # nodejs: "16" # rust: "1.55" diff --git a/CHANGELOG.md b/CHANGELOG.md index 1782eb8..fc0919c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ a given number and return the corresponding value. - Functions to validate and parse nodes and products within a network or node. (Mostly used internally for simulation.) ### Changed +- Requires Python 3.8 or later. - ``NodeStateVars.raw_material_inventory`` is now indexed by product, not by predecessor. - ``NodeStateVars`` object is now in its own module, ``node_state_vars.py``, rather than in ``supply_chain_node.py``. - ``supply_chain_network.network_from_edges()`` now only creates a ``DemandSource`` for sink nodes or if the diff --git a/docs/api/datatypes/datatypes.rst b/docs/api/datatypes/datatypes.rst index 230009d..43506eb 100644 --- a/docs/api/datatypes/datatypes.rst +++ b/docs/api/datatypes/datatypes.rst @@ -7,6 +7,7 @@ Data Types supply_chain_node supply_chain_network + supply_chain_product demand_source policy disruption_process diff --git a/docs/api/datatypes/supply_chain_product.rst b/docs/api/datatypes/supply_chain_product.rst new file mode 100644 index 0000000..4ea06bc --- /dev/null +++ b/docs/api/datatypes/supply_chain_product.rst @@ -0,0 +1,6 @@ +``supply_chain_product`` Module +============================ + +.. automodule:: stockpyl.supply_chain_product + :members: + diff --git a/docs/api/simulation/simulation.rst b/docs/api/simulation/simulation.rst index 1586970..2574783 100644 --- a/docs/api/simulation/simulation.rst +++ b/docs/api/simulation/simulation.rst @@ -16,4 +16,5 @@ Simulation .. admonition:: See Also For an overview of simulation in |sp|, - see the :ref:`tutorial page for simulation`. \ No newline at end of file + see the :ref:`tutorial page for simulation` and + the :ref:`tutorial page for multi-product simulation<_tutorial_multiproduct_sim_page>`. \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index 09b0dde..7db76ce 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -22,13 +22,13 @@ # -- Project information ----------------------------------------------------- project = 'stockpyl' -copyright = '2022, Larry Snyder' +copyright = '2024, Larry Snyder' author = 'Larry Snyder' # The short X.Y version version = '' # The full version, including alpha/beta/rc tags -release = '0.1' +release = '1.0' # -- General configuration --------------------------------------------------- diff --git a/docs/tutorial/tutorial_sim_multiproduct.rst b/docs/tutorial/tutorial_sim_multiproduct.rst new file mode 100644 index 0000000..00f35a0 --- /dev/null +++ b/docs/tutorial/tutorial_sim_multiproduct.rst @@ -0,0 +1,789 @@ +.. include:: ../globals.inc + +.. _tutorial_multiproduct_sim_page: + +Simulation +==================== + +|sp| contains code to simulate single- or multi-echelon inventory systems. The system being simulated +can include many different features, including: + + * Stochastic demand with a variety of built-in demand distributions, or supply your own + * Inventory management using a variety of built-in inventory policies, or supply your own + * Stochastic supply disruptions with various implications + * Fixed and/or variable costs, or supply your own cost functions + * Period-by-period, node-by-node state variables output to table or CSV file + + +.. note:: |node_stage| + +|fosct_notation| + +.. admonition:: See Also + + For more details, see the API documentation for the |mod_sim| and |mod_sim_io| modules. + +.. contents:: + :depth: 3 + +Basic Example +------------- + +Simulate a single-node system with Poisson(10) demand, a base-stock policy with a base-stock level of 13, +an order lead time of 0, and a shipment lead time of 1. + +.. doctest:: + + >>> from stockpyl.supply_chain_network import single_stage_system + >>> from stockpyl.sim import simulation + >>> from stockpyl.sim_io import write_results + >>> network = single_stage_system( + ... demand_type='P', # Poisson demand + ... mean=10, + ... policy_type='BS', # base-stock policy + ... base_stock_level=13, + ... shipment_lead_time=1 + ... ) + >>> _ = simulation(network=network, num_periods=4, rand_seed=42, progress_bar=False) + >>> write_results(network=network, num_periods=4, columns_to_print='basic') + t i=0 IO:EXT OQ:EXT IS:EXT OS:EXT IL + --- ----- -------- -------- -------- -------- ---- + 0 12 12 0 12 1 + 1 6 6 12 6 7 + 2 11 11 6 11 2 + 3 14 14 11 13 -1 + +Interpreting the results: + + * In period 0, the node has an inbound order (``IO:EXT`` column), i.e., demand, of 12; it places an order + of size 12 (``OQ:EXT``), receives no inbound shipment (``IS:EXT``), and sends an outbound shipment of 12 (``IS:EXT``). It ends the period + with an inventory level of 1 (``IL``). (At the beginning of period 0, the inventory level was equal to the base-stock level, 13.) + * In period 1, the node has a demand of 6; it places an order of size 6; it receives the shipment of size 12 ordered in period 0; + it ships 6 units and ends with an inventory level of 7. + * A backorder occurs in period 3, because the node begins the period with an inventory level of 2, and receives a demand of 14, but + only receives a shipment of 11. + +(In the column headers, ``EXT`` refers to the external supplier and customer. For more details about the columns in the +output produced by :func:`~stockpyl.sim_io.write_results`, see the API documentation for the |mod_sim_io| module.) + +.. note:: :func:`~stockpyl.sim.simulation` fills the state variables—the results of the simulation— + directly into the |class_network| object that is passed in the ``network`` parameter. This object + can then be passed to :func:`~stockpyl.sim.write_results` to pretty-print the results. + + +Data Structures +-------------------------------- + +The simulation code in |sp| makes use of the |class_network| and |class_node| classes, which contain all of +the data for the system to be simulated. + +.. admonition:: See Also + + For more information, + see the :ref:`tutorial page for multi-echelon inventory optimization (MEIO) `, or the + API pages for |class_network| or |class_node|. + + +Sequence of Events +------------------------ + +Simulations in |sp| assume periodic review. In each period :math:`t`, events occur in the following sequence *at each node* :math:`i`: + + 1. Inbound orders (i.e., demands) placed :math:`t-L^o_i` periods earlier are received from successor nodes and/or external customers, where :math:`L^o_i` + the order lead time for node :math:`i`. + 2. Outbound orders are placed to predecessor nodes and/or external suppliers. + 3. Inbound shipments sent :math:`t-L^s_i` periods ago are received from predecessor nodes and/or external suppliers, where + :math:`L^s_i` is the shipment lead time for node :math:`i`. + 4. Outbound shipments are sent to predecessor nodes and/or external suppliers. + 5. State variables are updated and costs are incurred. + +.. note:: This sequence of events (SoE) is somewhat atypical. It is more common to assume that orders are placed *before* demands + are observed (i.e., SoE steps 1 and 2 are swapped). See, for example, |fosct| §4.3 or Zipkin (2000) §9.3.1. However, + the two sequences can be made equivalent by adjusting the lead times; see the note in the Lead Times section [HYPERLINK]. + +In simulations of multi-echelon systems, the sequence of events *among nodes* is also important: + + * Sequence of events steps 1 and 2 first occur, one node at a time, from downstream to upstream: + + - Sink nodes (nodes with no successor nodes) receive + their inbound orders (SoE step 1), then they place outbound orders to their predecessors and/or external supplier (SoE step 2). + - Then those predecessors receive inbound orders and place outbound orders, and so on, moving upstream in the system until + all nodes have completed SoE steps 1 and 2. + + * Then, SoE steps 3 and 4 occur, one node at a time, from upstream to downstream: + + - Source nodes (nodes with no predecessor nodes) + receive their inbound shipments (SoE step 3), then they send outbound shipments to their successors and/or external + customer (SoE step 4). + - Then those successors receive inbound shipments and send outbound shipments, and so on, moving + downstream in the system until all nodes have completed SoE steps 3 and 4. + + * Then, SoE step 5 is completed for all nodes. + + +Lead Times +---------- + +Each node :math:`i` has both a *shipment lead time* (denoted :math:`L^s_i`) and an +*order lead time* (denoted :math:`L^o_i`). When node :math:`i` places an order, its predecessors and/or external suppliers +receive the order :math:`L^o_i` periods later. And when a node or an external supplier sends a shipment to node :math:`i`, +node :math:`i` receives it :math:`L^s_i` periods later. Shipment lead times are more commonly discussed in the literature, but order lead times +arise in, for example, papers on the bullwhip effect [REF]. + +The two types of lead times are equivalent if the supplier never runs +out of inventory (e.g., if it is an external supplier, or a predecessor node with a very large base-stock level), since +in that case orders are always shipped as soon as they are received, so the total time between the node placing and receiving +an order is always :math:`L^o_i + L^s_i`. + + +.. note:: A system with order lead time :math:`L^o_i` under the + "order-first" SoE (in which steps 1 and 2 are the reverse of those listed above) + is equivalent to a system with order lead time :math:`L^o_i+1` under the |sp| SoE. + + The SoE used in |sp| is more flexible, since it allows for the possibility that a node places its outbound order after it already + knows its demand. Under the "order-first" SoE, this would only be possible by setting :math:`L^o_i = -1`, which does not make sense. + +**Example:** Example 4.1 in |fosct| assumes a lead time of 0, but it also assumes the "order-first" sequence of events. +Therefore, to simulate this system in |sp|, we must set the order lead time (or, equivalentlly, the shipment lead time, since +the node's supplier never runs out of inventory): + + +.. testsetup:: * + + from stockpyl.supply_chain_network import single_stage_system + from stockpyl.sim import simulation + +.. doctest:: + + >>> network = single_stage_system( + ... holding_cost=0.18, + ... stockout_cost=0.70, + ... demand_type='N', + ... mean=50, + ... standard_deviation=8, + ... policy_type='BS', + ... base_stock_level=57, + ... order_lead_time=1 # to account for difference in SoE + ... ) + >>> T = 1000 + >>> total_cost = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) + >>> print(f"Total cost per period = {total_cost / T}") + Total cost per period = 1.9906261152138731 + +The total cost per period is very close to the value predicted by the theory (2.0000) in Example 4.1. + +**Example:** In Example 4.4 in |fosct|, the lead time is 4. To account for the difference in SoE, we set +the order lead time to 1 and the shipment lead time to 4. (Setting the shipment or order lead time to 5 +and the other to 0 would have the same effect.) + +.. testsetup:: * + + from stockpyl.supply_chain_network import single_stage_system + from stockpyl.sim import simulation + +.. doctest:: + + >>> network = single_stage_system( + ... holding_cost=0.18, + ... stockout_cost=0.70, + ... demand_type='N', + ... mean=50, + ... standard_deviation=8, + ... policy_type='BS', + ... base_stock_level=264.8, + ... shipment_lead_time=4, + ... order_lead_time=1 # to account for difference in SoE + ... ) + >>> T = 1000 + >>> total_cost = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) + >>> print(f"Total cost per period = {total_cost / T}") + Total cost per period = 4.475292852532866 + +Again this matches the cost of 4.47 predicted by the theory. + +Supply and Demand +----------------- + +External Customers +~~~~~~~~~~~~~~~~~~~~ +Any node can have an **external customer**—a customer that is not a node that is modeled explicitly +in the system. External customers are the only source of exogenous demand in the system. If there are +no external customers, there is no demand. A node can have both an external customer and one or +more successor nodes. + +To specify that a node has an external customer, set its ``demand_source`` attribute +to a |class_demand_source| object whose ``type`` attribute is not ``None``. The network-creation +functions in the |mod_supply_chain_network| module set this attribute for you at the relevant node(s), +or you can do it manually. + +External customers always have an order lead time of 0 and a shipment lead time of 0. + + +External Suppliers +~~~~~~~~~~~~~~~~~~~ +Any node can have an **external supplier**—a supplier that is not a node that is modeled explicitly +in the system. External suppliers are the only source of exogenous supply in the system. If there are +no external suppliers, there is no supply. A node can have both an external supplier and one or +more predecessor nodes. + +To specify that a node has an external supplier, set its ``supply_type`` attribute +to something other than ``None``. (See |class_node| for a list of valid supply types.) The network-creation +functions in |mod_supply_chain_network| module set this attribute for you at the relevant node(s), +or you can do it manually. + +External suppliers always have sufficient supply; they never have stockouts. + + +Inventory Policies +------------------ +Each node in the system must have an inventory policy, specified as a |class_policy| object. +Different nodes may have different types of policies. + +**Example:** Simulate a 2-stage serial system in which the upstream node (node 0) uses +an :math:`(r,Q)` policy with :math:`r=10` and :math:`Q=50`, and the downstream node (node 1) uses +a base-stock policy with :math:`S=50`. The demand has a Poisson distribution with mean 45. +Both nodes have a (shipment) lead time of 1. + +.. testsetup:: * + + from stockpyl.sim import simulation + +.. doctest:: + + >>> from stockpyl.supply_chain_network import serial_system + >>> network = serial_system( + ... num_nodes=2, + ... demand_type='P', + ... mean=45, + ... policy_type=['rQ', 'BS'], + ... reorder_point=[10, None], + ... order_quantity=[50, None], + ... base_stock_level=[None, 50], + ... shipment_lead_time=[1, 1] + ... ) + >>> _ = simulation(network=network, num_periods=4, rand_seed=42, progress_bar=False) + >>> write_results(network=network, num_periods=4, columns_to_print='basic') + t i=0 IO:1 OQ:EXT IS:EXT OS:1 IL i=1 IO:EXT OQ:0 IS:0 OS:EXT IL + --- ----- ------ -------- -------- ------ ---- ----- -------- ------ ------ -------- ---- + 0 42 50 0 42 8 42 42 0 42 8 + 1 50 50 50 50 8 50 50 42 50 0 + 2 37 0 50 37 21 37 37 50 37 13 + 3 47 50 0 21 -26 47 47 37 47 3 + + +Displaying the Results +---------------------- + +The :func:`~stockpyl.sim_io.write_results` function in the |mod_sim_io| module displays the results of +a simulation. It takes as input the |class_network| object that already has its state variables +filled by the simulation, and prints a table to the console and/or to a CSV file. The table lists the +values of the state variables for every node and every time period. All state variables refer to their values at the end of the period. + +The table has the following format: + + * Each row corresponds to a period in the simulation. + * Each node is represented by a group of columns. + * The columns for each node are as follows: + + - ``i=``: label for the column group + - ``DISR``: was the node disrupted in the period? (True/False) + - ``IO:s``: inbound order received from successor ``s`` + - ``IOPL:s``: inbound order pipeline from successor ``s``: a list of order + quantities arriving from succesor ``s`` in ``r`` periods from the + period, for ``r`` = 1, ..., ``order_lead_time`` + - ``OQ:p``: order quantity placed to predecessor ``p`` in the period + - ``OO:p``: on-order quantity (items that have been ordered from successor + ``p`` but not yet received) + - ``IS:p``: inbound shipment received from predecessor ``p`` + - ``ISPL:p``: inbound shipment pipeline from predecessor ``p``: a list of + shipment quantities arriving from predecessor ``p`` in ``r`` periods from + the period, for ``r`` = 1, ..., ``shipment_lead_time`` + - ``IDI:p``: inbound disrupted items: number of items from predecessor ``p`` + that cannot be received due to a type-RP disruption at the node + - ``RM:p``: number of items from predecessor ``p`` in raw-material inventory + at node + - ``OS:s``: outbound shipment to successor ``s`` + - ``DMFS``: demand met from stock at the node in the current period + - ``FR``: fill rate; cumulative from start of simulation to the current period + - ``IL``: inventory level (positive, negative, or zero) at node + - ``BO:s``: backorders owed to successor ``s`` + - ``ODI:s``: outbound disrupted items: number of items held for successor ``s`` due to + a type-SP disruption at ``s`` + - ``HC``: holding cost incurred at the node in the period + - ``SC``: stockout cost incurred at the node in the period + - ``ITHC``: in-transit holding cost incurred for items in transit to all successors + of the node + - ``REV``: revenue (**Note:** *not currently supported*) + - ``TC``: total cost incurred at the node (holding, stockout, and in-transit holding) + + * For state variables that are indexed by successor, if ``s`` = ``EXT``, the column + refers to the node's external customer + * For state variables that are indexed by predecessor, if ``p`` = ``EXT``, the column + refers to the node's external supplier + + +**Example:** Consider a 4-node system in which nodes 1 and 2 face external demand; node 3 has +an external supplier and serves nodes 1 and 2; and node 4 has an external customer and serves node 1. +Since node 1 has two predecessors (nodes 3 and 4), node 1 needs one unit from each predecessor in order +to make one unit of its own item. +Demands at nodes 1 and 2 have Poisson distributions with mean 10. The holding cost is 1 at nodes 3 and 4 +and 2 at nodes 1 and 2. The stockout cost is 10 at nodes 1 and 2. Node 1 has no order lead time and a +shipment lead time of 2. Node 2 has an order lead time of 1 and a shipment lead time of 1. Nodes 3 and for +each have a shipment lead time of 1. Each stage follows a base-stock policy, with base-stock levels of +12, 12, 20, 12 at nodes 1, ..., 4, respectively. The code below builds this network, simulates it for 10 periods, and +displays the results. + + .. code-block:: + + >>> from stockpyl.supply_chain_network import network_from_edges + >>> from stockpyl.sim import simulation + >>> from stockpyl.sim_io import write_results + >>> network = network_from_edges( + ... edges=[(3, 2), (3, 1), (4, 1)], + ... node_order_in_lists=[1, 2, 3, 4], + ... local_holding_cost=[2, 2, 1, 1], + ... stockout_cost=[10, 10, 0, 0], + ... order_lead_time=[0, 1, 0, 0], + ... shipment_lead_time=[2, 1, 0, 1], + ... demand_type=['P', 'P', None, None], + ... mean=[10, 10, None, None], + ... policy_type=['BS', 'BS', 'BS', 'BS'], + ... base_stock_level=[30, 25, 10, 10] + ... ) + >>> simulation(network=network, num_periods=10) + >>> write_results(network, num_periods=10) + +The results are shown in the table below. In period 0: + + * Node 1 has a demand of 13 (``IO:EXT`` column), + places orders to nodes 3 and 4 of size 13 each (``OQ:3`` and ``OQ:4`` columns), ships 13 units + to its customer (``OS:EXT``), and ends the period with an inventory level of 17 (``IL``), incurring + a holding cost (``HC``) and a total cost (``TC``) of 34. (Each node begins the + simulation with its inventory level equal to its base-stock level.) + * Node 2 has a demand of 9, places an order of size 9 to node 3, ships 9 units to its customer, + and ends the period with an inventory level of 16. + * Node 3 receives the order of 13 from node 1 (``IO:1`` = 13), but not the order from node 2 (``IO:2`` = 0) + since node 2 has an order lead time of 1. Node 2's order is in node 3's inbound order pipeline + (``IOPL:2``). Node 3 places an order of size 13 to its supplier (``OQ:EXT``) and receives it immediately + as an inbound shipment (``IS:EXT``) because its lead time is 0. It ships 13 units to node 1 (``OS:1``) but no units + to node 2 (``OS:2``) since it has not yet received an order from node 2. Its ending inventory level is 10. + * Node 4 receives the order of size 13 from node 1 (``IO:1``), places an order of size 13 to its supplier (``OQ:EXT``). + It does not receive the shipment yet since its shipment lead time is 1, but the shipment appears in its + inbound shipment pipeline (``ISPL:EXT``). It began the period with 10 units in inventory, so it ships those + 10 units to node 1 (``OS:1``), has 3 backorders for node 1 (``BO:1``), and ends with an inventory level of -3 (``IL``). + +In period 1: + + * Node 1 receives a demand of 10, orders 10 units from nodes 3 and 4, so it now has 23 units on order from each + predecessor (``OO:3`` and ``OO:4``). Node 3 shipped 13 units in period 0 and will ship 10 in period 1, so node 1's + inbound shipment pipeline from node 3 (``ISPL:3``) shows 13 units arriving in one period and 10 units arriving in two periods. + Node 4 shipped only 10 units in period 0 (because of its insufficient inventory) and 13 in period 1, which + is reflected in ``ISPL:4``. Node 1 ships 10 units to its supplier and ends the period with an inventory level of 7. + * Node 2 receives a demand of 9 again, places an order of size 9, ships 9 units to its customer, and ends + with an inventory level of 7. + * Node 3 receives an order of size 10 from node 1 (``IO:1``), which node 1 placed in period 0, and an order of size + 9 from node 2 (``IO:2``), which node 2 placed in period 1. It places an order of size 19, receives it immediately, + ships 10 units to node 1 and 9 to node 2, and ends with 10 units in inventory. + * Node 4 receives the order of size 10 from node 1 and places an order of size 10. It receives the order of 13 that + it placed to its supplier in node 0 (``IS:EXT``), ships 13 units to node 1 (3 of which were backorders from period 0 + and 10 of which are for the current demand), and ends with an inventory level of 0. + +And so on. Also worth noting is that in period 2, node 1 receives 13 units from node 3 and 10 from node 4. It needs one +unit from each predecessor to make one unit of its own finished product, so it can only make 10 such units, and +3 units of node 3's product remains in node 1's raw material inventory (``RM:3``). Node 1 began period 2 with an +inventory level of 7, received a demand of 9, and added 10 units to its finished goods inventory, so its ending +inventory level is 8 (``IL``). These 8 units incur a holding cost of 2 each; but the 3 units in raw material inventory +incur node 3's holding cost rate of 1 each. So, the total holding cost (``HC``) at node 1 is 19 in period 2. + + +.. csv-table:: Simulation Results + :file: ../aux_files/sim_io_example_instance.csv + :widths: auto + :header-rows: 1 + :stub-columns: 1 + +:download:`Download table in CSV format <../aux_files/sim_io_example_instance.csv>` + +You can control which rows and columns are printed using the ``periods_to_print`` and ``columns_to_print`` parameters, +respectively. The code below tells :func:`~stockpyl.sim_io.write_results` to print periods 3-8 and only the ``OQ``, ``IL``, and ``TC`` +columns: + + .. testsetup:: col_group + + from stockpyl.supply_chain_network import network_from_edges + from stockpyl.sim import simulation + from stockpyl.sim_io import write_results + network = network_from_edges( + edges=[(3, 2), (3, 1), (4, 1)], + node_order_in_lists=[1, 2, 3, 4], + local_holding_cost=[2, 2, 1, 1], + stockout_cost=[10, 10, 0, 0], + order_lead_time=[0, 1, 0, 0], + shipment_lead_time=[2, 1, 0, 1], + demand_type=['P', 'P', None, None], + mean=[10, 10, None, None], + policy_type=['BS', 'BS', 'BS', 'BS'], + base_stock_level=[30, 25, 10, 10] + ) + simulation(network=network, num_periods=10, rand_seed=40) + + .. doctest:: col_group + + >>> write_results( + ... network=network, + ... num_periods=10, + ... periods_to_print=list(range(3, 9)), + ... columns_to_print=['OQ', 'IL', 'TC'] + ... ) + t i=1 OQ:3 OQ:4 IL TC i=2 OQ:3 IL TC i=3 OQ:EXT IL TC i=4 OQ:EXT IL TC + --- ----- ------ ------ ---- ---- ----- ------ ---- ---- ----- -------- ---- ---- ----- -------- ---- ---- + 3 6 6 15 30 14 -2 20 19 10 38 6 4 19 + 4 11 11 13 26 14 -3 30 25 10 41 11 -1 16 + 5 11 11 8 16 9 2 4 25 10 46 11 -1 21 + 6 10 10 8 17 8 8 16 19 10 40 10 0 22 + 7 15 15 4 9 9 8 16 23 10 43 15 -5 21 + 8 17 17 -2 20 12 4 8 26 10 51 17 -7 25 + +Certain strings serve as shortcuts for groups of columns. (See the docstring for :func:`~stockpyl.sim_io.write_results` for a list +of allowable strings.) Shortcuts and column names can be combined in one list: + + .. testsetup:: col_group2 + + from stockpyl.supply_chain_network import network_from_edges + from stockpyl.sim import simulation + from stockpyl.sim_io import write_results + network = network_from_edges( + edges=[(3, 2), (3, 1), (4, 1)], + node_order_in_lists=[1, 2, 3, 4], + local_holding_cost=[2, 2, 1, 1], + stockout_cost=[10, 10, 0, 0], + order_lead_time=[0, 1, 0, 0], + shipment_lead_time=[2, 1, 0, 1], + demand_type=['P', 'P', None, None], + mean=[10, 10, None, None], + policy_type=['BS', 'BS', 'BS', 'BS'], + base_stock_level=[30, 25, 10, 10] + ) + simulation(network=network, num_periods=10, rand_seed=40) + + .. doctest:: col_group2 + + >>> write_results( + ... network=network, + ... num_periods=10, + ... periods_to_print=list(range(3, 9)), + ... columns_to_print=['OQ', 'IL', 'costs'] + ... ) + t i=1 OQ:3 OQ:4 IL HC SC TC i=2 OQ:3 IL HC SC TC i=3 OQ:EXT IL HC SC TC i=4 OQ:EXT IL HC SC TC + --- ----- ------ ------ ---- ---- ---- ---- ----- ------ ---- ---- ---- ---- ----- -------- ---- ---- ---- ---- ----- -------- ---- ---- ---- ---- + 3 6 6 15 30 0 30 14 -2 0 20 20 19 10 10 0 38 6 4 4 0 19 + 4 11 11 13 26 0 26 14 -3 0 30 30 25 10 10 0 41 11 -1 0 0 16 + 5 11 11 8 16 0 16 9 2 4 0 4 25 10 10 0 46 11 -1 0 0 21 + 6 10 10 8 17 0 17 8 8 16 0 16 19 10 10 0 40 10 0 0 0 22 + 7 15 15 4 9 0 9 9 8 16 0 16 23 10 10 0 43 15 -5 0 0 21 + 8 17 17 -2 0 20 20 12 4 8 0 8 26 10 10 0 51 17 -7 0 0 25 + + + + +Advanced Features +----------------- + +Supply Disruptions +~~~~~~~~~~~~~~~~~~ + +|sp| can simulate supply disruptions, typically generated by a 2-state Markov process. +To specify that a node is subject to disruptions, set its ``disruption_process`` attribute +to a |class_disruption_process| object whose ``random_process_type`` attribute is not ``None``. + +**Example::** The following code simulates the instance in Example 9.3, in which the demand +is deterministic at 2000 per period and disruptions follow a 2-state Markov process with +disruption probability 0.04 and recovery probability 0.25: + +.. testsetup:: * + + from stockpyl.supply_chain_network import single_stage_system + from stockpyl.sim import simulation + +.. doctest:: + + >>> from stockpyl.disruption_process import DisruptionProcess + >>> network = single_stage_system( + ... holding_cost=0.25, + ... stockout_cost=3, + ... demand_type='D', # deterministic demand + ... demand_list=2000, + ... disruption_process=DisruptionProcess(random_process_type='M', disruption_probability=0.04, recovery_probability=0.25), + ... policy_type='BS', + ... base_stock_level=8000 + ... ) + >>> T = 10000 + >>> total_cost = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) + >>> print(f"Total cost per period = {total_cost / T}") + Total cost per period = 2831.9 + + +|sp| supports four types of disruptions, which differ by how the system "pauses" when a disruption occurs: + + * ``'OP'`` (order-pausing: the stage cannot place orders during disruptions) (default) + * ``'SP'`` (shipment-pausing: the stage can place orders during disruptions but its supplier(s) cannot ship them) + * ``'TP'`` (transit-pausing: items in transit to the stage are paused during disruptions) + * ``'RP'`` (receipt-pausing: items cannot be received by the disrupted stage; they accumulate + just before the stage and are received when the disruption ends) + + +**Example:** The code below simulates a 2-node serial system in which the downstream node (node 2) is subject to +disruptions. First, type-OP disruptions: + +.. doctest:: + + >>> network = serial_system( + ... num_nodes=2, + ... node_order_in_system=[1, 2], + ... shipment_lead_time=1, + ... demand_type='P', + ... mean=20, + ... policy_type='BS', + ... base_stock_level=[25, 25] + ... ) + >>> network.get_node_from_index(2).disruption_process = DisruptionProcess( + ... random_process_type='M', + ... disruption_type='OP', + ... disruption_probability=0.1, + ... recovery_probability=0.4 + ... ) + >>> T = 100 + >>> _ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) + >>> write_results(network=network, num_periods=T, periods_to_print=list(range(7, 16)), columns_to_print=['DISR', 'IO', 'OQ', 'IS', 'OS', 'IL']) + t i=1 DISR IO:2 OQ:EXT IS:EXT OS:2 IL i=2 DISR IO:EXT OQ:1 IS:1 OS:EXT IL + --- ----- ------ ------ -------- -------- ------ ---- ----- ------ -------- ------ ------ -------- ---- + 7 False 19 19 14 19 6 False 19 19 14 19 6 + 8 False 20 20 19 20 5 False 20 20 19 20 5 + 9 False 0 0 20 0 25 True 21 0 20 21 4 + 10 False 0 0 0 0 25 True 24 0 0 4 -20 + 11 False 0 0 0 0 25 True 22 0 0 0 -42 + 12 False 0 0 0 0 25 True 20 0 0 0 -62 + 13 False 104 104 0 25 -79 False 17 104 0 0 -79 + 14 False 20 20 104 99 5 False 20 20 25 25 -74 + 15 False 21 21 20 21 4 False 21 21 99 95 4 + +Node 2 is disrupted starting in period 9 (``DISR`` column). Since these are order-pausing disruptions, the node cannot place orders, so its +order quantity for orders to node 1 (``OQ:1``) is 0, starting in period 9 and continuing until the disruption ends in period 13, +at which point a large order is placed. At first, that order is mostly backordered upstream at node 1, since node 1 was not aware of the +upcoming large order. + +Next, type-SP disruptions: + +.. doctest:: + + >>> network.get_node_from_index(2).disruption_process.disruption_type='SP' + >>> _ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) + >>> write_results(network=network, num_periods=T, periods_to_print=list(range(7, 16)), columns_to_print=['DISR', 'IO', 'OQ', 'IS', 'OS', 'IL', 'ODI']) + t i=1 DISR IO:2 OQ:EXT IS:EXT OS:2 IL ODI:2 i=2 DISR IO:EXT OQ:1 IS:1 OS:EXT IL ODI:EXT + --- ----- ------ ------ -------- -------- ------ ---- ------- ----- ------ -------- ------ ------ -------- ---- --------- + 7 False 19 19 14 19 6 0 False 19 19 14 19 6 0 + 8 False 20 20 19 20 5 0 False 20 20 19 20 5 0 + 9 False 21 21 20 0 4 21 True 21 21 20 21 4 0 + 10 False 24 24 21 0 1 45 True 24 24 0 4 -20 0 + 11 False 22 22 24 0 3 67 True 22 22 0 0 -42 0 + 12 False 20 20 22 0 5 87 True 20 20 0 0 -62 0 + 13 False 17 17 20 104 8 0 False 17 17 0 0 -79 0 + 14 False 20 20 17 20 5 0 False 20 20 104 99 5 0 + 15 False 21 21 20 21 4 0 False 21 21 20 21 4 0 + +In this case, node 2 can still place orders during the disruption, but node 1 cannot ship them. Instead, the items are moved to +node 1's "outbound disrupted items" category (``ODI:2``). When the disruption ends in period 13, node 1 ships those accumulated items (``OS:2``). + +Next, type-TP disruptions: + +.. doctest:: + + >>> network.get_node_from_index(2).disruption_process.disruption_type='TP' + >>> _ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) + >>> write_results(network=network, num_periods=T, periods_to_print=list(range(7, 16)), columns_to_print=['DISR', 'IO', 'OQ', 'IS', 'ISPL', 'OS', 'IL']) + t i=1 DISR IO:2 OQ:EXT IS:EXT ISPL:EXT OS:2 IL i=2 DISR IO:EXT OQ:1 IS:1 ISPL:1 OS:EXT IL + --- ----- ------ ------ -------- -------- ---------- ------ ---- ----- ------ -------- ------ ------ -------- -------- ---- + 7 False 19 19 14 [19.0] 19 6 False 19 19 14 [19.0] 19 6 + 8 False 20 20 19 [20.0] 20 5 False 20 20 19 [20.0] 20 5 + 9 False 21 21 20 [21.0] 21 4 True 21 21 20 [21.0] 21 4 + 10 False 24 24 21 [24.0] 24 1 True 24 24 0 [45.0] 4 -20 + 11 False 22 22 24 [22.0] 22 3 True 22 22 0 [67.0] 0 -42 + 12 False 20 20 22 [20.0] 20 5 True 20 20 0 [87.0] 0 -62 + 13 False 17 17 20 [17.0] 17 8 False 17 17 0 [104.0] 0 -79 + 14 False 20 20 17 [20.0] 20 5 False 20 20 104 [20.0] 99 5 + 15 False 21 21 20 [21.0] 21 4 False 21 21 20 [21.0] 21 4 + +The disruption means that items in transit to node 2 are paused. This is evident from the inbound shipment pipeline at node 2 from node 1 (``ISPL:1``), +which increases as the disruption continues and then is cleared when the disruption ends. + +Finally, type-RP disruptions: + +.. doctest:: + + >>> network.get_node_from_index(2).disruption_process.disruption_type='RP' + >>> _ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) + >>> write_results(network=network, num_periods=T, periods_to_print=list(range(7, 16)), columns_to_print=['DISR', 'IO', 'OQ', 'IS', 'OS', 'IL', 'ISPL', 'IDI']) + t i=1 DISR IO:2 OQ:EXT IS:EXT ISPL:EXT IDI:EXT OS:2 IL i=2 DISR IO:EXT OQ:1 IS:1 ISPL:1 IDI:1 OS:EXT IL + --- ----- ------ ------ -------- -------- ---------- --------- ------ ---- ----- ------ -------- ------ ------ -------- ------- -------- ---- + 7 False 19 19 14 [19.0] 0 19 6 False 19 19 14 [19.0] 0 19 6 + 8 False 20 20 19 [20.0] 0 20 5 False 20 20 19 [20.0] 0 20 5 + 9 False 21 21 20 [21.0] 0 21 4 True 21 21 0 [21.0] 20 5 -16 + 10 False 24 24 21 [24.0] 0 24 1 True 24 24 0 [24.0] 41 0 -40 + 11 False 22 22 24 [22.0] 0 22 3 True 22 22 0 [22.0] 65 0 -62 + 12 False 20 20 22 [20.0] 0 20 5 True 20 20 0 [20.0] 87 0 -82 + 13 False 17 17 20 [17.0] 0 17 8 False 17 17 107 [17.0] 0 99 8 + 14 False 20 20 17 [20.0] 0 20 5 False 20 20 17 [20.0] 0 20 5 + 15 False 21 21 20 [21.0] 0 21 4 False 21 21 20 [21.0] 0 21 4 + +In this case, the disruptions prevent node 2 from receiving items. During the disruption, items that would otherwise have been +received by node 2 from node 1 are instead moved to node 2's "inbound disrupted items" category (``IDI:1``). They remain there +until the disruption ends, at which point they are included in the node's inbound shipment (``IS:1``). + +Converting from Continuous Review +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A continuous-review system can often be approximated by a periodic-review system in |sp|. The sequence of events [HYPERLINK] +used by |sp| means that the lead times in the continuous-review system should be kept the same when modeling +as a periodic-review system in |sp|. + +**Example:** Example 6.1 consists of a 3-node serial system with downstream node 1. The code below simulates this sytem +in |sp|. Note that the average cost per period reported by the simulation is close to the expected cost of 47.65 predicted by the theory. + +.. testsetup:: * + + from stockpyl.sim import simulation + from stockpyl.supply_chain_network import serial_system + +.. doctest:: + + >>> network = serial_system( + ... num_nodes=3, + ... node_order_in_system=[3, 2, 1], + ... local_holding_cost={1: 7, 2: 4, 3: 2}, + ... shipment_lead_time={1: 1, 2: 1, 3: 2}, + ... stockout_cost=37.12, + ... demand_type='N', + ... mean=5, + ... standard_deviation=1, + ... policy_type='EBS', # echelon base-stock policy + ... base_stock_level={1: 6.49, 2: 12.02, 3: 22.71} + ... ) + >>> T = 1000 + >>> total_cost = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) + >>> print(f"Total cost per period = {total_cost / T}") + Total cost per period = 47.259837154163556 + + + +Holding and Stockout Cost Functions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +As an alternative to using linear holding and stockout cost functions using coefficients that you provide, +|sp| allows you to provide arbitrary functions that are used to calculate the holding and stockout costs +based on the current inventory level. The functions can be standalone functions or lambda functions. + +**Example:** Simulate a single-stage system with Poisson(15) demand, a base-stock level of 17, and +holding and stockout cost functions given by + +.. math:: + + h(x) = 0.5(x^+)^2 + + p(x) = 10\sqrt{x^+}, + +where :math:`a^+ \equiv \max\{a,0\}` and :math:`x` is the inventory level (so :math:`x^+` is the on-hand inventory +and :math:`(-x)^+` is the backorders). + +.. doctest:: + + >>> from stockpyl.supply_chain_network import single_stage_system + >>> from stockpyl.sim import simulation + >>> from stockpyl.sim_io import write_results + >>> import math + >>> def holding_cost(x): + ... return 0.5 * max(x, 0)**2 + >>> network = single_stage_system( + ... local_holding_cost_function=holding_cost, + ... stockout_cost_function=lambda x: 10 * math.sqrt(max(-x, 0)), + ... demand_type='P', + ... mean=15, + ... policy_type='BS', + ... base_stock_level=17, + ... lead_time=1 + ... ) + >>> T = 100 + >>> _ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) + >>> write_results(network=network, num_periods=T, periods_to_print=list(range(6)), columns_to_print=['basic', 'costs']) + t i=0 IO:EXT OQ:EXT IS:EXT OS:EXT IL HC SC TC + --- ----- -------- -------- -------- -------- ---- ---- ------- ------- + 0 18 18 0 17 -1 0 10 10 + 1 10 10 18 11 7 24.5 0 24.5 + 2 16 16 10 16 1 0.5 0 0.5 + 3 19 19 16 17 -2 0 14.1421 14.1421 + 4 11 11 19 13 6 18 0 18 + 5 13 13 11 13 4 8 0 8 + + + + + +Running Multiple Trials +~~~~~~~~~~~~~~~~~~~~~~~ + +The :func:`~stockpyl.sim.run_multiple_trials` function will run the simulation multiple for multiple trials. For each trial, +the function calculates the average cost per period; it then returns the mean and standard error of the mean (SEM) +of the average costs. An :math:`\\alpha`-confidence interval can be constructed using +``mean_cost`` :math:`\\pm z_{1-(1-\\alpha)/2} \\times` ``sem_cost``. +This is useful for, e.g., comparing two systems to see whether their costs are statistically different +according to the simulation. + +**Example:** Optimize the serial system in Example 6.1 of |fosct| using both the exact algorithm by Chen and Zheng (1994) and +the newsvendor heuristic by Shang and Song (2003). Simulate both solutions for 10 trials, 1000 periods per trial, and +determine whether the heuristic solution is statistically worse than the optimal solution. + +.. doctest:: + + >>> from stockpyl.ssm_serial import optimize_base_stock_levels, newsvendor_heuristic + >>> from stockpyl.supply_chain_network import echelon_to_local_base_stock_levels + >>> from stockpyl.sim import run_multiple_trials + >>> from stockpyl.instances import load_instance + >>> # Load network. + >>> network = load_instance("example_6_1") + >>> # Set base-stock levels according to optimal solution. + >>> S_opt, _ = optimize_base_stock_levels(network=network) + >>> S_opt_local = echelon_to_local_base_stock_levels(network, S_opt) + >>> for n in network.nodes: + ... n.inventory_policy.base_stock_level = S_opt_local[n.index] + >>> mean_opt, sem_opt = run_multiple_trials(network=network, num_trials=10, num_periods=1000, rand_seed=42, progress_bar=False) + >>> print(f"Optimal solution has simulated average cost per period with mean {mean_opt} and SEM {sem_opt}") + Optimal solution has simulated average cost per period with mean 47.78528000921442 and SEM 0.26119040852187103 + >>> # Set base-stock levels according to heuristic solution. + >>> S_heur = newsvendor_heuristic(network=network) + >>> S_heur_local = echelon_to_local_base_stock_levels(network, S_heur) + >>> for n in network.nodes: + ... n.inventory_policy.base_stock_level = S_heur_local[n.index] + >>> mean_heur, sem_heur = run_multiple_trials(network=network, num_trials=10, num_periods=1000, rand_seed=42, progress_bar=False) + >>> print(f"Heuristic solution has simulated average cost per period with mean {mean_heur} and SEM {sem_heur}") + Heuristic solution has simulated average cost per period with mean 47.789138050714946 and SEM 0.27039814681794644 + >>> ## Calculate confidence intervals. + >>> from scipy.stats import norm + >>> z = norm.ppf(1 - (1 - 0.95)/2) + >>> lo_opt, hi_opt = mean_opt - z * sem_opt, mean_opt + z * sem_opt + >>> lo_heur, hi_heur = mean_heur - z * sem_heur, mean_heur + z * sem_heur + >>> print(f"Optimal solution CI = [{lo_opt}, {hi_opt}], heuristic solution CI = [{lo_heur}, {hi_heur}]") + Optimal solution CI = [47.27335621540425, 48.29720380302459], heuristic solution CI = [47.2591674214654, 48.31910867996449] + +Because the two confidence intervals overlap, we cannot say that the two solutions have statistically different +average costs. (Of course, the theory tells us that the true expected costs for the two solutions are different.) + + +References +---------- + +F. Chen and Y. S. Zheng. Lower bounds for multiechelon stochastic inventory systems. *Management Science*, 40(11):1426–1443, 1994. + +K. H. Shang and J.-S. Song. Newsvendor bounds and heuristic for optimal policies in serial supply chains. *Management Science*, 49(5):618-638, 2003. + +P. H. Zipkin, *Foundations of Inventory Management*, Irwin/McGraw-Hill (2000). + + diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 10bbb65..d02e8ef 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -5,8 +5,8 @@ -------- The |mod_sim| module contains code for simulating multi-echelon inventory systems. -The primary data object is the |class_network| and the |class_node| objects -that it contains, which contains all of the data for the simulation instance. +The primary data object is the |class_network| object and the |class_node| and |class_product| objects +that it contains. These objects contain all of the data for the simulation instance. .. note:: |node_stage| @@ -14,7 +14,8 @@ .. admonition:: See Also For an overview of simulation in |sp|, - see the :ref:`tutorial page for simulation`. + see the :ref:`tutorial page for simulation` and + the :ref:`tutorial page for multi-product simulation<_tutorial_multiproduct_sim_page>`. API Reference diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 5cb4ccc..9464f44 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -16,18 +16,38 @@ .. note:: |fosct_notation| -A |class_product| is used primarily for :ref:`multi-echelon inventory optimization (MEIO) ` -or :ref:`simulation `. |class_product| objects are ... TODO: info here about including these -objects in nodes or nodeproducts. - -TODO: update: -The product object contains many attributes, and different functions use different sets of attributes. -For example, the :func:`stockpyl.ssm_serial.optimize_base_stock_levels` function takes a -|class_network| whose nodes contain values for ``echelon_holding_cost``, ``lead_time``, ``stockout_cost``, -and ``demand_source`` attributes, while :func:`stockpyl.gsm_serial.optimize_committed_service_times` -uses ``local_holding_cost``, ``processing_time``, etc. -Therefore, to determine which attributes are needed, refer to the documentation for the function -you are using. +A |class_product| is used for :ref:`simulation `. Currently, simulation is the +only feature of |sp| that handles multi-product systems. + +A |class_product| object is typically added to one or more |class_node| objects; those nodes are +then said to "handle" the product. Most attributes (``echelon_holding_cost``, ``lead_time``, ``stockout_cost``, +``demand_source``, ``inventory_policy``, etc.) may be specified either at the node level +(same value for all products at the node), at the product level (same value for all nodes that handle +the product), or at the node-product level (separate value for the node-product pair). + +Products are related to each other via a **bill of materials (BOM).** The BOM specifies +the number of units of an upstream product (_raw material_) that are required to make +one unit of a downstream product (_finished goods_). For example, the BOM might specify that +5 units of product A and 2 units of product B are required to make 1 unit of product C at a downstream node. +The raw materials are products A and B, and the finished good is product C. + +.. note:: "Raw materials" and "finished goods" are |class_products|s. They are not separate +classes. Moreover, a finished good at one node may be a raw material at another node; for example, +node 1 might produce product A as its finished good, which it then ships to node 2, where it is +used as a raw material to product product B. + +Every node has at least one product. If your code does not explicltly create products or +add them to nodes, |sp| automatically creates and manages "dummy" products at each node. +This means that you can ignore products entirely if you do not need them, and any code written +for versions of |sp| prior to v1.0 (when products were introduced) should still work without +being adapted to handle products. # TODO: is this true? are there caveats? + + +.. admonition:: See Also + + For more information about creating and managing products, and simulating multi-product systems in |sp|, + see the :ref:`tutorial page for multi-product simulation<_tutorial_multiproduct_sim_page>`. + Game plan for BOM: From 76be5aa8b52f77ef85c74dd00f5173c2c4ca2458 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 09:46:09 -0400 Subject: [PATCH 65/94] Typo fixes --- src/stockpyl/supply_chain_product.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index 9464f44..b3cf401 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -26,15 +26,15 @@ the product), or at the node-product level (separate value for the node-product pair). Products are related to each other via a **bill of materials (BOM).** The BOM specifies -the number of units of an upstream product (_raw material_) that are required to make -one unit of a downstream product (_finished goods_). For example, the BOM might specify that +the number of units of an upstream product (*raw material*) that are required to make +one unit of a downstream product (*finished goods*). For example, the BOM might specify that 5 units of product A and 2 units of product B are required to make 1 unit of product C at a downstream node. The raw materials are products A and B, and the finished good is product C. -.. note:: "Raw materials" and "finished goods" are |class_products|s. They are not separate -classes. Moreover, a finished good at one node may be a raw material at another node; for example, -node 1 might produce product A as its finished good, which it then ships to node 2, where it is -used as a raw material to product product B. +.. note:: "Raw materials" and "finished goods" are |class_products| objects. They are not separate + classes. Moreover, a finished good at one node may be a raw material at another node; for example, + node 1 might produce product A as its finished good, which it then ships to node 2, where it is + used as a raw material to product product B. Every node has at least one product. If your code does not explicltly create products or add them to nodes, |sp| automatically creates and manages "dummy" products at each node. From e9d45f5197f7e3571c6aaa417bb2f050ae48c4df Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 14:29:13 -0400 Subject: [PATCH 66/94] Working on mutliproduct sim tutorial --- docs/api/datatypes/datatypes.rst | 1 + docs/api/datatypes/note_state_vars.rst | 5 ++ docs/globals.inc | 1 + docs/tutorial/tutorial_sim.rst | 5 +- docs/tutorial/tutorial_sim_multiproduct.rst | 56 +++++++++++++++------ src/stockpyl/supply_chain_product.py | 2 +- 6 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 docs/api/datatypes/note_state_vars.rst diff --git a/docs/api/datatypes/datatypes.rst b/docs/api/datatypes/datatypes.rst index 43506eb..a2e4c92 100644 --- a/docs/api/datatypes/datatypes.rst +++ b/docs/api/datatypes/datatypes.rst @@ -11,3 +11,4 @@ Data Types demand_source policy disruption_process + node_state_vars \ No newline at end of file diff --git a/docs/api/datatypes/note_state_vars.rst b/docs/api/datatypes/note_state_vars.rst new file mode 100644 index 0000000..12712e8 --- /dev/null +++ b/docs/api/datatypes/note_state_vars.rst @@ -0,0 +1,5 @@ +``node_state_vars`` Module +=============================== + +.. automodule:: stockpyl.node_state_vars + :members: diff --git a/docs/globals.inc b/docs/globals.inc index 6563422..364831b 100644 --- a/docs/globals.inc +++ b/docs/globals.inc @@ -25,6 +25,7 @@ .. |mod_ssm_serial| replace:: :mod:`~stockpyl.ssm_serial` .. |mod_supply_chain_network| replace:: :mod:`~stockpyl.supply_chain_network` .. |mod_supply_chain_node| replace:: :mod:`~stockpyl.supply_chain_node` +.. |mod_supply_chain_product| replace:: :mod:`~stockpyl.supply_chain_product` .. |mod_node_state_vars| replace:: :mod:`~stockpyl.node_state_vars` .. |mod_supply_uncertainty| replace:: :mod:`~stockpyl.supply_uncertainty` .. |mod_wagner_whitin| replace:: :mod:`~stockpyl.wagner_whitin` diff --git a/docs/tutorial/tutorial_sim.rst b/docs/tutorial/tutorial_sim.rst index ac0ccd2..7cbd570 100644 --- a/docs/tutorial/tutorial_sim.rst +++ b/docs/tutorial/tutorial_sim.rst @@ -8,6 +8,7 @@ Simulation |sp| contains code to simulate single- or multi-echelon inventory systems. The system being simulated can include many different features, including: + * Multiple products, with relationships specified by bill-of-materials (BOM) structures * Stochastic demand with a variety of built-in demand distributions, or supply your own * Inventory management using a variety of built-in inventory policies, or supply your own * Stochastic supply disruptions with various implications @@ -17,11 +18,11 @@ can include many different features, including: .. note:: |node_stage| -|fosct_notation| +.. note:: |fosct_notation| .. admonition:: See Also - For more details, see the API documentation for the |mod_sim| and |mod_sim_io| modules. + For more details, see the API documentation for the |mod_sim|, |mod_sim_io|, and |mod_supply_chain_product| modules. .. contents:: :depth: 3 diff --git a/docs/tutorial/tutorial_sim_multiproduct.rst b/docs/tutorial/tutorial_sim_multiproduct.rst index 00f35a0..8b1aec4 100644 --- a/docs/tutorial/tutorial_sim_multiproduct.rst +++ b/docs/tutorial/tutorial_sim_multiproduct.rst @@ -2,32 +2,60 @@ .. _tutorial_multiproduct_sim_page: -Simulation -==================== +Multi-Product Simulation +======================== -|sp| contains code to simulate single- or multi-echelon inventory systems. The system being simulated -can include many different features, including: - - * Stochastic demand with a variety of built-in demand distributions, or supply your own - * Inventory management using a variety of built-in inventory policies, or supply your own - * Stochastic supply disruptions with various implications - * Fixed and/or variable costs, or supply your own cost functions - * Period-by-period, node-by-node state variables output to table or CSV file +|sp| supports simulating systems with multiple products. This page describes how to create and manage +products, as well as simulate multi-product systems. If you haven't already read the +the :ref:`tutorial page for simulation`, read that first. .. note:: |node_stage| -|fosct_notation| +.. note:: |fosct_notation| .. admonition:: See Also - For more details, see the API documentation for the |mod_sim| and |mod_sim_io| modules. + For more details, see the API documentation for the |mod_sim|, |mod_sim_io|, and |mod_supply_chain_product| modules. .. contents:: :depth: 3 -Basic Example -------------- + +Products +-------- + +The primary class for handling products is the |class_product|. A |class_product| object +is typically added to one or more |class_node| objects; those nodes are then said to +"handle" the product. Most attributes (``echelon_holding_cost``, ``lead_time``, ``stockout_cost``, +``demand_source``, ``inventory_policy``, etc.) may be specified either at the node level +(same value for all products at the node), at the product level (same value for all nodes that handle +the product), or at the node-product level (separate value for the node-product pair). + +Products are related to each other via a **bill of materials (BOM).** The BOM specifies +the number of units of an upstream product (*raw material*) that are required to make +one unit of a downstream product (*finished goods*). For example, the BOM might specify that +5 units of product A and 2 units of product B are required to make 1 unit of product C at a downstream node. +The raw materials are products A and B, and the finished good is product C. + +.. note:: "Raw materials" and "finished goods" are |class_product| objects. They are not separate + classes. Moreover, a finished good at one node may be a raw material at another node; for example, + node 1 might produce product A as its finished good, which it then ships to node 2, where it is + used as a raw material to product product B. + +Every node has at least one product. If your code does not explicltly create products or +add them to nodes, |sp| automatically creates and manages "dummy" products at each node. +This means that you can ignore products entirely if you do not need them, and any code written +for versions of |sp| prior to v1.0 (when products were introduced) should still work without +being adapted to handle products. # TODO: is this true? are there caveats? + + +Basic Multi-Product Example +--------------------------- + +This tutorial will use the following network: + +![3-node diagram](https://github.com/LarrySnyder/stockpyl-testing/blob/main/intro_to_products_diagram.png) Simulate a single-node system with Poisson(10) demand, a base-stock policy with a base-stock level of 13, an order lead time of 0, and a shipment lead time of 1. diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index b3cf401..f42d9f0 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -31,7 +31,7 @@ 5 units of product A and 2 units of product B are required to make 1 unit of product C at a downstream node. The raw materials are products A and B, and the finished good is product C. -.. note:: "Raw materials" and "finished goods" are |class_products| objects. They are not separate +.. note:: "Raw materials" and "finished goods" are |class_product| objects. They are not separate classes. Moreover, a finished good at one node may be a raw material at another node; for example, node 1 might produce product A as its finished good, which it then ships to node 2, where it is used as a raw material to product product B. From 97854dadc3f894f9540afe4d78d24ec02e9057c5 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 14:40:19 -0400 Subject: [PATCH 67/94] Getting the doc file structure right --- docs/api/simulation/simulation.rst | 2 +- docs/tutorial/tutorial.rst | 1 + docs/tutorial/tutorial_multiproduct_sim.rst | 80 ++ docs/tutorial/tutorial_sim_multiproduct.rst | 817 -------------------- src/stockpyl/sim.py | 2 +- src/stockpyl/supply_chain_product.py | 2 +- 6 files changed, 84 insertions(+), 820 deletions(-) create mode 100644 docs/tutorial/tutorial_multiproduct_sim.rst delete mode 100644 docs/tutorial/tutorial_sim_multiproduct.rst diff --git a/docs/api/simulation/simulation.rst b/docs/api/simulation/simulation.rst index 2574783..f7477fa 100644 --- a/docs/api/simulation/simulation.rst +++ b/docs/api/simulation/simulation.rst @@ -17,4 +17,4 @@ Simulation For an overview of simulation in |sp|, see the :ref:`tutorial page for simulation` and - the :ref:`tutorial page for multi-product simulation<_tutorial_multiproduct_sim_page>`. \ No newline at end of file + the :ref:`tutorial page for multi-product simulation`. \ No newline at end of file diff --git a/docs/tutorial/tutorial.rst b/docs/tutorial/tutorial.rst index 016a2fd..605395a 100644 --- a/docs/tutorial/tutorial.rst +++ b/docs/tutorial/tutorial.rst @@ -9,3 +9,4 @@ Tutorial tutorial_su tutorial_meio tutorial_sim + tutorial_multiproduct_sim diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst new file mode 100644 index 0000000..cb4cf9a --- /dev/null +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -0,0 +1,80 @@ +.. include:: ../globals.inc + +.. tutorial_multiproduct_sim_page: + +Multi-Product Simulation +======================== + +|sp| supports simulating systems with multiple products. This page describes how to create and manage +products, as well as simulate multi-product systems. If you haven't already read the +the :ref:`tutorial page for simulation`, read that first. + + +.. note:: |node_stage| + +.. note:: |fosct_notation| + +.. admonition:: See Also + + For more details, see the API documentation for the |mod_sim|, |mod_sim_io|, and |mod_supply_chain_product| modules. + +.. contents:: + :depth: 3 + + +Products +-------- + +The primary class for handling products is the |class_product|. A |class_product| object +is typically added to one or more |class_node| objects; those nodes are then said to +"handle" the product. Most attributes (``echelon_holding_cost``, ``lead_time``, ``stockout_cost``, +``demand_source``, ``inventory_policy``, etc.) may be specified either at the node level +(same value for all products at the node), at the product level (same value for all nodes that handle +the product), or at the node-product level (separate value for the node-product pair). + +Products are related to each other via a **bill of materials (BOM).** The BOM specifies +the number of units of an upstream product (*raw material*) that are required to make +one unit of a downstream product (*finished goods*). For example, the BOM might specify that +5 units of product A and 2 units of product B are required to make 1 unit of product C at a downstream node. +The raw materials are products A and B, and the finished good is product C. + +.. note:: "Raw materials" and "finished goods" are |class_product| objects. They are not separate + classes. Moreover, a finished good at one node may be a raw material at another node; for example, + node 1 might produce product A as its finished good, which it then ships to node 2, where it is + used as a raw material to product product B. + +Every node has at least one product. If your code does not explicltly create products or +add them to nodes, |sp| automatically creates and manages "dummy" products at each node. +This means that you can ignore products entirely if you do not need them, and any code written +for versions of |sp| prior to v1.0 (when products were introduced) should still work without +being adapted to handle products. # TODO: is this true? are there caveats? + + +Basic Multi-Product Example +--------------------------- + +This tutorial will use the following network: + +![3-node diagram](https://github.com/LarrySnyder/stockpyl-testing/blob/main/intro_to_products_diagram.png) + +We'll start building this network using the :func:`~stockpyl.supply_chain_network.serial_system` function: + +.. testsetup:: * + + from stockpyl.supply_chain_network import serial_system + +.. doctest:: + + >>> network = serial_system( + ... num_nodes=2, + ... node_order_in_system=[2, 1], + ... node_order_in_lists=[1, 2], + ... local_holding_cost=[5, None], # holding cost at node 2 will be product-specific, so leave it unspecified here + ... stockout_cost=[20, 0], + ... demand_type='UD', # discrete uniform distribution, for easier debugging + ... lo=1, + ... hi=5, + ... shipment_lead_time=[1, 2] + ... ) + +Next, we'll create three products, w \ No newline at end of file diff --git a/docs/tutorial/tutorial_sim_multiproduct.rst b/docs/tutorial/tutorial_sim_multiproduct.rst deleted file mode 100644 index 8b1aec4..0000000 --- a/docs/tutorial/tutorial_sim_multiproduct.rst +++ /dev/null @@ -1,817 +0,0 @@ -.. include:: ../globals.inc - -.. _tutorial_multiproduct_sim_page: - -Multi-Product Simulation -======================== - -|sp| supports simulating systems with multiple products. This page describes how to create and manage -products, as well as simulate multi-product systems. If you haven't already read the -the :ref:`tutorial page for simulation`, read that first. - - -.. note:: |node_stage| - -.. note:: |fosct_notation| - -.. admonition:: See Also - - For more details, see the API documentation for the |mod_sim|, |mod_sim_io|, and |mod_supply_chain_product| modules. - -.. contents:: - :depth: 3 - - -Products --------- - -The primary class for handling products is the |class_product|. A |class_product| object -is typically added to one or more |class_node| objects; those nodes are then said to -"handle" the product. Most attributes (``echelon_holding_cost``, ``lead_time``, ``stockout_cost``, -``demand_source``, ``inventory_policy``, etc.) may be specified either at the node level -(same value for all products at the node), at the product level (same value for all nodes that handle -the product), or at the node-product level (separate value for the node-product pair). - -Products are related to each other via a **bill of materials (BOM).** The BOM specifies -the number of units of an upstream product (*raw material*) that are required to make -one unit of a downstream product (*finished goods*). For example, the BOM might specify that -5 units of product A and 2 units of product B are required to make 1 unit of product C at a downstream node. -The raw materials are products A and B, and the finished good is product C. - -.. note:: "Raw materials" and "finished goods" are |class_product| objects. They are not separate - classes. Moreover, a finished good at one node may be a raw material at another node; for example, - node 1 might produce product A as its finished good, which it then ships to node 2, where it is - used as a raw material to product product B. - -Every node has at least one product. If your code does not explicltly create products or -add them to nodes, |sp| automatically creates and manages "dummy" products at each node. -This means that you can ignore products entirely if you do not need them, and any code written -for versions of |sp| prior to v1.0 (when products were introduced) should still work without -being adapted to handle products. # TODO: is this true? are there caveats? - - -Basic Multi-Product Example ---------------------------- - -This tutorial will use the following network: - -![3-node diagram](https://github.com/LarrySnyder/stockpyl-testing/blob/main/intro_to_products_diagram.png) - -Simulate a single-node system with Poisson(10) demand, a base-stock policy with a base-stock level of 13, -an order lead time of 0, and a shipment lead time of 1. - -.. doctest:: - - >>> from stockpyl.supply_chain_network import single_stage_system - >>> from stockpyl.sim import simulation - >>> from stockpyl.sim_io import write_results - >>> network = single_stage_system( - ... demand_type='P', # Poisson demand - ... mean=10, - ... policy_type='BS', # base-stock policy - ... base_stock_level=13, - ... shipment_lead_time=1 - ... ) - >>> _ = simulation(network=network, num_periods=4, rand_seed=42, progress_bar=False) - >>> write_results(network=network, num_periods=4, columns_to_print='basic') - t i=0 IO:EXT OQ:EXT IS:EXT OS:EXT IL - --- ----- -------- -------- -------- -------- ---- - 0 12 12 0 12 1 - 1 6 6 12 6 7 - 2 11 11 6 11 2 - 3 14 14 11 13 -1 - -Interpreting the results: - - * In period 0, the node has an inbound order (``IO:EXT`` column), i.e., demand, of 12; it places an order - of size 12 (``OQ:EXT``), receives no inbound shipment (``IS:EXT``), and sends an outbound shipment of 12 (``IS:EXT``). It ends the period - with an inventory level of 1 (``IL``). (At the beginning of period 0, the inventory level was equal to the base-stock level, 13.) - * In period 1, the node has a demand of 6; it places an order of size 6; it receives the shipment of size 12 ordered in period 0; - it ships 6 units and ends with an inventory level of 7. - * A backorder occurs in period 3, because the node begins the period with an inventory level of 2, and receives a demand of 14, but - only receives a shipment of 11. - -(In the column headers, ``EXT`` refers to the external supplier and customer. For more details about the columns in the -output produced by :func:`~stockpyl.sim_io.write_results`, see the API documentation for the |mod_sim_io| module.) - -.. note:: :func:`~stockpyl.sim.simulation` fills the state variables—the results of the simulation— - directly into the |class_network| object that is passed in the ``network`` parameter. This object - can then be passed to :func:`~stockpyl.sim.write_results` to pretty-print the results. - - -Data Structures --------------------------------- - -The simulation code in |sp| makes use of the |class_network| and |class_node| classes, which contain all of -the data for the system to be simulated. - -.. admonition:: See Also - - For more information, - see the :ref:`tutorial page for multi-echelon inventory optimization (MEIO) `, or the - API pages for |class_network| or |class_node|. - - -Sequence of Events ------------------------- - -Simulations in |sp| assume periodic review. In each period :math:`t`, events occur in the following sequence *at each node* :math:`i`: - - 1. Inbound orders (i.e., demands) placed :math:`t-L^o_i` periods earlier are received from successor nodes and/or external customers, where :math:`L^o_i` - the order lead time for node :math:`i`. - 2. Outbound orders are placed to predecessor nodes and/or external suppliers. - 3. Inbound shipments sent :math:`t-L^s_i` periods ago are received from predecessor nodes and/or external suppliers, where - :math:`L^s_i` is the shipment lead time for node :math:`i`. - 4. Outbound shipments are sent to predecessor nodes and/or external suppliers. - 5. State variables are updated and costs are incurred. - -.. note:: This sequence of events (SoE) is somewhat atypical. It is more common to assume that orders are placed *before* demands - are observed (i.e., SoE steps 1 and 2 are swapped). See, for example, |fosct| §4.3 or Zipkin (2000) §9.3.1. However, - the two sequences can be made equivalent by adjusting the lead times; see the note in the Lead Times section [HYPERLINK]. - -In simulations of multi-echelon systems, the sequence of events *among nodes* is also important: - - * Sequence of events steps 1 and 2 first occur, one node at a time, from downstream to upstream: - - - Sink nodes (nodes with no successor nodes) receive - their inbound orders (SoE step 1), then they place outbound orders to their predecessors and/or external supplier (SoE step 2). - - Then those predecessors receive inbound orders and place outbound orders, and so on, moving upstream in the system until - all nodes have completed SoE steps 1 and 2. - - * Then, SoE steps 3 and 4 occur, one node at a time, from upstream to downstream: - - - Source nodes (nodes with no predecessor nodes) - receive their inbound shipments (SoE step 3), then they send outbound shipments to their successors and/or external - customer (SoE step 4). - - Then those successors receive inbound shipments and send outbound shipments, and so on, moving - downstream in the system until all nodes have completed SoE steps 3 and 4. - - * Then, SoE step 5 is completed for all nodes. - - -Lead Times ----------- - -Each node :math:`i` has both a *shipment lead time* (denoted :math:`L^s_i`) and an -*order lead time* (denoted :math:`L^o_i`). When node :math:`i` places an order, its predecessors and/or external suppliers -receive the order :math:`L^o_i` periods later. And when a node or an external supplier sends a shipment to node :math:`i`, -node :math:`i` receives it :math:`L^s_i` periods later. Shipment lead times are more commonly discussed in the literature, but order lead times -arise in, for example, papers on the bullwhip effect [REF]. - -The two types of lead times are equivalent if the supplier never runs -out of inventory (e.g., if it is an external supplier, or a predecessor node with a very large base-stock level), since -in that case orders are always shipped as soon as they are received, so the total time between the node placing and receiving -an order is always :math:`L^o_i + L^s_i`. - - -.. note:: A system with order lead time :math:`L^o_i` under the - "order-first" SoE (in which steps 1 and 2 are the reverse of those listed above) - is equivalent to a system with order lead time :math:`L^o_i+1` under the |sp| SoE. - - The SoE used in |sp| is more flexible, since it allows for the possibility that a node places its outbound order after it already - knows its demand. Under the "order-first" SoE, this would only be possible by setting :math:`L^o_i = -1`, which does not make sense. - -**Example:** Example 4.1 in |fosct| assumes a lead time of 0, but it also assumes the "order-first" sequence of events. -Therefore, to simulate this system in |sp|, we must set the order lead time (or, equivalentlly, the shipment lead time, since -the node's supplier never runs out of inventory): - - -.. testsetup:: * - - from stockpyl.supply_chain_network import single_stage_system - from stockpyl.sim import simulation - -.. doctest:: - - >>> network = single_stage_system( - ... holding_cost=0.18, - ... stockout_cost=0.70, - ... demand_type='N', - ... mean=50, - ... standard_deviation=8, - ... policy_type='BS', - ... base_stock_level=57, - ... order_lead_time=1 # to account for difference in SoE - ... ) - >>> T = 1000 - >>> total_cost = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) - >>> print(f"Total cost per period = {total_cost / T}") - Total cost per period = 1.9906261152138731 - -The total cost per period is very close to the value predicted by the theory (2.0000) in Example 4.1. - -**Example:** In Example 4.4 in |fosct|, the lead time is 4. To account for the difference in SoE, we set -the order lead time to 1 and the shipment lead time to 4. (Setting the shipment or order lead time to 5 -and the other to 0 would have the same effect.) - -.. testsetup:: * - - from stockpyl.supply_chain_network import single_stage_system - from stockpyl.sim import simulation - -.. doctest:: - - >>> network = single_stage_system( - ... holding_cost=0.18, - ... stockout_cost=0.70, - ... demand_type='N', - ... mean=50, - ... standard_deviation=8, - ... policy_type='BS', - ... base_stock_level=264.8, - ... shipment_lead_time=4, - ... order_lead_time=1 # to account for difference in SoE - ... ) - >>> T = 1000 - >>> total_cost = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) - >>> print(f"Total cost per period = {total_cost / T}") - Total cost per period = 4.475292852532866 - -Again this matches the cost of 4.47 predicted by the theory. - -Supply and Demand ------------------ - -External Customers -~~~~~~~~~~~~~~~~~~~~ -Any node can have an **external customer**—a customer that is not a node that is modeled explicitly -in the system. External customers are the only source of exogenous demand in the system. If there are -no external customers, there is no demand. A node can have both an external customer and one or -more successor nodes. - -To specify that a node has an external customer, set its ``demand_source`` attribute -to a |class_demand_source| object whose ``type`` attribute is not ``None``. The network-creation -functions in the |mod_supply_chain_network| module set this attribute for you at the relevant node(s), -or you can do it manually. - -External customers always have an order lead time of 0 and a shipment lead time of 0. - - -External Suppliers -~~~~~~~~~~~~~~~~~~~ -Any node can have an **external supplier**—a supplier that is not a node that is modeled explicitly -in the system. External suppliers are the only source of exogenous supply in the system. If there are -no external suppliers, there is no supply. A node can have both an external supplier and one or -more predecessor nodes. - -To specify that a node has an external supplier, set its ``supply_type`` attribute -to something other than ``None``. (See |class_node| for a list of valid supply types.) The network-creation -functions in |mod_supply_chain_network| module set this attribute for you at the relevant node(s), -or you can do it manually. - -External suppliers always have sufficient supply; they never have stockouts. - - -Inventory Policies ------------------- -Each node in the system must have an inventory policy, specified as a |class_policy| object. -Different nodes may have different types of policies. - -**Example:** Simulate a 2-stage serial system in which the upstream node (node 0) uses -an :math:`(r,Q)` policy with :math:`r=10` and :math:`Q=50`, and the downstream node (node 1) uses -a base-stock policy with :math:`S=50`. The demand has a Poisson distribution with mean 45. -Both nodes have a (shipment) lead time of 1. - -.. testsetup:: * - - from stockpyl.sim import simulation - -.. doctest:: - - >>> from stockpyl.supply_chain_network import serial_system - >>> network = serial_system( - ... num_nodes=2, - ... demand_type='P', - ... mean=45, - ... policy_type=['rQ', 'BS'], - ... reorder_point=[10, None], - ... order_quantity=[50, None], - ... base_stock_level=[None, 50], - ... shipment_lead_time=[1, 1] - ... ) - >>> _ = simulation(network=network, num_periods=4, rand_seed=42, progress_bar=False) - >>> write_results(network=network, num_periods=4, columns_to_print='basic') - t i=0 IO:1 OQ:EXT IS:EXT OS:1 IL i=1 IO:EXT OQ:0 IS:0 OS:EXT IL - --- ----- ------ -------- -------- ------ ---- ----- -------- ------ ------ -------- ---- - 0 42 50 0 42 8 42 42 0 42 8 - 1 50 50 50 50 8 50 50 42 50 0 - 2 37 0 50 37 21 37 37 50 37 13 - 3 47 50 0 21 -26 47 47 37 47 3 - - -Displaying the Results ----------------------- - -The :func:`~stockpyl.sim_io.write_results` function in the |mod_sim_io| module displays the results of -a simulation. It takes as input the |class_network| object that already has its state variables -filled by the simulation, and prints a table to the console and/or to a CSV file. The table lists the -values of the state variables for every node and every time period. All state variables refer to their values at the end of the period. - -The table has the following format: - - * Each row corresponds to a period in the simulation. - * Each node is represented by a group of columns. - * The columns for each node are as follows: - - - ``i=``: label for the column group - - ``DISR``: was the node disrupted in the period? (True/False) - - ``IO:s``: inbound order received from successor ``s`` - - ``IOPL:s``: inbound order pipeline from successor ``s``: a list of order - quantities arriving from succesor ``s`` in ``r`` periods from the - period, for ``r`` = 1, ..., ``order_lead_time`` - - ``OQ:p``: order quantity placed to predecessor ``p`` in the period - - ``OO:p``: on-order quantity (items that have been ordered from successor - ``p`` but not yet received) - - ``IS:p``: inbound shipment received from predecessor ``p`` - - ``ISPL:p``: inbound shipment pipeline from predecessor ``p``: a list of - shipment quantities arriving from predecessor ``p`` in ``r`` periods from - the period, for ``r`` = 1, ..., ``shipment_lead_time`` - - ``IDI:p``: inbound disrupted items: number of items from predecessor ``p`` - that cannot be received due to a type-RP disruption at the node - - ``RM:p``: number of items from predecessor ``p`` in raw-material inventory - at node - - ``OS:s``: outbound shipment to successor ``s`` - - ``DMFS``: demand met from stock at the node in the current period - - ``FR``: fill rate; cumulative from start of simulation to the current period - - ``IL``: inventory level (positive, negative, or zero) at node - - ``BO:s``: backorders owed to successor ``s`` - - ``ODI:s``: outbound disrupted items: number of items held for successor ``s`` due to - a type-SP disruption at ``s`` - - ``HC``: holding cost incurred at the node in the period - - ``SC``: stockout cost incurred at the node in the period - - ``ITHC``: in-transit holding cost incurred for items in transit to all successors - of the node - - ``REV``: revenue (**Note:** *not currently supported*) - - ``TC``: total cost incurred at the node (holding, stockout, and in-transit holding) - - * For state variables that are indexed by successor, if ``s`` = ``EXT``, the column - refers to the node's external customer - * For state variables that are indexed by predecessor, if ``p`` = ``EXT``, the column - refers to the node's external supplier - - -**Example:** Consider a 4-node system in which nodes 1 and 2 face external demand; node 3 has -an external supplier and serves nodes 1 and 2; and node 4 has an external customer and serves node 1. -Since node 1 has two predecessors (nodes 3 and 4), node 1 needs one unit from each predecessor in order -to make one unit of its own item. -Demands at nodes 1 and 2 have Poisson distributions with mean 10. The holding cost is 1 at nodes 3 and 4 -and 2 at nodes 1 and 2. The stockout cost is 10 at nodes 1 and 2. Node 1 has no order lead time and a -shipment lead time of 2. Node 2 has an order lead time of 1 and a shipment lead time of 1. Nodes 3 and for -each have a shipment lead time of 1. Each stage follows a base-stock policy, with base-stock levels of -12, 12, 20, 12 at nodes 1, ..., 4, respectively. The code below builds this network, simulates it for 10 periods, and -displays the results. - - .. code-block:: - - >>> from stockpyl.supply_chain_network import network_from_edges - >>> from stockpyl.sim import simulation - >>> from stockpyl.sim_io import write_results - >>> network = network_from_edges( - ... edges=[(3, 2), (3, 1), (4, 1)], - ... node_order_in_lists=[1, 2, 3, 4], - ... local_holding_cost=[2, 2, 1, 1], - ... stockout_cost=[10, 10, 0, 0], - ... order_lead_time=[0, 1, 0, 0], - ... shipment_lead_time=[2, 1, 0, 1], - ... demand_type=['P', 'P', None, None], - ... mean=[10, 10, None, None], - ... policy_type=['BS', 'BS', 'BS', 'BS'], - ... base_stock_level=[30, 25, 10, 10] - ... ) - >>> simulation(network=network, num_periods=10) - >>> write_results(network, num_periods=10) - -The results are shown in the table below. In period 0: - - * Node 1 has a demand of 13 (``IO:EXT`` column), - places orders to nodes 3 and 4 of size 13 each (``OQ:3`` and ``OQ:4`` columns), ships 13 units - to its customer (``OS:EXT``), and ends the period with an inventory level of 17 (``IL``), incurring - a holding cost (``HC``) and a total cost (``TC``) of 34. (Each node begins the - simulation with its inventory level equal to its base-stock level.) - * Node 2 has a demand of 9, places an order of size 9 to node 3, ships 9 units to its customer, - and ends the period with an inventory level of 16. - * Node 3 receives the order of 13 from node 1 (``IO:1`` = 13), but not the order from node 2 (``IO:2`` = 0) - since node 2 has an order lead time of 1. Node 2's order is in node 3's inbound order pipeline - (``IOPL:2``). Node 3 places an order of size 13 to its supplier (``OQ:EXT``) and receives it immediately - as an inbound shipment (``IS:EXT``) because its lead time is 0. It ships 13 units to node 1 (``OS:1``) but no units - to node 2 (``OS:2``) since it has not yet received an order from node 2. Its ending inventory level is 10. - * Node 4 receives the order of size 13 from node 1 (``IO:1``), places an order of size 13 to its supplier (``OQ:EXT``). - It does not receive the shipment yet since its shipment lead time is 1, but the shipment appears in its - inbound shipment pipeline (``ISPL:EXT``). It began the period with 10 units in inventory, so it ships those - 10 units to node 1 (``OS:1``), has 3 backorders for node 1 (``BO:1``), and ends with an inventory level of -3 (``IL``). - -In period 1: - - * Node 1 receives a demand of 10, orders 10 units from nodes 3 and 4, so it now has 23 units on order from each - predecessor (``OO:3`` and ``OO:4``). Node 3 shipped 13 units in period 0 and will ship 10 in period 1, so node 1's - inbound shipment pipeline from node 3 (``ISPL:3``) shows 13 units arriving in one period and 10 units arriving in two periods. - Node 4 shipped only 10 units in period 0 (because of its insufficient inventory) and 13 in period 1, which - is reflected in ``ISPL:4``. Node 1 ships 10 units to its supplier and ends the period with an inventory level of 7. - * Node 2 receives a demand of 9 again, places an order of size 9, ships 9 units to its customer, and ends - with an inventory level of 7. - * Node 3 receives an order of size 10 from node 1 (``IO:1``), which node 1 placed in period 0, and an order of size - 9 from node 2 (``IO:2``), which node 2 placed in period 1. It places an order of size 19, receives it immediately, - ships 10 units to node 1 and 9 to node 2, and ends with 10 units in inventory. - * Node 4 receives the order of size 10 from node 1 and places an order of size 10. It receives the order of 13 that - it placed to its supplier in node 0 (``IS:EXT``), ships 13 units to node 1 (3 of which were backorders from period 0 - and 10 of which are for the current demand), and ends with an inventory level of 0. - -And so on. Also worth noting is that in period 2, node 1 receives 13 units from node 3 and 10 from node 4. It needs one -unit from each predecessor to make one unit of its own finished product, so it can only make 10 such units, and -3 units of node 3's product remains in node 1's raw material inventory (``RM:3``). Node 1 began period 2 with an -inventory level of 7, received a demand of 9, and added 10 units to its finished goods inventory, so its ending -inventory level is 8 (``IL``). These 8 units incur a holding cost of 2 each; but the 3 units in raw material inventory -incur node 3's holding cost rate of 1 each. So, the total holding cost (``HC``) at node 1 is 19 in period 2. - - -.. csv-table:: Simulation Results - :file: ../aux_files/sim_io_example_instance.csv - :widths: auto - :header-rows: 1 - :stub-columns: 1 - -:download:`Download table in CSV format <../aux_files/sim_io_example_instance.csv>` - -You can control which rows and columns are printed using the ``periods_to_print`` and ``columns_to_print`` parameters, -respectively. The code below tells :func:`~stockpyl.sim_io.write_results` to print periods 3-8 and only the ``OQ``, ``IL``, and ``TC`` -columns: - - .. testsetup:: col_group - - from stockpyl.supply_chain_network import network_from_edges - from stockpyl.sim import simulation - from stockpyl.sim_io import write_results - network = network_from_edges( - edges=[(3, 2), (3, 1), (4, 1)], - node_order_in_lists=[1, 2, 3, 4], - local_holding_cost=[2, 2, 1, 1], - stockout_cost=[10, 10, 0, 0], - order_lead_time=[0, 1, 0, 0], - shipment_lead_time=[2, 1, 0, 1], - demand_type=['P', 'P', None, None], - mean=[10, 10, None, None], - policy_type=['BS', 'BS', 'BS', 'BS'], - base_stock_level=[30, 25, 10, 10] - ) - simulation(network=network, num_periods=10, rand_seed=40) - - .. doctest:: col_group - - >>> write_results( - ... network=network, - ... num_periods=10, - ... periods_to_print=list(range(3, 9)), - ... columns_to_print=['OQ', 'IL', 'TC'] - ... ) - t i=1 OQ:3 OQ:4 IL TC i=2 OQ:3 IL TC i=3 OQ:EXT IL TC i=4 OQ:EXT IL TC - --- ----- ------ ------ ---- ---- ----- ------ ---- ---- ----- -------- ---- ---- ----- -------- ---- ---- - 3 6 6 15 30 14 -2 20 19 10 38 6 4 19 - 4 11 11 13 26 14 -3 30 25 10 41 11 -1 16 - 5 11 11 8 16 9 2 4 25 10 46 11 -1 21 - 6 10 10 8 17 8 8 16 19 10 40 10 0 22 - 7 15 15 4 9 9 8 16 23 10 43 15 -5 21 - 8 17 17 -2 20 12 4 8 26 10 51 17 -7 25 - -Certain strings serve as shortcuts for groups of columns. (See the docstring for :func:`~stockpyl.sim_io.write_results` for a list -of allowable strings.) Shortcuts and column names can be combined in one list: - - .. testsetup:: col_group2 - - from stockpyl.supply_chain_network import network_from_edges - from stockpyl.sim import simulation - from stockpyl.sim_io import write_results - network = network_from_edges( - edges=[(3, 2), (3, 1), (4, 1)], - node_order_in_lists=[1, 2, 3, 4], - local_holding_cost=[2, 2, 1, 1], - stockout_cost=[10, 10, 0, 0], - order_lead_time=[0, 1, 0, 0], - shipment_lead_time=[2, 1, 0, 1], - demand_type=['P', 'P', None, None], - mean=[10, 10, None, None], - policy_type=['BS', 'BS', 'BS', 'BS'], - base_stock_level=[30, 25, 10, 10] - ) - simulation(network=network, num_periods=10, rand_seed=40) - - .. doctest:: col_group2 - - >>> write_results( - ... network=network, - ... num_periods=10, - ... periods_to_print=list(range(3, 9)), - ... columns_to_print=['OQ', 'IL', 'costs'] - ... ) - t i=1 OQ:3 OQ:4 IL HC SC TC i=2 OQ:3 IL HC SC TC i=3 OQ:EXT IL HC SC TC i=4 OQ:EXT IL HC SC TC - --- ----- ------ ------ ---- ---- ---- ---- ----- ------ ---- ---- ---- ---- ----- -------- ---- ---- ---- ---- ----- -------- ---- ---- ---- ---- - 3 6 6 15 30 0 30 14 -2 0 20 20 19 10 10 0 38 6 4 4 0 19 - 4 11 11 13 26 0 26 14 -3 0 30 30 25 10 10 0 41 11 -1 0 0 16 - 5 11 11 8 16 0 16 9 2 4 0 4 25 10 10 0 46 11 -1 0 0 21 - 6 10 10 8 17 0 17 8 8 16 0 16 19 10 10 0 40 10 0 0 0 22 - 7 15 15 4 9 0 9 9 8 16 0 16 23 10 10 0 43 15 -5 0 0 21 - 8 17 17 -2 0 20 20 12 4 8 0 8 26 10 10 0 51 17 -7 0 0 25 - - - - -Advanced Features ------------------ - -Supply Disruptions -~~~~~~~~~~~~~~~~~~ - -|sp| can simulate supply disruptions, typically generated by a 2-state Markov process. -To specify that a node is subject to disruptions, set its ``disruption_process`` attribute -to a |class_disruption_process| object whose ``random_process_type`` attribute is not ``None``. - -**Example::** The following code simulates the instance in Example 9.3, in which the demand -is deterministic at 2000 per period and disruptions follow a 2-state Markov process with -disruption probability 0.04 and recovery probability 0.25: - -.. testsetup:: * - - from stockpyl.supply_chain_network import single_stage_system - from stockpyl.sim import simulation - -.. doctest:: - - >>> from stockpyl.disruption_process import DisruptionProcess - >>> network = single_stage_system( - ... holding_cost=0.25, - ... stockout_cost=3, - ... demand_type='D', # deterministic demand - ... demand_list=2000, - ... disruption_process=DisruptionProcess(random_process_type='M', disruption_probability=0.04, recovery_probability=0.25), - ... policy_type='BS', - ... base_stock_level=8000 - ... ) - >>> T = 10000 - >>> total_cost = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) - >>> print(f"Total cost per period = {total_cost / T}") - Total cost per period = 2831.9 - - -|sp| supports four types of disruptions, which differ by how the system "pauses" when a disruption occurs: - - * ``'OP'`` (order-pausing: the stage cannot place orders during disruptions) (default) - * ``'SP'`` (shipment-pausing: the stage can place orders during disruptions but its supplier(s) cannot ship them) - * ``'TP'`` (transit-pausing: items in transit to the stage are paused during disruptions) - * ``'RP'`` (receipt-pausing: items cannot be received by the disrupted stage; they accumulate - just before the stage and are received when the disruption ends) - - -**Example:** The code below simulates a 2-node serial system in which the downstream node (node 2) is subject to -disruptions. First, type-OP disruptions: - -.. doctest:: - - >>> network = serial_system( - ... num_nodes=2, - ... node_order_in_system=[1, 2], - ... shipment_lead_time=1, - ... demand_type='P', - ... mean=20, - ... policy_type='BS', - ... base_stock_level=[25, 25] - ... ) - >>> network.get_node_from_index(2).disruption_process = DisruptionProcess( - ... random_process_type='M', - ... disruption_type='OP', - ... disruption_probability=0.1, - ... recovery_probability=0.4 - ... ) - >>> T = 100 - >>> _ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) - >>> write_results(network=network, num_periods=T, periods_to_print=list(range(7, 16)), columns_to_print=['DISR', 'IO', 'OQ', 'IS', 'OS', 'IL']) - t i=1 DISR IO:2 OQ:EXT IS:EXT OS:2 IL i=2 DISR IO:EXT OQ:1 IS:1 OS:EXT IL - --- ----- ------ ------ -------- -------- ------ ---- ----- ------ -------- ------ ------ -------- ---- - 7 False 19 19 14 19 6 False 19 19 14 19 6 - 8 False 20 20 19 20 5 False 20 20 19 20 5 - 9 False 0 0 20 0 25 True 21 0 20 21 4 - 10 False 0 0 0 0 25 True 24 0 0 4 -20 - 11 False 0 0 0 0 25 True 22 0 0 0 -42 - 12 False 0 0 0 0 25 True 20 0 0 0 -62 - 13 False 104 104 0 25 -79 False 17 104 0 0 -79 - 14 False 20 20 104 99 5 False 20 20 25 25 -74 - 15 False 21 21 20 21 4 False 21 21 99 95 4 - -Node 2 is disrupted starting in period 9 (``DISR`` column). Since these are order-pausing disruptions, the node cannot place orders, so its -order quantity for orders to node 1 (``OQ:1``) is 0, starting in period 9 and continuing until the disruption ends in period 13, -at which point a large order is placed. At first, that order is mostly backordered upstream at node 1, since node 1 was not aware of the -upcoming large order. - -Next, type-SP disruptions: - -.. doctest:: - - >>> network.get_node_from_index(2).disruption_process.disruption_type='SP' - >>> _ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) - >>> write_results(network=network, num_periods=T, periods_to_print=list(range(7, 16)), columns_to_print=['DISR', 'IO', 'OQ', 'IS', 'OS', 'IL', 'ODI']) - t i=1 DISR IO:2 OQ:EXT IS:EXT OS:2 IL ODI:2 i=2 DISR IO:EXT OQ:1 IS:1 OS:EXT IL ODI:EXT - --- ----- ------ ------ -------- -------- ------ ---- ------- ----- ------ -------- ------ ------ -------- ---- --------- - 7 False 19 19 14 19 6 0 False 19 19 14 19 6 0 - 8 False 20 20 19 20 5 0 False 20 20 19 20 5 0 - 9 False 21 21 20 0 4 21 True 21 21 20 21 4 0 - 10 False 24 24 21 0 1 45 True 24 24 0 4 -20 0 - 11 False 22 22 24 0 3 67 True 22 22 0 0 -42 0 - 12 False 20 20 22 0 5 87 True 20 20 0 0 -62 0 - 13 False 17 17 20 104 8 0 False 17 17 0 0 -79 0 - 14 False 20 20 17 20 5 0 False 20 20 104 99 5 0 - 15 False 21 21 20 21 4 0 False 21 21 20 21 4 0 - -In this case, node 2 can still place orders during the disruption, but node 1 cannot ship them. Instead, the items are moved to -node 1's "outbound disrupted items" category (``ODI:2``). When the disruption ends in period 13, node 1 ships those accumulated items (``OS:2``). - -Next, type-TP disruptions: - -.. doctest:: - - >>> network.get_node_from_index(2).disruption_process.disruption_type='TP' - >>> _ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) - >>> write_results(network=network, num_periods=T, periods_to_print=list(range(7, 16)), columns_to_print=['DISR', 'IO', 'OQ', 'IS', 'ISPL', 'OS', 'IL']) - t i=1 DISR IO:2 OQ:EXT IS:EXT ISPL:EXT OS:2 IL i=2 DISR IO:EXT OQ:1 IS:1 ISPL:1 OS:EXT IL - --- ----- ------ ------ -------- -------- ---------- ------ ---- ----- ------ -------- ------ ------ -------- -------- ---- - 7 False 19 19 14 [19.0] 19 6 False 19 19 14 [19.0] 19 6 - 8 False 20 20 19 [20.0] 20 5 False 20 20 19 [20.0] 20 5 - 9 False 21 21 20 [21.0] 21 4 True 21 21 20 [21.0] 21 4 - 10 False 24 24 21 [24.0] 24 1 True 24 24 0 [45.0] 4 -20 - 11 False 22 22 24 [22.0] 22 3 True 22 22 0 [67.0] 0 -42 - 12 False 20 20 22 [20.0] 20 5 True 20 20 0 [87.0] 0 -62 - 13 False 17 17 20 [17.0] 17 8 False 17 17 0 [104.0] 0 -79 - 14 False 20 20 17 [20.0] 20 5 False 20 20 104 [20.0] 99 5 - 15 False 21 21 20 [21.0] 21 4 False 21 21 20 [21.0] 21 4 - -The disruption means that items in transit to node 2 are paused. This is evident from the inbound shipment pipeline at node 2 from node 1 (``ISPL:1``), -which increases as the disruption continues and then is cleared when the disruption ends. - -Finally, type-RP disruptions: - -.. doctest:: - - >>> network.get_node_from_index(2).disruption_process.disruption_type='RP' - >>> _ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) - >>> write_results(network=network, num_periods=T, periods_to_print=list(range(7, 16)), columns_to_print=['DISR', 'IO', 'OQ', 'IS', 'OS', 'IL', 'ISPL', 'IDI']) - t i=1 DISR IO:2 OQ:EXT IS:EXT ISPL:EXT IDI:EXT OS:2 IL i=2 DISR IO:EXT OQ:1 IS:1 ISPL:1 IDI:1 OS:EXT IL - --- ----- ------ ------ -------- -------- ---------- --------- ------ ---- ----- ------ -------- ------ ------ -------- ------- -------- ---- - 7 False 19 19 14 [19.0] 0 19 6 False 19 19 14 [19.0] 0 19 6 - 8 False 20 20 19 [20.0] 0 20 5 False 20 20 19 [20.0] 0 20 5 - 9 False 21 21 20 [21.0] 0 21 4 True 21 21 0 [21.0] 20 5 -16 - 10 False 24 24 21 [24.0] 0 24 1 True 24 24 0 [24.0] 41 0 -40 - 11 False 22 22 24 [22.0] 0 22 3 True 22 22 0 [22.0] 65 0 -62 - 12 False 20 20 22 [20.0] 0 20 5 True 20 20 0 [20.0] 87 0 -82 - 13 False 17 17 20 [17.0] 0 17 8 False 17 17 107 [17.0] 0 99 8 - 14 False 20 20 17 [20.0] 0 20 5 False 20 20 17 [20.0] 0 20 5 - 15 False 21 21 20 [21.0] 0 21 4 False 21 21 20 [21.0] 0 21 4 - -In this case, the disruptions prevent node 2 from receiving items. During the disruption, items that would otherwise have been -received by node 2 from node 1 are instead moved to node 2's "inbound disrupted items" category (``IDI:1``). They remain there -until the disruption ends, at which point they are included in the node's inbound shipment (``IS:1``). - -Converting from Continuous Review -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A continuous-review system can often be approximated by a periodic-review system in |sp|. The sequence of events [HYPERLINK] -used by |sp| means that the lead times in the continuous-review system should be kept the same when modeling -as a periodic-review system in |sp|. - -**Example:** Example 6.1 consists of a 3-node serial system with downstream node 1. The code below simulates this sytem -in |sp|. Note that the average cost per period reported by the simulation is close to the expected cost of 47.65 predicted by the theory. - -.. testsetup:: * - - from stockpyl.sim import simulation - from stockpyl.supply_chain_network import serial_system - -.. doctest:: - - >>> network = serial_system( - ... num_nodes=3, - ... node_order_in_system=[3, 2, 1], - ... local_holding_cost={1: 7, 2: 4, 3: 2}, - ... shipment_lead_time={1: 1, 2: 1, 3: 2}, - ... stockout_cost=37.12, - ... demand_type='N', - ... mean=5, - ... standard_deviation=1, - ... policy_type='EBS', # echelon base-stock policy - ... base_stock_level={1: 6.49, 2: 12.02, 3: 22.71} - ... ) - >>> T = 1000 - >>> total_cost = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) - >>> print(f"Total cost per period = {total_cost / T}") - Total cost per period = 47.259837154163556 - - - -Holding and Stockout Cost Functions -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -As an alternative to using linear holding and stockout cost functions using coefficients that you provide, -|sp| allows you to provide arbitrary functions that are used to calculate the holding and stockout costs -based on the current inventory level. The functions can be standalone functions or lambda functions. - -**Example:** Simulate a single-stage system with Poisson(15) demand, a base-stock level of 17, and -holding and stockout cost functions given by - -.. math:: - - h(x) = 0.5(x^+)^2 - - p(x) = 10\sqrt{x^+}, - -where :math:`a^+ \equiv \max\{a,0\}` and :math:`x` is the inventory level (so :math:`x^+` is the on-hand inventory -and :math:`(-x)^+` is the backorders). - -.. doctest:: - - >>> from stockpyl.supply_chain_network import single_stage_system - >>> from stockpyl.sim import simulation - >>> from stockpyl.sim_io import write_results - >>> import math - >>> def holding_cost(x): - ... return 0.5 * max(x, 0)**2 - >>> network = single_stage_system( - ... local_holding_cost_function=holding_cost, - ... stockout_cost_function=lambda x: 10 * math.sqrt(max(-x, 0)), - ... demand_type='P', - ... mean=15, - ... policy_type='BS', - ... base_stock_level=17, - ... lead_time=1 - ... ) - >>> T = 100 - >>> _ = simulation(network=network, num_periods=T, rand_seed=42, progress_bar=False) - >>> write_results(network=network, num_periods=T, periods_to_print=list(range(6)), columns_to_print=['basic', 'costs']) - t i=0 IO:EXT OQ:EXT IS:EXT OS:EXT IL HC SC TC - --- ----- -------- -------- -------- -------- ---- ---- ------- ------- - 0 18 18 0 17 -1 0 10 10 - 1 10 10 18 11 7 24.5 0 24.5 - 2 16 16 10 16 1 0.5 0 0.5 - 3 19 19 16 17 -2 0 14.1421 14.1421 - 4 11 11 19 13 6 18 0 18 - 5 13 13 11 13 4 8 0 8 - - - - - -Running Multiple Trials -~~~~~~~~~~~~~~~~~~~~~~~ - -The :func:`~stockpyl.sim.run_multiple_trials` function will run the simulation multiple for multiple trials. For each trial, -the function calculates the average cost per period; it then returns the mean and standard error of the mean (SEM) -of the average costs. An :math:`\\alpha`-confidence interval can be constructed using -``mean_cost`` :math:`\\pm z_{1-(1-\\alpha)/2} \\times` ``sem_cost``. -This is useful for, e.g., comparing two systems to see whether their costs are statistically different -according to the simulation. - -**Example:** Optimize the serial system in Example 6.1 of |fosct| using both the exact algorithm by Chen and Zheng (1994) and -the newsvendor heuristic by Shang and Song (2003). Simulate both solutions for 10 trials, 1000 periods per trial, and -determine whether the heuristic solution is statistically worse than the optimal solution. - -.. doctest:: - - >>> from stockpyl.ssm_serial import optimize_base_stock_levels, newsvendor_heuristic - >>> from stockpyl.supply_chain_network import echelon_to_local_base_stock_levels - >>> from stockpyl.sim import run_multiple_trials - >>> from stockpyl.instances import load_instance - >>> # Load network. - >>> network = load_instance("example_6_1") - >>> # Set base-stock levels according to optimal solution. - >>> S_opt, _ = optimize_base_stock_levels(network=network) - >>> S_opt_local = echelon_to_local_base_stock_levels(network, S_opt) - >>> for n in network.nodes: - ... n.inventory_policy.base_stock_level = S_opt_local[n.index] - >>> mean_opt, sem_opt = run_multiple_trials(network=network, num_trials=10, num_periods=1000, rand_seed=42, progress_bar=False) - >>> print(f"Optimal solution has simulated average cost per period with mean {mean_opt} and SEM {sem_opt}") - Optimal solution has simulated average cost per period with mean 47.78528000921442 and SEM 0.26119040852187103 - >>> # Set base-stock levels according to heuristic solution. - >>> S_heur = newsvendor_heuristic(network=network) - >>> S_heur_local = echelon_to_local_base_stock_levels(network, S_heur) - >>> for n in network.nodes: - ... n.inventory_policy.base_stock_level = S_heur_local[n.index] - >>> mean_heur, sem_heur = run_multiple_trials(network=network, num_trials=10, num_periods=1000, rand_seed=42, progress_bar=False) - >>> print(f"Heuristic solution has simulated average cost per period with mean {mean_heur} and SEM {sem_heur}") - Heuristic solution has simulated average cost per period with mean 47.789138050714946 and SEM 0.27039814681794644 - >>> ## Calculate confidence intervals. - >>> from scipy.stats import norm - >>> z = norm.ppf(1 - (1 - 0.95)/2) - >>> lo_opt, hi_opt = mean_opt - z * sem_opt, mean_opt + z * sem_opt - >>> lo_heur, hi_heur = mean_heur - z * sem_heur, mean_heur + z * sem_heur - >>> print(f"Optimal solution CI = [{lo_opt}, {hi_opt}], heuristic solution CI = [{lo_heur}, {hi_heur}]") - Optimal solution CI = [47.27335621540425, 48.29720380302459], heuristic solution CI = [47.2591674214654, 48.31910867996449] - -Because the two confidence intervals overlap, we cannot say that the two solutions have statistically different -average costs. (Of course, the theory tells us that the true expected costs for the two solutions are different.) - - -References ----------- - -F. Chen and Y. S. Zheng. Lower bounds for multiechelon stochastic inventory systems. *Management Science*, 40(11):1426–1443, 1994. - -K. H. Shang and J.-S. Song. Newsvendor bounds and heuristic for optimal policies in serial supply chains. *Management Science*, 49(5):618-638, 2003. - -P. H. Zipkin, *Foundations of Inventory Management*, Irwin/McGraw-Hill (2000). - - diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index d02e8ef..2eab8dc 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -15,7 +15,7 @@ For an overview of simulation in |sp|, see the :ref:`tutorial page for simulation` and - the :ref:`tutorial page for multi-product simulation<_tutorial_multiproduct_sim_page>`. + the :ref:`tutorial page for multi-product simulation`. API Reference diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index f42d9f0..b428604 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -46,7 +46,7 @@ .. admonition:: See Also For more information about creating and managing products, and simulating multi-product systems in |sp|, - see the :ref:`tutorial page for multi-product simulation<_tutorial_multiproduct_sim_page>`. + see the :ref:`tutorial page for multi-product simulation`. From fde9028651863413beeac12d25d10259298f0337 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 14:46:07 -0400 Subject: [PATCH 68/94] Trying to get the cross ref to new multiproduct sim tutorial right --- docs/tutorial/tutorial_multiproduct_sim.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index cb4cf9a..017e9ef 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -1,6 +1,6 @@ .. include:: ../globals.inc -.. tutorial_multiproduct_sim_page: +.. _tutorial_multiproduct_sim_page: Multi-Product Simulation ======================== From 4b4d362e6506461946440f432a5c94fa292ae25c Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 14:59:11 -0400 Subject: [PATCH 69/94] Add figure --- docs/tutorial/tutorial_multiproduct_sim.rst | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 017e9ef..9e59862 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -55,7 +55,24 @@ Basic Multi-Product Example This tutorial will use the following network: -![3-node diagram](https://github.com/LarrySnyder/stockpyl-testing/blob/main/intro_to_products_diagram.png) +.. image:: https://github.com/LarrySnyder/stockpyl-testing/blob/main/intro_to_products_diagram.png + :scale: 100 % + :alt: 3-node network diagram + :align: center + +In the diagram: + + * The squares represent nodes. The number in the top-left corner of a node is its index. + * The circles represent products. The number in a product is its index. + * The lines from products 20 and 30 to product 10 indicate that products 20 and 30 are + raw materials that are used to make product 10. To make 1 unit of product 10 requires + 5 units of product 20 and 2 units of product 30, as indicated by `x5` and `x3` on the lines. + * The arrow from node 2 to node 1 indicates that node 2 ships items to node 1. The lead + time for these shipments is 1 period, as indicated by `L=1` on the arrow. + * The arrow from node 1 represents the external demand, which follows a uniform discrete + distribution on [1,5]. + * The arrow into node 2 represents the external supplier. The lead time for shipments + from the external supplier is 2 periods, as indicated by `L=2` on the arrow. We'll start building this network using the :func:`~stockpyl.supply_chain_network.serial_system` function: From b22a13962393d8d913d81f9362250cdd44f49c50 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 15:23:15 -0400 Subject: [PATCH 70/94] Debugging image --- docs/tutorial/tutorial_multiproduct_sim.rst | 27 ++++++++++++++++----- src/stockpyl/supply_chain_network.py | 6 ----- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 9e59862..bed608e 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -55,7 +55,7 @@ Basic Multi-Product Example This tutorial will use the following network: -.. image:: https://github.com/LarrySnyder/stockpyl-testing/blob/main/intro_to_products_diagram.png +.. image:: https://raw.githubusercontent.com/LarrySnyder/stockpyl-testing/ac4f0ca30993c53f5e53743a77f4f2d7ae55d05e/intro_to_products_diagram.png :scale: 100 % :alt: 3-node network diagram :align: center @@ -76,12 +76,9 @@ In the diagram: We'll start building this network using the :func:`~stockpyl.supply_chain_network.serial_system` function: -.. testsetup:: * - - from stockpyl.supply_chain_network import serial_system - .. doctest:: + >>> from stockpyl.supply_chain_network import serial_system >>> network = serial_system( ... num_nodes=2, ... node_order_in_system=[2, 1], @@ -93,5 +90,23 @@ We'll start building this network using the :func:`~stockpyl.supply_chain_networ ... hi=5, ... shipment_lead_time=[1, 2] ... ) + >>> # Build a dict for easier access to the nodes. + >>> nodes = {n.index: n for n in network.nodes} + +Next, we'll create the three products and add them to a dict whose keys are product indices +and whose values are products, for easy access to the product objects. We'll also set the BOM. + +.. doctest:: + + >>> from stockpyl.supply_chain_product import SupplyChainProduct + >>> products = {10: SupplyChainProduct(index=10), 20: SupplyChainProduct(index=20), 30: SupplyChainProduct(index=30)} + >>> products[10].set_bill_of_materials(raw_material=20, num_needed=5) + >>> products[10].set_bill_of_materials(raw_material=30, num_needed=3) + +To add the products to the nodes, we use :meth:`~stockpyl.supply_chain_network.SupplyChainProduct.add_product` and +:meth:`~stockpyl.supply_chain_network.SupplyChainProduct.add_products`: + +.. doctest:: -Next, we'll create three products, w \ No newline at end of file + >>> nodes[1].add_product(products[10]) + >>> nodes[2].add_products([products[20], products[30]]) diff --git a/src/stockpyl/supply_chain_network.py b/src/stockpyl/supply_chain_network.py index ccd783f..4912163 100644 --- a/src/stockpyl/supply_chain_network.py +++ b/src/stockpyl/supply_chain_network.py @@ -1272,12 +1272,6 @@ def serial_system(num_nodes, node_order_in_system=None, node_order_in_lists=None >>> network.nodes[0].stockout_cost 0.7 - - return network_from_edges( - edges=[], - node_order_in_lists=[index], - **kwargs - ) """ # (Exception: ``demand_list`` and ``probabilities`` attributes of |class_demand_source| may be From daa70b06ea55a07fa358b689189e7877a16e6734 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 15:32:17 -0400 Subject: [PATCH 71/94] Debug hyperlinks --- docs/tutorial/tutorial_multiproduct_sim.rst | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index bed608e..f3a16cd 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -65,14 +65,14 @@ In the diagram: * The squares represent nodes. The number in the top-left corner of a node is its index. * The circles represent products. The number in a product is its index. * The lines from products 20 and 30 to product 10 indicate that products 20 and 30 are - raw materials that are used to make product 10. To make 1 unit of product 10 requires - 5 units of product 20 and 2 units of product 30, as indicated by `x5` and `x3` on the lines. + raw materials that are used to make product 10. To make 1 unit of product 10 requires + 5 units of product 20 and 2 units of product 30, as indicated by `x5` and `x3` on the lines. * The arrow from node 2 to node 1 indicates that node 2 ships items to node 1. The lead - time for these shipments is 1 period, as indicated by `L=1` on the arrow. + time for these shipments is 1 period, as indicated by `L=1` on the arrow. * The arrow from node 1 represents the external demand, which follows a uniform discrete - distribution on [1,5]. + distribution on [1,5]. * The arrow into node 2 represents the external supplier. The lead time for shipments - from the external supplier is 2 periods, as indicated by `L=2` on the arrow. + from the external supplier is 2 periods, as indicated by `L=2` on the arrow. We'll start building this network using the :func:`~stockpyl.supply_chain_network.serial_system` function: @@ -103,10 +103,16 @@ and whose values are products, for easy access to the product objects. We'll als >>> products[10].set_bill_of_materials(raw_material=20, num_needed=5) >>> products[10].set_bill_of_materials(raw_material=30, num_needed=3) -To add the products to the nodes, we use :meth:`~stockpyl.supply_chain_network.SupplyChainProduct.add_product` and -:meth:`~stockpyl.supply_chain_network.SupplyChainProduct.add_products`: +To add the products to the nodes, we use :py:meth:`~stockpyl.supply_chain_network.SupplyChainProduct.add_product` and +:py:meth:`~stockpyl.supply_chain_network.SupplyChainProduct.add_products`: .. doctest:: >>> nodes[1].add_product(products[10]) >>> nodes[2].add_products([products[20], products[30]]) + + +Specifying Attributes +--------------------------- + +Most attributes that apply to nodes also apply to products. For example, \ No newline at end of file From 24755359c1b157f79d445f4688614f5e4840f24c Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 15:38:06 -0400 Subject: [PATCH 72/94] Still debugging hyperlinks --- docs/tutorial/tutorial_multiproduct_sim.rst | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index f3a16cd..f5ebb23 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -27,7 +27,7 @@ Products The primary class for handling products is the |class_product|. A |class_product| object is typically added to one or more |class_node| objects; those nodes are then said to -"handle" the product. Most attributes (``echelon_holding_cost``, ``lead_time``, ``stockout_cost``, +"handle" the product. Most attributes (``local_holding_cost``, ``lead_time``, ``stockout_cost``, ``demand_source``, ``inventory_policy``, etc.) may be specified either at the node level (same value for all products at the node), at the product level (same value for all nodes that handle the product), or at the node-product level (separate value for the node-product pair). @@ -103,8 +103,8 @@ and whose values are products, for easy access to the product objects. We'll als >>> products[10].set_bill_of_materials(raw_material=20, num_needed=5) >>> products[10].set_bill_of_materials(raw_material=30, num_needed=3) -To add the products to the nodes, we use :py:meth:`~stockpyl.supply_chain_network.SupplyChainProduct.add_product` and -:py:meth:`~stockpyl.supply_chain_network.SupplyChainProduct.add_products`: +To add the products to the nodes, we use :meth:`~supply_chain_network.SupplyChainProduct.add_product` and +:meth:`stockpyl.supply_chain_network.SupplyChainProduct.add_products`: .. doctest:: @@ -115,4 +115,8 @@ To add the products to the nodes, we use :py:meth:`~stockpyl.supply_chain_networ Specifying Attributes --------------------------- -Most attributes that apply to nodes also apply to products. For example, \ No newline at end of file +Most attributes that apply to nodes (``local_holding_cost``, ``lead_time``, ``stockout_cost``, +``demand_source``, ``inventory_policy``, etc.) also apply to products. There are three was +to specify attributes: + + * From e3bc455387cc263cea1bcef2a926e995d323c80b Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 15:43:43 -0400 Subject: [PATCH 73/94] More link debugging --- docs/tutorial/tutorial_multiproduct_sim.rst | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index f5ebb23..65db9cb 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -27,7 +27,7 @@ Products The primary class for handling products is the |class_product|. A |class_product| object is typically added to one or more |class_node| objects; those nodes are then said to -"handle" the product. Most attributes (``local_holding_cost``, ``lead_time``, ``stockout_cost``, +"handle" the product. Most attributes (``local_holding_cost``, ``stockout_cost``, ``demand_source``, ``inventory_policy``, etc.) may be specified either at the node level (same value for all products at the node), at the product level (same value for all nodes that handle the product), or at the node-product level (separate value for the node-product pair). @@ -85,7 +85,7 @@ We'll start building this network using the :func:`~stockpyl.supply_chain_networ ... node_order_in_lists=[1, 2], ... local_holding_cost=[5, None], # holding cost at node 2 will be product-specific, so leave it unspecified here ... stockout_cost=[20, 0], - ... demand_type='UD', # discrete uniform distribution, for easier debugging + ... demand_type='UD', # discrete uniform distribution, for easier debugging ... lo=1, ... hi=5, ... shipment_lead_time=[1, 2] @@ -103,8 +103,8 @@ and whose values are products, for easy access to the product objects. We'll als >>> products[10].set_bill_of_materials(raw_material=20, num_needed=5) >>> products[10].set_bill_of_materials(raw_material=30, num_needed=3) -To add the products to the nodes, we use :meth:`~supply_chain_network.SupplyChainProduct.add_product` and -:meth:`stockpyl.supply_chain_network.SupplyChainProduct.add_products`: +To add the products to the nodes, we use :meth:`~supply_chain_node.SupplyChainNode.add_product` and +:meth:`~stockpyl.supply_chain_node.SupplyChainNode.add_products`: .. doctest:: @@ -115,8 +115,12 @@ To add the products to the nodes, we use :meth:`~supply_chain_network.SupplyChai Specifying Attributes --------------------------- -Most attributes that apply to nodes (``local_holding_cost``, ``lead_time``, ``stockout_cost``, +Most attributes that apply to nodes (``local_holding_cost``, ``stockout_cost``, ``demand_source``, ``inventory_policy``, etc.) also apply to products. There are three was to specify attributes: - * + * By setting it at a node, e.g., `my_node.stockout_cost = 50` + * By setting it at a product, e.g., `my_product.stockout_cost = 50` + * By setting the attribute at the node to a dict whose keys are product indices + and whose values are the attribute values; this allows you to set (node, product)-specific + values of the attribute From e4e2e564a658688dfeb6441564c43e1502ba9c06 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 18:40:25 -0400 Subject: [PATCH 74/94] Testing hyperlink to section --- docs/tutorial/tutorial_multiproduct_sim.rst | 119 ++++++++++++++++++-- 1 file changed, 111 insertions(+), 8 deletions(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 65db9cb..2190da1 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -74,7 +74,7 @@ In the diagram: * The arrow into node 2 represents the external supplier. The lead time for shipments from the external supplier is 2 periods, as indicated by `L=2` on the arrow. -We'll start building this network using the :func:`~stockpyl.supply_chain_network.serial_system` function: +We'll start building this network using the :func:`~stockpyl.supply_chain_network.serial_system` method: .. doctest:: @@ -83,9 +83,8 @@ We'll start building this network using the :func:`~stockpyl.supply_chain_networ ... num_nodes=2, ... node_order_in_system=[2, 1], ... node_order_in_lists=[1, 2], - ... local_holding_cost=[5, None], # holding cost at node 2 will be product-specific, so leave it unspecified here ... stockout_cost=[20, 0], - ... demand_type='UD', # discrete uniform distribution, for easier debugging + ... demand_type='UD', ... lo=1, ... hi=5, ... shipment_lead_time=[1, 2] @@ -103,7 +102,7 @@ and whose values are products, for easy access to the product objects. We'll als >>> products[10].set_bill_of_materials(raw_material=20, num_needed=5) >>> products[10].set_bill_of_materials(raw_material=30, num_needed=3) -To add the products to the nodes, we use :meth:`~supply_chain_node.SupplyChainNode.add_product` and +To add the products to the nodes, we use :meth:`~stockpyl.supply_chain_node.SupplyChainNode.add_product` and :meth:`~stockpyl.supply_chain_node.SupplyChainNode.add_products`: .. doctest:: @@ -112,15 +111,119 @@ To add the products to the nodes, we use :meth:`~supply_chain_node.SupplyChainNo >>> nodes[2].add_products([products[20], products[30]]) -Specifying Attributes +Assigned Attributes --------------------------- Most attributes that apply to nodes (``local_holding_cost``, ``stockout_cost``, ``demand_source``, ``inventory_policy``, etc.) also apply to products. There are three was -to specify attributes: +to assign attributes: - * By setting it at a node, e.g., `my_node.stockout_cost = 50` - * By setting it at a product, e.g., `my_product.stockout_cost = 50` + * By setting it at a node, e.g., ``my_node.stockout_cost = 50`` + * By setting it at a product, e.g., ``my_product.stockout_cost = 50`` * By setting the attribute at the node to a dict whose keys are product indices and whose values are the attribute values; this allows you to set (node, product)-specific values of the attribute + +In our example network, since node 1 only handles one product (product 10), we can set +``local_holding_cost`` directly at node 1. We'll set ``local_holding_cost`` for products +20 and 30 in the product objects. + +.. doctest:: + + >>> nodes[1].local_holding_cost = 5 + >>> products[20].local_holding_cost = 2 + >>> products[30].local_holding_cost = 3 + +We need an inventory policy for each product. This attribute, too, can be set at the +node, product, or (node, product) levels. We'll set the policy for product 10 in the +product object (we could instead set it at node 1). And we'll set the policy for +products 20 and 30 using a dict at node 2: + +.. doctest:: + + >>> from stockpyl.policy import Policy + >>> products[10].inventory_policy = Policy(type='BS', base_stock_level=6, node=nodes[1], product=products[10]) + >>> nodes[2].inventory_policy = { + ... 20: Policy(type='BS', base_stock_level=35, node=nodes[2], product=products[20]), + ... 30: Policy(type='BS', base_stock_level=20, node=nodes[2], product=products[30]) + ... } + + +Accessing Attributes +-------------------- + +It is possible to access attributes in the same way they were assigned: + +.. doctest:: + + >>> nodes[1].local_holding_cost + 5 + >>> products[20].local_holding_cost + 2 + >>> products[30].local_holding_cost + 3 + >>> products[10].inventory_policy + Policy(BS: base_stock_level=6.00) + >>> nodes[2].inventory_policy[20] + Policy(BS: base_stock_level=35.00) + +But it can be annoying to access them this way, because you need to know +whether the attribute was originally assigned to the node, to the product, +or to the node as a dict. + +Instead, use the :meth:`~stockpyl.supply_chain_node.SupplyChainNode.get_attribute` method, +which figures out where the attribute is set and returns the appropriate value. In particular, +the method attempts to access the attribute in the following order: + + * As a dict in the node object (meaning there is a (node, product)-specific value) + * As a singleton in the product object (meaning there is a product-specific value) + * As a singleton in the node object (meaning there is a node-specific value) + * (If none of these, an exception is raised) + +During a simulation, |sp| uses :meth:`~stockpyl.supply_chain_node.SupplyChainNode.get_attribute` +to access all attributes, so the simulation will pull attributes from nodes and products +using the same logic as above. + +.. doctest:: + + >>> nodes[1].get_attribute('local_holding_cost', product=10) + 5 + >>> nodes[2].get_attribute('local_holding_cost', product=20) + 2 + >>> nodes[2].get_attribute('local_holding_cost', product=30) + 3 + >>> # You can omit the `product` argument if the node has a single product. + >>> nodes[1].get_attribute('inventory_policy') + Policy(BS: base_stock_level=6.00) + >>> nodes[2].get_attribute('inventory_policy', product=20) + Policy(BS: base_stock_level=35.00) + + +Bill of Materials +----------------- + +The number of units of product A required to make 1 unit of product B +is called the **BOM number** for products A and B. The BOM number is specified at the product level, +not the node level: If the BOM number for products A and B is 5, then it is 5 at every +node that handles product B and every node that it orders product A from. + +The :meth:`~stockpyl.supply_chain_product.SupplyChainProduct.set_bill_of_materials` +method is used to set the BOM relationships between pairs of products. We already used the +following code to set the BOM for our example network: + +.. doctest:: + + >>> products[10].set_bill_of_materials(raw_material=20, num_needed=5) + >>> products[10].set_bill_of_materials(raw_material=30, num_needed=3) + +We can access the BOM number using :meth:`~stockpyl.supply_chain_product.SupplyChainProduct.get_bill_of_materials`, +or the shortcut method :meth:`~stockpyl.supply_chain_product.SupplyChainProduct.BOM`: + +.. doctest:: + + >>> products[10].get_bill_of_materials(raw_material=20) + 5 + >>> products[10].BOM(30) + 3 + +See :ref:`External Suppliers` \ No newline at end of file From 60aec4f1eb0a014f82cd1c0626df61e41e71a944 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 19:52:23 -0400 Subject: [PATCH 75/94] Try to fix hyperlink --- docs/tutorial/tutorial_multiproduct_sim.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 2190da1..2f78076 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -226,4 +226,4 @@ or the shortcut method :meth:`~stockpyl.supply_chain_product.SupplyChainProduct. >>> products[10].BOM(30) 3 -See :ref:`External Suppliers` \ No newline at end of file +See :ref:`tutorial_sim:External Suppliers` \ No newline at end of file From 8091a26fa3fb915ebadbb76047a18299a46e5ff7 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 19:59:00 -0400 Subject: [PATCH 76/94] Change autosectionlabel_maxdepth --- docs/conf.py | 1 + docs/tutorial/tutorial_multiproduct_sim.rst | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 7db76ce..1dc4ba8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -96,6 +96,7 @@ # Require document name before section name in autosection references. # (added LVS 5/28/22) autosectionlabel_prefix_document = True +autosectionlabel_maxdepth = 3 # If true, the current module name will be prepended to all description # unit titles (such as .. function::). (added LVS 6/7/22) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 2f78076..c463f0c 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -226,4 +226,6 @@ or the shortcut method :meth:`~stockpyl.supply_chain_product.SupplyChainProduct. >>> products[10].BOM(30) 3 -See :ref:`tutorial_sim:External Suppliers` \ No newline at end of file +In a |sp| simulation, every network must have external supply—nodes can't +just create a product with no raw materials. (See :ref:`tutorial_sim:External Suppliers`.) +To \ No newline at end of file From 2388c0f229d67cf6f180b19a4e9e4346f3d7c426 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 20:06:47 -0400 Subject: [PATCH 77/94] Try a few different ways --- docs/tutorial/tutorial_multiproduct_sim.rst | 11 ++++++++--- docs/tutorial/tutorial_sim.rst | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index c463f0c..5358410 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -74,7 +74,7 @@ In the diagram: * The arrow into node 2 represents the external supplier. The lead time for shipments from the external supplier is 2 periods, as indicated by `L=2` on the arrow. -We'll start building this network using the :func:`~stockpyl.supply_chain_network.serial_system` method: +We'll start building this network using the :func:`~stockpyl.supply_chain_network.serial_system` function: .. doctest:: @@ -227,5 +227,10 @@ or the shortcut method :meth:`~stockpyl.supply_chain_product.SupplyChainProduct. 3 In a |sp| simulation, every network must have external supply—nodes can't -just create a product with no raw materials. (See :ref:`tutorial_sim:External Suppliers`.) -To \ No newline at end of file +just create a product with no raw materials. (See :ref:`tutorial_sim:External Suppliers` +:ref:`asdf` :ref:`asdfffasdfasd`.) +To specify that a node receives external supply, you set that node's ``supply_type`` +attribute to `'U'` (for "unlimited"), or to anything other than ``None``. The +:func:`~stockpyl.supply_chain_network.serial_system` function automatically sets +``supply_type = 'U'`` for the upstream-most node, which means that node 2 in +our network has external supply. diff --git a/docs/tutorial/tutorial_sim.rst b/docs/tutorial/tutorial_sim.rst index 7cbd570..cbd1bd6 100644 --- a/docs/tutorial/tutorial_sim.rst +++ b/docs/tutorial/tutorial_sim.rst @@ -220,6 +220,8 @@ or you can do it manually. External customers always have an order lead time of 0 and a shipment lead time of 0. +.. _external_suppliers: + External Suppliers ~~~~~~~~~~~~~~~~~~~ Any node can have an **external supplier**—a supplier that is not a node that is modeled explicitly From e6dea7add741d81660c24dd9ad37b5fbbae7cd0f Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 21:06:24 -0400 Subject: [PATCH 78/94] Working on multiproduct sim notes --- .../sim_io_multiproduct_example_instance.csv | 11 ++ docs/tutorial/tutorial_multiproduct_sim.rst | 160 +++++++++++++++++- docs/tutorial/tutorial_sim.rst | 18 +- src/stockpyl/sim_io.py | 4 +- 4 files changed, 181 insertions(+), 12 deletions(-) create mode 100644 docs/aux_files/sim_io_multiproduct_example_instance.csv diff --git a/docs/aux_files/sim_io_multiproduct_example_instance.csv b/docs/aux_files/sim_io_multiproduct_example_instance.csv new file mode 100644 index 0000000..f4c18c0 --- /dev/null +++ b/docs/aux_files/sim_io_multiproduct_example_instance.csv @@ -0,0 +1,11 @@ +t,i=1,DISR,IO:EXT|10,IOPL:EXT|10,OQ:2|20,OQ:2|30,OQFG:10,OO:2|20,OO:2|30,IS:2|20,IS:2|30,ISPL:2|20,ISPL:2|30,IDI:2|20,IDI:2|30,RM:20,RM:30,PFG:10,OS:EXT|10,DMFS:10,FR:10,IL:10,BO:EXT|10,ODI:EXT|10,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|20,IO:1|30,IOPL:1|20,IOPL:1|30,OQ:EXT|-5,OQFG:20,OQFG:30,OO:EXT|-5,IS:EXT|-5,ISPL:EXT|-5,IDI:EXT|-5,RM:-5,PFG:20,PFG:30,OS:1|20,OS:1|30,DMFS:20,DMFS:30,FR:20,FR:30,IL:20,IL:30,BO:1|20,BO:1|30,ODI:1|20,ODI:1|30,HC,SC,ITHC,REV,TC +0,,False,3,[],15.0,9.0,3.0,15.0,9.0,0,0,[15.0],[9.0],0,0,0.0,0.0,3.0,3,3.0,1.0,3.0,0,0,15.0,0,0.0,0.0,15.0,,False,15.0,9.0,[],[],24.0,15.0,9.0,24.0,0,"[0, 24.0]",0,0.0,15.0,9.0,15.0,9.0,15.0,9.0,1.0,1.0,20.0,11.0,0,0,0,0,73.0,0,57.0,0.0,130.0 +1,,False,5,[],25.0,15.0,5.0,25.0,15.0,15.0,9.0,[20.0],[11.0],0,0,0.0,0.0,5.0,5,5.0,1.0,1.0,0,0,5.0,0,0.0,0.0,5.0,,False,25.0,15.0,[],[],40.0,25.0,15.0,64.0,0,"[24.0, 40.0]",0,0.0,40.0,24.0,20.0,11.0,20.0,11.0,0.875,0.8333333333333334,-5.0,-4.0,5.0,4.0,0,0,0.0,0.0,73.0,0.0,73.0 +2,,False,1,[],5.0,3.0,1.0,10.0,7.0,20.0,11.0,[10.0],[7.0],0,0,1.6666666666666679,0.0,2.3333333333333335,1,1.0,1.0,3.666666666666666,0,0,21.666666666666664,0,0.0,0.0,21.666666666666664,,False,5.0,3.0,[],[],8.0,5.0,3.0,48.0,24.0,"[40.0, 8.0]",0,0.0,30.0,18.0,10.0,7.0,5.0,3.0,0.8888888888888888,0.8518518518518519,5.0,2.0,0.0,0.0,0,0,16.0,0,41.0,0.0,57.0 +3,,False,3,[],15.0,9.0,3.0,15.0,9.0,10.0,7.0,[15.0],[9.0],0,0,0.0,0.0,3.0000000000000004,3,3.0,1.0,3.0,0,0,15.0,0,0.0,0.0,15.0,,False,15.0,9.0,[],[],24.0,15.0,9.0,32.0,40.0,"[8.0, 24.0]",0,0.0,20.0,12.0,15.0,9.0,15.0,9.0,0.9166666666666666,0.8888888888888888,15.0,8.0,0.0,0.0,0,0,54.0,0,57.0,0.0,111.0 +4,,False,5,[],25.0,15.0,5.0,25.0,15.0,15.0,9.0,[20.0],[11.0],0,0,0.0,0.0,5.0,5,5.0,1.0,1.0,0,0,5.0,0,0.0,0.0,5.0,,False,25.0,15.0,[],[],40.0,25.0,15.0,64.0,8.0,"[24.0, 40.0]",0,0.0,40.0,24.0,20.0,11.0,20.0,11.0,0.8823529411764706,0.8431372549019608,-5.0,-4.0,5.0,4.0,0,0,0.0,0.0,73.0,0.0,73.0 +5,,False,5,[],25.0,15.0,5.0,30.0,19.0,20.0,11.0,[15.0],[9.0],0,0,1.6666666666666679,0.0,6.333333333333334,4.666666666666666,4.666666666666666,0.9848484848484848,-0.3333333333333339,0.3333333333333339,0,3.3333333333333357,6.6666666666666785,0.0,0.0,10.000000000000014,,False,25.0,15.0,[],[],40.0,25.0,15.0,80.0,24.0,"[40.0, 40.0]",0,0.0,50.0,30.0,15.0,9.0,10.0,5.0,0.7727272727272727,0.7272727272727273,-15.0,-10.0,15.0,10.0,0,0,0.0,0.0,57.0,0.0,57.0 +6,,False,5,[],25.000000000000004,15.000000000000004,5.000000000000001,40.0,25.0,15.0,9.0,[25.0],[15.0],0,0,1.6666666666666679,0.0,8.333333333333336,3.0,2.666666666666666,0.9012345679012344,-2.333333333333334,2.333333333333334,0,3.3333333333333357,46.66666666666668,0.0,0.0,50.000000000000014,,False,25.000000000000004,15.000000000000004,[],[],40.00000000000001,25.000000000000004,15.000000000000004,80.0,40.0,"[40.0, 40.00000000000001]",0,0.0,50.0,30.0,25.0,15.0,10.0,5.0,0.7037037037037037,0.654320987654321,-15.000000000000004,-10.000000000000004,15.000000000000004,10.000000000000004,0,0,0.0,0.0,95.0,0.0,95.0 +7,,False,5,[],25.0,15.0,5.0,40.0,25.0,25.0,15.0,[25.0],[15.0],0,0,1.6666666666666679,0.0,8.333333333333336,5.0,2.666666666666666,0.8437499999999998,-2.333333333333334,2.333333333333334,0,3.3333333333333357,46.66666666666668,0.0,0.0,50.000000000000014,,False,25.0,15.0,[],[],40.0,25.0,15.000000000000004,80.0,40.0,"[40.00000000000001, 40.0]",0,0.0,50.0,30.0,25.0,15.0,9.999999999999996,4.9999999999999964,0.65625,0.6041666666666666,-15.000000000000004,-10.000000000000004,15.000000000000004,10.000000000000004,0,0,0.0,0.0,95.0,0.0,95.0 +8,,False,5,[],25.0,15.0,5.0,40.0,25.0,25.0,15.0,[25.000000000000004],[15.000000000000004],0,0,1.6666666666666679,0.0,8.333333333333336,5.0,2.666666666666666,0.8018018018018015,-2.333333333333334,2.333333333333334,0,3.3333333333333357,46.66666666666668,0.0,0.0,50.000000000000014,,False,25.0,15.0,[],[],40.0,25.0,15.000000000000004,80.0,40.00000000000001,"[40.0, 40.0]",0,0.0,50.0,29.999999999999996,25.000000000000004,15.000000000000004,10.0,5.0,0.6216216216216216,0.5675675675675675,-15.0,-10.0,15.0,10.0,0,0,0.0,0.0,95.00000000000003,0.0,95.00000000000003 +9,,False,4,[],20.0,12.0,4.0,35.0,21.999999999999996,25.000000000000004,15.000000000000004,[25.0],[15.000000000000004],0,0,1.6666666666666679,0.0,7.333333333333335,5.000000000000001,2.666666666666667,0.7886178861788615,-1.333333333333333,1.333333333333333,0,3.3333333333333357,26.66666666666666,0.0,0.0,29.999999999999996,,False,20.0,12.0,[],[],32.0,20.0,12.0,72.0,40.0,"[40.0, 32.0]",0,-3.552713678800501e-15,45.0,26.999999999999996,25.0,15.000000000000004,10.0,5.0000000000000036,0.6097560975609756,0.5528455284552846,-10.0,-6.9999999999999964,10.0,6.9999999999999964,0,0,0.0,0.0,95.00000000000001,0.0,95.00000000000001 diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 5358410..64c9b31 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -21,6 +21,7 @@ the :ref:`tutorial page for simulation`, read that first. .. contents:: :depth: 3 +.. _products: Products -------- @@ -48,6 +49,7 @@ add them to nodes, |sp| automatically creates and manages "dummy" products at ea This means that you can ignore products entirely if you do not need them, and any code written for versions of |sp| prior to v1.0 (when products were introduced) should still work without being adapted to handle products. # TODO: is this true? are there caveats? +Dummy products are identifiable as such because they have negative indices. Basic Multi-Product Example @@ -76,7 +78,7 @@ In the diagram: We'll start building this network using the :func:`~stockpyl.supply_chain_network.serial_system` function: -.. doctest:: +.. code-block:: >>> from stockpyl.supply_chain_network import serial_system >>> network = serial_system( @@ -95,7 +97,7 @@ We'll start building this network using the :func:`~stockpyl.supply_chain_networ Next, we'll create the three products and add them to a dict whose keys are product indices and whose values are products, for easy access to the product objects. We'll also set the BOM. -.. doctest:: +.. code-block:: >>> from stockpyl.supply_chain_product import SupplyChainProduct >>> products = {10: SupplyChainProduct(index=10), 20: SupplyChainProduct(index=20), 30: SupplyChainProduct(index=30)} @@ -105,7 +107,7 @@ and whose values are products, for easy access to the product objects. We'll als To add the products to the nodes, we use :meth:`~stockpyl.supply_chain_node.SupplyChainNode.add_product` and :meth:`~stockpyl.supply_chain_node.SupplyChainNode.add_products`: -.. doctest:: +.. code-block:: >>> nodes[1].add_product(products[10]) >>> nodes[2].add_products([products[20], products[30]]) @@ -128,7 +130,7 @@ In our example network, since node 1 only handles one product (product 10), we c ``local_holding_cost`` directly at node 1. We'll set ``local_holding_cost`` for products 20 and 30 in the product objects. -.. doctest:: +.. code-block:: >>> nodes[1].local_holding_cost = 5 >>> products[20].local_holding_cost = 2 @@ -139,7 +141,7 @@ node, product, or (node, product) levels. We'll set the policy for product 10 in product object (we could instead set it at node 1). And we'll set the policy for products 20 and 30 using a dict at node 2: -.. doctest:: +.. code-block:: >>> from stockpyl.policy import Policy >>> products[10].inventory_policy = Policy(type='BS', base_stock_level=6, node=nodes[1], product=products[10]) @@ -211,7 +213,7 @@ The :meth:`~stockpyl.supply_chain_product.SupplyChainProduct.set_bill_of_materia method is used to set the BOM relationships between pairs of products. We already used the following code to set the BOM for our example network: -.. doctest:: +.. code-block:: >>> products[10].set_bill_of_materials(raw_material=20, num_needed=5) >>> products[10].set_bill_of_materials(raw_material=30, num_needed=3) @@ -227,10 +229,152 @@ or the shortcut method :meth:`~stockpyl.supply_chain_product.SupplyChainProduct. 3 In a |sp| simulation, every network must have external supply—nodes can't -just create a product with no raw materials. (See :ref:`tutorial_sim:External Suppliers` -:ref:`asdf` :ref:`asdfffasdfasd`.) +just create a product with no raw materials. (See +:ref:`External Suppliers`.) To specify that a node receives external supply, you set that node's ``supply_type`` attribute to `'U'` (for "unlimited"), or to anything other than ``None``. The :func:`~stockpyl.supply_chain_network.serial_system` function automatically sets ``supply_type = 'U'`` for the upstream-most node, which means that node 2 in our network has external supply. + +External suppliers provide raw materials, even though they are not created explictly +as |class_product| objects. The BOM for such raw materials is therefore also not +specified explicitly, Instead, such relationships are governed by the +**network bill of materials (NBOM),** which assigns default values to certain +pairs of nodes/products based on the structure of the network. The basic rule is: + +.. admonition:: Network Bill of Materials (NBOM) + + If node A is a predecessor to node B, and there are no BOM relationships + specified between *any* product at node A and *any* product at node B, then + *every* product at node B is assumed to require 1 unit of *every* product + at node A as a raw material. + +In the case of our example network, that means that product 20 and product 30 require +1 unit of the product provided by the external supplier. (That item is a "dummy" product +assigned to the supplier.) + +We don't set the NBOM explicitly—we only set the BOM, and |sp| automatically adds the +network-based relationships as needed. We can query the NBOM using +:meth:`~stockpyl.supply_chain_node.SupplyChainNode.get_network_bill_of_materials` +(or its shortcut, :meth:`~stockpyl.supply_chain_node.SupplyChainNode.NBOM`), +which returns the BOM relationship for a given (node, product) and a given +(predecessor, raw material). If the BOM is set explicitly, +:meth:`~stockpyl.supply_chain_node.SupplyChainNode.get_network_bill_of_materials` +returns that number, and if it's implicit from the network structure, it returns +that number. If there is no BOM relationship (either explicit or implied), it returns 0. + +If an NBOM relationship is implied by the network structure, the NBOM always equals 1. +If you want it to equal something else (e.g., if we wanted to say that 4 units of the +external supplier product are required to make 1 unit of product 30), you would need to +explicitly create a node that's a predecessor to node 2, create a product at that node +that's a raw material for product 30, and set the BOM explicitly. + +.. doctest:: + + >>> # Get the NBOM for node 1, product 10 with node 2, product 20. + >>> nodes[1].NBOM(product=10, predecessor=2, raw_material=20) + 5 + >>> # Get the NBOM for node 2, product 20 with the external supplier's dummy product. + >>> nodes[2].NBOM(product=20, predecessor=None, raw_material=None) + 1 + + +Raw Material Inventory +------------------------- + +Every node has a raw material inventory for every product that it uses as a raw material. +So, in our example, node 1 has raw material inventory for products 20 and 30, and node 2 +has raw material inventory for the dummy product from the external supplier. The raw material +inventories are by product only, not by (product, predecessor). + +There are two important implications of this: + + * If a node has multiple suppliers that provide the same raw material, those + supplies are pooled into a single raw material inventory. + * If a node has multiple products that use the same raw material, they share + the same raw material inventory. + +The second bullet is relevant for our example network, because both product 20 and +product 30 use the dummy product from the external supplier as a raw material, so they +both draw their raw materials from the same inventory. + + +.. _multiproduct_sim_output: + +Multi-Product Simulation Output +--------------------------------- + +This section discusses the simulation output for a multi-product network, i.e., a network +in which one or more |class_product| objects have been added explicitly. +(See :ref:`Simulation Output` for an overview of the |mod_sim_io| module +and the simulation output in the context of a single-product network.) + +The :func:`~stockpyl.sim_io.write_results` function displays the results of the simulation +in a table. The table has the following format for multi-product networks: + + * Each row corresponds to a period in the simulation. + * Each node is represented by a group of columns. + * The node number is indicated in the first column in the group (i.e., i=1). + * (node, product) pairs are indicated by a vertical line, so '2|20' means node 2, product 20. + * The columns for each node are as follows: + + - ``i=``: label for the column group + - ``DISR``: was the node disrupted in the period? (True/False) + - ``IO:s|prod``: inbound order for product ``prod`` received from successor ``s`` + - ``IOPL:s|prod``: inbound order pipeline for product ``prod`` from successor ``s``: a list of order + quantities arriving from succesor ``s`` in ``r`` periods from the + period, for ``r`` = 1, ..., ``order_lead_time`` + - ``OQ:p|rm``: order quantity placed to predecessor ``p`` for raw material ``rm`` + - ``OQFG:prod``: order quantity of finished good ``prod`` (this "order" is never actually placed—only + the raw material orders in ``OQ`` are placed; but ``OQFG`` can be useful for debugging) + - ``OO:p:rm``: on-order quantity (items of raw material ``rm`` that have been ordered from successor + ``p`` but not yet received) + - ``IS:p|rm``: inbound shipment of raw material ``rm`` received from predecessor ``p`` + - ``ISPL:p|rm``: inbound shipment pipeline for raw material ``rm`` from predecessor ``p``: a list of + shipment quantities arriving from predecessor ``p`` in ``r`` periods from + the period, for ``r`` = 1, ..., ``shipment_lead_time`` + - ``IDI:p|rm``: inbound disrupted items: number of items of raw material ``rm`` from predecessor ``p`` + that cannot be received due to a type-RP disruption at the node + - ``RM:rm``: number of items of raw material ``rm`` in raw-material inventory at node + - ``PFG:prod``: number of items of product ``prod`` that are pending, waiting to be + processed from raw materials + - ``OS:s|prod``: outbound shipment of product ``prod`` to successor ``s`` + - ``DMFS|prod``: demand of product ``prod`` met from stock at the node in the current period + - ``FR|prod``: fill rate of product ``prod``; cumulative from start of simulation to the current period + - ``IL|prod``: inventory level of product ``prod`` (positive, negative, or zero) at node + - ``BO:s|prod``: backorders of product ``prod`` owed to successor ``s`` + - ``ODI:s|prod``: outbound disrupted items of product ``prod``: number of items held for successor ``s`` due to + a type-SP disruption at ``s`` + - ``HC``: holding cost incurred at the node in the period + - ``SC``: stockout cost incurred at the node in the period + - ``ITHC``: in-transit holding cost incurred for items in transit to all successors + of the node + - ``REV``: revenue (**Note:** *not currently supported*) + - ``TC``: total cost incurred at the node (holding, stockout, and in-transit holding) + + * For state variables that are indexed by successor, if ``s`` = ``EXT``, the column + refers to the node's external customer + * For state variables that are indexed by predecessor, if ``p`` = ``EXT``, the column + refers to the node's external supplier + * Negative product indices are "dummy products" + + +**Example:** The code below simulates our example network for 10 periods and displays the results: + +.. code-block:: + + >>> simulation(network=network, num_periods=10) + >>> write_results(network, num_periods=10) + +The results are shown in the table below. + + + + + +.. csv-table:: Multi-Product Simulation Results + :file: ../aux_files/sim_io_multiproduct_example_instance.csv + :widths: auto + :header-rows: 1 + :stub-columns: 1 \ No newline at end of file diff --git a/docs/tutorial/tutorial_sim.rst b/docs/tutorial/tutorial_sim.rst index cbd1bd6..1a2fe0b 100644 --- a/docs/tutorial/tutorial_sim.rst +++ b/docs/tutorial/tutorial_sim.rst @@ -274,13 +274,22 @@ Both nodes have a (shipment) lead time of 1. 3 47 50 0 21 -26 47 47 37 47 3 +.. _sim_output: + Displaying the Results ---------------------- The :func:`~stockpyl.sim_io.write_results` function in the |mod_sim_io| module displays the results of a simulation. It takes as input the |class_network| object that already has its state variables filled by the simulation, and prints a table to the console and/or to a CSV file. The table lists the -values of the state variables for every node and every time period. All state variables refer to their values at the end of the period. +values of the state variables for every node and every time period. +All state variables refer to their values at the end of the period. + +.. note:: + + This section assumes that there are no products explicitly added to the network, i.e., the network + only contains "dummy products" (see :ref:`Products`). For the simulation output for + multiproduct networks, see :ref:`Multiproduct Simulation Output`. The table has the following format: @@ -295,6 +304,9 @@ The table has the following format: quantities arriving from succesor ``s`` in ``r`` periods from the period, for ``r`` = 1, ..., ``order_lead_time`` - ``OQ:p``: order quantity placed to predecessor ``p`` in the period + - ``OQFG`` : order quantity of finished good (this "order" is never actually + placed—only the raw material orders specified in ``OQ`` are placed; but ``OQFG`` can + be useful for debugging) - ``OO:p``: on-order quantity (items that have been ordered from successor ``p`` but not yet received) - ``IS:p``: inbound shipment received from predecessor ``p`` @@ -303,8 +315,10 @@ The table has the following format: the period, for ``r`` = 1, ..., ``shipment_lead_time`` - ``IDI:p``: inbound disrupted items: number of items from predecessor ``p`` that cannot be received due to a type-RP disruption at the node - - ``RM:p``: number of items from predecessor ``p`` in raw-material inventory + - ``RM|rm``: number of items of raw material ``rm`` in raw-material inventory at node + - ``PFG``: number of items of the product that are pending, waiting to be + processed from raw materials - ``OS:s``: outbound shipment to successor ``s`` - ``DMFS``: demand met from stock at the node in the current period - ``FR``: fill rate; cumulative from start of simulation to the current period diff --git a/src/stockpyl/sim_io.py b/src/stockpyl/sim_io.py index e7229ae..ff68500 100644 --- a/src/stockpyl/sim_io.py +++ b/src/stockpyl/sim_io.py @@ -26,8 +26,8 @@ quantities arriving from succesor ``s`` in ``r`` periods from the period, for ``r`` = 1, ..., ``order_lead_time`` - ``OQ:p|prod``: order quantity placed to predecessor ``p`` for product ``prod`` - - ``OQFG:prod``: order quantity of finished good ``prod`` (this "order" is never actually placed; - only the raw material orders in ``OQ`` are placed; but it is useful for debugging) + - ``OQFG:prod``: order quantity of finished good ``prod`` (this "order" is never actually placed—only + the raw material orders in ``OQ`` are placed; but ``OQFG`` can be useful for debugging) - ``OO:p:prod``: on-order quantity (items of product ``prod`` that have been ordered from successor ``p`` but not yet received) - ``IS:p|prod``: inbound shipment of product ``prod`` received from predecessor ``p`` From 3eacb78bf6bfbc09051f5ae77dab5670f257b6a2 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 21:18:52 -0400 Subject: [PATCH 79/94] Update results csv --- .../sim_io_multiproduct_example_instance.csv | 20 ++++++++-------- docs/tutorial/tutorial_multiproduct_sim.rst | 23 ++++++++++++++++++- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/docs/aux_files/sim_io_multiproduct_example_instance.csv b/docs/aux_files/sim_io_multiproduct_example_instance.csv index f4c18c0..455e454 100644 --- a/docs/aux_files/sim_io_multiproduct_example_instance.csv +++ b/docs/aux_files/sim_io_multiproduct_example_instance.csv @@ -1,11 +1,11 @@ t,i=1,DISR,IO:EXT|10,IOPL:EXT|10,OQ:2|20,OQ:2|30,OQFG:10,OO:2|20,OO:2|30,IS:2|20,IS:2|30,ISPL:2|20,ISPL:2|30,IDI:2|20,IDI:2|30,RM:20,RM:30,PFG:10,OS:EXT|10,DMFS:10,FR:10,IL:10,BO:EXT|10,ODI:EXT|10,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|20,IO:1|30,IOPL:1|20,IOPL:1|30,OQ:EXT|-5,OQFG:20,OQFG:30,OO:EXT|-5,IS:EXT|-5,ISPL:EXT|-5,IDI:EXT|-5,RM:-5,PFG:20,PFG:30,OS:1|20,OS:1|30,DMFS:20,DMFS:30,FR:20,FR:30,IL:20,IL:30,BO:1|20,BO:1|30,ODI:1|20,ODI:1|30,HC,SC,ITHC,REV,TC -0,,False,3,[],15.0,9.0,3.0,15.0,9.0,0,0,[15.0],[9.0],0,0,0.0,0.0,3.0,3,3.0,1.0,3.0,0,0,15.0,0,0.0,0.0,15.0,,False,15.0,9.0,[],[],24.0,15.0,9.0,24.0,0,"[0, 24.0]",0,0.0,15.0,9.0,15.0,9.0,15.0,9.0,1.0,1.0,20.0,11.0,0,0,0,0,73.0,0,57.0,0.0,130.0 -1,,False,5,[],25.0,15.0,5.0,25.0,15.0,15.0,9.0,[20.0],[11.0],0,0,0.0,0.0,5.0,5,5.0,1.0,1.0,0,0,5.0,0,0.0,0.0,5.0,,False,25.0,15.0,[],[],40.0,25.0,15.0,64.0,0,"[24.0, 40.0]",0,0.0,40.0,24.0,20.0,11.0,20.0,11.0,0.875,0.8333333333333334,-5.0,-4.0,5.0,4.0,0,0,0.0,0.0,73.0,0.0,73.0 -2,,False,1,[],5.0,3.0,1.0,10.0,7.0,20.0,11.0,[10.0],[7.0],0,0,1.6666666666666679,0.0,2.3333333333333335,1,1.0,1.0,3.666666666666666,0,0,21.666666666666664,0,0.0,0.0,21.666666666666664,,False,5.0,3.0,[],[],8.0,5.0,3.0,48.0,24.0,"[40.0, 8.0]",0,0.0,30.0,18.0,10.0,7.0,5.0,3.0,0.8888888888888888,0.8518518518518519,5.0,2.0,0.0,0.0,0,0,16.0,0,41.0,0.0,57.0 -3,,False,3,[],15.0,9.0,3.0,15.0,9.0,10.0,7.0,[15.0],[9.0],0,0,0.0,0.0,3.0000000000000004,3,3.0,1.0,3.0,0,0,15.0,0,0.0,0.0,15.0,,False,15.0,9.0,[],[],24.0,15.0,9.0,32.0,40.0,"[8.0, 24.0]",0,0.0,20.0,12.0,15.0,9.0,15.0,9.0,0.9166666666666666,0.8888888888888888,15.0,8.0,0.0,0.0,0,0,54.0,0,57.0,0.0,111.0 -4,,False,5,[],25.0,15.0,5.0,25.0,15.0,15.0,9.0,[20.0],[11.0],0,0,0.0,0.0,5.0,5,5.0,1.0,1.0,0,0,5.0,0,0.0,0.0,5.0,,False,25.0,15.0,[],[],40.0,25.0,15.0,64.0,8.0,"[24.0, 40.0]",0,0.0,40.0,24.0,20.0,11.0,20.0,11.0,0.8823529411764706,0.8431372549019608,-5.0,-4.0,5.0,4.0,0,0,0.0,0.0,73.0,0.0,73.0 -5,,False,5,[],25.0,15.0,5.0,30.0,19.0,20.0,11.0,[15.0],[9.0],0,0,1.6666666666666679,0.0,6.333333333333334,4.666666666666666,4.666666666666666,0.9848484848484848,-0.3333333333333339,0.3333333333333339,0,3.3333333333333357,6.6666666666666785,0.0,0.0,10.000000000000014,,False,25.0,15.0,[],[],40.0,25.0,15.0,80.0,24.0,"[40.0, 40.0]",0,0.0,50.0,30.0,15.0,9.0,10.0,5.0,0.7727272727272727,0.7272727272727273,-15.0,-10.0,15.0,10.0,0,0,0.0,0.0,57.0,0.0,57.0 -6,,False,5,[],25.000000000000004,15.000000000000004,5.000000000000001,40.0,25.0,15.0,9.0,[25.0],[15.0],0,0,1.6666666666666679,0.0,8.333333333333336,3.0,2.666666666666666,0.9012345679012344,-2.333333333333334,2.333333333333334,0,3.3333333333333357,46.66666666666668,0.0,0.0,50.000000000000014,,False,25.000000000000004,15.000000000000004,[],[],40.00000000000001,25.000000000000004,15.000000000000004,80.0,40.0,"[40.0, 40.00000000000001]",0,0.0,50.0,30.0,25.0,15.0,10.0,5.0,0.7037037037037037,0.654320987654321,-15.000000000000004,-10.000000000000004,15.000000000000004,10.000000000000004,0,0,0.0,0.0,95.0,0.0,95.0 -7,,False,5,[],25.0,15.0,5.0,40.0,25.0,25.0,15.0,[25.0],[15.0],0,0,1.6666666666666679,0.0,8.333333333333336,5.0,2.666666666666666,0.8437499999999998,-2.333333333333334,2.333333333333334,0,3.3333333333333357,46.66666666666668,0.0,0.0,50.000000000000014,,False,25.0,15.0,[],[],40.0,25.0,15.000000000000004,80.0,40.0,"[40.00000000000001, 40.0]",0,0.0,50.0,30.0,25.0,15.0,9.999999999999996,4.9999999999999964,0.65625,0.6041666666666666,-15.000000000000004,-10.000000000000004,15.000000000000004,10.000000000000004,0,0,0.0,0.0,95.0,0.0,95.0 -8,,False,5,[],25.0,15.0,5.0,40.0,25.0,25.0,15.0,[25.000000000000004],[15.000000000000004],0,0,1.6666666666666679,0.0,8.333333333333336,5.0,2.666666666666666,0.8018018018018015,-2.333333333333334,2.333333333333334,0,3.3333333333333357,46.66666666666668,0.0,0.0,50.000000000000014,,False,25.0,15.0,[],[],40.0,25.0,15.000000000000004,80.0,40.00000000000001,"[40.0, 40.0]",0,0.0,50.0,29.999999999999996,25.000000000000004,15.000000000000004,10.0,5.0,0.6216216216216216,0.5675675675675675,-15.0,-10.0,15.0,10.0,0,0,0.0,0.0,95.00000000000003,0.0,95.00000000000003 -9,,False,4,[],20.0,12.0,4.0,35.0,21.999999999999996,25.000000000000004,15.000000000000004,[25.0],[15.000000000000004],0,0,1.6666666666666679,0.0,7.333333333333335,5.000000000000001,2.666666666666667,0.7886178861788615,-1.333333333333333,1.333333333333333,0,3.3333333333333357,26.66666666666666,0.0,0.0,29.999999999999996,,False,20.0,12.0,[],[],32.0,20.0,12.0,72.0,40.0,"[40.0, 32.0]",0,-3.552713678800501e-15,45.0,26.999999999999996,25.0,15.000000000000004,10.0,5.0000000000000036,0.6097560975609756,0.5528455284552846,-10.0,-6.9999999999999964,10.0,6.9999999999999964,0,0,0.0,0.0,95.00000000000001,0.0,95.00000000000001 +0,,FALSE,3,[],15,9,3,15,9,0,0,[15.0],[9.0],0,0,0,0,3,3,3,1,3,0,0,15,0,0,0,15,,FALSE,15,9,[],[],24,15,9,24,0,"[0, 24.0]",0,0,15,9,15,9,15,9,1,1,20,11,0,0,0,0,73,0,57,0,130 +1,,FALSE,5,[],25,15,5,25,15,15,9,[20.0],[11.0],0,0,0,0,5,5,5,1,1,0,0,5,0,0,0,5,,FALSE,25,15,[],[],40,25,15,64,0,"[24.0, 40.0]",0,0,40,24,20,11,20,11,0.8750,0.8333,-5,-4,5,4,0,0,0,0,73,0,73 +2,,FALSE,1,[],5,3,1,10,7,20,11,[10.0],[7.0],0,0,1.6667,0,2.3333,1,1,1,3.6667,0,0,21.6667,0,0,0,21.6667,,FALSE,5,3,[],[],8,5,3,48,24,"[40.0, 8.0]",0,0,30,18,10,7,5,3,0.8889,0.8519,5,2,0,0,0,0,16,0,41,0,57 +3,,FALSE,3,[],15,9,3,15,9,10,7,[15.0],[9.0],0,0,0,0,3,3,3,1,3,0,0,15,0,0,0,15,,FALSE,15,9,[],[],24,15,9,32,40,"[8.0, 24.0]",0,0,20,12,15,9,15,9,0.9167,0.8889,15,8,0,0,0,0,54,0,57,0,111 +4,,FALSE,5,[],25,15,5,25,15,15,9,[20.0],[11.0],0,0,0,0,5,5,5,1,1,0,0,5,0,0,0,5,,FALSE,25,15,[],[],40,25,15,64,8,"[24.0, 40.0]",0,0,40,24,20,11,20,11,0.8824,0.8431,-5,-4,5,4,0,0,0,0,73,0,73 +5,,FALSE,5,[],25,15,5,30,19,20,11,[15.0],[9.0],0,0,1.6667,0,6.3333,4.6667,4.6667,0.9848,-0.3333,0.3333,0,3.3333,6.6667,0,0,10,,FALSE,25,15,[],[],40,25,15,80,24,"[40.0, 40.0]",0,0,50,30,15,9,10,5,0.7727,0.7273,-15,-10,15,10,0,0,0,0,57,0,57 +6,,FALSE,5,[],25,15,5,40,25,15,9,[25.0],[15.0],0,0,1.6667,0,8.3333,3,2.6667,0.9012,-2.3333,2.3333,0,3.3333,46.6667,0,0,50,,FALSE,25,15,[],[],40,25,15,80,40,"[40.0, 40.0]",0,0,50,30,25,15,10,5,0.7037,0.6543,-15,-10,15,10,0,0,0,0,95,0,95 +7,,FALSE,5,[],25,15,5,40,25,25,15,[25.0],[15.0],0,0,1.6667,0,8.3333,5,2.6667,0.8437,-2.3333,2.3333,0,3.3333,46.6667,0,0,50,,FALSE,25,15,[],[],40,25,15,80,40,"[40.0, 40.0]",0,0,50,30,25,15,10,5,0.6563,0.6042,-15,-10,15,10,0,0,0,0,95,0,95 +8,,FALSE,5,[],25,15,5,40,25,25,15,[25.0],[15.0],0,0,1.6667,0,8.3333,5,2.6667,0.8018,-2.3333,2.3333,0,3.3333,46.6667,0,0,50,,FALSE,25,15,[],[],40,25,15,80,40,"[40.0, 40.0]",0,0,50,30,25,15,10,5,0.6216,0.5676,-15,-10,15,10,0,0,0,0,95,0,95 +9,,FALSE,4,[],20,12,4,35,22,25,15,[25.0],[15.0],0,0,1.6667,0,7.3333,5,2.6667,0.7886,-1.3333,1.3333,0,3.3333,26.6667,0,0,30,,FALSE,20,12,[],[],32,20,12,72,40,"[40.0, 32.0]",0,0,45,27,25,15,10,5,0.6098,0.5528,-10,-7,10,7,0,0,0,0,95,0,95 \ No newline at end of file diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 64c9b31..f5d6c43 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -367,7 +367,28 @@ in a table. The table has the following format for multi-product networks: >>> simulation(network=network, num_periods=10) >>> write_results(network, num_periods=10) -The results are shown in the table below. +The results are shown in the table below. In period 0: + + * Period 0, we start with ``IL:10`` = 6 at node 1, ``IL:20`` = 35 and ``IL:30`` = 20 at node 2. (By default, the initial + inventory level equals the base-stock level.) These numbers aren't displayed in the table below, only the *ending* ILs are. + * Node 1 receives a demand of 2 for product 10 (``IO:EXT|10`` = 2). Its inventory position (IP) is now 6 - 2 = 4 and its + base-stock level is 6, so it needs to order 2 units' worth of raw materials. Expressed in the units of the raw materials, + that means it needs to order 10 of product 20 (because BOM = 5) and 6 of product 30 (because BOM = 3). In the table, + ``OQ:2|20`` = 10, ``OQ:2|30`` = 6. + * Node 1 has sufficient inventory to fulfill the demand of 2, so it does (``OS:EXT|10`` = 2). + * Node 1 ends the period with ``IL:10`` = 4, and incurs a holding cost of 20 since the per-unit holding cost is 5. There is + no stockout cost in this period, so we have ``HC`` = 20, ``SC`` = 0, ``TC`` = 20. + * Node 2 receives an inbound order of 10 units for product 20 and 6 units for product 3 (``IO:1|20`` = 10, ``IO:1|30`` = 6). + Its inventory positions are now ``IP:20`` = 35 - 10 = 25, ``IP:30`` = 20 - 6 = 14 and its base-stock levels are 35 and 20, + respectively. So it needs to order 10 units of the external supplier dummy product for product 20, and another 6 + units of the external supplier dummy product for product 30. (Remember that the NBOM = 1 for these pairs.) + So, ``OQ:EXT|-5`` = 16. (-5 is the index of the dummy product at the external supplier.) + * Node 2 has sufficient inventory to satisfy demand for both products, so it ships 10 units of product 20 and 6 units + of product 30 (``OS:1|20`` = 10, ``OS:1|30`` = 6). + * Node 2 ends the period with ``IL:20`` = 25, ``IL:30`` = 14, so ``HC`` = 25 * 2 + 14 * 3 = 92, ``SC`` = 0. Node 2 also incurs the + in-transit holding cost for items that it shipped to node 1 that have not arrived yet; there are 10 units of + product 20 and 6 units of product 30, and the holding cost rates are 2 and 3, so ``ITHC`` = 10 * 2 + 6 * 3 = 38; + and ``TC`` = 92 + 38 = 130. From e3f85ddc094bbc9dc2d998b5dab9ad0a9f67e142 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Sun, 12 May 2024 21:30:15 -0400 Subject: [PATCH 80/94] Redo sample sim with fixed randseed --- .../sim_io_multiproduct_example_instance.csv | 22 +++++------ docs/tutorial/tutorial_multiproduct_sim.rst | 37 +++++++++++-------- 2 files changed, 32 insertions(+), 27 deletions(-) diff --git a/docs/aux_files/sim_io_multiproduct_example_instance.csv b/docs/aux_files/sim_io_multiproduct_example_instance.csv index 455e454..4642395 100644 --- a/docs/aux_files/sim_io_multiproduct_example_instance.csv +++ b/docs/aux_files/sim_io_multiproduct_example_instance.csv @@ -1,11 +1,11 @@ -t,i=1,DISR,IO:EXT|10,IOPL:EXT|10,OQ:2|20,OQ:2|30,OQFG:10,OO:2|20,OO:2|30,IS:2|20,IS:2|30,ISPL:2|20,ISPL:2|30,IDI:2|20,IDI:2|30,RM:20,RM:30,PFG:10,OS:EXT|10,DMFS:10,FR:10,IL:10,BO:EXT|10,ODI:EXT|10,HC,SC,ITHC,REV,TC,i=2,DISR,IO:1|20,IO:1|30,IOPL:1|20,IOPL:1|30,OQ:EXT|-5,OQFG:20,OQFG:30,OO:EXT|-5,IS:EXT|-5,ISPL:EXT|-5,IDI:EXT|-5,RM:-5,PFG:20,PFG:30,OS:1|20,OS:1|30,DMFS:20,DMFS:30,FR:20,FR:30,IL:20,IL:30,BO:1|20,BO:1|30,ODI:1|20,ODI:1|30,HC,SC,ITHC,REV,TC -0,,FALSE,3,[],15,9,3,15,9,0,0,[15.0],[9.0],0,0,0,0,3,3,3,1,3,0,0,15,0,0,0,15,,FALSE,15,9,[],[],24,15,9,24,0,"[0, 24.0]",0,0,15,9,15,9,15,9,1,1,20,11,0,0,0,0,73,0,57,0,130 -1,,FALSE,5,[],25,15,5,25,15,15,9,[20.0],[11.0],0,0,0,0,5,5,5,1,1,0,0,5,0,0,0,5,,FALSE,25,15,[],[],40,25,15,64,0,"[24.0, 40.0]",0,0,40,24,20,11,20,11,0.8750,0.8333,-5,-4,5,4,0,0,0,0,73,0,73 -2,,FALSE,1,[],5,3,1,10,7,20,11,[10.0],[7.0],0,0,1.6667,0,2.3333,1,1,1,3.6667,0,0,21.6667,0,0,0,21.6667,,FALSE,5,3,[],[],8,5,3,48,24,"[40.0, 8.0]",0,0,30,18,10,7,5,3,0.8889,0.8519,5,2,0,0,0,0,16,0,41,0,57 -3,,FALSE,3,[],15,9,3,15,9,10,7,[15.0],[9.0],0,0,0,0,3,3,3,1,3,0,0,15,0,0,0,15,,FALSE,15,9,[],[],24,15,9,32,40,"[8.0, 24.0]",0,0,20,12,15,9,15,9,0.9167,0.8889,15,8,0,0,0,0,54,0,57,0,111 -4,,FALSE,5,[],25,15,5,25,15,15,9,[20.0],[11.0],0,0,0,0,5,5,5,1,1,0,0,5,0,0,0,5,,FALSE,25,15,[],[],40,25,15,64,8,"[24.0, 40.0]",0,0,40,24,20,11,20,11,0.8824,0.8431,-5,-4,5,4,0,0,0,0,73,0,73 -5,,FALSE,5,[],25,15,5,30,19,20,11,[15.0],[9.0],0,0,1.6667,0,6.3333,4.6667,4.6667,0.9848,-0.3333,0.3333,0,3.3333,6.6667,0,0,10,,FALSE,25,15,[],[],40,25,15,80,24,"[40.0, 40.0]",0,0,50,30,15,9,10,5,0.7727,0.7273,-15,-10,15,10,0,0,0,0,57,0,57 -6,,FALSE,5,[],25,15,5,40,25,15,9,[25.0],[15.0],0,0,1.6667,0,8.3333,3,2.6667,0.9012,-2.3333,2.3333,0,3.3333,46.6667,0,0,50,,FALSE,25,15,[],[],40,25,15,80,40,"[40.0, 40.0]",0,0,50,30,25,15,10,5,0.7037,0.6543,-15,-10,15,10,0,0,0,0,95,0,95 -7,,FALSE,5,[],25,15,5,40,25,25,15,[25.0],[15.0],0,0,1.6667,0,8.3333,5,2.6667,0.8437,-2.3333,2.3333,0,3.3333,46.6667,0,0,50,,FALSE,25,15,[],[],40,25,15,80,40,"[40.0, 40.0]",0,0,50,30,25,15,10,5,0.6563,0.6042,-15,-10,15,10,0,0,0,0,95,0,95 -8,,FALSE,5,[],25,15,5,40,25,25,15,[25.0],[15.0],0,0,1.6667,0,8.3333,5,2.6667,0.8018,-2.3333,2.3333,0,3.3333,46.6667,0,0,50,,FALSE,25,15,[],[],40,25,15,80,40,"[40.0, 40.0]",0,0,50,30,25,15,10,5,0.6216,0.5676,-15,-10,15,10,0,0,0,0,95,0,95 -9,,FALSE,4,[],20,12,4,35,22,25,15,[25.0],[15.0],0,0,1.6667,0,7.3333,5,2.6667,0.7886,-1.3333,1.3333,0,3.3333,26.6667,0,0,30,,FALSE,20,12,[],[],32,20,12,72,40,"[40.0, 32.0]",0,0,45,27,25,15,10,5,0.6098,0.5528,-10,-7,10,7,0,0,0,0,95,0,95 \ No newline at end of file +t,i=1,IO:EXT|10,OQ:2|20,OQ:2|30,IS:2|20,IS:2|30,RM:20,RM:30,OS:EXT|10,IL:10,HC,SC,ITHC,TC,i=2,IO:1|20,IO:1|30,OQ:EXT|-5,IS:EXT|-5,RM:-5,OS:1|20,OS:1|30,IL:20,IL:30,HC,SC,ITHC,TC +0,,2,10,6,0,0,0,0,2,4,20,0,0,20,,10,6,16,0,0,10,6,25,14,92,0,38,130 +1,,2,10,6,10,6,0,0,2,4,20,0,0,20,,10,6,16,0,0,10,6,15,8,54,0,38,92 +2,,1,5,3,10,6,0,0,1,5,25,0,0,25,,5,3,8,16,0,5,3,20,11,73,0,19,92 +3,,5,25,15,5,3,0,0,5,1,5,0,0,5,,25,15,40,16,0,25,15,5,2,16,0,95,111 +4,,5,25,15,25,15,0,0,5,1,5,0,0,5,,25,15,40,8,0,10,5,-15,-10,0,0,35,35 +5,,5,25,15,10,5,1.6667,0,2.6667,-2.3333,3.3333,46.6667,0,50,,25,15,40,40,0,25,15,-15,-10,0,0,95,95 +6,,2,10,6,25,15,1.6667,0,4.3333,0.6667,6.6667,0,0,6.6667,,10,6,16,40,0,25,15,0,-1,0,0,95,95 +7,,2,10,6,25,15,1.6667,0,2,3.6667,21.6667,0,0,21.6667,,10,6,16,40,0,10,7,15,8,54,0,41,95 +8,,2,10,6,10,7,0,0,2,4,20,0,0,20,,10,6,16,16,0,10,6,15,8,54,0,38,92 +9,,1,5,3,10,6,0,0,1,5,25,0,0,25,,5,3,8,16,0,5,3,20,11,73,0,19,92 \ No newline at end of file diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index f5d6c43..84bcc35 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -360,35 +360,40 @@ in a table. The table has the following format for multi-product networks: * Negative product indices are "dummy products" -**Example:** The code below simulates our example network for 10 periods and displays the results: +**Example:** The code below simulates our example network for 10 periods and displays the results. +It uses the ``rand_seed`` parameter to allow the results to be reproduced. .. code-block:: - >>> simulation(network=network, num_periods=10) - >>> write_results(network, num_periods=10) + >>> simulation(network=network, num_periods=10, rand_seed=17) + >>> write_results(network, num_periods=10, columns_to_print=['basic', 'costs', 'RM', 'ITHC']) The results are shown in the table below. In period 0: - * Period 0, we start with ``IL:10`` = 6 at node 1, ``IL:20`` = 35 and ``IL:30`` = 20 at node 2. (By default, the initial + * We start with ``IL:10`` = 6 at node 1, ``IL:20`` = 35 and ``IL:30`` = 20 at node 2. (By default, the initial inventory level equals the base-stock level.) These numbers aren't displayed in the table below, only the *ending* ILs are. * Node 1 receives a demand of 2 for product 10 (``IO:EXT|10`` = 2). Its inventory position (IP) is now 6 - 2 = 4 and its - base-stock level is 6, so it needs to order 2 units' worth of raw materials. Expressed in the units of the raw materials, - that means it needs to order 10 of product 20 (because BOM = 5) and 6 of product 30 (because BOM = 3). In the table, - ``OQ:2|20`` = 10, ``OQ:2|30`` = 6. + base-stock level is 6, so it needs to order 2 units' worth of raw materials. Expressed in the units of the raw materials, + that means it needs to order 10 of product 20 (because BOM = 5) and 6 of product 30 (because BOM = 3). In the table, + ``OQ:2|20`` = 10, ``OQ:2|30`` = 6. * Node 1 has sufficient inventory to fulfill the demand of 2, so it does (``OS:EXT|10`` = 2). * Node 1 ends the period with ``IL:10`` = 4, and incurs a holding cost of 20 since the per-unit holding cost is 5. There is - no stockout cost in this period, so we have ``HC`` = 20, ``SC`` = 0, ``TC`` = 20. + no stockout cost in this period, so we have ``HC`` = 20, ``SC`` = 0, ``TC`` = 20. * Node 2 receives an inbound order of 10 units for product 20 and 6 units for product 3 (``IO:1|20`` = 10, ``IO:1|30`` = 6). - Its inventory positions are now ``IP:20`` = 35 - 10 = 25, ``IP:30`` = 20 - 6 = 14 and its base-stock levels are 35 and 20, - respectively. So it needs to order 10 units of the external supplier dummy product for product 20, and another 6 - units of the external supplier dummy product for product 30. (Remember that the NBOM = 1 for these pairs.) - So, ``OQ:EXT|-5`` = 16. (-5 is the index of the dummy product at the external supplier.) + Its inventory positions are now ``IP:20`` = 35 - 10 = 25, ``IP:30`` = 20 - 6 = 14 and its base-stock levels are 35 and 20, + respectively. So it needs to order 10 units of the external supplier dummy product for product 20, and another 6 + units of the external supplier dummy product for product 30. (Remember that the NBOM = 1 for these pairs.) + So, ``OQ:EXT|-5`` = 16. (-5 is the index of the dummy product at the external supplier.) * Node 2 has sufficient inventory to satisfy demand for both products, so it ships 10 units of product 20 and 6 units - of product 30 (``OS:1|20`` = 10, ``OS:1|30`` = 6). + of product 30 (``OS:1|20`` = 10, ``OS:1|30`` = 6). * Node 2 ends the period with ``IL:20`` = 25, ``IL:30`` = 14, so ``HC`` = 25 * 2 + 14 * 3 = 92, ``SC`` = 0. Node 2 also incurs the - in-transit holding cost for items that it shipped to node 1 that have not arrived yet; there are 10 units of - product 20 and 6 units of product 30, and the holding cost rates are 2 and 3, so ``ITHC`` = 10 * 2 + 6 * 3 = 38; - and ``TC`` = 92 + 38 = 130. + in-transit holding cost for items that it shipped to node 1 that have not arrived yet; there are 10 units of + product 20 and 6 units of product 30, and the holding cost rates are 2 and 3, so ``ITHC`` = 10 * 2 + 6 * 3 = 38; + and ``TC`` = 92 + 38 = 130. + +In period 1: + + * From b86ed6a3c942590edc755900755b2f178f410f69 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 09:46:50 -0400 Subject: [PATCH 81/94] First complete draft of multi-product documentation --- .../sim_io_multiproduct_example_instance.csv | 22 ++++---- docs/tutorial/tutorial_multiproduct_sim.rst | 56 +++++++++++++++---- 2 files changed, 56 insertions(+), 22 deletions(-) diff --git a/docs/aux_files/sim_io_multiproduct_example_instance.csv b/docs/aux_files/sim_io_multiproduct_example_instance.csv index 4642395..7a849e1 100644 --- a/docs/aux_files/sim_io_multiproduct_example_instance.csv +++ b/docs/aux_files/sim_io_multiproduct_example_instance.csv @@ -1,11 +1,11 @@ -t,i=1,IO:EXT|10,OQ:2|20,OQ:2|30,IS:2|20,IS:2|30,RM:20,RM:30,OS:EXT|10,IL:10,HC,SC,ITHC,TC,i=2,IO:1|20,IO:1|30,OQ:EXT|-5,IS:EXT|-5,RM:-5,OS:1|20,OS:1|30,IL:20,IL:30,HC,SC,ITHC,TC -0,,2,10,6,0,0,0,0,2,4,20,0,0,20,,10,6,16,0,0,10,6,25,14,92,0,38,130 -1,,2,10,6,10,6,0,0,2,4,20,0,0,20,,10,6,16,0,0,10,6,15,8,54,0,38,92 -2,,1,5,3,10,6,0,0,1,5,25,0,0,25,,5,3,8,16,0,5,3,20,11,73,0,19,92 -3,,5,25,15,5,3,0,0,5,1,5,0,0,5,,25,15,40,16,0,25,15,5,2,16,0,95,111 -4,,5,25,15,25,15,0,0,5,1,5,0,0,5,,25,15,40,8,0,10,5,-15,-10,0,0,35,35 -5,,5,25,15,10,5,1.6667,0,2.6667,-2.3333,3.3333,46.6667,0,50,,25,15,40,40,0,25,15,-15,-10,0,0,95,95 -6,,2,10,6,25,15,1.6667,0,4.3333,0.6667,6.6667,0,0,6.6667,,10,6,16,40,0,25,15,0,-1,0,0,95,95 -7,,2,10,6,25,15,1.6667,0,2,3.6667,21.6667,0,0,21.6667,,10,6,16,40,0,10,7,15,8,54,0,41,95 -8,,2,10,6,10,7,0,0,2,4,20,0,0,20,,10,6,16,16,0,10,6,15,8,54,0,38,92 -9,,1,5,3,10,6,0,0,1,5,25,0,0,25,,5,3,8,16,0,5,3,20,11,73,0,19,92 \ No newline at end of file +t,i=1,IO:EXT|10,OQ:2|20,OQ:2|30,OO:2|20,OO:2|30,IS:2|20,IS:2|30,RM:20,RM:30,OS:EXT|10,IL:10,HC,SC,ITHC,TC,i=2,IO:1|20,IO:1|30,OQ:EXT|-5,OO:EXT|-5,IS:EXT|-5,RM:-5,OS:1|20,OS:1|30,IL:20,IL:30,HC,SC,ITHC,TC +0,,2,10,6,10,6,0,0,0,0,2,4,20,0,0,20,,10,6,16,16,0,0,10,6,25,14,92,0,38,130 +1,,2,10,6,10,6,10,6,0,0,2,4,20,0,0,20,,10,6,16,32,0,0,10,6,15,8,54,0,38,92 +2,,1,5,3,5,3,10,6,0,0,1,5,25,0,0,25,,5,3,8,24,16,0,5,3,20,11,73,0,19,92 +3,,5,25,15,25,15,5,3,0,0,5,1,5,0,0,5,,25,15,40,48,16,0,25,15,5,2,16,0,95,111 +4,,5,25,15,25,15,25,15,0,0,5,1,5,0,0,5,,25,15,40,80,8,0,10,5,-15,-10,0,0,35,35 +5,,5,25,15,40,25,10,5,1.6667,0,2.6667,-2.3333,3.3333,46.6667,0,50,,25,15,40,80,40,0,25,15,-15,-10,0,0,95,95 +6,,2,10,6,25,16,25,15,1.6667,0,4.3333,0.6667,6.6667,0,0,6.6667,,10,6,16,56,40,0,25,15,0,-1,0,0,95,95 +7,,2,10,6,10,7,25,15,1.6667,0,2,3.6667,21.6667,0,0,21.6667,,10,6,16,32,40,0,10,7,15,8,54,0,41,95 +8,,2,10,6,10,6,10,7,0,0,2,4,20,0,0,20,,10,6,16,32,16,0,10,6,15,8,54,0,38,92 +9,,1,5,3,5,3,10,6,0,0,1,5,25,0,0,25,,5,3,8,24,16,0,5,3,20,11,73,0,19,92 \ No newline at end of file diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 84bcc35..792c829 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -113,7 +113,7 @@ To add the products to the nodes, we use :meth:`~stockpyl.supply_chain_node.Supp >>> nodes[2].add_products([products[20], products[30]]) -Assigned Attributes +Assigning Attributes --------------------------- Most attributes that apply to nodes (``local_holding_cost``, ``stockout_cost``, @@ -374,30 +374,64 @@ The results are shown in the table below. In period 0: inventory level equals the base-stock level.) These numbers aren't displayed in the table below, only the *ending* ILs are. * Node 1 receives a demand of 2 for product 10 (``IO:EXT|10`` = 2). Its inventory position (IP) is now 6 - 2 = 4 and its base-stock level is 6, so it needs to order 2 units' worth of raw materials. Expressed in the units of the raw materials, - that means it needs to order 10 of product 20 (because BOM = 5) and 6 of product 30 (because BOM = 3). In the table, + that means it needs to order 10 units of product 20 (because BOM = 5) and 6 of product 30 (because BOM = 3). In the table, ``OQ:2|20`` = 10, ``OQ:2|30`` = 6. * Node 1 has sufficient inventory to fulfill the demand of 2, so it does (``OS:EXT|10`` = 2). * Node 1 ends the period with ``IL:10`` = 4, and incurs a holding cost of 20 since the per-unit holding cost is 5. There is no stockout cost in this period, so we have ``HC`` = 20, ``SC`` = 0, ``TC`` = 20. * Node 2 receives an inbound order of 10 units for product 20 and 6 units for product 3 (``IO:1|20`` = 10, ``IO:1|30`` = 6). Its inventory positions are now ``IP:20`` = 35 - 10 = 25, ``IP:30`` = 20 - 6 = 14 and its base-stock levels are 35 and 20, - respectively. So it needs to order 10 units of the external supplier dummy product for product 20, and another 6 - units of the external supplier dummy product for product 30. (Remember that the NBOM = 1 for these pairs.) - So, ``OQ:EXT|-5`` = 16. (-5 is the index of the dummy product at the external supplier.) + respectively. So it needs to order 10 units of the raw material from the external supplier for product 20, and another 6 + units of raw material for product 30. (Remember that the NBOM = 1 for these pairs.) + So, ``OQ:EXT|-5`` = 16. (-5 is the index of the dummy product at the external supplier.) Of those 16 units, + 6 are "earmarked" for product 20 and 10 are for product 30. * Node 2 has sufficient inventory to satisfy demand for both products, so it ships 10 units of product 20 and 6 units of product 30 (``OS:1|20`` = 10, ``OS:1|30`` = 6). - * Node 2 ends the period with ``IL:20`` = 25, ``IL:30`` = 14, so ``HC`` = 25 * 2 + 14 * 3 = 92, ``SC`` = 0. Node 2 also incurs the + * Node 2 ends the period with ``IL:20`` = 25, ``IL:30`` = 14, so ``HC`` = 25 * 2 + 14 * 3 = 92 and ``SC`` = 0. Node 2 also incurs the in-transit holding cost for items that it shipped to node 1 that have not arrived yet; there are 10 units of product 20 and 6 units of product 30, and the holding cost rates are 2 and 3, so ``ITHC`` = 10 * 2 + 6 * 3 = 38; and ``TC`` = 92 + 38 = 130. In period 1: - * - - - - + * Node 1 starts period 1 with an IL of 4, and has 10 units of product 20 and 6 units of product 30 on order + (``OO:2|20`` = 10 and ``OO:2|30`` = 10 at the end of period 0). The on-order units are sufficient to produce + 2 units of product 10, so its starting IP is 4 + 2 = 6. + * Node 1 receives a demand of 2 again (``IO:EXT|10`` = 2), so its new IP is 4, and it again orders 10 units of + product 20 and 6 of product 30 (``OQ:2|20`` = 10, ``OQ:2|30`` = 6). + * Node 1 again meets the demand in full (``OS:EXT|10`` = 2), ends the period with ``IL:10`` = 4, and has costs + ``HC`` = 20, ``SC`` = 0, and ``TC`` = 20. + * Node 2 starts period 1 with ``IL:20`` = 25. It has 16 units of its raw material on order from the + external supplier (``OO:EXT|-5`` = 16 at the end of period 0), 10 of which were "earmarked" for product 20, + so its starting IP for product 20 is 25 + 10 = 35. + Node 1 ordered 10 units of product 20, so its new IP is 35 - 10 = 25. Its base-stock level for product 20 is 35, + so it will need to order 10 units of the raw material from the external supplier for product 20. + * For product 30, the starting IL is 14, the on-order inventory is 10 (of which 6 were "earmarked" for + product 30), the demand is 6, so the IP is 14 + 6 - 6 = 14. + The base-stock level for product 30 is 20, so the node needs to order 6 units of the raw material. Therefore, + node 2 places an order for a total of 16 units of the raw material from the external supplier (`OQ:EXT|-5` = 16). + * Node 2 again has sufficient inventory to meet its full demand, so ``OS:1|20`` = 10 and ``OS:1|30`` = 6. + * Node 2 ends period 1 with ``IL:20`` = 25 - 10 = 15 and ``IL:30`` = 14 - 6 = 8, so ``HC`` = 15 * 2 + 8 * 3 = 54. + There are 10 units of product 20 and 6 of product 30 in transit to node 1, so ``ITHC`` = 10 * 2 + 6 * 3 = 38; + and ``TC`` = 54 + 38 = 92. + +Here's an explanation of the fractional order quantities at node 1 in period 5: + + * Node 1 starts period 5 (ends period 4) with 1 unit of the finished good, product 10 (``IL:10`` = 1 in period 4), + and 0 units of both product 20 and product 30 in raw material inventory (``RM:20`` = 0, ``RM:30`` = 0 in period 4). + * Node 1 receives 10 units of product 20 and 5 of product 30 in period 5 (``IS:2|20`` = 10, ``IS:2|30`` = 5). + * Now node 1 has 10 units of product 20 and 5 of product 30 on hand, which is enough to make + 1.6667 units of product 10 at node 1. Doing so uses up all units of product 30 + and 5 * 1.6667 = 8.3333 units of product 20, leaving 1.6667 remaining units + of product 20. + * Therefore, node 1 ends period 5 with ``RM:20 = 1.6667`` and ``RM:30 = 0``. + * The demand for product 10 in period 5 is 5 (``IO:EXT|10`` = 5). Node 1 began the period with 1 unit + of product 10 and then producted 1.6667 additional units; it ships these 2.6667 units to the external + customer (``OS:EXT|10`` = 2.6667) and ends the period with 2.3333 backorders (``IL:10`` = -2.3333). + It incurs a holding cost on the raw material inventory of product 20, at the per-unit local holding cost + rate for product 20, i.e., 2. So ``HC`` = 2 * 1.6667 = 3.3333. It incurs a stockout cost of 20 per backorder, + so ``SC`` = 20 * 2.3333 = 46.6667, and ``TC`` = 3.3333 + 46.6667 = 50. + .. csv-table:: Multi-Product Simulation Results :file: ../aux_files/sim_io_multiproduct_example_instance.csv From f09a9b767cf9e4248bb2f488061daa05dc29c407 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 09:52:56 -0400 Subject: [PATCH 82/94] Replace seealso admonition --- docs/api/meio/meio.rst | 2 +- docs/api/seio/seio.rst | 2 +- docs/api/simulation/simulation.rst | 2 +- docs/tutorial/tutorial_multiproduct_sim.rst | 2 +- docs/tutorial/tutorial_sim.rst | 4 ++-- src/stockpyl/eoq.py | 2 +- src/stockpyl/finite_horizon.py | 2 +- src/stockpyl/gsm_helpers.py | 2 +- src/stockpyl/gsm_serial.py | 2 +- src/stockpyl/gsm_tree.py | 2 +- src/stockpyl/meio_general.py | 2 +- src/stockpyl/newsvendor.py | 2 +- src/stockpyl/rq.py | 2 +- src/stockpyl/sim.py | 2 +- src/stockpyl/sim_io.py | 2 +- src/stockpyl/ss.py | 2 +- src/stockpyl/ssm_serial.py | 2 +- src/stockpyl/supply_chain_product.py | 2 +- src/stockpyl/supply_uncertainty.py | 2 +- src/stockpyl/wagner_whitin.py | 2 +- 20 files changed, 21 insertions(+), 21 deletions(-) diff --git a/docs/api/meio/meio.rst b/docs/api/meio/meio.rst index 68df28f..7e53ee0 100644 --- a/docs/api/meio/meio.rst +++ b/docs/api/meio/meio.rst @@ -15,7 +15,7 @@ Multi-Echelon Inventory Optimization gsm_helpers meio_general -.. admonition:: See Also +.. seealso:: For an overview of multi-echelon inventory optimization (MEIO) in |sp|, see the :ref:`tutorial page for multi-echelon inventory optimization (MEIO) `. \ No newline at end of file diff --git a/docs/api/seio/seio.rst b/docs/api/seio/seio.rst index 90be125..a9d69c2 100644 --- a/docs/api/seio/seio.rst +++ b/docs/api/seio/seio.rst @@ -15,7 +15,7 @@ Single-Echelon Inventory Optimization finite_horizon supply_uncertainty -.. admonition:: See Also +.. seealso:: For an overview of single-echelon inventory optimization in |sp|, see the :ref:`tutorial page for single-echelon inventory optimization`. diff --git a/docs/api/simulation/simulation.rst b/docs/api/simulation/simulation.rst index f7477fa..c4dc1b8 100644 --- a/docs/api/simulation/simulation.rst +++ b/docs/api/simulation/simulation.rst @@ -13,7 +13,7 @@ Simulation sim_io -.. admonition:: See Also +.. seealso:: For an overview of simulation in |sp|, see the :ref:`tutorial page for simulation` and diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 792c829..41714a0 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -14,7 +14,7 @@ the :ref:`tutorial page for simulation`, read that first. .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For more details, see the API documentation for the |mod_sim|, |mod_sim_io|, and |mod_supply_chain_product| modules. diff --git a/docs/tutorial/tutorial_sim.rst b/docs/tutorial/tutorial_sim.rst index 1a2fe0b..2a71c8d 100644 --- a/docs/tutorial/tutorial_sim.rst +++ b/docs/tutorial/tutorial_sim.rst @@ -20,7 +20,7 @@ can include many different features, including: .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For more details, see the API documentation for the |mod_sim|, |mod_sim_io|, and |mod_supply_chain_product| modules. @@ -78,7 +78,7 @@ Data Structures The simulation code in |sp| makes use of the |class_network| and |class_node| classes, which contain all of the data for the system to be simulated. -.. admonition:: See Also +.. seealso:: For more information, see the :ref:`tutorial page for multi-echelon inventory optimization (MEIO) `, or the diff --git a/src/stockpyl/eoq.py b/src/stockpyl/eoq.py index adfb888..1f39170 100644 --- a/src/stockpyl/eoq.py +++ b/src/stockpyl/eoq.py @@ -16,7 +16,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of single-echelon inventory optimization in |sp|, see the :ref:`tutorial page for single-echelon inventory optimization`. diff --git a/src/stockpyl/finite_horizon.py b/src/stockpyl/finite_horizon.py index 648b2b9..915bd0b 100644 --- a/src/stockpyl/finite_horizon.py +++ b/src/stockpyl/finite_horizon.py @@ -16,7 +16,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of single-echelon inventory optimization in |sp|, see the :ref:`tutorial page for single-echelon inventory optimization`. diff --git a/src/stockpyl/gsm_helpers.py b/src/stockpyl/gsm_helpers.py index b3488bb..b740fd3 100644 --- a/src/stockpyl/gsm_helpers.py +++ b/src/stockpyl/gsm_helpers.py @@ -19,7 +19,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of multi-echelon inventory optimization in |sp|, see the :ref:`tutorial page for multi-echelon inventory optimization`. diff --git a/src/stockpyl/gsm_serial.py b/src/stockpyl/gsm_serial.py index 1fdabec..300212c 100644 --- a/src/stockpyl/gsm_serial.py +++ b/src/stockpyl/gsm_serial.py @@ -18,7 +18,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of multi-echelon inventory optimization in |sp|, see the :ref:`tutorial page for multi-echelon inventory optimization`. diff --git a/src/stockpyl/gsm_tree.py b/src/stockpyl/gsm_tree.py index 8cc6a79..2144195 100644 --- a/src/stockpyl/gsm_tree.py +++ b/src/stockpyl/gsm_tree.py @@ -21,7 +21,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of multi-echelon inventory optimization in |sp|, see the :ref:`tutorial page for multi-echelon inventory optimization`. diff --git a/src/stockpyl/meio_general.py b/src/stockpyl/meio_general.py index 5e1da3f..94c71a7 100644 --- a/src/stockpyl/meio_general.py +++ b/src/stockpyl/meio_general.py @@ -21,7 +21,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of multi-echelon inventory optimization in |sp|, see the :ref:`tutorial page for multi-echelon inventory optimization`. diff --git a/src/stockpyl/newsvendor.py b/src/stockpyl/newsvendor.py index 042bc68..d81a23f 100644 --- a/src/stockpyl/newsvendor.py +++ b/src/stockpyl/newsvendor.py @@ -18,7 +18,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of single-echelon inventory optimization in |sp|, see the :ref:`tutorial page for single-echelon inventory optimization`. diff --git a/src/stockpyl/rq.py b/src/stockpyl/rq.py index 3cc3555..3e0a611 100644 --- a/src/stockpyl/rq.py +++ b/src/stockpyl/rq.py @@ -16,7 +16,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of single-echelon inventory optimization in |sp|, see the :ref:`tutorial page for single-echelon inventory optimization`. diff --git a/src/stockpyl/sim.py b/src/stockpyl/sim.py index 2eab8dc..e057d97 100644 --- a/src/stockpyl/sim.py +++ b/src/stockpyl/sim.py @@ -11,7 +11,7 @@ .. note:: |node_stage| -.. admonition:: See Also +.. seealso:: For an overview of simulation in |sp|, see the :ref:`tutorial page for simulation` and diff --git a/src/stockpyl/sim_io.py b/src/stockpyl/sim_io.py index ff68500..4595d69 100644 --- a/src/stockpyl/sim_io.py +++ b/src/stockpyl/sim_io.py @@ -59,7 +59,7 @@ refers to the node's external supplier * Negative product indices are "dummy products" -.. admonition:: See Also +.. seealso:: For an overview of simulation in |sp|, see the :ref:`tutorial page for simulation`. diff --git a/src/stockpyl/ss.py b/src/stockpyl/ss.py index c8d091e..69003ba 100644 --- a/src/stockpyl/ss.py +++ b/src/stockpyl/ss.py @@ -15,7 +15,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of single-echelon inventory optimization in |sp|, see the :ref:`tutorial page for single-echelon inventory optimization`. diff --git a/src/stockpyl/ssm_serial.py b/src/stockpyl/ssm_serial.py index 8a19f2c..8efbf83 100644 --- a/src/stockpyl/ssm_serial.py +++ b/src/stockpyl/ssm_serial.py @@ -22,7 +22,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of multi-echelon inventory optimization in |sp|, see the :ref:`tutorial page for multi-echelon inventory optimization`. diff --git a/src/stockpyl/supply_chain_product.py b/src/stockpyl/supply_chain_product.py index b428604..818527c 100644 --- a/src/stockpyl/supply_chain_product.py +++ b/src/stockpyl/supply_chain_product.py @@ -43,7 +43,7 @@ being adapted to handle products. # TODO: is this true? are there caveats? -.. admonition:: See Also +.. seealso:: For more information about creating and managing products, and simulating multi-product systems in |sp|, see the :ref:`tutorial page for multi-product simulation`. diff --git a/src/stockpyl/supply_uncertainty.py b/src/stockpyl/supply_uncertainty.py index 21dffd7..33b7c48 100644 --- a/src/stockpyl/supply_uncertainty.py +++ b/src/stockpyl/supply_uncertainty.py @@ -23,7 +23,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of supply uncertainty in |sp|, see the :ref:`tutorial page for supply uncertainty`. diff --git a/src/stockpyl/wagner_whitin.py b/src/stockpyl/wagner_whitin.py index 8e855b4..44a56b3 100644 --- a/src/stockpyl/wagner_whitin.py +++ b/src/stockpyl/wagner_whitin.py @@ -16,7 +16,7 @@ .. note:: |fosct_notation| -.. admonition:: See Also +.. seealso:: For an overview of single-echelon inventory optimization in |sp|, see the :ref:`tutorial page for single-echelon inventory optimization`. From 0b90fcacfbb8119ecd1c9210f98f58b186d61a79 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 09:58:01 -0400 Subject: [PATCH 83/94] Add versionchanged admonitions --- docs/tutorial/tutorial_multiproduct_sim.rst | 12 ++++++++---- src/stockpyl/node_state_vars.py | 12 ++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 41714a0..b1eceab 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -42,13 +42,17 @@ The raw materials are products A and B, and the finished good is product C. .. note:: "Raw materials" and "finished goods" are |class_product| objects. They are not separate classes. Moreover, a finished good at one node may be a raw material at another node; for example, node 1 might produce product A as its finished good, which it then ships to node 2, where it is - used as a raw material to product product B. + used as a raw material to produce product B. + +Dummy Products +-------------- Every node has at least one product. If your code does not explicltly create products or add them to nodes, |sp| automatically creates and manages "dummy" products at each node. -This means that you can ignore products entirely if you do not need them, and any code written -for versions of |sp| prior to v1.0 (when products were introduced) should still work without -being adapted to handle products. # TODO: is this true? are there caveats? +This means that you can ignore products entirely if you do not need them, and you can build +and simulate networks just as you did in versions prior to |sp| prior to v1.0 (when products where +introduced). + Dummy products are identifiable as such because they have negative indices. diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index 91ecabd..2f96d89 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -819,7 +819,8 @@ def in_transit(self, product=None): To get the number of units in transit by predecessor and/or product, use :func:`in_transit_from`. - ..note:: This was a property prior to version [VERSION] and is now a function. + ..versionchanged:: 1.0 + This was previously a property and is now a function. Parameters ---------- @@ -874,7 +875,8 @@ def on_order(self, product=None): If the node has multiple products that use the same raw material, this function includes all units of that raw material, even though some of them may wind up being used to make products other than ``product``. - ..note:: This was a property prior to version [VERSION] and is now a function. + ..versionchanged:: 1.0 + This was previously a property and is now a function. Parameters ---------- @@ -929,7 +931,8 @@ def raw_material_aggregate(self, product=None): If the node has multiple products that use the same raw material, this function includes all units of that raw material, even though some of them may wind up being used to make products other than ``product``. - ..note:: This was a property prior to version [VERSION] and is now a function. + ..versionchanged:: 1.0 + This was previously a property and is now a function. Parameters ---------- @@ -988,7 +991,8 @@ def inbound_disrupted_items_aggregate(self, product=None): If the node has multiple products that use the same raw material, this function includes all disrupted units of that raw material, even though some of them may wind up being used to make products other than ``product``. - ..note:: This was a property prior to version [VERSION] and is now a function. + ..versionchanged:: 1.0 + This was previously a property and is now a function. Parameters ---------- From 8c54386624383460e5d60a426ac283092634bd30 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 10:02:38 -0400 Subject: [PATCH 84/94] Typo fixes --- docs/tutorial/tutorial_multiproduct_sim.rst | 35 ++++++++++++--------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index b1eceab..a669e8f 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -72,13 +72,13 @@ In the diagram: * The circles represent products. The number in a product is its index. * The lines from products 20 and 30 to product 10 indicate that products 20 and 30 are raw materials that are used to make product 10. To make 1 unit of product 10 requires - 5 units of product 20 and 2 units of product 30, as indicated by `x5` and `x3` on the lines. + 5 units of product 20 and 2 units of product 30, as indicated by ``x5`` and ``x3`` on the lines. * The arrow from node 2 to node 1 indicates that node 2 ships items to node 1. The lead - time for these shipments is 1 period, as indicated by `L=1` on the arrow. + time for these shipments is 1 period, as indicated by ``L=1`` on the arrow. * The arrow from node 1 represents the external demand, which follows a uniform discrete distribution on [1,5]. * The arrow into node 2 represents the external supplier. The lead time for shipments - from the external supplier is 2 periods, as indicated by `L=2` on the arrow. + from the external supplier is 2 periods, as indicated by ``L=2`` on the arrow. We'll start building this network using the :func:`~stockpyl.supply_chain_network.serial_system` function: @@ -86,14 +86,14 @@ We'll start building this network using the :func:`~stockpyl.supply_chain_networ >>> from stockpyl.supply_chain_network import serial_system >>> network = serial_system( - ... num_nodes=2, - ... node_order_in_system=[2, 1], - ... node_order_in_lists=[1, 2], - ... stockout_cost=[20, 0], - ... demand_type='UD', - ... lo=1, - ... hi=5, - ... shipment_lead_time=[1, 2] + ... num_nodes=2, + ... node_order_in_system=[2, 1], + ... node_order_in_lists=[1, 2], + ... stockout_cost=[20, 0], + ... demand_type='UD', + ... lo=1, + ... hi=5, + ... shipment_lead_time=[1, 2] ... ) >>> # Build a dict for easier access to the nodes. >>> nodes = {n.index: n for n in network.nodes} @@ -121,13 +121,18 @@ Assigning Attributes --------------------------- Most attributes that apply to nodes (``local_holding_cost``, ``stockout_cost``, -``demand_source``, ``inventory_policy``, etc.) also apply to products. There are three was +``demand_source``, ``inventory_policy``, etc.) also apply to products. There are three ways to assign attributes: * By setting it at a node, e.g., ``my_node.stockout_cost = 50`` * By setting it at a product, e.g., ``my_product.stockout_cost = 50`` * By setting the attribute at the node to a dict whose keys are product indices - and whose values are the attribute values; this allows you to set (node, product)-specific + and whose values are the attribute values, e.g., + + ```my_node.stockout_cost = {my_product1.index: 50, my_product2.index: 70} + ``` + + This allows you to set (node, product)-specific values of the attribute In our example network, since node 1 only handles one product (product 10), we can set @@ -150,8 +155,8 @@ products 20 and 30 using a dict at node 2: >>> from stockpyl.policy import Policy >>> products[10].inventory_policy = Policy(type='BS', base_stock_level=6, node=nodes[1], product=products[10]) >>> nodes[2].inventory_policy = { - ... 20: Policy(type='BS', base_stock_level=35, node=nodes[2], product=products[20]), - ... 30: Policy(type='BS', base_stock_level=20, node=nodes[2], product=products[30]) + ... 20: Policy(type='BS', base_stock_level=35, node=nodes[2], product=products[20]), + ... 30: Policy(type='BS', base_stock_level=20, node=nodes[2], product=products[30]) ... } From 63661158ef3849431c095ecbd4d35e365b5e4ba2 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 10:12:14 -0400 Subject: [PATCH 85/94] More doc fixes --- ...{note_state_vars.rst => node_state_vars.rst} | 0 docs/tutorial/tutorial_multiproduct_sim.rst | 17 +++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) rename docs/api/datatypes/{note_state_vars.rst => node_state_vars.rst} (100%) diff --git a/docs/api/datatypes/note_state_vars.rst b/docs/api/datatypes/node_state_vars.rst similarity index 100% rename from docs/api/datatypes/note_state_vars.rst rename to docs/api/datatypes/node_state_vars.rst diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index a669e8f..75f3d77 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -129,8 +129,7 @@ to assign attributes: * By setting the attribute at the node to a dict whose keys are product indices and whose values are the attribute values, e.g., - ```my_node.stockout_cost = {my_product1.index: 50, my_product2.index: 70} - ``` + ``my_node.stockout_cost = {my_product1.index: 50, my_product2.index: 70}`` This allows you to set (node, product)-specific values of the attribute @@ -215,8 +214,8 @@ Bill of Materials The number of units of product A required to make 1 unit of product B is called the **BOM number** for products A and B. The BOM number is specified at the product level, -not the node level: If the BOM number for products A and B is 5, then it is 5 at every -node that handles product B and every node that it orders product A from. +not the node level: If the BOM number for products A and B is 5, then it is 5 no matter what nodes +are under consideration. The :meth:`~stockpyl.supply_chain_product.SupplyChainProduct.set_bill_of_materials` method is used to set the BOM relationships between pairs of products. We already used the @@ -241,14 +240,14 @@ In a |sp| simulation, every network must have external supply—nodes can't just create a product with no raw materials. (See :ref:`External Suppliers`.) To specify that a node receives external supply, you set that node's ``supply_type`` -attribute to `'U'` (for "unlimited"), or to anything other than ``None``. The +attribute to ``'U'`` (for "unlimited"), or to anything other than ``None``. The :func:`~stockpyl.supply_chain_network.serial_system` function automatically sets ``supply_type = 'U'`` for the upstream-most node, which means that node 2 in our network has external supply. External suppliers provide raw materials, even though they are not created explictly as |class_product| objects. The BOM for such raw materials is therefore also not -specified explicitly, Instead, such relationships are governed by the +specified explicitly. Instead, such relationships are governed by the **network bill of materials (NBOM),** which assigns default values to certain pairs of nodes/products based on the structure of the network. The basic rule is: @@ -294,9 +293,11 @@ Raw Material Inventory Every node has a raw material inventory for every product that it uses as a raw material. So, in our example, node 1 has raw material inventory for products 20 and 30, and node 2 -has raw material inventory for the dummy product from the external supplier. The raw material -inventories are by product only, not by (product, predecessor). +has raw material inventory for the dummy product from the external supplier. The holding cost +rate for raw material inventory is the same as the holding cost for the same product +at the node that supplies it. (This node is chosen arbitrarily if there are multiple such nodes.) +Raw material inventories are by product only, not by (product, predecessor). There are two important implications of this: * If a node has multiple suppliers that provide the same raw material, those From cc54615bf782f96eac009d7f32db34f077861be7 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 10:18:35 -0400 Subject: [PATCH 86/94] Fixes to node_state_vars docs --- docs/tutorial/tutorial_multiproduct_sim.rst | 12 ++++++++---- src/stockpyl/node_state_vars.py | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 75f3d77..6404f7d 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -129,7 +129,9 @@ to assign attributes: * By setting the attribute at the node to a dict whose keys are product indices and whose values are the attribute values, e.g., - ``my_node.stockout_cost = {my_product1.index: 50, my_product2.index: 70}`` + .. code-block:: + + my_node.stockout_cost = {my_product1.index: 50, my_product2.index: 70}`` This allows you to set (node, product)-specific values of the attribute @@ -337,7 +339,7 @@ in a table. The table has the following format for multi-product networks: period, for ``r`` = 1, ..., ``order_lead_time`` - ``OQ:p|rm``: order quantity placed to predecessor ``p`` for raw material ``rm`` - ``OQFG:prod``: order quantity of finished good ``prod`` (this "order" is never actually placed—only - the raw material orders in ``OQ`` are placed; but ``OQFG`` can be useful for debugging) + the raw material orders in ``OQ`` are placed; but ``OQFG`` can be useful for debugging) - ``OO:p:rm``: on-order quantity (items of raw material ``rm`` that have been ordered from successor ``p`` but not yet received) - ``IS:p|rm``: inbound shipment of raw material ``rm`` received from predecessor ``p`` @@ -371,7 +373,7 @@ in a table. The table has the following format for multi-product networks: **Example:** The code below simulates our example network for 10 periods and displays the results. -It uses the ``rand_seed`` parameter to allow the results to be reproduced. +It sets the ``rand_seed`` parameter to allow the results to be reproduced. .. code-block:: @@ -447,4 +449,6 @@ Here's an explanation of the fractional order quantities at node 1 in period 5: :file: ../aux_files/sim_io_multiproduct_example_instance.csv :widths: auto :header-rows: 1 - :stub-columns: 1 \ No newline at end of file + :stub-columns: 1 + +:download:`Download table in CSV format <../aux_files/sim_io_multiproduct_example_instance.csv>` diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index 2f96d89..806de23 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -809,7 +809,7 @@ def in_transit(self, product=None): .. math:: - \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 + \\frac{\\frac{10}{2} + \\frac{18}{6}}{2} = 4 If the node is single-product, either set ``product`` to the single product, or to ``None`` and the function will determine the product automatically. @@ -820,6 +820,7 @@ def in_transit(self, product=None): To get the number of units in transit by predecessor and/or product, use :func:`in_transit_from`. ..versionchanged:: 1.0 + This was previously a property and is now a function. Parameters From d45879e2eb03ec008f39326dc3cb4a2b4549782e Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 10:25:21 -0400 Subject: [PATCH 87/94] debugging veresionchanged admonitions --- src/stockpyl/node_state_vars.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index 806de23..06f77df 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -820,9 +820,16 @@ def in_transit(self, product=None): To get the number of units in transit by predecessor and/or product, use :func:`in_transit_from`. ..versionchanged:: 1.0 - - This was previously a property and is now a function. - + This was previously a property and is now a function. + + + ..versionadded:: 1.0 + This was previously a property and is now a function. + + ..note:: + This was previously a property and is now a function. + + Parameters ---------- product : |class_product| or int, optional From 279c4ef7d01a0a2d51af0c2fad335c3d6b501fd3 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 10:32:54 -0400 Subject: [PATCH 88/94] still trying --- docs/tutorial/tutorial_multiproduct_sim.rst | 2 +- src/stockpyl/node_state_vars.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 6404f7d..4ad4a9e 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -131,7 +131,7 @@ to assign attributes: .. code-block:: - my_node.stockout_cost = {my_product1.index: 50, my_product2.index: 70}`` + my_node.stockout_cost = {my_product1.index: 50, my_product2.index: 70} This allows you to set (node, product)-specific values of the attribute diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index 06f77df..d8c2363 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -819,14 +819,19 @@ def in_transit(self, product=None): To get the number of units in transit by predecessor and/or product, use :func:`in_transit_from`. + ..versionchanged:: 1.0 + This was previously a property and is now a function. ..versionadded:: 1.0 + This was previously a property and is now a function. + ..note:: + This was previously a property and is now a function. From 244bce9b6c19ab579dcc273ece412f1154bdb0c8 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 10:38:48 -0400 Subject: [PATCH 89/94] one more try --- src/stockpyl/node_state_vars.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index d8c2363..e16fd80 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -798,6 +798,11 @@ def in_transit_from(self, predecessor=None, raw_material=None): def in_transit(self, product=None): """Current inventory of raw materials for ``product`` that is in transit to the node. Read only. + + ..versionchanged:: 1.0 + This was previously a property and is now a function. + + In-transit items are counted using the "units" of the node (or node-product pair) itself. That is, each in-transit quantity is divided by the number of units of the inbound item required to make one unit of ``product`` at this node, according to the bill of materials; and then @@ -820,9 +825,7 @@ def in_transit(self, product=None): To get the number of units in transit by predecessor and/or product, use :func:`in_transit_from`. - ..versionchanged:: 1.0 - - This was previously a property and is now a function. + ..versionadded:: 1.0 From bea3cc5fd3c4a96ff4d860bf8f4d768ca4bb0339 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 21:15:42 -0400 Subject: [PATCH 90/94] Add a space to admonitions --- docs/tutorial/tutorial_multiproduct_sim.rst | 4 +++- docs/tutorial/tutorial_sim.rst | 2 +- src/stockpyl/node_state_vars.py | 9 +++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/tutorial/tutorial_multiproduct_sim.rst b/docs/tutorial/tutorial_multiproduct_sim.rst index 4ad4a9e..91d3400 100644 --- a/docs/tutorial/tutorial_multiproduct_sim.rst +++ b/docs/tutorial/tutorial_multiproduct_sim.rst @@ -21,7 +21,6 @@ the :ref:`tutorial page for simulation`, read that first. .. contents:: :depth: 3 -.. _products: Products -------- @@ -44,6 +43,9 @@ The raw materials are products A and B, and the finished good is product C. node 1 might produce product A as its finished good, which it then ships to node 2, where it is used as a raw material to produce product B. + +.. _dummy_products: + Dummy Products -------------- diff --git a/docs/tutorial/tutorial_sim.rst b/docs/tutorial/tutorial_sim.rst index 2a71c8d..46a889b 100644 --- a/docs/tutorial/tutorial_sim.rst +++ b/docs/tutorial/tutorial_sim.rst @@ -288,7 +288,7 @@ All state variables refer to their values at the end of the period. .. note:: This section assumes that there are no products explicitly added to the network, i.e., the network - only contains "dummy products" (see :ref:`Products`). For the simulation output for + only contains :ref:`dummy products`. For the simulation output for multiproduct networks, see :ref:`Multiproduct Simulation Output`. The table has the following format: diff --git a/src/stockpyl/node_state_vars.py b/src/stockpyl/node_state_vars.py index e16fd80..f00d4e6 100644 --- a/src/stockpyl/node_state_vars.py +++ b/src/stockpyl/node_state_vars.py @@ -799,8 +799,9 @@ def in_transit(self, product=None): """Current inventory of raw materials for ``product`` that is in transit to the node. Read only. - ..versionchanged:: 1.0 - This was previously a property and is now a function. + + .. versionchanged:: 1.0 + This was previously a property and is now a function. In-transit items are counted using the "units" of the node (or node-product pair) itself. @@ -828,12 +829,12 @@ def in_transit(self, product=None): - ..versionadded:: 1.0 + .. versionadded:: 1.0 This was previously a property and is now a function. - ..note:: + .. note:: This was previously a property and is now a function. From c2733466ce98bef54f3207d98f81abe0c5b4bcf5 Mon Sep 17 00:00:00 2001 From: LarrySnyder Date: Mon, 13 May 2024 21:24:39 -0400 Subject: [PATCH 91/94] Fixing doc build errors --- docs/_build/doctrees/environment.pickle | Bin 708829 -> 925223 bytes docs/_build/doctrees/index.doctree | Bin 36241 -> 37868 bytes docs/_build/html/.buildinfo | 2 +- .../html/_static/documentation_options.js | 2 +- docs/_build/html/genindex.html | 404 +++++++++++++++--- docs/_build/html/index.html | 17 +- docs/_build/html/objects.inv | Bin 5050 -> 6097 bytes docs/_build/html/py-modindex.html | 14 +- docs/_build/html/search.html | 4 +- docs/_build/html/searchindex.js | 2 +- src/stockpyl/demand_source.py | 6 - src/stockpyl/node_state_vars.py | 31 +- 12 files changed, 389 insertions(+), 93 deletions(-) diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 14affea78bb5590dc13b93259bf469e2c386a252..2f438adb76b2b994dc35cfa2cde4c4a93967a98d 100644 GIT binary patch literal 925223 zcmeFa3A`M~RWEE?`@UM1_bbcGmE}8Evg~-vV%d_H$d(;T353{;=FarJGp*S?i==B~ zl8~1meKbT#CIs?;z!wNFyg+#HX!?|-VQtGc?XmulUs zn@7;ko;%ZB{XeJ9sXBG))T!#{EqVF2bIv`7{skNR-Fl;aqU5!YHF}+P%WDrt!TLLf zjb?3swvOGoD^qrpXkAkKBUX{V@bb!HQ)lPf5F*6F*h#G{y zm)^;5NS0T0j(NRaqXuG6jDjV7Z!lz4@JOL-2Bpey&;f@d?IN-4 z^&y^3q0CUSO5l|lPcPc44C;R6gkH2=>2{i4r#%WTjsOs;zE>T9k7i}cYmR~~@w>xT ztJ0et1#9_@@}SdcPIZ8OzJ8%J(-_o;Q={O5*!60s*{pQ?-pC76?Z9hw zn-xgD+=W!3s$gYVUK>@Q|IV;i^~(L>^mGG4Sw*$w0!8au^*|3Cd$oNH)DcbMp;557 z)Poie_JftJN`K(>%1qNs8ts~g$Jcu&s?A}|BWk!Q8pl%JY$2M%^7kFT?e-d^IN-M`4anrYE|hqIXj|o)H(ePv2jxzebkEx6 z>Xz4<@_G{;;u#v5n&ovH^@Fi^J1KX29_mZXv+g!J8C+EEMuQ*b|7X;;wsYLz{cup)ig z-zV^Eve}rL?9QUGwD**5o`hPxiEgEO6b-Ns-K}T%{Xu2Ws7eCQnJWU5VK=Bu5m!V6 zG&c~Lk!zKYYHn`l{UB`7GW6bH=`A92@8zv6Y>Tc+W8}+`qh;K=MD&W z;GJl+r#n(3^6C2F`qjV~d!X%&H5>SVDXR7wOz&fz=`qm-OR#14H~Li%oweE|{oS>_8dXKlKxS$&CCmz4&@cs8a@%WxyH{EsT?kDWUI>SL&?vA@|ykpNk zlxus(s~woBcI{!brv7Yes?(hAbO!Ctzb4DY~_+4QiLxuuFcV&>HZG(WX4z>A|+Mk#L!?+F;}m zH#cKf(Qt-hLs*1h*#)=m997Im3rQzLkvCr@{lgBdPw|y=0o?9P2(f;(tefq<0bXMpi7*zy#WXSpCe+d zYQg$3D;liezzlC0a2_Pv`m#}Q?&PR`UHyum9l=m80Z|xXYCO{z_h=SxL^u#9sbm3%4y3A&JTBOV{6w!RAF6ZYtF(Y#*!;WDV)!%3gkD zzr3M+-hP4(!>rTj^J;SXQ{yLR$gx&yVf(Q8=O4_3m_P(O}(UU#C> zL`_g|*q;iPRXd%d4XWz;kUMBVT-xxEP~n~I%F`=7rO0Jv_z8_F4fv!<@sN)q!KQtD z(BMx!$csslFNebWRVWr?!Lr_T_4-?$bR&%XCi=R2*Dd8rzbs1}3|80S5|uee*Q3}P zXa|F2I9i>8m%=Xyr1G$h(Y-OrCZEbUf$l@`0Plu2P0 zGG1KudekG9S8A0me1(44UYD~TcD$SnTOEO1n-xj>{Jjs&tk+R zyIy}>F!$5-=hmNBe}4UE>MtCxzlh9xuo%^X2fLJez;HAk8r4sMgP%KC59+5Qc#VD^ zBM%#Q((sn@au%S_>+cSm%}kiZRLTOfk-S`Vgg(50sq*ngja=I0!O~-uCb&b#9j|Xg ztrn4l4*u+@epUTye>-Nl_#SK!?iDm1PHO7o!D8kqQQ7VFEB$MD+4?p0@$k9&j{3FX z_W&KOR>5>c-i1o&N_o14z7!U#UtS*zzXz)@^j6?%Lr>%g2Fv(wc)ha7R_-d4!zmf_ zNw`D04)Y!RVIGCQed7_UQcUY=^Oa0dHd$2m3&cGkT z9Lk)sYSqsbuWHB`rlX#{2qy$_SPCLs} z2q$39uV}5I;lF&m(rd%hi0~6^=nuQ_yy0-ln~x~kTQDDE^G-C*Rtp9aMQIX?BBDuh zFW2if$jg;ttxwlyLKcIKOlHs~MJLMeWWazD?$heG%aW_xh}iTYOA7gn4j!cLv7TRx z1Vf&{9o$$AZ=OwpSg)0&gXI{xyN&A6+0iLhZmsxTZp^gFXM2P{zFEHvRnA~~Ep9I5 z?zGZdut_-B81L~7lVdh(JvU^%-mZ7T@4-3>uar>?GY4w_5tt3^miH*c82ajpbBwV3 zIrKXvp3V~%NP!6 z#uzMmbf2eMz~*QXF|A_;Em#qDeP%w+^DCIwEoZ?q@-!%7wFnx*2ux;Rkrqj z2)_rb7#ZF#F*laiIa6VkMlh5_fx!8c3{1cYAvY!RkeID0yM3j6Y8|5k54JskOG?p_ zWyAK-cIS9|B+GDK#I(r&?P!gbv&V;x+K68d2Ma#iWDdcY+FFE@-W(o*uNxAo-&4Og zw2}3v*AIl>VfAH5E8142Ipw!mI3>79Ms*ON93vlt=D6H#lz<{e1s(<>43qCU9$OQ^ zK#8`3(T6ebL`IL*?BaCg7{V59b-nJ_kA@G{oAs9bet%t!JUm1P6VR)K5wx&ea6Tu7 zC}(-ttzm|Xp_n-=p)`1)qmOnyRe@1~e-Yl{k7DqKB06nM)Ob8BQeqPW=My|?28}AS zeIWq9O{0I;L(GIiIA}?m`Pfqm?HCVO1)DJ6r)ecdiEgjlnPL%XHqDU?@p?wEPRd)G z87JyinTatt?=SwRst=FyL|bggsL*e>*`Qe|wdPY2ncpMFu`D97ajLAB@OxB6^n?(1 z3*$=Nk^$<)r2!1KEXM^!oS_$EzDaRB@-#yn&I6f|5J4%Q-(%r15&l;9I4U^K}MQMu>)$;XZ@9$J;D*WEy@V?Sg9qLBj5krYvFbWeIa2Rke9Ph1&zi z4h|Y-el&81mFCTlI|DSzhr#{xN@EIwQxe?Ep~a8@lc>!Wa2CSaSK+*1^ciQPrBEJu z@HJs3W9sGgr%{&8wZfY+`-jMu&Q}UUO z;dOX19kK4CM%|0#U1b}2Xqucdsk;lpVokEX;lvEXU2x%D&%E!xv4eZ>-#_-`{rB&^ z_rBZr?%Vg!{zHeJI+84$ub$?sby)F2Bp}#)-`<0FKXdQhc=W#eZf`b9o!(63vDG5% z-=3k-8X^B0i))gr4@YYqzZ(v7%!jPs9IOrp!4et=9twYA2B0tQAz08JVhA3LDhzKW z$KzueyRx2N!4feVGaC$YhmRJR=PQCwZ$|-a7RV3j8Y3{7Z>vKgHE^U z9rK#7Rm_d1crKs6Y~}^x<50B55l`m4HpX2N#wPw4yG27ACJgYA=vMtmo!4&*FA^C8 zLtl;|tP-4YfBBK~;LS#WC*;HLu?VM-k65pPYN}{2G!TpO7*Y_`uO5v}t}Z5H z#BYR4K~c4`ha+Xes9qR;lLXc(9CF#i>Dh(qvIt*>p|+5-4bc)jWO?9RMmBP1&}d;9 z3jvb&jpLo(QJTaYSQ5WeX;1@l|Oo7G+i0SOsg3B^tLgRtt=I(dY_vTL6*@zYoAJfbYy8deGmevmpmzF;v{ z+fJz4o7ipg`{d{yoe~p+jE0!LYXf^Yd0BY^tI`OC3d&ozW(vV!T%e((N%n9BO_CaI zmVmLG0vuSs!mJysB^XbtSX04j6jr5H59$QtTbu|1J#*w!iw z2~qGm?4P2Hs`3TZZkIcyW`HQ9uz{6H63k}0n=Tp@fUh!~0q>oom|>oR4@4G{p5!-J zd!uxn@ZN>ASko;d8ra4n0%}Gtuhy^=5Uu<{hJ`6AQX5@!Atu z3z5aPs$v2qjEn^5?pDRts$yblW}$O*ik7EpSlL7~2uIHeN_mmw)+-#8CWq0=F)eGr ze(CowP|vdINjbEUrzHG^sz|HRhOf|Tm789BhL*Qvp@`tXWS4gX#9_i3MR??)Y6{YX zH`gf&JQaaD08i^0y9Y{BRlQi1Bp;ZX2)ZqWY0#M!HxUKMVmx$-UL8{1qOe%iF%jUa z*Xt&S{odqMqdi$~(7J$nBqA+|%b(dGp9ycMr^XZ^_^xaw3VT6mO303ZL7?zS$kckY zD?NP#jTB*Jc9DhJAFMxvcOf=GVP);pH+7#zuyB$Safcs;s}N08L7*+1I;SSk+- zj;rTZi+jw`z~WpRGx%f5)!!VwZS(gxkmt)h5puSXC5M*1gnK5k!)~TBa5~C7XQ?c5 zmR47q-8%BvU>hk~6B;R*^~6!7;Q(%{al%6wPL!}Hg>mpR6jSj3n#4DK|#J+JiSfP+4y(>d{vRpKhB{NVKQOsFBB&jpI1|x?lAq%C1 zb>C{DiZqg7-89y_W+$X=RH$3Rhs3f07EpUVOdnLOFA7UE+6bG%;gLd$j<+l)jH-^Y z1rS&?6$>EIh~R1zV2cOBC*`g8;_xcF75-q8T3AwwHi}jr-kQOhB03CDu&j^syIW#+ ztH=p#W0VQ+pC8^27m&CWIIx31enFUEDLg-s!A9!k1ul#i2p5}F5d(uYLgqjuV034B z3`$|FlVoI~8h>_UQg_9CxE)26z%QKx0JXqCQB28+mEClZiF)vW#-7Zq*GFhh4 z=82M&%7Gvd}z?klCD zcf$uk1Qsjgz=+o8d3T>TCXC@pwkLx0MTVHMTz`xxFC?4SZ9_NslH!*z3adt zDS=I7s6=p)k0(4}7)prQ$M8N4lr*Ga8rIdKict{cej(|45Ea#Bw)`)r5 zR&==V_biGmpIj1!<0A?@S3cA!qj0HKiY@j(B8c9;<*ajcmO4N7OuM34;pMZ-H3U(z;PLMQ+Ni5d|gub@ncU^#3ZbG=3{ z#!M34Y-5sTSxus@NU9PE5AZXtpj%jbsjz-IN$CL1S*khAIAXLE3IVxB8?``_306_@ zzSrnXA`FCN@$eV2bz#rTVkK-8T&lyiscn%UFv(=|cFcpKWW$U?c+?@Iw2<2hlca(* zk`fUg1?LaYX?w80li?S*UKD{0e@3nkv1h?@nc-Yv-e9pmF=OJO8x&XM?^63iGCNhh zfx^trM848=9ry4*%a4thVspU8WQ$}t({Eu+6^KljN)z%Md{Dmb6A^yzQHa3gpiH8% z)Rl-~#!L_JR>1U$ycJZ0RZeolX3@yzM@h-RB>Giv$kx?qCP`MDQt>1hPv7GzVnCc6 zW?ErW;f)H74zUO{EX=f0+no?Tsv;qdS7u;S%g5`q@G7dpX!RjNIF4uu(W@lb@G6s& zKVO5p&N`& zQ?6b(okwa|xUr$cgKGU!b#&moV5?Y(low%(uuhH)a~Kk_fkr*i;G-Sg3-<}h2eBdQ zz!JH#8D8d13gs`15%Md?Dm?w4*a-I$g^$rn3tbmmdn5-umO}eD;`EUPPY=W|_Xo8o zKBlv!a6F+}gjw_lZXO1kg|NtJB*V;nDN4!Ju4ADN**(ZA6Rcu%#$tgtpoMz!Xvc%K zG#pZl4&DgcigO-9Gr?-w(;^np;Flmnfc<96VMzFZz)uC|V~D66Ekpf{Cj7Y?B}}33 zoD5cXkyb^EY%C}eV9^q(?a0Bz<$j6Fgw{YNkw!u#BkmazoRPR3dG_k?S=M%X2v~W& zQo|ceGXR+LNs8(c5M}llxwC znwA5PqUg$c1$%$kng+F=Ei6C)tAP%TfECtF$sMRc0-K@`RmlDpXt9{{`$3loAkdaf4$-An*T-l>rcP%$NtCU zueW}ClmBJ;>uvx3dH=KW*L%LU+W#B*>wVQf@xLN}edhK>{@==9U;W7s`5%_Q{&DXU z{%68pW9L2VPXBH4*M)!b0sp=7*CjvqZ~o`iuTSjszb1ced&fWf?~=cE-tb}n8}ir9 zdmi*ZDSzF2?qUCZ^4HT(zt4ZC{Pp0cUh98B{`!S?ztR7a{Pog%{>cAp`RkXje2)Jq z`RmsPL;oZ4*Q#u{gn6bZBEmR`GC2zl3@8C@2?a zLfcdq3WQIdvD>!NZ&ZoiY1UhR6l8yv1shyt=-P1SxB|#Pk^)j&;}vnVm}_sgozu+L z67YrbXSv&NdxQ*fCNEdU@eF5+K`&4Tx+a}FKDRRK9;81fd}H=pPR*vt{WKfw=1S6f z)6QR!JdNr!8;CPG%}-Qg_B0#V3H?91>DQ_~|8_mNEZz+wlU{1Yr z=op||wE6D^XUAq{H8$hEZVgVeaNCbUTRO|?Kg}YSnL~F@tMh+Z=SuICQB!?O+|pHs zC-^Q*8U9104r`^fJclLy0S@LERM?qd!4KWYn>M^;nRJS5|LAqYZE^MM3-W9*oPSGw z2e^>`xw&vGPk;}~v>HJgG=_KK?Xs0|RwK<6on}iF^q}FkVAa)Do)$BxydgY2?SMU+ zI&WA&<8zkX`8jnY67@9yE%og96#31!){_74GRPT@QIKV@X%X>9&tU&YY2q2$Kh0K! ze-zZ~$$<}F+{QkAuFltX#aM^P4)(Ut*`Z-PODU?6fksc8RiW zk#ka??a~H<0k6H*$AZSZP(+FzGHZr7Aebk-aLPyKg%+!1XmE{~vPcJr-KBp&E*Kb{KQ<tuf^b7iDuTYNtnI%$z=zIdGaKV`uuXhPbkFfcF;f>dx!_bElEY6m8Ms*7!_h zN-6C|%Q?+*+bx$V$=!09^4l$!DbbxSUmsZuVu>JSZ8MtKIxLrmO4a@`Y{`ozYM*9l z@)i=5FHe`RGDze?r38Bu6>v%6hwG3+&6hyU!D6wSg7h6MWt)oB4js1rh`R}tA&!j}OIQhP zwGb}^S<$N;7hCCY;Q8`u9q-+O^G};?pRt7C4`WjpZPwVZ_rZH(@3nd1h`m(Ae-;(A z+-EODpmRa|!zeMF!h32W2Q$%Tutg1a$`Vdeq7%))ANDLQ;X7vWZ8?szRX^zTAZ)mz zGQ(im09z61^-%sp44Umg@(zYph3a_(xFG zZ{q{}`W5^IpMDj80psyMGyG43|2fM34E+}VhTPB&s6=kYxn!5&EKzJwZ%SPVIUYHp z4FN}Rs#dfXYqY!AF{5;V`ZDgH4^9ek|6DwXO@Dl6C0-K2PMJ8!L4S&Ya!D>5yPv%x zN~0dgtI-F%!ZM_NV<|Fx9{7pqI@kia8Cxpi!rN#T(drON@Kt9bLI1^g`k;TBeKLjo z3WIZy9e<#>?8wAB$Zpe-Be4x6alx&N-M32ZO>--?H@ZrVKTuq1G#oleZRL?8JdZCf ztfl<2RYo75TN!=SRYv@Q;xZyf!9hk_j~vmr1Mv+vafxlV6|&0jALdqmfA1vT;;?cC@v?OC@0E^Thc4q6BSO7?-A~k z|58y2idhy-@Dpn=?#F%d^+%3G_ZY;rjW^k<4G2~%^4g;O(oDu2vtHw>asEJYjZ+xJ zL0+&TYR^VoS}WBptE}EOx3c;RS6T4~ipz=uMGmrBb>xURpCK+Nyi}AQ<`nHF;mqy} zb1S9Kxk`yYP+UqBM01eRnj=SK8hcz$E94z(d-}oLO6vQrlHv~(mlOp89VE5!$PsA))JyBp$yTC3l-%IxvEmDvebnehjT%Z!#v9ApMB zMy2z`<+W1XvdZceb1SQntE~6~#brf{Ne;4FdgMsY=zQnlU`bow`@^}F&F{O)hCfhT zHnhB!C>w4quR4TWlcwi10m}Idx32FkDnnsiX<;z24yJX5e*67+A2_eCj{~7^`q`qq z*=_5mT=mNzD6U^xDs_+zR&31N(73ENnnkRA<6q`hcK_%qJN`g%+0o*%gX}gOIils& z#KpEoyK9x$`FOc&;Z;I&ZoQGgIryslf#MRQMR*5^!OuZ*PFzllaLp>6-E%9QlB;z1 z1I497i3twU!CDqiU5X26DZgx$(fxBPqo=#dh(AzVMwGIVC?npIS00jwOKTzsqBr=+ zGF?;}Vq~GTkqmB@9}=lAIxp%n=VWk(oKV_I1}B^DvlFWi7$^`~NaIH^yGc3Q+r(6)0 z-{@1u1IuspY3-inH~O>|%}%oPX;qb-I_cAjAv*=pr}Z#)jI>WHJ}ke{rG^%LG&pW$8r#TiZZcdqJ4_(uxv!1;u!3BXrE^1EF00M zxhKm;^l7HWwq*J=Utzm2ee%xPQP4j5nk*a9Cm)I(0qv8&z_Jm28Wq{m&pwSvEF00M z5rG}~?33+f$36RG`&eG0Pd0?*CHmAySze+~Eu9_j>{Baad5J#LXs{S#kjgORxooSD z-rMx}8=CceHq32A_8LnkTtV+}W-lE|C^jCf6G!3Wgm;m%xFLK2G`$#S1{($H2@i8- zR>))7lZvr)Kuf}6v}OBcYAq~%>-&&^o2N_}x%|y=IGlYc_!;&ZBX(vwQXtveOIh+_ zeO#ms{xiv#(fXbFH&SVJ2uSV={l{qssE6 zGvR|}w5^K{{CZBWh z%onjxAI|goqpWga>K2ttePaw2u)p|-?qt7ohe~C+U z(8mk$p&6rdkrjVdjnU761H%~I?P`qFOLyeAh;drXjgwEL&dfORhJ8lH>A;zA0prB7 z{LhAQGUCeq3&T23(rE4I^H5E%!;1SpsElg?C)QRrhu zA(SWa5w4TDmi!vp*7T4!jlEWw;_Bj$-QzkqXQiv@%BzF5+u_JfsL6|=h#wS{qH5XS zFA5P?giBu*6;X~Q?_UKV6c@i;v?9a>Y&Y9ol+?i!`*#7y(zM;b5x3oWcO^a9x#xW~>C1)z=l!bygyLdX(TWHI&bBxv zb@2H$;BSr_@Lani-&VB3cI*8Y3@*)jzfW3kUe-lj_9jm<&$8ZcDOycsz5kR~ElIfx zX1%}VT(z8HOts$Mbf#(;jjt7jP~G**Tqg@|y*I9!8~592%0Z^}Ugu2OP{it@5OGDg z^ku_(^Zr!;LUHlOMO&1x-fXLNQU{-3>;1{N^-kNaeXyv)>_+XCidIAzZFcrUQU{-3qy4?O(bo6vi}x*Q z;kz)a`r}1wZ8zZ`WpHUGdW6U9!x1Zq1RRy0hEwM;Kh1{oW?+H!tg=FuVOGsb|^m zpD0>QWxs!nS1n1s3ueDhIae*G7*p-{i=3$%X5$4#AykKb9@oi&+wb3Xu1a1VWZLiF zaVBjj;-6IWvMJpoAHajmpse{j@+2#h){iGiMRnmH{TsJq~8r3<= zdMQ~3C@O{F!%EP_qcnP{Z0d~Xl?B--V}pNbMf9JjTA5I zqAUBjNCM9?Qstu6R4(4bylP3BT`(8#7o4k>Q;exD-p@HxHLU*0q7Z6Ke<9b&g1dNs z;9QlwI>>bKUhhoWP{iwsLc|r}(w7An7L{xYvxl3o|ga9^LAl_-|S4xW~>C1-U z=KZSxgyQ0hMSHn0-0W>lNgX_~mCZ>=^-FQXo%+J3<3%-Qx7q^+mu9v9L0WBI) zN#t3^`vpa-sf_pYc-4OBjQ1ZnS1qR)Q;qlQov9i&<8?(LRBwGP*GW>hI%~%JW6o8{ ztAkAA{Sjx(*K?gLxalrCS0%3wGEMix&ZG@RJi91FToEpP*)ZL_e-(gGTr4eG5n;O7 z`@NGo_*|N9ZXjdt1CMSA^`9xt#`IDKkvw~u(>IW?I$2W9 zI`k6u$p*c&5XZdt*;|LUQi2%2(d_j5<>_I&I%ss-{O%TYS9^`UOj6@ds*E$+TZi6^ zy8CaTkGImtU*cn7Gs@lt4upnOM%mL`Gs<|?*(b{>Ln}G=9Qw!KKqOxB@q0w;%#zD^ z+c_f>@ZvM!0?B1xTezurCGNc~@;df6gMYhdCGGR=Z!x$ur|nT`jd)oX71^y3$vMj! zeY0pamDBb$UbQ5fzFz!WXu}<51K;>ga6=yfz#~ECj@&0*fym?s{ZP{Bqi9E}A4~kY(8Sh7V)qd!V_p6<& zmQ#$W#{1WusTwxpSBpZZ-ug=q0NZf9?&tY(BhWoYBaPzV* znzFZc5_gv2{y|ZdD#QJK29X#8STL{qI%f^$6l1F4-r-EuuoqVsg-|_pJ8y0aZnz(G zu1a1VWE$@Kok<&tczRKYxFTHovSGM+|0)2XxcH}{y<8aXPcEF{enZ@FpVza8NrIxv zvK#DE3@*)JzfBr!Ue-lJ_Et_}&NA39Dq2ltuwTHd_Cx1szrnd`ImMW2u>ZiBs$nNy zUlc<1(ARODEV#k`q;pmB>LAl#f6SS*p@@$Zg@`M{r7s%>oA<8*5Q>ZE6|IOc*zY@A z2Adnms}42VGfi(|e-%q6o%YzhZFts$PH%SXf$pHuYCKkVZLe28UT+K_kZ#aW!#?h7Z@KEwci`LQZ47M3unlt!!(wgzIE*i31GZJ%_ zH9K0gn#vih^Q!&OIfJisu3AnpraFVKaHeVu52K~z*U5rAgMa2+mApF0bOzt# zOxjSy8;e5372(pC1sCLoahuQkR{;pcg;%s9!WsO+!Wry;jT`KZ7H`33z`tL#&UOR- zPYf>2fUlAo<7HhmW^eT*_ACSb-J;c02K?K+YCm)aeESwxXD6o^Qw{i-GgZTGTv`-D z_1KFT#KI>%-0fVIygJA<;QO3O8;aOl6e6w&m%eNmaNfTPKqxN0RkW821OBCjGvF7H zS&Z%wTcghtZMORbMfGO4-OpoiX}0?sX}ft@7iHNSJV`vuc0W_xn4KXexRM(3*K6l1EzzTTOtVJIexLZ~i!9oNZ%TkK~$S0%3wGA;JA zoJkvsI8+oOt_YXDY*=jGzY0JoF3u@h5n-`EwQv^ufw;w93X5HCbgV}E!KxlOD9oh8SNJrt)?>C0k7H*ozea?=c?rtW2(`9lQUJrR=lw&gzBYl z;5u1wqy0tas^rx{rqTYqGigH+pD79vSATRloGqix4dlv0 zjn=Sf$!cgx8+q|oSD)J6u&8EPHgc;oEu$r!&mhiHRs*Y(p4G6CBeieTo8TlUnGsFKh_@ATfkI{d*?$4V!bDH$U+Kg@W31AyjSVVOhBdGi;OhCZvtaU?giYJgB8aOA za5W*gGVH<^o#`8P;qzRoNmEPzJ1|1QV%7&oS)JU2gDblt3NpV;Ju?@Tlh$K zw%aImdNY&VUdQ*UgJ@wh(=%A!s+_2K-9dfy^nb^{h;dnRU!#50VoOe*fh`&LH(Us# zwizFuZdWeGrMO)=$d55Om$$(4sDzV&2o`%My1kKq4Gu*S*yj*=ezb3g<3&buC9ive#=@nxm7!(w;Xx z>@`L{)iBE`yVIGLVH|ER3Zdr3Pbmr^botdnx-2{xEI%wf6U`y?Um-R4sB?YnCZFn+ zrNOo{EklDx8AP&MJ*UQ-)k$~zwuBCz^z_Ph{^vY`gkRM{0e>i8a^~9^SsD7up#W}V~4{AGmrk| zZ-SNhI1uc0@h=U@M0`zgBG%6m5vQRo^Z`EIwTK#xzSD@Jrm)_!?*Ed2mM~ zo@sFFt<`3w-@o<9PlqmHNhIx7>)75?ZhM2{o!-&XA-3=5PP%rGUpg`ho!XxOX0XvL zp)nI~*7*B0*^UQ`Phi*{1?P2VN5S&$>;&U(DZlANsXT%yciXa zOK;5Cyn?OUabh8_$AplksFi3mDs=JXG})wyK&^g#u_%PHDxc>qB`JvH-avW#+<3^N zD8|^KL-&szn(Ys~R!kwb0$e#)T;ytP^D1Z4_CDik0xvI~=nJk4y?Ul6or^~ zy<8;p(&>#I?s?wW-AVdME6DY9mvbfa>gnQ8Po3Vx09;Ps9ns19y3?5tLtnQSg_w7J zZNA&X)=hMz`}g1bfW0T#i*OzJ&K1k6qw}}VaLy*k|4i1-j57y@c4|c-;@WXB_<{@N z!SOM^0EFV=&x@LCG2{Et+4bPI-cM76i3j-{VeF7xsndp5{|}|t_G)KE*;^acGs|oH zb!S>eyZTiIaaO!Gu`(q@85;_h%geme{)KbZa*7eTBVxkW9|>tFcjPV3R1JatX;BE( zMgExUWUk$jwflyx*6f%Rw6>-dzsa@m73a$2)xx^%HR5I>Sr=b&rfulrZ;C?9yDl!i zqtb6w$8_T&RvR_T5~P;oT3UJW+&GJd$q6pmK1F;^usBJmt8gXK>^{q!88KA0xG2QD zt8DY$e!nr(ra1220T%kEhJ*ORu)PRZQpveudArj2+cDGQoJ~{|XNGax>CAzlo$;a& zXF)qvEQj^ewPP#7weyg3#T>K~l16+PSYN#Jp=~!yS!gbF4Exc7Fw{6_^vp zMt{qFu9suZRm!WEjoYWd(?n-_q9u7Ux=i1hyrGnCQHXh0%9e*J$E8BlnMV5XlT?VS z=atTt%d4IXwj-fJs%D}Qp15QVIz;zj@tf#yevK~nCTC_0^}VquL|lCZCbnvB%x6*sAQTs`Eb6a{x$y_j z?%cS@v1o6V6Xkz$)|$N)Ql+yd%HMUSWi+yHGl;V|QC>%@8~Y!422I$Ib)@fX42-+H zYj3$^Zl(f;P=oa>sE;GrXd1xyF}m_5XX1vG*B6CQooEe%nDac2Eu@Zv@=$HNR+0*F z<=pCAxtuLNxPU1~osO5Rqnn(0Fm!Z7QHXieQN9(ypX5#B8MJ!07;ayEq$RBdYi^~B zw;mbqUH6O~vDLmM?4mZ_h6{Z4q5_%5gZ_)b4bR#-$eW4alC9&NubnVyZ*&P|qF^qg zQrS~C{@Po=pR>JUA`2jg&+j;5SOfINqSu?hAXIe%}x{5)Z#TnZg zzNlke#);kI-S_Fvm9%$XL!j6*#uskHrZF>WcDFNWL%#cpLa08nm#b*5S31}2s|+fz zvpuBs4tw!c8sjckM%%eMd6lt#dky@+f=YgbEY-sEQD@?YI_gCs=3N~~b9;2?;rw)3 z0oYGR=f?&-TLG?=mpWG}uTm%vj&nt803PSc(94UR=^J_pibBl0URK`cRcd308?AT` ziQeFP_@B;|$g77{+neBG0iCp%o${(<<9415%{CU+I8TOFKJHB3(8@;{#917iH|{^dH%g7&IfO6U@_KP2 zWGTR<{jbi|%`5Fq+daY6L{)NSi2I+N=^NtyUQr0u3BJQMHrHdd(hKVhjTF780$eYb zUp7zvXb{m0>kf=7Lob&&(>L^TVNr;*X)y{*RW}`~m z>$SW!TLIoW9&i?I{$4AWqbIr{S4Qi&&zZi_I_@nBG4FcWvaiwaHY>A~Z-dPqV-IewSe=spE`8HJfgQ9v+D_7qy3Ni1hyx^f>o8?fm#5SC*g)MkyK4@Yo zuCgoVO=VlR_c(t%QP}4SNCX60;Sy70%nhLn?%KPVIWdR7q#XNccDjP(Z#Vhp4o*8+wXLN4qe^#!1{k*e^?5&Gxn6>it|2We!TGY=nh_mSZj!`~B zBv*0lI1b^`T-~T(gY4qGQ@_qx6gkBnY>Q_zP7ufGe)4ObxiJ*;nxYV@lf9bjcCP*8 ztF0P*cEfAd#*#WnkoO_3%?~fv1@adxSxQdC12cYnD6&F^JM7s-9;hhU8mQO zPR*3njLw<+DX!J;I#)lhR>zrE&7{^GUG>|}Oc`qZR#Av~SL;NYS~GgAR zhGdL>K`B+mIr{JU&a4@V-dGeOuIK{3lXAcKkX-;maq(Y@wpi|d4TE(^@hanp+j4l2 zEuH51QMfDz&h3c|Gb<3c@O{dcK+v^{LdHppO5iBU*>;4%m4fh{W;hF z3jg)D{LhE^pU?0=Z{vU7%l~|y{+#Q7jsJQV|MLz0=ac*oy-6NL=(W;dkX}xTKlGkE z{Gpd8;Sarz1Apjrc9f)3i1CZgO2jWZoDP5JtgHh|eA)?pV1-Y+APy|^DZS>vdY_u_ zfhEIWEs3e`Rrz7SeVlp9FHK_)E;}EXU0RP)bZ$#o93o5?xilZa-)$?9`MsS!uA+}? z=wk;yJSJ!=F-w;or;jJ-r&(ajt$u4h7{vg!zWCP2CrJ9wFilCCG7nl}vAPd9LmZh6ot z_q?fLqgi9ZA)&k&4^opm&7`A#k(kskl9&2Lf>XapaP*5>>}e)J^@~KQevwSoFA}c$ zMN(G3NZjfdiJN|r_)jyrt6!u5^@}v2evwMlFH#BpA{Cuxx>3JKN$MAAOZ_5k(J#{8 zY5x}O*KOLbr)a;Prv2Kh{kl{8MLH%5)KN~e_YJ6Dq-^>{z2`JLZd?7LbGOwmQa}Bo zo^_g?o~VA&F^cLJou{aN(ZP!H*DzQ^$8w{ku+G#Uy?7LC2v6bGuCA3wx&AGk^e355-dH$f62WcbhhomV0FJSMW?jxo$4I(@Meba_Z?od za~!{yG;k{T0AE(sJe<+i<8Q|}7%Z!Gs_jY(kFcY64+iTR{fE40nNz`vav`>_H?fWJ5NU-8g_V^(@{xXzYi!gW}ky2iwHu9PEUIGLNmtGZ6YIka08Hd#l zyz;RM(j$Vc2XW;PU3eCLmvA`VpjT=48-r1O9LFf%&k5AV8tpLwJ_f#S#q_SxA3I*@ zk98?rjj(ldcC3OQoi03ad_@!&1=^kCxEcmROQXT)`6K@~FdB~ss|8#IC$Wc|Ug5tQ z_x#_&M{qB^+Bu}^^`*?0R~!6fcoMm|3Pp&E%(AZuf5CW7)0JVcsM_ta2Tl@;--iDD zQ~0L0F#qRq>7f4$^ck#Rt?7Z@16{PJwKy6MtEmI;K{P8I5{JeYUfJ85!EgUGd-Nsj z^EBHq^iq63<-ZJ{cpJvc*&j5cCDanNMzn;T9UrZYJc5;KNVXOLWGwNAhIh0o97@=& zGsGGuIF1)VB-zAoI9S#QQl8YL(U0V5T&Gr>zNPl{_ z_ViBCny}{0PwBy!m;CrmdBkHu)JSe`^vfVu?RkT^?TK)jtG!2%G!j?P9wID6H6HWE zcf_jG@&@%z4U#P7sf+^B2<$utaClE%xl4l(YSQZ`Q_3Ya3!+Bya@bS6#bS_52DVH1 zCMhODplHz7(7L%DoDVuuW(h-=ZiOV8PK2NS2$6B_lIyW2Pd#F28mWt`wdrK|Yx2MY zL4&-J@~+F2cP-ebCMn5GIEiBic)JH@@Oj}qllqvq;H7agyO_7JqxQPAF>HxUtta+L^MXO?|D^B z=6bUv$GmLZ;l_rIgvP|4h%_*;!CDBvC{-ADx^ZEpp|Np|D1vOj3_V0_yJRt?Axd1G zoEm1BDUnE_=A{9?*{!AuSEIMfGT3AgcIfY#9UEAPxog9wrHH?jL zj{20~TJ3HacA0Y!Z)kQ7q;mJW)i!~M#tEu}fooO-DpbeDG$4bSd)$~wro;L1SOi54 zU}MGrW&~6&kB?sQ649Y+w-$Y|4O_9NF=nX=N$g%p1JeY085JEH*9we9M<(TkrGm2f zk%l~mcu%7PgOiM{2HA9Mj-;XQX|$)0IT4lZ6vkkVP6np36;&>H<6 zat}+niQTWM0#-qx^cu$?HF~?JD%GQ`!u>L8+#j-2QRk+<3D6q->!muR!%}Y0D>>2x z{&i%vQEA0;gyx` znKGR#(yx29@=T{wOO<|J>ULy}I_(Ie`3iZz2Ql0o3KuoBflh^Q)7!ZO(`ZbJZ0|B9 zc+;})u!nA)M(@cvo0k<>qs=)-6VFdPuXGuY2C_!|R<$xzw(^=Lgu8PJA&Z8_(Kr^K zy!Oy5dzD^0T?xt|PglB*s8O33bnuGD{Gz`#XO%6m8r?}TqQTuRGq;`LrU^T5i?af2 zv~RQ)DQ6DWYI>b6?i6^951dofY?iSao9gxD?b#AcqcP40>PLqa?8CtVW{L^P+nRJl zjoMEAUU_;ZjbLtXgt?1h6#%Nye9{b>P&kMf{xr?2bgL;Rcq(X$TIL<;S^x;HR2k~`?O=x(h0rclf~g^5FI z1WR;Rx?^E$OQD+AYFTkL(l@XocF#M7fxJd51zls~Iw~kVFz$e-kk30_SWq>xto8}c zate8u+9#lEY~0Ail;AR_@S$R&*`U1Nh89=i*j z!i9_Bv4fjT*gfevV!{rtF>yV$4C~0B!b9GOP9nC(!p(`rxNnof$XyO2k+qVXg2v9( z#E$ezQi$h`w`h18shxC7_dQbR-QrML9aJOA$AY+Tl0w&MEQsT3q{k2@L57?$LqkZJ z<*8{4>gg6oAZhS8fiDbr#J#5o1(lwXPC3RW_c?!Gd*txQDA7pp|P}6IX&GD5=oJplOl_}HpT?ih+gki>qz2-*T*}& z^1MXlcQ3CJ3GEQ@&E zGS03<#A!}UzJ|w1c|PswQA?W_7)zV%+$+4Xd`o;qQ{0FyWNu?ecOh(I=KJ!}7-_di zcYSdp4{!isfe0z2B1 z8YmstOS$*Rb_3e|u$*WM zyGdfup433EPix?psMHa%5CT`)o^1(AQ%`AVS6T8wY_LdX z6)B85ua?I({0k%2GS2E{379ssxJ@&Q0x4z>RsOxsqkL53>`MDQAnm8+eXW{9lOqjy7ugJYhmDlglSthKh2 zAy1THAcp5d>;ycmucK5r!B?R?NBS&@fsxSae=Xk_RnFD0-1Qtq*XWL8ht<)1RMmP( z-YP3>jplZ*hRumtjoH2TFj$S!F1&aI+385N#R7i0I$LeB8MH;Uax_=5;=HvqX=pqk z{1M%Nkw)8H!U|iXiLER#S3ixcnq=gyvIehFzAEBP%up%?R4 z)Otu>s&-FiH~AvWGPC=vJChG*;XpPlwcweTwuOi$>z(1Oj~R_D`tDlR;5EuuV}C8H ze-=^q(IG@O=~4HdA9{qW(c4X2FmuAwBPj7ci?q9bEkrafc2WVE@0La1UB4Q?Nt$QjcQ3u3{JqF%=9YVdRC=Xlq)akI0cRV z4lWYr1!a+TuXO}mqk5eXhj4(h2&=rtymi*`HQM9YFo@sFkAE!F}V8&M$k}{t;Bp`)wFpTUC`C5qGAE=+*#hZ5mv$ou+)pa{yv(ZeB8 zt5u1sF`BNMPB3YtGwH0eS}3XR#=NFkze zvqvpXYuVH3oFqjqY@8$z(751+GR*T%r=2wGv(aYFG=$YC@)jK4%Bg@PZ!MFw#MgM( z(ZxA7nE87wd3)|^t-)#(ahf#COi!of(z^wqMx_*HRbmxI?D9`1=+e7QY>oC+IZ3LN zluY|rl8_oDktr>2rdKg3YG7+Rd>u*xYgBiL+$|oAOQ-45Q#4qOA}j=pJt3wkHtmFq zWAULWIzqTv2rB`N3+#2|g_v++fj9SSnv|2`n>LaWP>otiBTIp7Bt{E2T(<K~@U?=7J9WEFyuL1#u1kF>Om3j3Fc7}iaDEsF(KQCHiG;k^ ztSR24WiZ!8;89SG+*LBRmrl&7F^Ah@`x>cIgo$tkEFN>A#w;tC6#1~VC=0em{5o0B zT%?nNTQ<@LvPKvgPyH%(k7DTo2(pdpH-wkH>_JBF(f z-HDq#HkpU2ODm28Yhyltxyau@_ZLDs7jUrKBB2*BH2A zy3;#OCs~IPei@)kbwQF+I&4NJk%Gp^B(`5Pz%Ly-mX8M){oBAb@;DW{*Eoh$IJt|I z&J8~lTc&~v!@z>eG|+;r5r1;50Ae}D@!~10xLDXsN*ZH0N-m5lVIwWh-l3z~Q#f() z_)Tby^p$dlT`EPFNuxy62wkNz1ylQ-ORPabYNW=s?7&oNZc*+?N~1>biiDg)n#ah1 zhRec;E!FT^nF(mCk)CJx^5y58dk*~zTofk>Xq6i$hdAF%)J2*asz&fy?t#m5#7Np8SBq8>YOa$)_!iGtW)OLDZjW%T3C?yPLDU{gzn42uTTe$F6hOycexO~cnn!{k`=Y%-ZBVsfmMG7nwGLtovN#VpwM(2cPT*k7|+;d_jqj9p$T%0l_kPwAQkwAQr>IS2( zY}cu^6#_O4pSt@wb~;*(cSgh9cH0|a!F?3c;5EwEM{ijdwnNcJ7;v8#*r;fHTt}zx z(JOb^-my#(xZ5BdU!%Q8yO&o8?$*FcM&sn#=)5VbB_>3!peIT=vCQmCQFM*&HPSiD zB5J&#F?lb1*l?uPa<|_J;po)8@CI4;?xIDzH9;lpg*RxrPYP@S>cqY9Aw4}t9k@H? z_5d}fYuUs(w{(dBm#*i3Obe!6Vx0Fg({Gh=a38ENUi^1)eA8C+ZZ!6COTW_`(!qlK zJbqT&D&O~Q**zCQK}<_+P>ftJ*#WgSa<`>S-W_rgQeZ*lyhN_sSTNuIq4qNd&}6|GJZq(=Bj{mQgA zpcjnE)7V(PPG$|&v1C!27Bo)I^S`Wh0MWuDdlw0YZ?_!<7unjsxEXE!cXYZqR0*$% zMe}d98Us2p1;vixG#>V{&$Oy=I5a}#X(<*;S-@efKC9L0LTk4k^gL|D+-j>6yA`d` z?OB9V8U%r%K5EsF>O&WE)<(Ql90v<|UH{*X^4~SWEE^c8mVhp(N4MFPui6pVnHjH zm;}`0VQcyu)|&jUXpKs|c0SToT3(}5=5Nq#0y*BWwA<0fbrZXTzu zEuB4z0q)h#^5~6{1y7UEQ^Nw)4yMSBHqC^2E;>7!B%7`}f6hwRgw@F3Hs}r8RU!)C z81^7{s%o?oFhdpot)@HE%%QO)o4Lr%sNS9|jY8h>K>Y!P5S(yX_ zQWN2m+TQU#;z~7~5K#Aqy+(h~s3vqLg$|->d{CFMH`@f$$W3}DaC#p*_zLfp%0oxl zo(LTcMI&&NycL}*XH zSnc3dRqbJC$Y|#$sb)YCk_liM(cNvlY7HBwn8vZSvpLLe=G%={WP)f!cH-rMII)aV z$`s$F27L5!4R{Yuh{w^(VF$%dlgIdh-l=`+DuaLxMk92a*X|E{{2kzBB%3myyo@O> z-jkc;nk&0tn8Q*UoJRPDcu9HMTxu1S6BxD!D~?8L&(yHdK184IY0aKVZ7>!U^ zCuVX`!W3h4iu@H3n{sl}74VF2$*1 z))UAIAdT2fm~P|LFt0ppV~cd1hIuwHXSWkmdr43l!Rug^k9C?jV6RnaXY1}V(^f^F z*PtgFz2oq#>Xd9(txadP3pE=J1*QXN;CJR-PPV#ZeJzGL^uBj;E2{)nl)4 zXC{I<4cYz0w5tXNC*k>@(WV5-rv2WdK*Xt(Le;(Klmo|R;XIx2UP8|Z zZ}&0nP&QLu)iE@2l=>BP=&)o#cnu>I#oIJdTy8|=nw@@MCS*Y#m&HRUu>w({U=2d- z0coQf;}|TQfDUPM{XS z)QH{~@ssG$yabgK8zUIQ(}+Deax=nEUYg1gNTwNq)kt5D_Xzd-ShaPjWTFnEU>ccQ z!aET@@>VZVhZanYDBd&MK}JLmF(#MVC7LoFP9t@jx>ulv%KM2a(2A-NesY`MY=~W{ z$R}%eTCSEfvFX@hHPUyQWeU_??J|kgJr!MJWRLW@UDT`sA2GrjnnvhWd8#GSg|+yf%W)RhF~SM{F-K>>fpd=cxK)^hU{w z7}n$StRDW?wCZd&ykW2N=qT6}cY*0@lzF^ZvO{gXYI$w0C8~zU!L_nk_+3gs(8%18 zP^f&oF{mRyB7Dtkf*s>z)slV+**K!c#!Zq9EQM3L8RgjEHH2`R21)S;PFoG@8f^=V zM(}Q*UM&}UV-z0Z>9q}nKC&0!I0GuFh8S>x;L=8QrAcE7!USn$*joEh)k3w@Ug?AZmi$)0*vc(P~+SP?ATXLx7mFQ~Irvh87C! z8=An(MPIe8opkGhUfFU>R)1f|Mpe5=dRWmk@*3Fu~3QV>G8Dsk~u6$Ujm z-%^)NY79;zd4nom7XCz@$|)Z~Js%|}pfpmqsG=dM+|^SySAkgQnf1F#mB-C+aVk$0 zRU=mrQIZNxtL2TVG$PO}&mn0=N|l5HmE)`~N6Cd)8nJQS2l7(n`AA6mI8xptgX$2(&_=nP-ZxY`8?*ocztOjDUzTb07>N- zs>@Mz#2_`&Pf?G^hVDXJO|%tIly>O%hnSqW=YLYOeZq~1gdKZuE;h!U3tWuax+{9+ zN7H&`k9>*EvMu!;{QOB?+L7o+`VClXkAtwTedQ0+cN=M{VXe#v-J1HO)KhnP45Il1BtS*^DT zWc^VMdN)CLJICSA=4pcrU$sGjZ+Six?-w+=ZZ~E-Vyhw&1HIk=FU1|;#oppgDk>si zDHN6aQ{h?j=>sa-8zKq0(@t_NO(>{BCXq}flC2zXF20Q0t$2S!0- zWWO3J&PW`_VVe={M8_aD2aJeZW9EJ-6`b0G{lJLM%r-paW<dj z2~LwwGA)g{Ly|dum@HfZ9zZ%H7We03F^i(c=;63ZlPl;V%)8P!%}iJ*NI=NWB zi#Q#}D>H2vnB#S{158jw2uJmA{eHA-U$5OtsG?Q|O+|${v^yp3SIGNcYrLD`n0}*W z3CGaYD4$p1!mydj%`M23WCv;d|ML$1=d1kBr}>``@joBrf8Njke1QEK4ukXj{^*I( zxc`c=bIy5U6fEO{qig>ELYV{S41>jRw(HSCYuK9^5RYRcFT3+mls)BtoPB;BpC|p# zvCnt2&-bv;x3f=ri`q$cy46XxE$<}Tn{?8ry*wv<+JkYDZNWI{Q!@WapYpg*vh<3R zK4li1WC7xnK806LvFPea7BV~OQyl0dn-QI4Zr(}e<(>4&CppQC)=8hb|4G)2PWmLf zlT36ceUjWsp9FWxC%K*UNo*&5lG;h1gm%&=nVlR;v7FbPjR<8t*dlv{ekw_3ofbTveyKY)dN#LV$u8CgWl}uWzYc$&VMHq5iI3u7@Zo7o<9nd1EwLD z_Ib$1svYX!#ZunLf6Z0roFg#aOBhSo_DunymXDJmN_0GhhVuc!Ss~Bi5m?H7O2OiZ zGT2lHA5X*luoW{Ge=V=l*0BCJVJ*jmkZqqA?5Q-R6!v6dK+QYWVC`4~{(Bp+nxm%x zi(8Z^uOWWgT5XlMkOE0@=nA&^V>CtjP*l&Kvx2J7NeXDQqal5vI8wc#A^oitNkw#1 zc+!>o)#5;1jiYZ^ft1&q!jZTIr&s2+Yta8d(D4SCtDQtL^)~dNYqPHoS$Z6GZmYX=pEfX`H6dZYiLU<5!Vv}5DQczn| z)a)&M`&Y;v4cGoUJnR29#t}a5M06l0+TnAhee%+Se7mZKw2`>bMxaPF<&()^r5-fU zX@v#K(V>a4dOi^_hNh<|S>_=U5r;uwtChgM!UU8RpVcIFv6appZgjBW7Vkgr&62#t zSfNw7%u3}>H!2ZvF@Kh2ookiZW+fA`Hx63yWDjHtztRe=GP5JhK?q2+?VC*$M-{N6 z%CO}|WBVGy)@`I?b4{_9jQeX%3MvAWi}je@WT+D+s-vt83(9bJnYb$0k&D}5x5l;` zD}A#Tqe*>_N#!2528qdQrAEgm5G~d8BW@C_&XY_+Y9AnN2Q4Gmj-yJ74UYcgLJ^~ zzz%upW4F=uaK@6(^j%gOs+GFY(AdA%3ay5Ke9-*#I4ke>SqZ5076$?v;}2MIm5-8+ zE4+m25Wyr3_8}{*vXJSpIFpqh;}Ysq!+xd}Tb+HBfsMV>J-lLpwwXl_`W9Xr>uW!5 zrJyEr=@irnk4?PvSeMIltjKwJS4mIAy*ztelg>|CDX0*3I`2~Q!m?sd9s*M>-4s=< zB=S}w?5k-MYE}w)yHo54HgOoHCZ(A(BGAP#2y}oOWd!x>kkL#B`&cyszLkIqSEQ>! z%0|O%Suxcao#~j-g9#7`Vebl&ZVhYpT`PWGsWVe8PgAxM=vxWgo!iJGep_kx8w2fy z@%FkLvyxJNPP(kbxy5CqWww>?$AmO%1y<*gr2`K-17swyRc5P%e#(lTSH;2{V}@L2 z&J+`@)`XsG#aAAFI`>w5ymcmS{eQ+vC2!-Orq{;dOd5UgexVgJuR^)W57Ra^k({&w z=N_uqSP}x4r)MHN^pT81NG+3Fqq0@2YY4eAI&cOqIHUSeXa2}yqJ z6yIiKQphX*sE8N^jrCWUzdOg6Hj@3_OQ_^Xn#w zyatR5JUn08bZ}m6Lc4IE$HRGzNkRn=vKyq7z8qvNF3xLB8ZOlcduzaqH!vV>Y|N(WTtK*M~84KuI8B5x%b$b~27 z+P&MXdHy+{^i9e0(ztz}37fb6idPNsgC?R{=t-9-RAi2mA2IRrdi|Ois?5yvXg{3p zxqZw;SFyEpZWHWi*-q$_CZW6?PR-f79ZWEg#it4UGbVCgI~TquNc0Ujbhi2E=ZQeP zm*kyMha@C4&ZvzC9=>QJkaxT>30S4{Wm8IdEk`V(%(~;(Ot{=r2=qaA0FS1{Z<>I4 zMI62)jfZy;oaHZJ)8M~l!soR~`Z3(mP}H|g&~C_Qar~P;6LG(g3 zAtZ)#?iDsR)S{@46F=utgIa8bQYiyElzoh5JT0>VCDpCxaVX@8s~i=Ev(k#Aa#U;# z4ZC!Nv}Obt)*36;wpe=-ZN#!b#X!~*h(6a;yT5d9QdXiE)Fu<^vIJ&g27*1l#e7_4 z@9CTvYfB8^LK9#|0(~~M()=c^*<4~GT`G}8)-X;D!+0)U$rnCNiD>>9o{n@{W#w#7 zMqhVuP`rgtbOr{tomkPjvzqhf#4G6wGz|7?f;GCja>jE*hdWtuylZ0`+cB{?SJ9-g z!%FEusyHn|DYYsma7fsR*iKp;6E2MqtJrl`a?0_`TQRb3G6u|$CkZ(|s4K_H1(=K; z&NA2WueaeVk0&p_u&X-ujW%rM^EhH#*}vIFLd~)rNw9a)YeNIm!EH7o?mFnR#72J7 zqSjcSYQtBtx4f0;H`+%n=zDGG?oHFH&BU6{J{z!#qU2?pl5cAbI$|A*Al2DwQ}0@L z6BT`^a2Ji4C&3i^bQ4=Sb9wo<`dtkEeiL5BB=f?@1}z5spb4yEZ+U@@;fz5aGNDzd zIWIH~bZk<_XqX-9Stb#8xrgqwX)~W~!n<2EdRceW*<{jrc&?DCH)%GYY$ChMop@&b zlrP;xlXe;VQzj92xf2m%*_gq5CcL|~CwR-6IwMdw38ZKhZ0)-@fsO$zSpbNR4Yj0XOw39c6G^Rh2r*>2(wOni4cjNIG4XLhUOCboOK z_RvY(aa04Nc8UtZ1F%t)30*MFp^0$8n~#g|AaKtPCT;-%5>f zFbpBZC*Qi)85AH9BGZhwQ-w&=NxaxbLY+>bOE(g*_$E!%UWSJw6E!vOH6GI@BypHu zBp$RWntD}FCK9&64xpiWC6)-URz~#5C2KB!Zl#hm zGqA}=Oe6W~mmGB%_+MJVlRP9lc$g8v!;YGS-fo3Yn#J4TMXQSL3t^1E%ZlvM+(m){ z*1ITYopvf{tiRVvz(wr5Syn6E3Qj(fOBIa!4_LufMpt%UlB+Q~*B`b5CwVG1fkPIS zw^>Im&0kw-Bt=?nG!ne4X>x^_0w}oqB_Jth1bYw zBtB;&;Ub^NL{eAp7YJF8DmgWp;s0UpUEu6YuKGZ0{PUyRjK?z`kDu6|C41C8qrQ^n z<(al+tdTS`iqw)UX>1%>+`irSs{8ibzW2_3NNUfBtak~|W`RX45cq{`AWME>7YJdK zO_nTdNO&wH4uSAq9tq)*zyf*Tgs^!3|8wg3ef8ak)EYck^Rs9A)>n1v)TvXaPMve= z)GGPB1$G)CZowu={6{J1)2P4R7uIXk8_I#v zg847(A!h4oB)Nm{SS5n~Cq?M~lE-*SoA(h2Pk$ywlWDlxLgj6S$kHg_@7R-IziCt= z+-pW;@}OzDiRkgF6!2-d1;EuTkb?f&6!d9OH$aoD__`GEY1Vtf3?&4AJpsoYIE}y# zz{Yaq?jqc2REV@;OEA8-2zeSR$B<*B-&_Rkqn5@m7%`*kK^>{V5zvmee~`OGj6QKk zZ!31>gSp0cbn3~|OA%*(ei2@oV<)xKgaKXRQ%mu8R_xvI65e0zaT*dDiphXV`ow4pZrK_~Yy(uTV`h z2aV^4O^gL^wv_bn{!|as=&`sNiF|o@iBIzRRKqkkB5^;M>R_6+pX&fexOSbCD> z?hdEAn?^12M?~CH!eih*x=P?5O~Ic=#dQ(>5jQ=Z0z1tirRek)bpHb3#yj+MR-8t+ z3Le6-(1$(?;H4tqX>4&hN4J1HQv^8;VGAy90eY?obQ%IsMM>+&A1MN!Mw3w8C#~3j ztO$AG}<38!k%VzI0Yz;d9?_A8ueac=GyR>*%NoPMplZzrx8>ZcyREJz&DEE zr{NTW_sPaW%g=fd@H9RO8~VUkCY^AKqltynpDT9r`Dv{uw_pCNSHeftLF>R#RpK%= zEkj?>84a?vq!eI1q7u2QN=_T)@DNNI1nmmcA)yvrRwY7m1mrd{LPh9aO#&{N{84~o zKbs)^LK1d~aySBZ(Nh%-;fs^q_`E04v0y|uRvk&%8f846Omz&^M>_4KufLw`tK_^hf?{dcopkXxl3kSe!AEwHcHl`Te>2%h zi6%6n6C(~nH=e-%t|a{FS4X)sPrCW;WH-}KN7|()UHt827bV*6C`w5dtuP0cfdBp^ z_!8}F1bBQZckfA0e{Y9+;wv$w=0EA_AF!wRNH_g}sI89f<{uWjDLIXepj%*S6x@HP z2z2_*uYh-SaZmdBVfK@kywgj?(D>tQu+qVgq&k>h-3mL%o9?BbA5Zl&{R-qIYh*WD zi*F1_4?mgeVS0v&dPolCQ>l(h&YmM!s#G)m7b*DDOOm1?MacB?gdVTD>G>&ndqBYd zQW5<0id4?1B7lFT2zYw+reInT(7(Q8pu_NN0sR|A(D%Bt>{@@b3Zp5moVhjmv#-SI z^|#R|IKujH+Mq$D-)RjQ$EzuoWMHd4+qJ;?ckDbL@az3gW1y7=lM3wrHw8OO4Gjli zO=*`$?+;TTb|*m~@Uv+46+Hf93W(3f7>*JB^K$6uaeX=k&)+!>;q_~m8UyCNMB-o# z+={31k5i!D7>%zlUNL(B{x`40y#Fa$1(WZ$Dt4{)E9Uvr2IhWqvpL`uBz(DyYjRay z@^feiz+LZ2aKYUX8iQWL84~ycz{ac4CP2a)M2Q4zPmF?qdu<8@fBDt{g+&VjlMw>a ziKUCccwGv{y9&do^ct<&N~0BT5CY-#DG2u$A;7=A+JV7*bfKw(lCV}g(0rS1IC0^u=&uH@1OfT36iB}YBaj2UN`hy98uA_o)b`b0V-O?) z7I?c;@chC7J^1v?=4yo1 zz7#0W`T;0BDrjyKcDx)HboQrU_~}o!B2^H#p|YZAX0eW8*P23HZ)4x~W{* zgiQ)geq7UauPsQ!CsKXAJ>OS_?dZr|b@z^>^#@X|i=AV&B2QwM=$eAl5UfrbS|Lxa~n>&Bq)H$|q8-{a$Kk3av#f z;PN@&QfRxJeFEfE3W(>k0Ek(*5C`D+UUNk>k%$r>PQmh;OaRM2=UNW!dkjsGwIm)o@;EyGt0_oD zVnOl5&BX@Z6-3DOI)$(BX-xPRQn21xTrZvWK zUom*;Lm23jDG2^RY9aK8o7}+yQ8a8f!IGQu0%%&oeMt&*aTOcTPGUO1-A(r>iJ0YMf}2Z)p47zhRoeET0f82g^vvB1%7)0^@bc z5-?>*{i75#zh~y41zQ8ZL^JqLQjolWEr(Qw+K;6GmeR|1Dx`A@$Ev z&`Q_NS_Ai@uyL*yr}3v!fc(apBbNtMhS<-f;FXfU%`}~S7kTNlibpN1MPy%*fUnx zqO#U$)f;UXY$WRh{#)z$gTBD|tyKS?=XNx_8f{nGZ?oIqjl1>B0u?LV-Y~1H=A{#x zojwBa`>FoCopl5lec-#8npg1p_bISmU`Ak#TZrcSB#Qqj1&DZ%qUr(k;>hA(@-Jh$HIH9z5V!TvZY|0ie}Ot>Fg+@=!$tk&H_kOJj1 zss8;ch#OZnw>n)+r+5&Y)D<{);Dx+`cf(r=y=Bf${=elIUX5147<|9Je)!tD?*9>l znN+`C$r%Mld^HiU&r1RGLNyJ{Na_gCT`53*Nsa_mMC+auG(X>IXnu=~Fnd!9mfvU7 zu&mIEAiX68>1|F>1dx<#qQ-AeHTGx8LgOM)-kE}soGZpY7{-+cPkhL^@Zh^sfc%CP zpyL08aiq5i^%1HhGT%0x*--$#Ck4=}kRD3N+IGKBLfo5z_&P`Go)gKxz(w^SY6pwT zdpLW~S9;awBT`C(N(#K64AV^Z5sbMf=C8QRgDD8!u5KVSnyqTB3$b{$2?KMG+gh-A zBn89k$reWE`IQks-j@R6Pfi{PoLc3mET*9NhI>D)jQ*38Kgq05I- z&Apw}H23^d^LBq}ex3Yq^(t^Lq~I2A$Oc0U1Iy+aLot0#uh{nS(aJT)^NzdAd$|N001t2^@hub=i`f17mX$=rXP#nhVlmGc@;kN)eM{8x7_ z^IwnpucA>V zaqPdK*Y&yWJNw=BX8WpUD{NffzPoy!PeQ5)Jp&C_7up}A_V!%}Tl&P7zRQCO4J^U! zS8Mz0+pn>)Mcc1BE?3iJHU25b_8I=`75nh7UHI3RUH{VSD_?ef`?Z@L1pn|78!+Em zaKF~)HvR++<~HKC+n=Y4KP!hm6F`5pwFupX!ZMJrJ11tN>^l@AOBy(|Fe1rPdmb3Z}z93!OU*ojSma)hwZx$pE;f#jVc4w zZh~TRf8KZK`@a@hmPz6Djh`dTS(Yql$@c6~em>7O*8$~`92C8lu6gJdmzSf9F3Zaq zrUerBx|g)u_eNFBfC>3MqagDI`^(M76@|3@TK9YVwWsYTz?dHe1K+Y<<5B~c&gp}r z@ZY`@g$urL`%aSXtg8f&AIyPt8lz3n#!(jvgQ2@^Wc#hfdcpYfxEEk9xmR{D-M+tlr+y2@_xUkq28bUP+m;S1w|Y(E+-L;C_|ZHWBVtZ7(Q_ym zTdFu1sncP$-=3-&j5{|YsoDW+6K*LL4orY~jwS+cJWW0@3Nm7f3Ist}KnbuN=LSM7rNhEFI5{E+u<=9~#Td{I_}WvR4yHID1r=1w6AQvr3#Jk`Y3>I0 zYgJj!d=1DnieoGuo>J0b*^V%ZV=Sl~u>{_DVhNIrBHqu4Y7?&l@&vyEsyM}b`<|de zFlLbs1#o_p1W?KkA{`2ibK?>S@*G!o6S$CdJ0SyB24V<0gzrsVHEy={J)72$$f(DH-DDL>^+EwLek%Mj@saKrn*R|D%$<(6@Alt=Vfkg^KL=YPo0ksC zFO#5cZb$-P{E$Qg?+n%(z5QOCnZJV3xYPXh>&?etD6&Xm7=CuxvUDJ_NaB{cVMz1w z!;no@0a?otwNv+ZFcfEc*nWfi91KS0B@f9DhpkJ8BlD7Pn;Vb-7(XCc(F!W^wQy8% zK`=CDH`#tuTqhV`fMZ-IU_Qbr9i-^RNz8I16)59JDn}QE7s?!rGyEBh(%FBu-x$^i z#u%_wSR)uAVU&(ASQAn6-1r2>`0>dmZ^p-UwkUs_Q!T zK^u=UtCyl2^^-$Y8jeTxVb?A3UDRa2V-=r&O03=+S1#3j-g{0S9-2V)@#E=JO85K0 z)I00&_DsJYOu45U+IYIL`UG@Cn;hMw;dr_|;pxWI^jo3JlBgF7gP}N6_V!zg^@5>^ z6csiqRtttoaHT`_t1AH`H*^6se(1EUsvM2Hix_qEI~cID&TrovRSCu_8;*=Msu2v6 zKuU+{NfkHGjZk2WAEAl@=hWN}zZ&PXxfzVf`4qNi@gW$AZZmOX&zEdgItrD{ansxg zr2Y62?3Fo+Ai)c%gTNobIGpzbUI}qO21Aj914@l^mvkT$KN>bJ9gQ3uimh`45)k7D z^jh|32AI0^J zpV$7F8lbz?f)C}K{S&p{Xlf%uIzv#(X1B!)g3{#9J_;9H;r5;9Sm~IpgvM{t#`rg1 z#m#VABpdMlm4$GR`Lcj73+BuAJ;#gH0qgCeinm&e=D(1+&X0Y4<3~9L;0nugi#b;?V=RyZ75a7VRI`H-1ZK;(l+x_PnV~pTs@39Eo?`!TXok!hKob z7oES!PsZ=Ja2-a{!Gwo(L13p3>jz3ug6^5UxZ0{AP|Q4Z_F^VKuWtw*Z$^a$DOfPy z_1E?7cbrGlbFzIL;ZxhEG=F1uguqDM`I0V;842gvOrO027b(&8%L2YE*e~1noRf4F z*|~E|*|{yg1t`D|jt1W8Wn$ieohR4H+e{~&-U4eZpoZ`4ZKg9cKTqq>({ZN{mUL=t z9T|Bg*WJD5oAQwx)xA$Q5HC|}WlP77pAN_MPTNKFmIChcTA}h&WKUOX0n)*}xUhg) zhE?CPBu1PwYSqnhf}=j%+}xsrizZ)CUtqpoO06*$2b0$yWwp$}5URg9>`stEqQ>qJ zfuRB-`YhO(&)e@R!zVkf0KhM)RTGSk-I*0+Fwan8g`*pFR>+&FdAn3m zc5(DEA|EpONdd4#xC>@9b_3v2e%}N*VAVI*5I?Y%xkSE}weEG_7J_fv_a1gl4iEIc zt9qd)>Q0^&D(TLC%XMdqv$(rQCKw&lre&Q=86tY^qY}dMck{zS=hA}zuzmNFrt*@j z3>rQ$K`+Q?=6dkPTr-9D;j8P$A7ZX=-**zP{Nt?oG2*l{5kRd60ErE(s%Cf& zxYweX>r;xi@8TYN?DU5zgrx*ix-bG}U~8~26!d)r?Z5gS?qd(98dv(T^4GEL1sx@p zg^(1WvKM>LzZm%#azlAL`|CX)xfXnut4qjXI!K1gY4~c$jKi{ z?rG#-!UKlV*nL@$13uo!14j28Gu2g-ltS=0k3Cf@exx-^oTRz$XtR$*6 zGy)YZGmE?5EzvSMSUGr3H^?2V_M~CxCTsUh9n_t=t=huvJ9Q&9XD3SF_ojhKR2I_M zKmkL(6-%SLBs421-o8uXv(EX706CWi*~e28jD6xZ)u7YPLcPa+;XY-)P_OpYk7@OC z`Y}awX41SV{aCV~CEK$n`T4wLfdh=aCHTo%K@N`^BxV@nZZ-JG+0lI1zFQ9#Qu(L^ zp^=s)1Gg-fxi@nPEa$%jEO%sx;AiA36Q&;r+cT}q{KijGT`OVV5?IdTnn`?5(@i^$ z&&J8R;J)zqYznh89bUgu-DqE$xQIOqSA>hnmdU!$e_f!6vR}7HEToc2tko|w$3;E6 z)To7=d$;|t;65Nw(N=!SRxY1JWrEDd(0T3^zF7#rfP0mhj=C^9nZ$(R$kmTaf`}r- z&4jg#IV&@NX%L=ajXM-Nz1vq@V8sPr5j2yE+wVS-1BTy#JnRhnkV8@jgG|YDAYwA4 z30q6xJ!BlP=?}6?xJjb1x!>@n?|Fs%qY`G1X(P+SwgF=O!GdqIz2_O+cotQ|9vxmf7*Bi7~2uiW`wD$6jJoMavP-23MYdMT(7wi-y^v z+dBgI9{sWqesRo}1O2E)F4$^@i`jq?oIvBko(FuD8H?F^^~G0V+`b6jYAm z6Nl!02@-OXC<{lnA*kG+L`7=Hbhtl>(8qWYD$CI(rH(6FUJ11-Oc{yx5-(rf>M;pQ z?ImJGB{oU0#EHld%y$)IRz^1wrM^*&UxIuKqp(a-akxEOYj@f{LVtr{`SP#zxi7uG z@fyURZ@g9_*zt>@?D8-9b{~Je*?xN)e=(qZOAB_hfHBi@VFoqc z>k97I8uPB;0WDZyfeU{|lLM~cpw@WA6+Eg1kF$V5xpK7zP2TScKA<(ez!iK*3y!dW zk*{*!22GxF1y5^@zu*c^Xu&BK{0N)y5)PVt*cF`B8qd0dk7&WiSm2^O(d6T<;G))8 zb_F#psIx$>>ol}r-4!&opydiSwV=xa7b=Ke`mSK0HLkdVt6J~^3m69{IeO9Li(SEA z(i;D*EBNoU;7eKHV%^Z>D_p@>YK^aU1^>Mkd>soIaklY4Xu)+?@C{n#<#hGzorG>&H@)3g(m;AEBH>W@wZ&TcWJ?Qvw(3xlK&G;{cuHgUDf`7~c7eIq1Kk5p8Ol$mvEBHw*_!J9VGzyyh3s>;d zTH|M3!Ov;IFS39U9~-}<1;4@qhE&L%CBXP~SMaa2#=mg|zo`Yk!vYs7fhND}3Vu&( z{DCX@LoN7^EO6lmX!2=S@SnBDe{}_aq6ME}!7mUoUU@>3JD}TY!7K3>3SR9BUZVxG zETD6J<8@l_dKNg>H=5k-3hvPwZ*m3qX~A1r;9SgT@(x$<`C21$1@G2^_prb@Y0+e_ zE11(754wVVTCkr5&IgJn54nPewZ>zv;C))K$O7kXM3Y0V;DcJ@uq${{3y!gX9=naF zwBQ+6a9j&cvViWkjU_EO;|e~k1?OGCvs&aL)n1?#S$sRb=pu&D)ISMaRS72a#jVt(Ct?~7);JOxkqbv9(E%+8!@U2?#ZLZ+2X~DOcj zCL4cK3%<)0{4ZMYJ+9z;wczi#g74RYzvl}6cP;ooT)_`$!4JBEAJT#!b_M@f3x1RZ z)UG#vObdR(75tz##VTUBQ3Q8h_*pKCK0R>30ZQL)2+CH?{jz1kJL zMhj+L!Rxf(^{(J9Ex3mT)L=K>s0H`Af;Vfy+g!ohwcwqu;9Xj<+ZF85g8N;;UMa9Q zEVo|;yFXly*RBt@U%duheYnC~l)sDaPrRbP{VLvgyc(3C7P5b=;mp4MI&+B<`HJC` zf5THvJSdAt^qy@upFhg%)n9*o{*%|g=K9L^YwE2__=tniKSJNzcOLCrX*07VTlBTs z9OA!+SF2KOKaFHCqU)hey;00JLD#;^Bw1PQUk30wS-)SqeY}3~k@~|2o_J#QeT~Oz zk39VN;|HI3bfx~#=m!rlO5XGe`fc%IEQQ@ zQ>)gw&aelIo%qc0ePL(+0mQ>YTs-Y9W+!XC-d1+5y@dyXQG60{9PNH%F?;&V$;%I; zU}uMVXm)n@?%lJM3Y=K0ts(ALEoPOf2d_NzX%dB76bl*rlWEPYvx0yC zJi(l;Y-P2K*B2|mpsREcZ*XOg8ZnFe|g9 zb-Oblp7aw>aJJN$Ou7RJ2NAd#WIGdr;0+T>XqfJx!FaUZmEZ+xJb>`i;Hab!4G~gtM{`* z(Mp`-#2wmuYVST7$Dv0L>~r}0H?t2NJTUJdRP1D#N4)3eXZE}+%w+O0rYiMo7eZ-HFclO2~S>E8m_vu3uDxV($S+|SxwThw1| zcDIo2tcG>QY5PMCS` z8F2L8XOGIikMQ58p5(u!;0XVH3dw@!XC=}r!gWqrbAEAlh9Z5YMABLgo>J1z?6|0% z2}Q;&lC?8uoammNv0K-|!tBfg4?K6J)>{LQ&CHx=Y+b<%HW_|PT8F;fASh8aH#y}X z$j)tLv(tl2_L~X5Q2r%l^ge=bRMsl{vgKtfu$Gsx3C#HIC`L^7qeY0a9-0O;XZb!Z z6^d!T%~8pY4Dk$68_y7Bw1q=@Vz1F}sMTwT?3{T(_yw@=7Z@y?(@cSsiYz&Uk~5uV zzu#%wBJf@|XR<6)tn&>XFr3zZ_DJy2J6-H&@G5#RIdn6dL)U&K;AmI2AHdhyoO=G^ z9%pAF3A&iAbUH1da<(&s`^4^coy@$)VMXv4%;G*KHn+v>64dg+J_&&6K$k$%C9~_9 z#&|I!(^oSp@CrRYZ1zCK<|Q*WFtfD*=CJ{Gy6Z^*TJaxpJ<*=vK)&`tM%~>>(9?tHirio@G;Qw96vBe z$~+qM1S)0>V7eWIupu(XRx;~apyW8uR^gKC&sVai@*M%9A+A)}M}9E{P>Fkvi=aUo z-hyVjh0OXg`8ZUr!P8{qhKw5k$reHifq;pZ6g-QnG1RAs&gH9U=wll=RtgeF}`@)IzqkOFx3!Vhm>-NIUg~XaYay|Q3FnfbTT74t)nMo6plo0cBa)yu9K6UD=N=D zU-7)Kh7cz*laqN8#-N#aF#Q2N(6h>MBNr$tNfJm!^t#?m_WDe7ZT(huOECxaGFm)t z+sinxfJg=^n<$B9WL49DGJm9b(_JL|a%QNs1dq%k#|^ zaWh!S*o1=w*(p%$5=AOWltP!XD%A7lpjw^lH(HnWWmY$!CdFDug&&Lo0DB(xSOf!s zt~e8}ck0~DBRwNhG-iyRu^8?_Gp8lJ7YK|Oc5=E0)~`LECUuHH_mG~?)|&lBA1J7L zgFl>Vaje(tP>tY@#iL$Xr#J**-EvRE?n5CVw+xI}(ev4hzFQt|M8U-A={V>HKEWGS z;UO6nNJ*Fu?AN(@5@}C%t}*a{te(X)GS2i$C_*RCf-w8cs)39$-;l&`vp*;EG6R{5 zIuu~cdL&b)A7=dT3#f4ssI?XAZTFbQu3ioVtTBW&(<9}*T|uZl zcWJl4&LCh(P>|i}ie%l8mv)mV)uYFrI{fU(^VN?WKKZPi16}~|y;bfkdlyA{+b0E7 zXrh9mau9ts)5kp}D)(y%!aDlW>O?=+o6*m>^KSGlRMO0c*_mq?9cKK@u_MP1pTzZv z^Us_{bJJ{y@3r2%L~E?ch31=h+NPVdn;BA*2sYSppG#!CIr>H zL=2q2(n)?4#hBKreiIrPbvJ9zf`#*t;l=)NgOri&%btR+fO88ecm?b#z;*Qk zf?^Cp@=PgA4P77oYAbZvKw~NAk|ZN@$;jHy@ofbQ%C1ZPDjS&-v`#hg`9A zjN=T;burE4dbYpCWMY}7-MAs9;X=I4IN-mD7{^g7!8}&-o5^BT<%X)PXPH(?wLRIH zv!~A-JA3|P+0)0)pFei?Tz2@>(d?Z5jS3%v7=p?<*wU$`wDTg|Kv&58#0LCt1?EJE zhg=)8PY5IVHcsppI-?}@onbMYRi>9CBYNOw1m(CVdOaSUdp~r%eWGlHhqXQgR0m5- zTB)?hf|2G3=tF@!`XL092R~hG-j=)%Ck0vLvXFz?gvf31IL?_3IItiC0S-zB3;>2S z%gbD`v?SOW!J5;t2ly10wXY#-+qNNTxv=M`$U5tj+MS?K>k17g#q2F1Iq3@{u_?a1>^$l}IFAn#U^ zdxHiMc0qXwT0xC+d?Kx^1f!^qk)i(F9bpw!Ex{|QQ;u1yQ-V&bLmXP2sAE&RxT0|+ zFI~^;&5|zGo9tq}8FgW57rVguyR?fy;77CEW(VyEzE&-QZ_QTO2ofmOsLtP&u#Cp&xW@X>|Sr%ry%ZtlmAokL&XqhKdD+#YTX z9%px$jtmgStc`RS-uF}KU6!~2jn{|nF9+E|6?7x!X;u)&9L+VlsoE_vFwU8Cf-~Vj zJT5Q8v!eUxSze7n5bu`XRQF^@_*yeIXk&irW3_11 zx%we(=>m{Rkxd(ZQy$if(o;9{2qD5hvv(YP^Y)AHq68AmXX8N8+YIBDf@*aPuItSQ z50=3^G8U$>^A%ts)Xg8SMl=rJw)i|0H0-VduUi5Rs?|7fSOu2F=NO7~Xs?<^ z_tGZd|H(2nar6&q&%u^saR^Pc^NNr;+T|F`kOof-u&*E4sx_js*4jUy1mJVBa=MwF!|ah5`v8d2!OH78_fFag_$rWx^xVw@#-SG$D-T_|h81F8Rdy!@ z^J#Ylb`RJ@=QwZ`+-zvpRI!<^s|fQzVwNG`dJ(kQK?05*&umzL9?2qrt&SVddb1q= zK!zrIA+|;;VH7;xV}Uy**@o<}V4jW-xUvcYXFmJDq3m&?_)LUgAe0Wha4jBm@Qqmc zGvp``l}e=)%7p`qk6$bqpcUg0cI1XSc%hpoolJ_I@^PXZM7s%^p!ZNrhg1>c4m7Q3s&i}!`a{{hZ3&i?OGc{;YLn0Wn_lx0MW$QH7T4<~} zORbsPoQ3xSYhg+06r}Xma4dn|JXU80(`z6F(dIbU@N8Qf%%Yqwj#wxH;%y0)X>Rxs zQC?k-1g{9Mc9x5?S~N=eVGO3ZG8{Cl*XAQs$fYY%`-NPyYe?CHa0JAcT4cp}gRS`# zLpe>TTn!Nlm>k#+Wf*&_d&R;n{q!@~@o2z9d}gGSuw$ z5KQfI2N*TmnlA#|?dq`CM_6hln|lg`GJ)4(q!by2%w>RScFKJ;KQb+ws-W_TCH>hf zBYbILBuS{^%^_~WMhc*|Z(W(s&a{RI!vOjiADO|9i-#ZJ3*xAKO$ML_R8GPMDd)|b zg}psEv)BoYhEg(RyGevFqRIF|G#)fHU)WdT4nB|_xH;hMP8;`L*PvHjZh#@e4vNZw zotmk;On^#oKD-U2T;r4zD8_Z1VmYWAE7;f=If_u{msR z7_}m$DNM0J(TQHl!b{z^x<)$6$WyF}K;FNL03S`4bUa{vJ z$16@N7&%}xOU3RwPHB%@qHUi1#_Xt*_tEJic&M#7C-VhaNblbF_s#i6>3_WXkY`-4sZ&li5*uX4`nYfqz;sJhgZ33HqBul zPQ1n@lC6WOYm$YEXH*Qx4v`T#V&M?T4D6;~l83zu2Ny5$z%73tKtv=gg=ouQ4=Lkl z4W<{^j4_jO5Ex6zDb@yLYNO;s5^$=~v}#^pz>KoXYD>?Y^2=IEoP`@neM(F_W(xJH zqd%;g*|#?_fQ>{E^m*uqUvRx4{lFoZ=d)}gE(5&D8BJISv9}|b%rnU0_ExrudpbPQ z2ZwL=##6U4Wzi-?dY^GFM*IjbLGjXo^46l@g3mKY$!hLynDZEvTtbC8V5^JZ@fI#2 z!4WI#V<xHM}IyoAIRVdH{;~NpOsP6W+-hm1JN^4A%~D=(4hSS9`*7{{Q{#FwU?>6%{m za*SWN;U@icHk*ietqWkeP-y%OmzsD+KAQs*GGb-k5);&;bFS2}ZN_BoMUrjK`|7i82*&poy>Q(dBuM#uwZNKdIy+|%{{V=yrRA&_z!O;m=HHNs2?&WACS0kkLeF#xTJxoR)emcg?DC8LQJU7DOz-Y+2_ z&IBT@#vrIcDS7(Y_!5hauuH%%VW3&u3q>-{GExCIhBvX3A!Y?l4dZE%5lQAfQ^Znf zv1Kf>Zb2HEfrv_>3<#})n+1G9^sTTH)h=@iy$)iMh2yZ?tX-YMNnfrY%WyD^&Su5% zy{xR!(F8JPad_s}j^+EYV>EZWryL~c4?2{~1~)`IQ97~^D+w(tA3$NrjU9t6=FfXXa z4%Nywmn`5`v1)#tw&NJrijVYwNHpOF`PCN-P!4gl3KZ2hTlGt!ugG2TNi-2IcIpj` zmQV>fS{p&WUL22JGF4=Tng~>IXyiRUW>$5c^2GQvXSmKqTEu zBA5nORKcDu>>~qSJTsRnSWkuRSy`~YYHUX|j{-!%xKAuyt5mAxW=d&(qz2meVSq)3EAhSl3Lvt793!NFbKWQyf-qgl+X21du4q z#SKoDPc-)wX1I8_4_q(VJiN%4qpR9s{nTkvKZiQ0q+%iBRi-B5sh&;&nL0-U9(R%N zrVF74Qx6=wlAsTl^qcZ9rAQN;LXim)nUyqyjzPhkpn1p-p@FXuYs6S54M`AN4EpYi z0V*UZ(pDVD&LKhNus=cWvi~L)5~8D*mxWCw0L-viIeWYQEt_)Dpnp<>M`(VRXIFe4 zjFU(*fzLYixzj`-%m6UD>q5Xm*nikTDeHtwRN~}(cWCd2Nnjv|Gh#rF6xo8jLSGQs zBPKkm(~9RQ&$%;8(_WRaxAr~3&?;_GSj9yghyZ*xz(5R=KFGy^H49#X0{sBzcDoAB z#p^p4Mk#h?2drEz-YkfA+1;YjE5g(;NH797VavLHVsPTC@Z8TEb9I;)_*$j zY1DdKR4bZTQ}6#f@fp;+E2`J(=*Oj3?OJ-xuEOW_ruls5uBE&9`Snq2GpMCE?OJ+s z@oU$#{rp`^@8Z|DMr}j;tEu?jT}yjeF?NvFb->|7oB9vzS~|x1F@b_hfu`QmyOz$f zUY;}bzJ#gt(OpX~veLZ~mQ~*Tuv5SE#k-cijCI}|)$tc945+W#we&Tt7LVgHWBlRV z2`=55`d_ze=^qrkHXdwK=l|Tb^i!;JU(~gWR4}!Ede_otSnC~8t(*nP)P3b0OAp?G zy6=hV7OiUHC^2mo?pS(^ZQeV&joJK7qsQ-9I?P6u(T(y(S=0K+9ZM(K`oLtZ{b|Lt zKXu2_N7;V===KGJoN4~CJC;`1{K3)9BO{w>TEAoI8k;VRZkjVrn8ttUj-@YW<2OW& zaTqk;x9?c`>-_#e^xY|JspFw(`8V!Z`Zc!vys#ynNO>iM-=cgPQjF$4^UbFbd@r9T z;CHDPFEPjG@~xD=TiVvFH+S?2!%p2GH-#NFG140>B_;8pv%FRU)! z`j-J*zh|^tmoC~z+3d()NWuN*?|A@6JUeNLHv)=v5)TD1GO*tpN`eK(HIM;di$KZ- zeI|hBvi{KKZ6Es*z^t)QSV(J#m+Q%+i?na}uEbt*g*oAk=|dtJXhHYb;Pn7_2eLV_ z_rm&s1a_A$;hh7dm6f*(Osvy$2uuXZJsNcZfc@aI7n3`Oz@VfsFad{RyPe=XjsQ3* z$02)l6-TP6RU5=4(8Rn~z5whMN6uH%QUw;l)Xb zH`$%dIVM3s8Q+e8eXGrLgoX=AZRYxYy5ZtKKw3VVU>VC$zmEfwjbO2Jq@TcL%Qox5 zoN3soW1?p#c?`jIWGOuMMFd7>`eC0@zUNJKT;WARh|E~pEIi35d1&tvav+$0_Sjj$ zlk}XGX008x_Cq%+Lx-Y}7sCEI`GA$A+k#7w1j(uUmz5B4U&?KjYK^wvn`SDHmgH~YvDgE#n|hJ^cGOijzyz&gaary=C~PP!8Y-} zM`)e!|Ln^SR33U1=Izg=S0)e!yfyxHiCggU1tRO*N;gZ^DGfXR#)NqzBHv;8LlLf~ z6&f$vXj~`eX*u_6%n9n;d$IpR!oOr6QwL z`0Y!Ke0bI37(Uup85r80+r(+plf2EeuYh9^@s0#Fz|y&Jr-xzeclL z0Boqkhrd|CJP#Hq>b&a1uHH{v@z&7ls`}y^OlXg|aq*+Ci0?5VI+bkV=77SjB>~(a zGr@-2&oN1$zgR~hy5SlLzqoXAqKHCoG%N&MK`6tN<|UB9g9n#2AqLRHkp|$LKQq~G zd4S6+!J7q8N)ziBPFV!mE(K}(KmPGrtGg~Qb68b7RL7*-jD@ml&h*v6n1ADZ>-5*V7w%=td%fCm$pdNZw%V>>6gU6U?kPd0gVZINZQGLMp zt#~*DoleLV$M~3qp9}ZsjwJ#I$`xk0*Bpaz1;{lD)4ECCW6eEooW&B-I_Av^Lv&!wU`xyI}^;AmAnmNh;9<_(L~${NXmy8-0DjU$q+5Jx>OSOM_i^*NYXz z3FVFBI2WMs_A3lU9bBCLx%*rYkopuuVo67@ANaK_N&>!dOXvA^FGJ#u0U;EoQS+3v zjVc5%^sq+(ma5UHqtu){UxL>c?2X-Mh*aV2slh$PFt(-|ZMejnP=l}!PVz3p+yk0d z^#O=oOXx^RN=zqs2=m?7?lx` zAi0GRU33KG_?jX-A2g*e5@fD2`KUi`l|z1|s^U1AD8IYpk>bY%cId<2BeqM%_T#^ITnm zbFLP_>vDnv!t6A(hIWAN+GwJD+K}s7YXl1=)8Z-SRlt_NXvf&gF#Y;{i3VIqW{_x;m6ZOitAf^8(8T6HqPamV|IRT`rGu3D_|C zZ#m?t^8C7Opw)e|EL1iITyKrYRo8?$DCrH97_CLqIwTcYqE`5&QZPoWGUI0hG! zRx~f~LUhMv|GNoPF%L)wXtDu1R8zatO%p8%v^4FV&?DI-Bv`V-&5$bz&>|TTYnq)p zKe>LJoQSHSKXD>X)Jw${?O=^l$J9i5=aCQorV{13_29QGO9;--=A?W;m%BF? zG41B?K!`vx*S>;9Z@=i;HtRh|@)oW1TxAj^Jk-oGfWGYojZRR51b%b+~KE>Egd^`9^dKSEsMtFMhxi1d~wf8 z_@;Pn{Ptv=I6h~bL>lFi#U(URL^t5T2(%?NCV1HGdGrr?0pw$*@#G(W2o45U39=0ACnF70H@$mdPgGHYc0;&c_3@P0-jPaO%!-(Oh&pi0bpT? z)E0WhFa-S1#u>0bFs2&?@?QlJ61=w0U_XhLh@;v?+K$c;L)ase#JB}-<``>6E--$qHaMk(O{K5k?v+E(&}7rbNK16>#LDM1UD%Md zC?}iEqNex+qr})lwN}2k-pn$bXgq`>atMTX@$bA?V4#67%p{3t(1+WF70fnN>g05o zA&{ud;hF3cOz7H{csUKvc$RSuLO-WZ^uh%*C-0OUv~ND9jvWB&WT^E{xnwaOMmPyv zLZF0=VIMyWZpsNIDHz?1*s7KsZd(4#X?vpU5%xlo zrW7dA4(y(kr@z+)%W^h3kO5m8q!QViTVw16S&&BDP6*|VnRTcyn2S+YBUnQM&fFb|IojvkN*61;T#m@yy-6luk&6*Q zNTck#B?!npq&A+yF@0g(k^k&nj9f~{Q9xn<6Kr$AR;3u5u9sL*d{>CPo!z|TPJ=8jox0`s8Kf+fB(cEqGED(!mI-)KE3pM z-q(L?5n`Nq;0?Q$-l`Y-9og)B`v^9sIYrJNVq2je>-jOJ2bLwO8+Y#U8v9vZMdt zN}lZ!viuY}J;(cxA3>My9-Y5uwIhGMTrS_w+R@J9YB`i^sItQr?hkd^gBs#Y#EM|N z)hbmvPv*|Oee^SN5nbxKINJWKo&iM_Ggo$MP#QJAr6kY}Zkb!ASZlmE`u6$g%crxV zD%}cRI=&SElvkz{ChP)El`El}F{$8s4Q@2m9;U z!7=P2vP~{7d$!F!fWMIzXsz+VWhnQDk<=l__pq8>;=8?)au@IH7z}VD3mDAKn2fzO zd$`5*!_`I?=M%lDM=b5JS5iV?M%(V8U41Wj);>kF*<4$fw}zSDvbWi&^NC<20v|M6 zvWP99KIpO8ZQ+S%NiyIro`3*W6f7*v&d5@A@$CHdA~agkS-vC)=*9|Cn9deysx-|^ zkx5h$5YgRhE2ACYHQOtlVY^*;}INO$l63zU|#F>nwNQNQgZ)yamfG|2Jrwh-%&+62s{}^ zizi=!>fsL^W8c3$WOF^}2Oa>$R4k1`!?3Ukglz{8Gy{h=aIlvr6QdtBXfxL72I@u$ z#*}e!v_Q6eyqy2s;CM&P&?6Wcpo|(EXl$oV?y`=Y*to`p{zZC2>TX`;v!7HhXMV@! zFXDy2KomDpGs6CGHJ;D@jm)Ps3I?r9A)e2=q(d{tchi8c+O!%A7E4|*Hq#HXX#*NB z`CXpL;f3p%UMW@(IymYGCrm|}kO{zshCsl`u)HBrDGQWS12F6WP5R&+poh|_DmQck z;|v@Wnt)C|D5nT5%vE08`ZYLYbF#Sc92s(E4}0JT%2~4vVf1yAqFFNSY+0Vdpj0@B zdkT*%57v<*Z*5(qZeooH6`^Uxlb@ew3ZJ=W`>@ZGkC&G(A$NY2Zwz4!Ha|9PO0dFo zhJ#o-hD=fTm}3mnHgiG|vM@hF$|c7KR`6k#ojfa_aYwswz9*vq2G*|Xl3&?^ImwIO zK<1ZJ38f%xa5?s$)9dB3@yNTFD~(1Q^pwROweS2c8Fl87Qd|vl;Z+73e|e%vVo#O=fr9 zfIP@*ZmvJeUv%MlcWQ!mR>}seqOO*gMx8G~Z1$6jBUh&kc?FOn*?Oa;E7c(nJb^lf zP}ijPHA#4}aPEw?K4bO5r>xZ~+1$A%BKq^o#imVIp@q>QNm=36wJX)(U7+#NY>Z&n zTI)(pUcx(2nWsoOE+j}`%g`4MU0rPr>sSP$)cDzo=3kfoIVNpKbO$=2x?=VT(XW@6 zOIpI9T!y(2tH0hEf|3Spz0Zl1yD#8Hqy=ht5z{X(Ukmob93jGawkk%hN+=~fhq_5l zE$D)1P>n}K2}lSEtEWLIY!XC>m=LXAUN>x88q&>E5;T;x$>X>(c0pD#Sh_%4>?3fO8F+S{N zoAC{PO*`!vT;Q|j^5YjhIB>zs6-Z2Om>6Nb(-QixcKQSGi6|R&bR(}80qtk>J5GFf zBF25km|dq)H{d)mlVOEc%RrtRbg(606Pz3-5~G_mF4b`eA8#+%j4!6@6#ewD-L;2} zYNOU`gC{&0&gutb?~xCq#y{u`YOT`2pXXP_2wCfqFVb{5KN)e2LW*}Ps+1!ze1et% zo=#8V-cwfel|9Q z9a6CYa6%2+Dc{j#xzhCb_!+_lMwsLfvGT0B0Gk``P}w*Rtis~_Se-n7On{!l6i`)X z$_Qj{{3YD%zr1F`>DZcBj9`>X*mke1H&^BK3=3z{CP?g!C=d%{5tR8lDKO4EQ{2D+D&8Ua zV-JcX_(AYGBm&bG8Tfc$S`Ph)XECkM^qL6y+scF;GB}v@xgrN}Pj;S94mo05uO-tU zd84nljtX6&B@l;2c7uM*ZCpO@1$DVMSRD@Zf$H8SlmN^c(t;ujO&9(~JOjbJOI>|` znn#00oChmrO}N^=$^~{*sah)yj(pv23n|>H_2K3wPvK%uQ^*(RvyT%a;tN2SG4 z44t?Gbbk)Y2agpF@F8Z#nrFHhj_5d)RM=gcpJ1kBGMz^J=b086kxT8sxU0bDivUc; zh0Cb^ptWq^5N+Pz%KEJiI-yvW%CVu&4q4(`WH?UuHRo^=7la`B8dn!#@v#D4OY&q8 zl37|`Ba#McY_;*GPr#RI0yYiPk=DX3p|D1hkM8e6SNpg~u91$#6{6fk1`1~t`-D51 zh*7|>1fP+isrAra94BzOP-9;#b~4?xKMbyPde2p#JiVk0U;^D4q|e-Wc9-M1SmKUV zBv4C-P7ZY|G}1f#3THAi9*Rog2#PSYmz;!T0(o*vU-_a8#0UC4@n7ilZ9I*Qbv1+p zG9%h2Z7D@td})!NFVPu6DTIHfn0qr?#u+>0rz5UsyGbc5@>`cFkTsMkpHjErWp2aC zo(q2*viMJmh8;TA=hM(r{Vd4Zk-0YHmb^Mb+1x?~cWO+Rh$yW0s=E?2w>MW83~2e$ zlT3pB^wAr_PsoK)Jrt`?)CmG~AuUT*x?6cTxcfDT08~7>rMW!=p@mR9lb16pJUEZB zWIVE`#mcCyKsgvKXJ*DqG{umc%Z2pLa*?6~TY-SXU$QV_PMc^;K>J8u$<%TbeZQe0 zBYq1DS~s+@s0+gwey|ehn&2ldtx9iF#~ZOq#Hp9w&WdFx<+BgN66-m4FHgxxH5g0D z$(X=!0RD5cJWysu+;MIQR)S)^1DxRuKgRI<*^IOmQ3;%1Hq4@XfIA7locKK4TOpyW zsg*+*rD*EDKAj3Nm3|h;yZj+s_LWh{MQG)vuiLKD2I89pPUv_d+ibha7cOF?-Dto@ zEw3ZXoj_Rhp!U@fO|ph#n)kry`%Z9g*wb&V4!?+k?l+i5X3)T~4Q^ccZIE5L-hqZn z7mBzP#p;en7r3v8yUiBpcIFfy(ISicUHUMMF(aFZBcuH-5)*7W#b30 z_GxUS8a-e}p;IM&P~k^goHEEBR9ZwUulFl*Gc_nTG(>%=r4BhgQ>VGv>eZtNLr}q# zCbTQZZGrbt@i!DS=k%wXNz+JKJR9N}*ib{v%u(xHZmga=T*Q~Nq`ds?$2l9X?GVh`h`#!UpDazDzMKRLCs z(jEGMteJT6g%9NR2mM8TrNUd>Yw%bhthmjG!Qcp{B}1HdIAO{U@p(xRr4{#0<47Fo zLJ~aE{ycsESSpnG6N4IKy@NsBoQE&?lJeW}GcOv_s(Y^6SY>4AQe&`A7d6ZF;H%pD zd7(;d3)rb?5wiE1k0MI8hlji1d0t0D=mPLY@V{!q*YE_aK9V#yRrYc9?EICE`CGEu zg2JhU)qtQDc%~m|Z7n#^^5Tf}ImW~;b>KEBhC!oCb5oJ#e;4p_m(B@1u|-FH<#m-oiS)6?j6GQI_S*l6u8OZJ+>Q|9PXWtink|d1^()g z4@DK3bdpF*nW$q+4?RRkiiLp zZi`s!I=H~++TaBgh@lSNKZGJq8||f5<7#uI*+Sel7dP~Xb-Wd5&KJsiKGg?B9FRw( zI}Bu8>r~wA9#Gg84VS4;r>{QxcIOIhiO$|`ynx|05cvYnnNe|2hyWX7{_}7V#T;1H z5x^ymC65H+da!ha81A59QgWc506~U`P)>#5PzH4H+>NIUR7@vxnr%?GR|AWTkuiCs zAZ|3ke}+a~cf#@qSQl{SqdJbK0hm`lm-Xa~ zr=A?M@LVJ2-wHr!CnjH>yyV;@=P(;Sh*yWebKr^Eur&}h9r*A$V1$c@h}4FI4x*q8 z)AG2$n@c8c+p&cpAkJ_0izA>oqgEiwpz8ZGrS&a|{!e#D3_yzWvx(z@#aTQWDmb|? zf^b0#m}CrR-qX>nkTfaJhK`kpjJDatlq9DaG6EMOs6qdYIuvYI2JSga`-0J1+X){4%`=;a4vHtkm-(+yNPfL%1VYPPBbi z2r`eIUm+qfZc7>*6g14l@ZW7ob2jn(N~xsz^CDnm1xIovDMezlfR!aVz*K zNb*Tlr?{63&g7|q?g%@WR$+1wth!_ndWkh985e?q%q7E#v?Pc6B$Df#4a?tQ4ap-h zVo&##WMkz8LD|{Mv?FJ6XTS!utQdC|LZh~Yn5l_0BMVd&Owk`a;jDI3BK5WQj_O0E z$7}@IY!#u^j%Y#3W>!CsBoygct^zq~&$+*h`a>kk+nFJ_pdj;`ZOas!#1c2!jOi({ z#LFd;5kwB_n-DuGX){uXah={G+2Y`PJ}y^X&e`>HTL6Ih?9y^(GE<bK-;fzp50Sqm3 z<93e{*tbnvbT2Td1iR#IBRV}@nuYyrXzJe4Lt|tdA0b|&dN+T3JdMi`4Ey5^z`&jx zi42yPi;SSvpS=lv)OuDCV+`n_fN{Poz5C+?iVrJI&SB;K45a4NEk0W^t!9PzwUWTdIX)xT|~jBKRiqd2Tf!9;O5LaK@Nwx43^ zXbpENbv%s=70A`~*(C->uDlU)z{Z=o!Rdl^s^ra_QA=RoKBL|~qb7Ztf9}qxHqgs0 zu7u=x8J$r_t>@A+DvtdwCj%;(+k-~FgdfM9SHrp$Ql|(3?1&E~1nAwJR>l3? zVDYn|UCB*vv^S3O%7r8>4@OM6=EIgDJ7}0;aN14ZXmK0dM7EMNjN2xYTWvBqqd6RN z=?x?9vX=LBu&Y^&lX!hc%&`c!fTfbR^QPmdB#7G#b*mZbsHEM_;uLSnp?luXm0#uhT3X!jkbemkfY6i9dv+A?_mbqBiedBmRPkmV{$%hJ_=;UQhB; zv={gd_jGOUE8O~yV+3*A!`-_TX1BQ~^@19ndC5bdQ&gJ_@KO$g?d%N{z{1;ugQk6Y z$%A74S!8?YAiE&yGgq?Y>NSU4-XoU$y2Mp$*(cp3eJC?)U_gCj+hAgT3^|XK#3dm2 z=vn3=?X+8b=fzw|#g%M-3l&fI35KR)$@63GgTBBr&L)%3;&F^Q+ zp|CGk-~xPfPmL@5xaPk`A_94UNAfsaVK%Lm#(wt%74FTq5Iv8Gx-c1d?g=q0CWbHKW3oqhKe@XR!4dFXNzG3ayWvr6dvWzmLHfGRdEjMNvO_Q#hiOyaNLC4m z(Rs-XK|EYwD}-@0iM(tWZ$C2HkynF>kexlxI5DS?n2s=hFW7^0Dy?Rnc~zKc5XQ7d zPu$^>wO|T8fp&dlNzqrnbTcR-9Rl zxl4P4UFn+bAxh{i-1>rFud;z%tL!C)0e-eE*--*4WVKcV8EK-cl?csa1@K)PO+)Xg zXp>>!y}ZCN)~z*rJCw0JG5k|Z`%xI3PYMY-^1TPgmyTT5xcUrj>;lmAyoNR)kJeI_rzd$xsZaxN{ZApDeOZBw+RG6A6M` zAeeE>*=Yb#=6bx=5en!W8Ndx96C}kpybtH z&G}|y1-Ic?4%qp!(-$w(!aJNXU;#lMAcskfX2W1ZBS~T!(fsDby0CAKZ6*`#H{{2S z^2j)OZ$N=tDM_u|7T0a$$8%3|xYYkCB_1@n(R?{JRSq$m!T+&+@E^$-<(D>3R*kEb z>~O2!VU{itlx9=H?$8|U)q#+XW~^Ha83- z-r8h$8i9woY~oWLEhe@sw_6oWV%FT?wXxjGi25o_q%|}D99X8Pwu!{c;*&hBD>Ic! z1}(mii$QorzP;9{FD_;WD+kE@P;>!{PyJznFE=~GKD=e3CW)a$6dqJS);W|~1)Myu z{|ny7(}M)FHm>3|5*l&jAtu>8cFU`eyKS~l(JnL;-e*D@Ck6n|pL)jy2 zeLPT{zyR?{E2l6Saj2S_OuFhyrd-Z)pzE@^qX_6XexfCba_CW$P}5w?sq}au4xo14Pf}>KACH~2 z0~=O|aMB#*2~)t%nrG}y=3Arb!m%eFM9Lo78kiL|r{?1M(Ds7Xy2XkpTxiZsL;Z?!t=CVT>A)GmY(s_1P^^yQ$5Rw}6zGiCmb>4vv;I2^K#7{9H- zUG=V%Q5qZ-s6C&oico_`w2NVdI13%L)Phm*wl??KVqBzM zV&Sl{anTM3i=vc0Y08vm9e1aB)>$9HL(Vfa8T@FE%O#Qy}& zXHj%ID;qw#Ch`&okD`cI&03Xc1-e0ZBc(va2x_~vTQ~I%hZhNwx5#p5RmO;1W>{k1 z5$j+Wi|dVjp)^B#+LK;Fi<+3SU?D`$cJ?bY7+Qm#8Wh2pQpajgm~LA^f-2e_`QB?F zlAMoz;f;EPR(9Z6O+`BM9x zB}fr51^wQzD-jHc2{1nHa`&@FHo8XnwQ*Y)+!0;S(f7~LJ$+j%+##*dPo~=#HLN4B zK;8E1x(g0Qd&6ESA&F2KcEBp==0F7&l&+L_H!0kT#=&Wwytj>mn8ciMurMK3!!;p^ z<=)+V%Uh!Z8V$DE?ev?}tP@HfqJyqVAW^kZ>){sWbGY*?Ub92;D7d}JWTPJES{>Zt zM9iPnjx!6J+rLDR@c0pEMsjKL7!I9%bfn_0J93kqRf1##IPT_6N-5XcL5Rxi}s4GspWWJo<#A z0a%_wj%&o5l{JW>3c|{w`eOV_P@3l}0>{+9 zZ&?sf5HDFc9GHRH`R38=Dey|;stI`HEeOV3+VLEA?&1s~h7KM3`AG>ze6;xCh&dWE zJ`sI9Qmk>9o-JPWb={%@FN_h5EUI(QgQQqQL+ajojH{A!d zCZ4=*v?Wq6nn1Fbn5b;s!(hC%qm-#w79`B6# zP3N6v{aUMsYsXvJZYM5wn^ZmZCSTa*O>E$15ett+5-)0cM^r2>1qq>wq~Mz2oi)6e zjLYS{9P@&&%)K7;6B3E|!yPtU^})rs>x5WN_=P1(vMSHQS1p4fbW)cV#TKfW_|Z5X zS?Me?!;Z=MN=z=YY|z}q%Hy=s%Vy$z0oyd#A0lbzfwe_k0_o45P*o#QEMmDU#(`8v z_-db$6XcQD!j8YEWXTi|w=n1%4S)@om1A$+Z0)3jo}X{5Pz+J}oC&_;SRlwd<~)hUeX zoh$AB0K$FK$}J-3g!7^71?F^kscp-9GM8e+?U}e5(MH6&K~@GqR2{B?!FEE!E?aYC zJj9SytLGVpyoFqJx4XkQF1B z-~N!S6GR}596hiIC7z#RC&r$7TJ=M=N5=E#B?U4pDM^gj5>Z4E zC#QN}4|H5bj^tW<&{t`-Cp%nc?xw_K`ntM+1rO{2_0miY7CWp`tPlcD-MlP>aQZWy z=@Lgb24)ion1R@5yzwa)^tkF-0>cAq$Yx0A*6A`s2ZUVMkZwzonMH|GiAber52 z3_oZ?pqZKRUFDLUfY+;oUTz%r=HWHqs#?KGoYmj@+ z3hbQdA1SU~UEJWg+-O-FsT0CzMkuoIIQn(x`v2;_Jz3pI#zOG58sbK3c(`gzrE65-!8zC-IB9 zgzUUJei-f12)3kgNrtRn!!AVEL)x!l_IX^I9x%TFPVr@~jv~Oo<>BsCh*Lp4B$$KK z_L`cz+8r7W(VcakjQ3#RDs%%nU5$d=#=_)X8Rbrkg1PQ<)<$X5FN$TLK?hL>=IATy zO{BK~FEAaKmz0soypV9fX-P1&V^*k&FE58W3d*5m(G*kba_8wanYs;3)?7vU2}wy{ zu5rU|?sF4}7lf^x)w7suj~O(g>)zDjut_*0bj}{@aK+&Cs(#3cz$MB)6)ZQ5AvG}c zW`-ui0nMOTq-ZOx!@lr3v`;XA5AI^ZLciNsZC+}w2J6CFgy+#86jxGf1&8g3S^#HL zEV$bfRK)dyD3Oo4_lu75k>{jfv_c*96}ISSbCOJj$rO-I4pKt=hNBa!Xa<${17q6Z zR)?EV#U&I{d~PcJJPef2VyloN-~uK^DHoZacK{+s~lEMC@5Nlm9K? zibElbP}UQ!$yFB`8{CD1uzvJ>S!{a^2uP^YXCM)(c_VajQbh$Mi9y1^D3Y=wB~CSN z{i)3nVB9HTd~K&=^J-{lDz|%I?D6-z>d1H)GnSCRA$!Tu=k#fNJhMAknFGUmALRDx z*(GOw3&Hy{oqgK?RK1P9p%GvNDRMr0n$02^QRq*gUd?+N9OYSmhO13?3gT=stZ zf`DqiriwlBc{X(CF=soW@@o7uBdP;4zbENc5)I_yiy3f(E=tC+<&)Lsa;B+oq1CN* zxMRad)M_?F-$&J`CZrm=2W)7CS8BbwL!iZ+{EP=NQ6L)RQ9*ht*xj4doHY`z9C48m zfGn|bCg^NpTy?kT^bt?Dmdzb};_)ZuGwfyvy_4i&X0TuQMJKB-GzZs~-=F=(X7@Q5 zALkxAaNvNgifcEf;_*{o^k8*kZZNNDxDNLbPot48j0D2}adSr%XE$!d00Vi+xDZ~x zz;dX=nvAPFU!d;@tkhbyHY0Vcl;n#L3;jW7^*Ky+OU^u$E~n^(kiMW-p?7gyLu(av z3cskJG**WL&~+L;Y-E(GWcWVQ z!XbNH&`!FB`;|dcNQ@?do)R)8(Qjs!Ad1}4$t@}zD`n_Ne+DLQgIvgfCR69mk~|nv zS#WWZ!!9$5%PcT}4*BaM50218p^jC0tUPcm;5InF*g*)Zj`)qW+d*g;Z7592zhM1X zzO~p#m0%bdd(IdD`6)%OEL>>1d@p)d6E(2DMv9fS#j0G-7P3M1K^vis zUBRV6bBqYTf>+CY7=SnXR*E1mR%C*!R@y<)vh=p92Es9fBW$$(RDCQAl06t>luoRI z-&t}Z)SX=HSDmAhmDqm4`NN9S5@d`;Wk8Lf4`SUGsE>VPPloeRc0>XVnEMv%Z@;)T zj=~+>mydglNqEqy(nlP7Uu=W|1f@9w`bl(Wajt2EXs-?`*~un?7`aaQ6aJM!uemZD z$VrQGv)*WQ7gjsnCRQJ=qiQBz$YHh8b)dpE+Yrs>j9+IC{(((A-K{Y%hsa6FZRrmL zg?OdKg*?o|neCC{-NaF{wysu)H~wH<9IRn5Yj5Ew-K(Kc1PI9^H538e`x7Tk_KmLP zpeY0GHNc~NXJaz`SSViN9>-m}Cf<vWetAgzMN%l&|fI!g}kS7L$NiS3CUyc1$^Z)qR`f=disTOTa>90Mg$>2*G}r z?9C%Hu4V`o`QIDuVS`t<+Kpg9ae3H6bBmVHA@MP6Yo5x6dt%t~_=cs4+IV(IL+pe` zg=X>RvF-KAJ zHcn3uJ5VgzjVmK`5AhqjUB8dht0)(u;{YU3fzpd`T4(^!5^N`YKyGJL71{nrDk@eB z04nEiNLAs@yH*n!`Zaq827+OT{%G*|$XJBdO=q9p?= zRS)NVJdGd+exY2=Qk+W1i+JT@dD&0bJoGG`NKuf=9Y2=Za5`9x=_u90qPFDv3$#nH z#8$US47V~GAE^7O(+~4#bXA~Is-&F)>gV9}YkUMRF=5<7eM1dTD9b2LpVY&#kV_eo znj|gza`bEWFZ(l}JG9x-phFxU*(bipD_Lk{sbMua``MhO!U|T6vsLWAX!VdVx;9qX zd?%%C_R2X#Fw55gmXm@@K#3Kx31Gzy${`HKoTh!E*qF2;33LO{>ztpPq?4a3d4z{wV%#)O zyafwnrwZLpl)k7yymM3-tSWc}cJVb6xCKoP))lHH3;N=nvAA6ff&a5Jk()0<~?-Jrp*1rbe%5+IO{WSS;!UwqXNY zFDs~BP&lIsdZ-~PTuPb{QBC7%-VyJ-R#1H>2{R{PcM7aQHD0~96u7SGo$A7^{Tl#C z7F1sdoe~f!EtrIL2GcvJdBILLX7Yw}q<}wSU>f(GoX9k28^qGMTEZl@uMsQ~D4P7$yn`S$z4G=W6s#v>EIlSK%dvDPA6aQAd!x5GXD$ zdl3nTB-}dku}|{mqMVh`lW|uWCg|pqipuN9#m0eS$l>5#kV(CPDQXX#D!N7VHdXR4 zY_1KPzB)&^VaSDA*&Q@GB+qG{Wk+zC)o<;w!kxn|7~))nYY zjtn7QH9I>1OCG1v>S5*agns49xI(^ zG2GZa8%v2yXjhthvRH#Uq^f0Sb4PF@W^p_TNuo0v$v)~;j#46XC*#4JgI2XS!}vr>aS+yN$pB zB0HIvIPHfR29gMRuwx)dZ1^EC{161Os3`I4i+txtVJW1#sRa+q?uWk8`B0Q{Wf>Ews!HD>O+JnK7#)r916pp0~-XG zmb|Aq=!1ZYXE`87TZm9FGQ#W;tOfPo4yKqaWr-9anK=f#uy83NA<2(1`-IxCV`S9eCt9 zB+*c=R^t>X?G1xG*xlVCz^h(|E?z-K+4t503@?@(>f5)vDiH*PYTF;<+5{IwyC44t z{l`o@Q)&uRfX)i_u<(b+P|k9zhXlu7&Wvu1ugK+4cj5l=)7eX)S6=uS2pF3<3DC-l zXwMsiNWKAJl$c-+=)=i=2K}riFTP|r%=oG97YtAtAW zY-tZve_w34o>6)`Cq^9@$OE)K^$*e=I4XwfZqPemk4VY`_B7}nFs-E_kMf9pEqaFx z(&-(sr$O(4w%w69T0mBr3JZ2;Y$=_SdSra+9i-b8l}GCS-aA~knrq{6mv(E6`t$Jy^YB$Vah*6hKc9X2+3-96>di8HWHg4#Fg+NLKl|2qM_>5DjX!te|N8CEzVk<$Z6@DN zE&kt?py>D2~WRN&*GmvPR+TuW zxh}ouzc{h-!za5J7ZlOm@kdUsoMXq1-R+h(KH>S3E0=rvb&D16_sb_&ZnNK+_7Xc! zt#`X~a%G*}E-cv14!d`roLu>coqwX;IUR9t`sC!wpJ!9p4n;)?r4{1l zVAq@ek0)3D4>tX&ddQ+F6WYA-KR>zhlV5DlpBsC-pZ?;?L$+%$y>QxktLYb4{zJC< zll9aUfu%dM-seC5;>tf}pV#U>J=B~p%zF3#<%=sn@+EX{Y-B#LaZSeC|LB)iev|DR zbQzase0RWJJ$1&r{pl~Qe8O%&TSFP$Qgh3r_D+B1ODlhYof>DZ-KhcNXJ15Z1Zyz+Bw^keljDT~vaeeKIDQ#NZXy(f9YJ8ge? z<*%?)gI+6dlQ;cOzP$3kvgr?1V0`wiGhc)lJ*RJnl()_A|1G{BQ!=W{LK0Ce8~av@ z-KHc|`=ceGnjIzktI?E4fQ zyHYWjbQb&D_em}R)Zh%<^&W|(=Es#(>eM(EoTHFXYSLh6Y*HJTzPv6vX-lN8Su>M| zo7YD>N@#GLZ~g87|DzFm#eu#qCIVPQ&xXJL&)@&T7f$10%oqBf z<-xHNe8_In@w9DaDAYrK4Ud6{l&+|9R`!~}QqN2Ay9--lbfsGh*^)B5uAEmR-) zXo}>zga2XW?(V6IDCLhyoY;O(K*H&bXy}Rb>zsJZnJ!W z8lVrVy|LRR1&iK%^G(*iKo;6I)hc=xPj_Tue?|_Q0&cLtNqwe+x{Pv(^G@ng8FvgmbK%1B(z$aV zqH@T?8Ows*m^{VX%qTFw|4;=Caid)&8lUo5dU7rTpNyR$tfo3CMT`|+3J&F3&TRK^ ze|_@Fc@B@F7YN_tGF6-j%VEBfuAeVQaWw$Ayu@Y*VB(Pw^u32;?8lG4qoft0hWrN5 zzy$1(2Skna0-0V%v2Thk>S!X6%g`Ri!e2a*sPcppX>v#z0Qh;vpK&?xZv3$S4g7%c z^*7>&clg8Rl)1*?_K#23G^lF>1rv+!Z&`ymb#r)!YlkV;DGJPgG5*W->kCorh``g? zs90kWUuM1>f&nWJ8r_=}_SoOP`8Ih6ZCPtP)i{V2{!Wx$TjS+Dq*zB_do);C1I|$* z1@dBbmH1Veq_{1C3|61&D_4;}`x3cxpYk7n;WLdLCFvLWBUch57d<2EpDg_N;e$ zZ-uRAtLK@WB%WutxexbvIl_c$SIPjlLoF{H?p?rETg&H!f-={_`YaF~9&gVY3APle zA|_6$3*lUY(6Ive{&BZgc?izJE>&p`w>;&6w=)`S4NGv&W``sRL_wJ3qdF8$LuiXWhAM^N)$-K{85+~+0<1^40 zQDvn3!P!prTa#y0AB}{A8CRdGvsHa*(Y=3NUSd%c?B(riZ(qOi-eBe0yOl%7Jyqew(j&!D!w?u3yxrIzpc{4yqTbeE9LuoU4)g9=n6pl)+FDdy1oUXQI&_z%~z=!bk^&L}eu>1va%EN7f_IudO5dgNbqH*6nL|?)}E#-D~&mUAuF4aOLLJ z!Cm{i^)Ly!qV`T3?t|OF{Dc92h5tW-rUe;fyeRc?NusW~PZA8R$;fegCgUeg#{aJ- zOMTjt@l%>?sWqFk^PUO)E9dk-t7*&5?V0^+n!Gi4Q*87A(QHO&n!iIbh9qdm}7Z3tZTLj_y)r3bXCO+RF|f(LD}lk18J*W0d1*Ath@y-fN4#SpvTMkb*Kerf+ z%ndZN&P@DC_lDzaABa8GJX4oHzBKyk=BKAd5W=VftUbcJIJKvZ26$se+Jvx#Bwwou zD#G*8X)rTUZ!T61f(9spq=9uL4!f){|!Hq0Q2ZarYYUTuR>_w1ao zZeoMGc~PNUncXh*f>J)dH2d_@fd6~8-dmCw?*EYdND~yccB1f)-UG!`vv~-`d56V! zYe$u75}!bMJL(wG3UNsjC6pMyRid!GFavQ4b zeYV1lDnmLf&nasOk292+{{jeIoB+@$oLxSMlUu{5glh;7Cb)F~Va~UB@TxqtX|7Y% zlW~R|Vh5t2wP_P@6 z=IpR~Pkoc?WOXR|&=wsm-d9g6lU45Nv zKK}{fD1%{#bN-k|r3Ie+$j=Yo0>Ob}K}s9+?OQj$2^$nLXK?Sis=Yv^ z?5=`*9N`I)pjcF#!Tp)i{Z0?whYQuCE_gSAGD`AHQ%6}ofI#U)IVOoKd)m*l6}U)0 z!{>}DHykDTp0LYz;KhR!Ws!Bp>CTML&>sSC5+x6=Tj91M)fIWJS%`jj4^tB0`xh^L zz-jgO>+l0ZCq`$Et>0>J*^$2Da8nT~UBup_IuI_YKrDWGAr&|q#P{sgH|Nr-d1igD zuo%}6jZ&YX6sB8f?9bqxP7W^NGeC-+eWrq#80LFb6Vq}2y!9||%jN^za_c(xfJYnY zE-bCtQwTFm&B^v22-n8o!2wVpK2&avR}!Ej+7Sjuspch{^Yq}IX>~tX=dL`^7^SJ$ zRzBL7eWpMNI)o5hKNXLa&)9HaZJE!5H zs*fxFb$W2?&edyo2H$x9%FTP%;j^rx9ysxhY(aO005}Gn{e@N&?np9PTSr8|fAq|! zahX&(yDUdG4djjt7gN>ybL!H|8k!-@rnl20L;@ql=94+$uzE#T;5SS;=^6eMCCCzc z5`kmV&2>v^2&P;IwVBM|13$&A+L^Ry8sW4qS_4VVPm_xuADhKr&pM1?K zprOhYgYr7P-lI#u#0#|Q(1~3P7n8)&&HIAFKmg<1fd z6gVEL0tI-$hVagvo-qsF<&XI=97`_qRVk~brzbZx^Xh7w^6u~PNsbR}F`QqFHiT+THlKdcdY>_PNhTgQs2s!$_BS3rlJ2wgIKsi%ncko8z>9f=Qw$kZNW_;41zp;T@o z7f?!8PRUXb&{j~EYi)}l3IPhA?t`YM463I6)db~$CZ6Ijq*_UQ2CO*Bd=Lr?gZj0P zw;<`gIM~HZkz2s{I7&*a+e5JXNal=V%26zT0sfqv-MOQ3P-`HiW~m1z5_)aw#52Lc zX7*N;Z@_F9W8#?|kSsBZ$K@qtS68zJ>95}~NJ|(DCw`u}SKI?~u=Lt3hJHYC3Ic?G zb%Lswc!~_ZHk_G5wB>oiT#&#Ulh+zF$KN4*klL$)-fY4n0nJlywA2iZjT5=)eCeq- z=nICPg3a(A#yJj(LXF|=~Nz6U8^SFR;AuGVzxcZ~s69d{%V*$9RP7`xh zi8heNKKxol5(e`mI$1=(rcy%!eLzwqsy23?dj;wyEj<<|#z=-(N*WO0w-2!~7>&CD zqN{cll~jNUbCXrugl1s8D9f?`A;IUE;e*2$dFFuL1}N@+oF!J@#xe#v2AYMrV2S8D zG^U8<5-(2mOn5?$@@xV@#h-idlsFADlf+wYr!WPEF4G>lR`LCuhG0K*zq)&mr0hM0 zNpejrX$l(`WbaBauPrdGj>+i04`?r`f006p21+ha(jZlroR zehNaTA;g_?n8Sqo10H@rE4@V%;3AwrCm4LA;%ZVON`YvIXdb=pO}HLOb_yc0fF6M7lvGCNaA`tt`f-C zZ)4HW?eL_gYcTpnXh__T>+U(xT<8Max_jkUj(&<1(#X%+S1z7s`6HlW%H@{CN5K_` zbAdHqyMFshbJhM^UiZ8;(`^KN!DA$bzK8%4v%6y|Jcf2ohrjHYCWYOTJIVSfV+qB* zHg{^!KV`=eTD>2$H!!erayjr3UE3xkz zJAizLR}3zsgX`RNBhoKb=QRP8Si9JiP3j(DJnCa3Z zF%fID@dIuRQX(5};LfPnZ|ojg;L-ILAFgXMfFKVFPFVv+KLNL8QPg2@Ybu_BH;eMU zh{5pv*&)(%a_0<_KPK3lSu!(FH6_mWkmH5ZC8+)PcW^EgBrX`0GI*sGcWJfpq8{ z!E%k9#<`v=j!d>yb9#ZHG~PuQKjBfX53>prg~o!rbGqFQl7>P#gWX{4nz~o6Hp-o( z{{}CFX|Plq+4LTH5a1P&o4{aog{TB`OfQwV)ELS6xJYrZwlzEx*UmLRG7a*w>IZ0T z?ewB@qj-Nu;gou5Lpl*)Orm--@~*dbch2Uclg>VZ{ie%xDQ$Rj{mJ^)Aq-Ku1fry_ zuNz()bA^aV$YD?6LAvd={SPM_r=)}!Q+8Sc%2?+T^rEAnL4qe317|Izkk!d@H0fQ(K`iRg}SKGbN5clKoUYOfhlO{$C>GzC) zwb^9{KyaE7^?c;da5@&Yt=2tVVD)Z?E}X_Lwzyv{FIazTF&F$;Ec2GY=|R4%&@gL|oyq{wTNmi zX{5`G^yMs>wUx&mnRf?#rb1gujb*_X!Sk^e!#6(@4)^xj6U(^O&mq|O4+=6CdAAha zrGOsqr%!h_319)?l7pq(iC_}dh?KAzmBP#JxEAvoIA0lDB;UY)98=|}T{2~n3P^Uf zZ)yJV3c*tC zfHaYBXV|kEF@BzqW;%92;~1GW(VhQ;$Xn z9gJA`ZAHc1rr;Vxi?qHwD`}dBpO(?5ftP$9vVE7{m~OH|i!@K6NA&KjoK;u~-a{!! zX_kl}y30lG;g*sk3k+pT4q?l|M8T~_tVoLp_hwkrqvg|L6ib?A?3l0|2lOeG`wm^S z)?ARG5gW?Lv~8_ku;Uci2djL-+q}dFTXW-4nGqOG&js<2=#0aBrH#+0Tw;SJPf)X7 z;DFe+LIzd|(q4UTW=uTC2^)GWEY8o-4vgw4S>weROdH0p1poblcu9v1NX0LM739Z*J6d6mMg1Tfzd$s1!c z#g!uz%4!b=JS6$+yCkyf+^=vwZUlMaD z2r;d+pVx+2lbMLqT6}1e?}BUg0m_mv?x7$jyR&fI3yoh4Q=GG+Ij3))pZ2^-N^HJBL z#TWwto>i{)$^xsTLBK?UZMa-H4yqDPwjUsfFnfwn_V$cV&>+)oceX`u^6=s>{o*g3 zg@YLn0AT`!ZNc}sLTk_Apz*7h$H76v6|W|rbJJKWryu211)&C-S2HdPQ7v!{fH z6nom(wd65h9`ar>jP86=%FvnRw0wRmpRjh+=RMT2PiVY$_yE_+H3p{P3()qBfvWU?^*=*372FT+; zSs5wzUQC8rt{c0Lk*NWUZrjk<8Jy|E8R&KWL$@B+lrfN7UfAA+u_Z|0cHcr{0Ab7_ zFEhi+1K5wO>@@T&1+-pzu{j(V@dXNt(zAAent2GI=2b^-Cf95q$BGEkBO?;aQqojy z1uaU!ePedDj*_-n-n9zFl?pWpZ!`0$6khX)z_ z+kbK6Z{gdI`L`xAz0rSp1XMS&ke3&&tUY==sAwe!doNeOG?qggx!?$Gt(0 zil*E~Z;1y!ewstYJavKgQzuq_kzfB6A4jfK`W?LYr4uW^!S8>}zqgHPZ}`E9l`r#2 zfS>h-^TRpb>0dgz@}unZ({nn(cJ$Uic5-ESRBM?3}S{ecL-;KDqJ^ zJ6@R6F%D&>Fz@`UCs)3~&c86Hb7)i@o?##5uD>$z12&2ms()QiPpD9R`tbL^hzj*x zRH6@asY5MVRH0uxs6oHaqXITKY?q2g`RJcYrE)DpQ5f6<11Ki_!~fe$FD89g z*97o%?R4j+XE%SJ7nV+yfsd{$?K|a#r9%&d7RW3;OBIJoHiJWw+U4%%GV^Gl->DX? zX_Zhxavts$>Kv9$oQETQoW3a^^1L*4bKNgT3z!z*KztW8-KKyNyNfEHd~zKshgG~O zDo}HJ=3zXtgt&(c5+tg?Y=1*wdY5&JbH|_bi}6|G}*^ZD@F+ zV$)BSJL*rLhHF;kzP~lw-H8V4yL(TUWiPD5dY-IX-E?pGHluf_(zblsf2esOsMNal z@Jf7-DN9y%L^nS+9X)Sb@>F9^%Mlt|dFJSKb+V1qdsii!8}0Wj>&{nX!m824pNg8| z)f+&A*e}dpL*3QsZ2wT1`2dC=8a$jbUdhNDM~eKXa7)^ZZF4u)viCnRz5VuJBT-kC)rpkWeqF5_x;Zq20%(g9z~e zGUH$?&KT@zf#4xD>>7+7ScdV<`o-`q%wUp(&!Et4D)CQt90mSqgr|&S7Mb5fX9ATlz`u`|f^u~;c;0P7|WhPut5CZBrr*ri`Vw?xSN zG6Ke7c1GsJF(8KUIaK?H1r%T}A(89}OFV5&cBZpO+gSKmQO{Ta-k5lZ>#Sbh7k2sT zYIhIbh1-TxNLLa~b~=xC{!7zQR{?<5Pf$O5{BX8ChJ_Ba+S3qdV8I-#fJM_G)c|c4 zP;Qd|_tq}*QGn-S%3UEX6=Yv}o-)f$=qYE_uIeqAn9e(GezT`l%~|nMMMB|0f;T7= zU{G?JQ@$X}7q4;^QUleRo!{erXW?cYE%egpc!;)g`H=ps(k+gx~|WR zmBLEN!0c%MK!^5euofs>9@&$degKRI}dV}nUrV7#-Xsv*R{xg z_E43V{uNAuo(J%o^5p95%PAE8`u8BX=+YxVU7SHT(t=?Zd=`539o@C^YBNUb@J2sc zn~}&p9uu3R=^_v;vNr*Wr8R?!_nFer0e9rNbb{|WVDnbe39tt;?{n!^^F|sn|A{Tg z2?etbpkn_z0jf5*X0|0teT!rdW=-+IPZY7PVB8HR#Xwm z2JV;uCtTnEc^3UJ&OmoW_jsixty?%4Ub%-FWAO8+zkpv7p`O|}+}?hgHtJMHl_8x* z$Nmnu1}+e}^spuy{MUg+&|0uy23IvT%4l%4nnf}V3g^zjbaP5GhDTqQ9_?)t)btdz zrT1m)@fx;bXYvqkgpYU`6?0@xPg!KF-Z^J|>Jtt-NE&qmb~iE|*ZuWTo%B~#9@!+H zdPZF#rm*$p*}v-p$ij z$yB_iwgo2f_|Y!XIwvsLK=?So&Lo0|z?Eo)kScYDqjX9)evp#@GzQhgr zu5T4p^+C#S>w%1T4J5Px7Z2oM(RZM}vQ6%EWU|DY7OSgvV_L-M)>Q9kf+ha(|6`2RiuZ3 z40pgQY+4GOdPO0|f-Qt?Sh$j7hblcGt6an3O&^^bfbheY=HcNkahsCW5!)@*iJj}UGs#J9Et71 z4kmPApj=OnA4$~Xs)av~#G^*xAHEh9CTUlx21*SpjpY8q5>NXtt%WX*7##)rnwnKN8M%g&eEQAC*-_l#!YZ-xv;VL=XvNrdrwDvhLwNJ z8-jc$8(pb(A8`&YsHc6zAhy*qU_-rDEH>iwFRWBXuoFVQAK7=C(D#4xXt;-iD z7k)9=SGR0F#Zhnotm5G*h)@l|Qec+$h#jK>nhAz#3@BI~&`3@Kp17h#@?rs+ZQ%JM z96e)>l4zY52+Z56$&o?U5Lsjt_rPI8qkv(O-ag_9r=$J=Ph?RlXyuWFmZP#9;tmfF zjtJUrA)2B>0K2-51IDo9Lvk%zoImlUqDRH*j-|9vEFgp&fSV5JsGF~?OumiXruIWt zfK8a;`Q3?GE%u1DYms_J%RdTx^;fZJjV09xVDM(bVg~t!& z*@A(E()wVsE)J(YC}4$4J8(D}0Nel_{1DYx0;{>|@)uc1{yP^MvD(X+Sh6m+aG#gY zA0w(RYy%yQCT)x~8<^~>u#(XNW)fOhC52gNup$Gj)k;?_D1Nn#JSDkkHeA9)nGdwX zMM{wO?RB)a=j3E(0mZiM%w6K1jU}cq(&WidBU0YzKR}zBT0a~cT{?`fIMEm@s6-va zugU4fEBhyqw8v{;NKggau@}KKN#;a;F2#%tn&xzxEThNwEMo}Q%4A)LxlkpNn}wz*c{B>>txB>jj{C&6otwcA&#@WJIEK^A_iRh*`H!_R&8`X63v5r_ zH}(9yY!WyXRVGmjxV9-Y4Vdk$rTucop)SWEFlc9qd)Rz6_rUiy|Gd=kj#+&kgmjz-9YDHSu*j@%xm&Ko-lmwH;d>8quk}0F zY6PT?;ZfTerA?FUoiEuc7zm~S;8DrLw9k1QB}stB1T_orr9!L01Jd%lhs8Z4g9L&HjWdI@S&?1lxj|8F7;P1ogfi zYZ!osj02Y&XXJJ;h9}-*A~`-2*2?$P@#e+-Vl=$z2B6ZiBF0A_?)_p_w{7-OcK>if z&5vT^E`W^{7NAuV>39T~N%~=)kNKl%qL)mN$AIMP(c@FvfWThh&wnqhk%03}IXV6%@_4P8bWUOtFrQFCC%OWx53dznn1%(M@ZK^^auW zkX9C*7ND z>`X3`2~Qn-F-7d#?u5pPN$$)!)E)qyrXs+!Tqpd<&0rphf&otbypNkyPyEK%ZT$;Z zV}V`ALA@F>FOT8syp*B)6#vbWg}S;O$XaR*&<-D~yC7?K-=Ty_SFQ;<|EUu1?1s;I zJbctBLee7oYjLouqZCJou^uEu(hnpqgAj>FelnJW2pY;OvF<0b>u6^gkBN!c(3c?M z8>%)kBDm75QV8nfJXJ>}Wz=DNIo5ku9z-;Kps(^99x3yA$&e0e#I?WO^ zg!P{u+&kPy^77_pZ)8q~tI`iT0$UVvX~*V-%8FKV)E5lqmb{M%oeI?=l>%;Y9Wj`2 z`9>_b%jro+3nL%!utspj1M!t%?i#p`J9Z#nYO<~fP4LA9GIf~t;>3Va`P>Xa2pTZ{ zP28+G>Rk_k0_y`36GI@?3y?ARuQ4FwH_@QigeYNVZyY1*XxS?^HUMGqa*WH!Pz&%K zXe8)s;cf9;GHXzzd{UW9g}kvrkwc_Ej9g=P(34~NKZzdvlVSP&iCUZ974a_IUx9kD zGkGjM2e<0*mtKCXUrNKavT%SW?|FKk;3AaV9j6MIAH+VwVD-o}0)biHY)DgZ+j5z3 z90%5;INamw&_ox(K$B!|MmmP36~6j!9W-WdT9$y>s#PdkkvtC_(()*|+>qrbz#E_J zNI8al&^kmW!}Zw1`&*ld1e%7*Hgb)CRs`gcz*pp(e~92Cv2W>r5{S*jLENUr)-6-> zKaEI}1)r>o?VmM}AT6*)er{T|>wR;mlAqX~q`)yDH%&h_!UWOshY^z^nAGUpwQI7% zWkQcf)P!p)#I{gPSKP<5K~E z$Ru@>oaeYaoHhbGlLZHlY^(JeS{*QHG`nAn={r%$?#$vA&o>Fdi@2cjS!juxQj7id zht@&{C(YgjFJTP1OKUd0!GSRfPCm*XR6>Uq6e87dh~dRKrqH0dA~{$Rhx9t3+tY`S z)DW9gj0Wb8GBF$J^}aMIBtR6cZ1mupSsN2(l1z8(o*>85zMZ9y-}0$(NBQ9q!hq0$ zS@#NRECeXxdJ2F^Ln-mGk^3PUtl$nk3!Pj>gJM*HsX?gupP~P2JJ8R_GB(ljDEadd z+|^&Mjebd5o<~tm0&lhQ$fqn^0x~^+RIST+T!Cm7d<*5PE*t$VA{3q21_BLwL$>`Q$ zC9koB>vmg0!}T7A^Xbmw0u-Nt@6c*b@$0F?(PD93Ef0319l&hgyZq+b*5Ral49K5q zG2V)$_!;OvR@m@i2DHF(bkkWOR^V{3oqiYDisCim@an9??ODfN#zvk&CKi=l9^W}V z0wEGZAg`&%`dd&?#xX1ICkru8?spP}aC4ArNUW=_`jW(@EW zP(I7h0e)j(Lm>G*F)I8Cza;zQR~rtpRS1=yoJHH;oXJCfz5gkq~Xj0$CAAVuB(>T2oqq zbnvwQ{CPOJ|M~~mhWi(x9-F~flZI`R(MBQ|9j0=}a1{$~H^?0?tUv<}E69#PZej@k zLdBr=2}nZ~Fhzsq{~-Bmy+CNZ2jtlGbMkG=1Tbu4c*Xdonjrsk1fD_eK`3QHj_zw{0=$oE;T#NZ*F(FQZg6s(Lt`nh;))9=$q>eM%{2HgU`2BN!P76r2 zKJz8@?hKA5>BB6f@5htc#Mcq_P<>X5&M)J%7Q;j5Z_q8at@&Hyh?C&O@m|!4ZO-R| zzmPM#KVdXOBwL)7Cb^0#vl7b3bp&`2HlHUso2DY4sBwRi=`X{1h3pLdj zHXSz5p3i~)3gkdjwZ4ek00M89ASmcChJfGi$;d~+-7vmStaXcN3Dq)vbolG5CTJ_y zDmS}9q?rghW76dm(&hPL7ChAm=hz?OU>*_j#w-T_-w|qySRuN?kw{Mq(u}K{ok$U) z%F(Zsw71oV>4;21Q}!}F?JIYMGgPQ)47nN*um1a;Nl*Cm6a(yqPh zO2dLF!3#;@aK}ICE&6D8iXv$4b5ooq@Sl8nx_FuR8I6b(&V?V2)7n~z9aDi)jOaCz z9M*#u)OKa*`nyeor;`IY-Yn+mT5TWbG8ZE#6}~>1QQ7kciVKHUl?lkzq!fTe+l|P- zob951ih%Y3FgD1MGAAr!Ol0tyh|5P4M`6lTiGPRFmH+191Y*og9~~99A@VqQcJ(aY zbwQxGRY$@hsBNEOQE+C(pIlP)k&a8bBRogL_(8{h#0c664%6E1~?;K|sTCYN+{@sMK8rB;4mH_8?%`FIG6KvlRFE=ALa%m|CO1Wsr%Xa4ukyV^Zbg>3S5Ej4Xeaf277|R21CmK1KlnbiI#cw$! ztQE)At(H_M78}TMsK@20NWQxNKRQFXqO9yG(jo2P0l8MrH?NvVg)&eKJg$b|@&6q< z{%P8$BT3)byp(|a(e0fU@SA6D;_E<)E(b+y*uz?my_!?c0Ux;;2J*qaC-Nm==7iMQ zMxxfJ)AnR8l#4*v#F23BS14`pM4Ch2zIf-ixeWzXV(}Qroh7k2cv7$gqRwNZ#uJ@& z*YbQ3&KNwO%rXAP;Jy6O+d#K2S)~8^3|uniOpG#yYVgWvXOh2Wm(k_raZH~9tNy$& z%~*5dn}MKC))^nQvkP<2yy|pFon@!lkK&;nLu6Pgr3|F*nmAZlYBQgidb1`!ji0gF zIV`m}k}+LW-+mUR>SI)V^|tvhjZXzs#$EkiR-agY-=QDZ4o0UXHvvM=;+2OP&}&U9jNz)X?Z9C%O?i zmlwxyk#f9Nvg6y1yiDU2NA|v4HKW|Jr;IP3MqQv6`X4;xanmfH3wn_q70lwo%S(9U zW0|V9n-P{Br97UY{@3M?y+()Eu@oQD6^-+Q^3?{MW!%WKNC;GEImMpR$DK_S%R{4b z>Tg!Sn9>|%P*eq1SMALPuw6(wL{^Z38&3+s?|~MDV|vI3H0+Wozfelb6R3Z<|7Y1V z9L*7eJ>%0ED5rxqsKD!4|?hYaXDV1_lZ_v{D?N6Ah zNUSmi&&7+V34RlsOz_sUrtawShvs+JQ#M+_6zDYt6%U}TTFk+(gtR);HLDYDJOfsm z`r68!#?sosGqe&7$3BfYIW7uI(&=JW z19p;bK>39@J@w~49A#V+8-}PnejZta2_*uf<#_BHU+W`EP17IOBy9>#CXt>-nzFSK zGe!Y@=V)gVH5EY`PH_}gSM?`mvtnDUbPJMOUCs8$>Z&Hef~87s;F;Zf7|)5o8KEsk z_5465Ik78~MDl$3uFDtiy|r{g>DMkhwIDA>Yw5&;mtea%$(a_di4_^%q9VfUk2FT#nPq305XLU*U5Q^&&(^ zTPhPCA+WtRGBAY3e$U@)E9RF@avXTy`m{ijpc*~Lh7u5Mrj6=;ccZnEAe7i2o1GYR zg21l*s%jpkz;)W;aYAqc5*GmzSzWykN+5$aPH{oY3)d-+iyRin57c=vMpvY>F7tJ2 z=T5JuOA0;IKu(tT1XN>ri7FWzt3i%u;-)t4@>1t;$ZsVH-^0%CAF{kSc~&9p)*c`; z2j)C8HxWyci=UH}>*UN?PMUZf!)0DyRLm0gO zcT^^;F*2$Fu!Z#K^`qU#;9mRTL^~^Xml+QQV?O@|5g~s^f`C%Kdd>|@BOSQ&gQvTP zGP(9ZUf5|jKdKH<6li(r-0uE4O-|Me(T*yHc`T*g5{uRuHBJuq*C&G^9=MvU?U0aG zSNC~Em)B6CWkopkQunBJVKgcc$@l%~R5ign9cVzmlZzz8>hV1jPm{kd@Kn$_i6DVo5#N z=E)C|OOWA>bV63{^x_D&zHy`j-x%u%go|Y+z1g)oo}GLK%di|gplQ7%E8hh2QlNcb z1$p_r0aN&jhI*xLHWgts!=p`pEb`8wJbRJ}? zTnl&dr6x7{zSjujRRuXjCrGfLfK z`kIcaLj-=haL1euMaTWTV#;TZ>z3hkNmgENKpz<=82t*`B^;Zek=XUv0d zp}d-#;acs-YuQ2F(54zhsV7GxeWPRR->`JN()?FW9I{WaZ~cT7MAb1QXvg0aD0h>7 zYM!NnmN7bvR>g)JQq9Wn^P8VJO%o%Cm<==EOt-Lyr@BB%T8Z5qWRr&9F|h~7)D>iG ziJ3Ur*4)BPIGiE}tn1n}Zhy7E7&wqJ)qmo`51O=s?vBj3L4M#=yEq?gt5tG)lonXE&aThKeG0u-F?1M1Ou3 zMu1Ino36rrz%x$5F7L#WrEKx#S7yhn@(89#Fx>a610ReC%Na|rH*|{TU38Gt!AIMJ zn+Q^Faug(0JMX(s!}E|e9{MQHTd4gUqMtpQ?&-019uvLT-bwWBW^<-)Hx?8H(YIU7 z8Log#6mR60ex1{^(GpOIH(ZrZ!Tofevk4^%|CMoOFHa6`-621!v<;eZg>*+LW5q>I zXA4(`CK(i)Qjs4(?!g<7^>(q_LfKTcqQv5WWS*nApg^yB32nQk`hq#hT zL53Ytk+MzdH0+^$Q}c$bgM+{;-+CSTa>R%$P|ut-jP=oZqjAZwm9-;{@~Ek#t1UK> zHLa$x(k*ii*&G<%=BTyWPLjSKilwOwXDr`gE9&VdbFbbOxzixTud3uWpGDh8WE#|< zq)m(e$QfCBsIh;Pp>n5aL#ewU-J11U%i(qTkH3#ZME%Uj5n#B}SaYydLejyEG+)`K z6I&+I%Vy$1>P)x%oKF0l8#A+UV{IRm0w;K?oC?jHuIedlWKpJ_I;qtx!MyQ>&ur(9h+XSd~oclSM^UxKBF*7my{4g7M{(LfV;^5u;; z{IZY4gH6m)M@{c)=faHSn@#heCJpfd7hc##RHdH=>xOxN{fT|q+eH*>PXDT1?rxnA z_ZSA-g8o8e^=)^ntqs%OBa8tAxm-^X019Nrca9*cwpHIrR_$h;kb^-d03yI7(n=>I z(azP>@U{UOWHg^qoA0lfg$$LHcUqc>4GOcV!MHbAExI+OQRoJ))`P+AZU@Ao#Lo3O zOKrEdy_v(&8xVIOc?obdTFrr>(bDFxN64&j9;Fup6&=!ecyWmm^C@xT-raelbu~|8 z6;r7?X*|>2cLF-wFN*2O#(W%uM*7d5&&)AMTVVHzT7yW~d(RG?IieKI@zX{Pbf@bQ zKi?W>)e=14G* zk2O@;-p6t!z=vVR0tC+-usYlOScf2l+1QgH=h1H65WR);+x8Ui1vjA9weLn^JlR{5 z?Qwh>lO*Oq+1Xz6yuh0FVKj9IOZ@%K)X3a{0E`tanwOj7l7~4b5kq?!Da28!7cM}L zIo-8HzxBv2#>-+}v3K?oAW&X0&(GF`<(N@rarPAc!)@HrM=bX;aL!xno}?Bdu>C+5Vvd;UQFC zB_rvUKa;;+B_r*;N=BluCC&!3T0eKmNRlqd%z-srCFWeG)FCaiv<0J7j9Ss8AHjQO zemBJ3p?{du6C><;Mhvu-XHAa5%k{cNo${rSM`S`D<469P{lLqV6mKRmYtiRPRE4-R zhD}j+$L~ddkFsx&c6;vHleO)=tqC$vhbc$bmlfKPoKix(^Wf)47ZGMx zq8*-H!L4}Q&A)VMaE{8M8Y7cT?M4lc>* z`{tW(hRy(;u}cFfV^)`6A6@)KX8$8*Tt=br`=5H#lcf`hqTh?H5MBK%=gJTfQddV2mo5&C0>+oA-`$hCd<>tJ1z&`&*A z&(k~u8^=5(JeE18f~g;%wi2?bI6QLS-g+8tas!5`GKdi!?jiSjvWBwUh@r44)Wiff zGQTbiE;2f>vHO@w+GvPuLtJrEi5tE{fGeO@kPRi#kbMVgJRs>d6YUI8r9-|DT{PW@ z2)p6cm9+)0to7}Tt|lPFh3tOT*Bd4xU~Van!hrF^-p(KqI!a)+>8jw_SNGsnJC3zq zQ9JS;TrZl3*aM_31KSzX%8wolz)(k{k;;|?*YV?-m@DNi2r!22jg`@_pdeJA=@ zr@uMBWS zMc(QU$r^0zt;tU3KxgUYI{N`m2;N6u`w&*{F7ER~mEF_3Zt`o}J&olhyBOfE?#pU} z1j5N48++O>!}NHBFrlhmv^ZcFwv09QBFjD_i>`7>8YVQM-LlF4uyFXMyF8tKPNBHZ z)mhIa2-x)8xe^O59g>xCS!9|Z z+nshCwr2-rKX%vgx&jT%a$?=5p+6JbA4nkpx)<1 z6Vc$Yx&G9v3T;A>Mdd82-Xv{p%&Q7*q$VR?@bcbhLPc-S=l)Kz;wu+bG6i}-b8AeT z*`X=j_o#2x=>(6;7(8TbU--I{KodPYx0n04PVRd8R}Su1)yiH~D?3ECOC&M9s#f-@ zTG^{=WgZ<}pjsIn+)03TIJxsTsDrc}-C+#XwN^{rVtghqaG#62m@hfF8v;;XZHd8v z)KytzFn4&nQ*UVADpjd?hUs&!n=~!0PpErvi$@#z=6h||7Dl8GzH*Cy@6$3UM3AIDLGV$kNEWIJ^YT@Xlk@dnCuiHi34&`+@dEvtoqoEMTuY}Ml9RGa z4p$@&l6%I^8Ymw+cjNBA^k(pk(yK^6T>0--y#QeB<4)*b{=CnH z&lZdcZ$|~?y-bI#vQ@Vq?^e#n#PVLew=uaF(;Nu@!2_9C@o?qWZgqJZVHQrdA8b8c z(9@WPpX+LjS^GVWd7Q%4n16ibYlI(tj!Wv5uMrPsyvl-YI#=8w3BnoJJ0f0pS&sZy zuR*+e4dS}jRE~nl^s3p*GDkVMOJCjRBGonvi2fUQ>v1_E)WA&Iw$E|U?Q#qejzw19MBKm59>-$QRih4^eY2Z&wtkZN_fy($(8Qj%u~I{gv#f3Jic(hV=mX- zk&k)*^-Dm}kuJ>pJFonZFQIA`!--~9+Kz-v}d{AIraYo2OUf{cRX%~}PscoYEd z9*@!Kh6)y_>5W3~s41x@WFqgf{gFh7nos5J4zjZ=de;)^C{gl( zcOY4pAZ~E*27h{F!18V&qn@&+{X@RxqznGIQYsS9b!wTa?jxe$OGrPVot{!)smU>%-Q)a70?St5Hp|vzfc$hz9Eu$IuCc$8 z2mjELmQ^pAqkq^rddev$5Gbpb@|29{QmVIZ&}uIxY4B^*!5?&54HUGfH9oWu z&_}O^uhuv{Xe?>fni!=r>}Pp$xJ|)p4kf`hFC-|2?Z;Z3P*GcvGOC34rxZ#S=Ekv~ zp7H0e{CzQo$yitU^#SX+=p`qwFi(dMzudfVF}~T;ksO+jXQe67=sxI|rKbbVbWMP@ zTkvMIjs~8?sE`}2VSBoB z$c);%WBmm<7)s=6{}%IFn>SJHz^kc66osd6DT=tWH^PVE{dCTX7E`p~pwm1ko}>%gdkr#cwZvLI3&mv*CAsqI~hkX?2VQJ-mxC{_I=d9ev>oH?H4U`|Z!Z z^Wz;2Nd_}-_2G?uwE7c0tuP{_Noss>;|Usf&F%FjW7OZe@o%Exsg6;-VPoJwd*jcc z{h#b_KN~-I%081P4)?!v<1eAdAM5G?8M(XR&Hkeszk_C7%d=ZDcIdtF@80;UX#7(h zW9H-KP5;`B{|rsLkSm+OTmAJLe+#XCwqroN^nsdxC=rayq2u+Z>su4=^0#mN19a&^ z@fgWNd;4j7|N9&Ns0UatS3CW!81uU~{wbOcI>6w~t1;f!fgC&7bqM~yl{ZeH`5*6S z4xvZo!WynzKC$u}Z26NNEm=sbYa!yljqc{DblPe=O?Sh@7YR4_tfQ-$1y?%1# z3VU_I&R&TFdHc6du6)4uU5AG43y$nP#wS;vvd2$%;B(d>r zU5Y%xjy>F8+k50)K0CScyXN@&=B$BGJUBT>aw8jW1z{9|7lR)}i$#cfPdpAF#;}nQh^h*8JmN{?f`%ei&`SN<)1DzZ=f)4%=YmH(ZePDy64vc9WRZ7tP%{If5w{GlIUk7(Gh*Lsg1 z{(+S@(c_R(s1red2MAi2=c#emCYDT0jk-3k!M@aPF5gm%Blwltbe;81KGh3bgFmU= ze7-cdiSeUe*gE-8FKi9|qjn4N9ko1?->B7Me5QB6ibtr`BD_HjyU3~J32M|uP7Pk5 zc7LSni0e!D(blKtk=Bp(QMR9|BdnhmI=a?!kt55Nhu`@rxkUO(T7Gr_Y2VX=Omz6` z7k=@?7hXoC@R*buu-*cA`_bBT=O!i{yv?%6aBgMq$P4)kBVIYg3*Gyd2Jfxy?>`;f z-Fb?4?(p+_&~tb2eA3|E+wXn!b1%WIwoD%h^5y-FFO(b|jb6ilA8z3_iLDtdvGwKU zTX1H5G@U$Nj@2$N>lyHENJ}_7Jl)6c`8*{q;$dW#+hB?e9O2TEBW$<(f z$t*aDe}?I}OrVhcF#$xMNDoubPpaQHcW0<3k5+o~2;Z($9>qRK4tI}Ot?q}Fkl+ip^?@3J~AEaWL_c&+WMPnO}&!8czh(1R8ES|%HC zMcnh-pbkskUfi4qC~-9ov(Y)QG2Pt66LWYrA)Znc(u?157eNn9=boeGcQ9u>+Ab&L zCHB6w8fR}bo8i3!`4vY2Xj@%aO>+(oP~ibdMaxahJbuLIr%6ERu~mCe%q|S!erw0u zl=cvPdcDv7DbV6kMpn<{>O1P^75FiSM{{WpJC=q`vYI?x^hY@KdSzp_x~!K>S65AS zDhu@*P*4%eXF2%evGy>fP9mE3|q#1^AVP(JHlrm+G5dxxcWIJ$3&;k;KdB2Rh&-i7(&mQdk| z!vr<)xhC&74ku|*H}uI4d^{{m-VB{4YvR>8qZUFQ%RZb%5vLv2%{Z9S`L)lS-E@mQ zH&&7zEn`cZ6N(jE_V6`IKyB}-h+=*d*B{%1i*R-I>uIPr?|(fOKizoq1BIQ>4X)u` zKQXgvmyFGGT2+fp0g1>7T`S)6^WwIF34_yT0uHrW^P07$AYa$yxSKF}0t1(xKZ8lT z%GJgY5$H(k3Bdpl>2-MBP%C2#g^u$}8wYqmPt*Yvt|NE@Kj-p2Y$M)dUJGF3oNyv> z@`0c8LPtbFcyvSjAI}SaWZc+Sr%M!ERO-IWf32>@cjTwz&piZ@ATSE~Da3XY5wwPD4bE!!7wCCN0N-T!&)KM_cH{YM@XYlcrM86qzTikbs)%U5n+ zAKW2pnNawI3ZehUSH);vh8lNWCDC8XQ!ZX@9X?;w5`z5R*;|gEOd>zguTPd$xgGC) zL;0}+?bF%%7MMUZXMLggo6VN3N0Nf14!#z1Fd2UY|3Qp$6F=YOuiwOvb(d&j#n$U@ zb?NxnJBO@Lb#L2N*PUbFs(?;Ulh(5#b-NK>g9c@%hQJ_M9n@LeIPt=KnKuz}@_W4Hm) z$FrQ!;fIK9o6meu{n^Cxhh#A0>o>1n`}Of#@2}j3$Nb{!ufP6s-YP2gf?J);j>|9h zKg-L~&zn}x&~#7_58i7^Tk|f$W{3NJ zSG%eBW1)NU?(SYX`YxpOyZ?cf!Ob4+?i?JFwPFj;6G z;cbV>#<|hiJUwS`uPE1}!qT8nvzQZB_m2PR$cdQQ%)`1Rc*SC&-{X9g<3KGye2y{3 zY%fX6!ow#qg{l!y8>fE1&IQn{S=)aoZBinhktiGH`g=uBm&3pr5+$^a*WVkwsYgh9 zo=Y!K{j0lM0*qUS{hMrVPS>ZjN@M`yFe57Nk;3WD1%Iu5P^}zf3dquHcv$KHZ}Wnr z#l=HdlULxOx8m&t?9e)u@LiVkf^7#YiSavJdRSfU0o)|$s#m2JQcM{IuYX9rrMw;;cqKE?q`vP5*f#$*+qfs~7JJ%)Lzlgssl=3(te|5GYj(9dJfi@s8x-q!{sz z|ANx5JH?RHYE2k}ui~crViTlI+SevMn(ooa!&|p&8}_hc{Bi;UN+8M zVSd;iFcmt)QS|o5GE3jRa4_|1GMzvozXa*J1z#IP z8$P$+n#&7nf75m*HIvF4IdFKa_%;T(Fp4`Z8MUpi?X9izLFtU*m9;1E-)+P5^;@6? zwznem@*U#4P+=UC5N{T7IK+Vi2iu@h`9K~{?5tj3 z#yK9I#c%6tU~l!0_yNY|0n^p+metngDE23%s&SR4L0K`9J*Shwn!O=~N<{RA96=k0 z+uI3^gjxd^u&6C_!D1z#yUt~-Z64rk7d?AcA>SRWCtw9e3C;$&X|X2KH5P>b%ai7f zEM5_VgVjnM6KwJn8Qn$z;86Yze0h5|)KO=353~V{H1B5O7WM&aBfayZyvL$3&_S9v zC@M)?J}ie?w6OA=>Ey||J;+hZlOY#LjYi|Ktj_WHEQkyViEuiD5yPY$!iY~}6cqdGgG`9t)npkV#G|hJ2IH_Y6fkZXl=Oc-OD`9Et3=cO?2|&8`Xn;01 zvBB$4k+R2Euf22S{rB#Tzj@`o_pjXr^?i)-&sa(v&Ks}`&fr9T2#H#L*Y_brjz|SZHr{383wV(0MF!{r{c%9{Z-D|W%iff+r5(k zR5t4|4$CHC2#smi_I~Ib-3^JVQ%l`1znZF)EP?V*4ttXaWYgMrP0@5p^XyvCwU&Xuio!>*zALC*BvVo(neqz3C z(0C5Mz|Zdf^x<>|S&+K1QTBoS8vDRZ*zWm67Fj>VSvExA2oBcq+Qzq_V8R5X?sU}m zF}$()(a5s(_SzF>f+9B5Th0m6_t7f`j}@aA;a_$V;a_n8gbsCoG&K z$!bhxc?o??l>-lk+-&v>hDSzsdLYGRFrkh@&x|@I1_w5`b75!l5D`uUXWZdTZi<%V zfY}Q@lx#f97^6u^xB$dSjgfwHZR>DiO!Ul6VA1D^x}0m>6P+PbE|v!FsliQnU$k!~K0g%!f%wy}Aa>(!WExF63pn75xA*5!NqhZAB7n`wT3_!Y75I2M*T0+wH+ zC+TA2Xb29!x3|@j4S?%6F|eDpO7aQd3V6Apqoam0;ISYQ+6Y^-YXxHSV+&FAqcBR91wt>ev#cvbk(Zmo2M5tg$tE*yA=DhZth9T{TD)9rPPF*>Vr!*O- zZ}d&$D=CQ9ru(Ke4Tm$2i5&=1KiklN%_qBwkF+CV-o~<8ZJH;A0)h7()(@P&>-@+d zBDCiRV@|Fmk4j@GbM4vzcb~mJ&|B4jhd^LOQq5s;wl>CFJ6_O%f3ZWlq?3e0Jxw(M zZyMdshnPDZai8i)2e&Zy3}SGjaZK z$V}-(e8V#m3a&%SQY8Pq>^;whmXP@BQe%1|Li_sw?`MCAzwlq@KxNA|=c=&04u8fj zTwce=a`cRsToRTmU7cHH_T2ID%o&b@=MC07?ZR{g(U~@`iAI2r{>2d$*V>qk_{@Cy zyB*R%vBS8)X0RnTgIZ>32RbM9Xv!IaPBtC;IgHK*0YN!Z4VAVF361%)gG-D|Xo;+9ynIHDH z_HE5!*k|9=JjUYcfrO~Nj> z_{c!T=ksvl*aj@o3tgCmi*YFB-*U`y97LTSpJLc6V_(i6pMVGOnkD5(fBPdntB1Bg&N)FbMK zsHDOCVi2}JWU4+TZ0L1%a2lJ&lO5%Smig5wqn2dB-BnBJf@oNUQFA(5WR1S`rKvz+iXeOHlMx@C^46 zHrU@lma}x0$B&Tg!Wcfnru4IEfDVrcTw^Z?m;Hdh&M3t;b3?JqJA;d@1!%2+Pzyne zmKm9Wv{}weXQbcOaxf6)VHN_E4NSo_--bKhV&dm4_(Dvsu6{E`NJyYNb|*|O9xxar zXYlw2-IRx`?Y;m9C5DwG?1W4p3WCAkyG(`huNY1%jq{2DNYade12!&yeWIil`m~_3 z#41&Y8!0Rw!Ykp2%oXG|P*^eM=r`?4=u&zjNe!t(Iuh72!?j-QT)Nj-5gf6>nuw_q zLpdACJy*EL!(ROxLB|m-+t_Wa@FvW zL7F>Z2q4Qw+4>eUgO?oU3OEKEh_}AkW~t&|M=pS)G&hUMv2gRL8r%HiNjTDFO7mTV z{X&9k{}cvp4o-|f%^+_A3oEIFl0SL2iO=M^Es)!`J>4sc@ludte|rqtfymgVj@LA~ z5JN=K8$Wu(5`wc_Pt1&12+cguyZ#9MY!O(U6{#p~rtQcL8ICRD5E^KJ`31xQyFkHk50ml^tnV;yzk?6wBiTKr%+* zbQGCw<-O^q$+~4y&Dq(+H^)1T!5&v&C5k3(ijWeCS@vv)dO)f&(CP*1aCCB1TRAtX z(3>l4QKm5^EuW#`=9v<;@CcBRzz8vXWRpqR4aXrc1`MTXgB)VUIS(|^&^hILpG{RClhi7pUEcN6LFTD(4`UP<^z7h~R zMuOy+rdN1-8>Ux1F!a&I@YfG=%k1iyq08tB_@341ivG`JbOE9LMoV76q9#l3(J)vr z&+m;knjkXrHy%?S$%S>%&XLlO)_F98&bI^So16?G zBg+`jfaf47!OU;az@xB4@*RT_{3?eCEyI1@iqphwsmN~wI%ba1nYkErG_`R7B*i$@ z8`dA-^ogK0DV8g&aajhNOho>3vFa@t?;U7}skj!>t{BN`Eyn7&*a@SP&bgwui)t`3 z$~bwzh~cXOFGbX%#=2&0BfO1fKlg2*l#SV&OlI1v+0x=A- zC+sDP$?#Rk<{tBav0K1ri10|a{k+C=ETAv&Sws}|)CCF9-A6nq1H zVPa2|wWeWSk4w`UwHfhbmo-NFiXi88XjA6F<5Vi>f=p6SAX&NiI@Bb)Xh0%(oFv{^ zBq?BeR1MV~4L%~l^!EWuNKELa=1pC5GSb(RKHsDV8-2JJ%oh+DZjT1 z900v-{6#xy+DtGbyS#zh6DH2fh2a+oFhPeLa}tF_7n8bNskD8aLZVSq5wIn@YUnzONS(+!u=#1!eG*yPnf zCIEpuu_A@I3TlB1YHdJ@8Ee1G>+Y?qkV7R*n`G=x%4^a^)M>;J1<=NS4tcZshqc&I= zNIWUviJj?io*rC<)qtAbl^DnAD1n1L2#aM+=@hyn$^ucSBj7iW(c4)cj}>hk8Rx&O z3BU!$o4be5U-NaXEQ>Do2%{vdzG{MEcjMxy)N@^CC2p@~#=H|K&nZxxJGvVZn^&%c z0!_=q?{WEye6DMc-BJW*QkFLt3Hq$T2j>843*qi2K1DBX*bf_=0? z$Bt#Td?R1fL!22uV5cwIva~-5Z%O8QBaU%#gwK+kUp0h>WKAws;xtBupF{t#tFHVt z<~f23NJ3roEyX|V_sv@I4r6-%YTw?t%Z=ff@09j^U)52XTtyw;zxOI z%NUDq6ggW+kls)UooF@~!eC0J*^@I>P|R_;w$g`1jnpM9 zD(GUer^bWttGp)xMVI3Z3l4-DHcI@Jn!6w`KlUKEd-I5ry0iIp96$L6FWot*+ zx^8d1a(eGU1V^)2{``X<0*Ex-oHK7`$q_kjVBg8gr|M>wU>hXjl3!MrdPdc!#tRWW zi-nd9l#`i?V@3$p;ppPQer&&o{MU1FNz>dGhmE^oSgWt&P@b6+_4}RC76slMXXiU= z$e8ZZ!*fS_yL(}k8{f4=IO-TlzgVDe>Vc$9JhR1`W?y#m&X%Bzu1!^XQsO9L1)cUo6C_8;s<(X=I8|ba8fUW6fWB zSSgRLZyp&8FCZhOo-ea+PoH21w{+`)rK9+ylT|!vGEd17OvsJ*;-agoXW#`rV-m)h zfZaUtz5Fsf^&Ja-Kd&6HYU zQUa=!U^+!{>`aT&PX%> zxzQE>;g`vidBv@;Q^w6YD}AZE9HShmqY#$1r&KRA7&k{>YHkSSS)aomd8s^cj_MhP zBC6i$QQHb-RmlC0DL>pn!&0!7>P#SdGH3hO8rv%UlTVibNgdXlW3EB+9oXzgGR=qI zYaAmbM|EGVmb4$T3ei2Zxz2~j$RzE1oIpz_$@*erJH*`|f}_LIVS=&d-HS|s#rbf)36c*^x6w!k>Z+!%Om zzxw6w!e#5fl>TV_)L=0@fv4PE($0W9H5k&{h$3U72~N09dNrJ*dfb{~Ufq~)gKE_QO;ALx)-hXuLFy{)(LxM4K zKn+ur4wlux67iPJP{c<ArB>`CrT!z9HIFFF?`Zvz|g$s;T)5$GcFTK4$RmB2C#ZNO57Y8bV zL+2^p6~dcasP%&vm(T=EEiPAJrOm7MtvH015fH>l5*z5k9mZ~TXb~x}+4zl%jD9JU z8V)*6Cda3zBoR@nQi$|eJb`_%j$3XzDHtU3hmLTR#))plKe*GayYTmfRP*FxB8Y?7 zAhHR>Eud(H&(Thn->HYBvm;g>sUi0$?xJ%5?umYDJ`hoEWP+5~=)SUVU}p3k1*(sv zcVleb1-t|*oy!_zjJqI5psrU6KB$H*=SdH~EB<}dN?sJwgS=b3M&xA10QGi%k`#Xx znr_HIP$yrd;e(MBjoewL7Nz9Q92it4jn4@t!2Qr&hmL#m`JO8`=KA8NlpEW@<2Xtj zI3sMZ*~X#d?sd+aNDPX>(FZp^ss<{5@?v+46 z&-AyFX;aGY<&pyXs_au_Y`s-EEJd zcx$9yXbBWA_~7=@8NEH&Kupyd)U>v-R$R1ih7iu?!Z@oOG*CQU^8giRTxvqZHVCh^1L+fG+11;EvVKQq@{TOC=z ztX#+34#AQLW}U4NEWrd0v>64JYy7~$YLDRv%n5z-~b~UU;1&O z;-C)?9A^l9%nbglHh_XF+aX&b4zXDw9{Rw57~V7L5Jo?8>1^V_fzRYDGZis6@mb^F zBw4xz#-qke6w}0OJVV=SDKXNabcaa(xW`k7^J0W4l^pG}6bWD-#qRS?$K-ZXfH#a) zI~H47s0{=KE5SQvkP~hq125Dzsw_Ky#t+<+)gS1~$9vsKzE9~wp{EqKI>r$%T`1=t zj|!7d_1^<`#J82be0SP7Ht42!PS4a=ZNCzol1lC4r5lD)(V?osE=w9JxZFH~2E2IK z5zUKO8rAq3!Bp2u$|3)($pmX^m)NEaE$WXege`U11__D`>zm-)ma}`KO`;d*X_-0wQEtJ_sUVmNjtlW{UWEqcOJ6zdF0U0R}=J;N5Io*MCxgo@p5 z55+lEtU5)Wu4~t+62+D@d5B>L!61g?wu6C@Ac*1QA;?P%2gqAsAP5j3FNWc_VBi1) z2MC-PK@cQB2F~|=Ypwn7{a;Rv@TSCu}JpaC|z4qGczSnl0(FpgOd61ECg$7&3 z%NpvSFM*N-3cyXiqOv>TotMWGJ_c%hmJTFYpAE7lrQ!&9yE4?7I=jvt|3(+p3yMxa z0JRLM2hoNqk!wI&-xMlLQDQxB$iH*Bl<*6OyR0X`SDR9HF8EqNXvuFpZ_<|eMbpf8 zizY;}-<{B#JRnW}S02~v{A<%D|}SkMC3r!&G< zSS?F|Vo#FEk+i7KLkq~%68Jw@`PhhNz2I)R^o)ZG-=iKiqZQ!K*Mg?7965i}5#iC` z`O&e{0|jvR9?Cxn3go$J+^>*p37ja7f=0eUb36qiTgH-$j(}1OG9>Vd8@oO6*`o=FR-va6E^Yu zd?K`4#yXPrmN`Mg5KX5*p(7-=p!~<-1SOQs759szK7`!l`%x$Q#c&WS_EZR1T^iI? z$!8U%rmJM)wB(tmlcqSPB)Jf$3FvE-p4lQow6ZaUEB@!QHFY^r!sfEqjqUuW2*FBZ zKbOT_93t6c0I%gl{r5@S~g^QNJOY2l?z3jwQeLkWJl8FUyoH9EWq7Mo~O0`g@QRSLQd zT5`c)+BHM``Sb)i(6FbfKm+XPznY#PqpBM=nbn=@0a5OjI5M^kDQ<|PPdStSUad4& zCM;%=3NvVnysQu-Vsds+;lO_>LWaL5tmR{&9a?tiCC(FM>la&P(T)74v(!Y)Ap_!r zsg64K(5Ca5!h|;`f5STOBvd4kn)Bb{a^Sqo4u`9?iU|M{jk(+{@GKG?!#!cezgfY7 z+4g6??k`1=?s7V*hPe89@FvGGswkRzANIBigl1mkc|_0rreaP(XCgRk5#=!{r3N|A z*$9q2;XtNe@-FAgnpbf2D6he3Gxw<2EVm~~lESB}Ib-*XC5yZ7C*x0jomtcAE5k5+ zzB!Pk<23)$x9D*=>gKZI$l3vk;8VESftp+B6A=&#mq4vb7zpBs|VIB&X)rEP}`vY0V#>u zz?Uww!}m?eweZLu<82i_O|5(*P~+|r-Z=uoB9S&CRuG7dXk(#lx6hY{AIreC+}Q1= zw}Uu`=mtz_J#L5BWBFJM)-CYe;YvtPWr8a{yrSIN!sTL|wI#@IX$`o!0@XuPm6&RG z!t1%4+=a-VfWBc*EF~v`uN|A6hV-8zxQvwOI~eAW5&YmaQt8KVs0cjFKxAYPYWUcL zBx%u3D9HF|tiKWG&jxEFM5%aR2L8>baH_yRHla1{e*(gJ^7E5;)?Ne!4S1}AYEFzW zfN|~v+47({hYaJ+|~0X+fON)dX^}?5lGGTl)%?%8=L zyu*Y?6A!sU9N-wWxMlA@Qa3G(1a$cfQ%_W%Qd3%8(z=R@x=NPX0kAXaY)FjG`g4G* zMf+atJ((u6_0|y$jZ8s~hq-!i=R>h1kKM3|VmVz<1Y!6m7Jh0;xq zN2D!BoeKv+mfTtEkLBMtVs-Qklp%{FV|V&RIpV~!NBrsQXd9cJUO~8TcFO~MLz$wN z-KabBPZ~&?)zXG6twuk1*e@R2IOANJs;+&Sz)rrxVTGcc!eBfpGeTg#a%{)RPPAfz z(tGB^oEQqjJSRKOz4)|A-JIGGc{bBD+ZN3Re1nW(dg*|a3JO2VYA{`}Qei@b34r%lJ? z**V{PJIIv_QSnuhpj<9{rcNX`PkKG4`=W?syNgW1!@hfE!P2Z`c;6!~*}=G;{oRaP zQx_;>n}a36)eKMwBjUx`h{fpi<`@cGynt2tMk+A}=$L?^yAseMP%1=a4kK1<7Y~rP zNaMc~#SY?dbI9tIQ3{|`gt>oV6Gb2QHb>L_dh3W>06ZjJP0>S8>M}4SG!F$I? z2=m`1_XK7*_UQNE5cr=vu=LsGQSz?(WRjE#gt*oZaa=yt9*!YE6fXn%08FPQVHNKJ z`Zwc&T`6)i9|p`ur^A9XSd`P&MCMuLXWQwON}I}#a0lXz?Gl{%9|iP&9BKBGfC*Z= zj>^3{8IZNOrq1TE$TA3<1JJLc(9J8}ZCDZCY6Hd6*RhfH>(gy7m1FVUX%w;U#?4sf z{_st1-dZq69Fcf0+cO-+pha#K{`bDLr}Bns?XF6F5Zid2-|8Lb0177^H<(ZHlygSp zR4^NK+guc9hFy5vcon)aQ~-t35?eh_=fIw5J35L+$~W&dAKVs7r9z?t5yj@k{X{*L zO=*I!gs082an24aBLY6+F!ZH(G6ciV5KfXJgA zd98(}l*n7+a!vbOI$*6ly9M6)B}hIu55R0OlD9q+NW0lb+!iV}P7qd11UPA?Y&uKH zL4}c&%b)y{1a~WLPbGwaxQkI`Jdv&uAUSm`6MMfi-S2HY9&c>Bc||5z00a#NXNaX$ zoJ7}kGfdZ-J-5|KNLkv3gN?DS`Z4;6`Qjb2{XOKLKG{FST=-Ci%bURQhBpx0EldGs zx`We91ZfH%?$*8f@@ir=JL%PsR1DgSaIBbXCGe?@J84~3&?z~7Wz=g2+bdm*y}9DR~xFeZO%eJ*=(*pGiRiSJ@b&J|W(`wCCV}$tyg~B&v8{ z)h>EQ#-~hmvcQmI8F9VrH|e z9*jAIBS26BPcEAW{J{S4AC_WnXaa_g?p~H3rhkyTmQgNm&m$@9xFGz@nSN5+OOwtV zT-6$=;FSrkQu*@9uvG$vmvIRx`_h}D&G${L)^YmntolC7#>Pfk8Z3n`PiDT=E?yd( zBkgD8k8qc2<^w$Y;Md8+@6n%fa~;7&BGNqe!?RHh51fDsn*&sIvc+K$iY#`9!%?k& zrqRLe_g&AOO%P?97Q`+Il{#1=*3X$bfHjtJkA^~2547+TZL z{@#d;mzVGi( zcX)%Lf91_L-dytHONtX;gD8D`ZEZN3ti9FyoyoyAwz7Zq^5x6X3gu3`%?BUgRiyDD z1{!~S>(kMXEO`vE5ac9H@lwvt)8*+?#OZdSh(FptoE$yIMS6TX)}z8%0xW)IZ4Y{A zRMZ($TI34AJ3e}jk7}v;yUakh`Ne%R;BK;@Utp+0WAEkO-oXGc^zUyDT0S$vT4g$B zXnWB1Ogb;@z~sdqR5KJCb#t<{g-Ta@8%)?cdNM{i{#i_;{NPlO%J|WkJYbQ6E+f%$jYE}NJKJ-`2xogAQG1r!H z3K7qfbvy@fIG*BBa+GdoCOjnT@gCDZ)*tThMIH>}qmY#l;OQ>N6ye-ZVrk$ z8(`JGH(*-eTrcBsfO4FHgXHvpMj-UrJ2X84W+{I*#~|HH4lzl(14gEpehIT{gdrav)nEv?isDJb356Es=C{ZVp33!SafSDVpBMi=N>E-0*yZb22LOUHgi4rMsKcJi^&NYt& zdSDQ|at-+iwG2;SBcZ?7zpKCS45VvR{&+|EZtTE%tgWFIa0|1|nP9aPD*+U|)<$5q zPW@C&riaG|NHHpwykZhd0?NUL&u=r@{szTJ|A%q`qI5U>!c}-jQJTH|@HcxO9524f zf}(lT$VQ;JQemV-<-swFeU!Lo!gZVTs0Mb300uh>8hXdF@f@F?^1|xSTkre8vl4S61qG~CU{0(0cwmrXB1FrH0FnqR4xp#-n}QLcT3SA ziFke<)MsmLh^xj*S^H98f~#CHcp=pPwk#w%Z-6?lq?=hLX!w z^Z>nnV}BQ+B&cEgmblvz!K8Om-C%U*zmK8YtDqv>n|WKhus9#53Mio~)no=A>24+8{q+Y^ww5r$WdzZfuxE zD$`@fE%)kt&+HfcY2+)-n2idXAhcN_7hwh{+1fu+NH&B6AprCppKV%Hq&>{0b)(6r zL=Z^DXTiW>HBZ5lCI2Iw=8-ZT7EEjO*GcFLxUuwXqZNkS)`ivb^$WOQVRBs0Q+$^$ zX!$peFdynfLJF<#tv|wBt$TW7k}IzsjdBKMqmVHMms;7I9D%LjT`A!n2idFQks(vI zd0Gk1IsOIKgK^hk=P+*p*{HI&A@Y1jGA<3ut;R;X0MkQKWEeIy9=!p}&$EGeQL9}F z@OKyq5Hd&mcp~Cpe`m7sl#&p$-PlAdzX16kKM|2_1zrgzuYisHTb`IpMMIHC=`Swt(gqLM%Cjz5Jt7aoc7Tb5ZTg2YDzD~h`5~gB^cSyQ@BZ!QEJQG zUmZ#Q1hfj#Y01iy5bgX2ZYp?FV<26iQ+PTeqsU-3i(G$(`gjVuKrxhC zr);`P;@Smr=b#lQ7No<2maKm}p0Wb&_#+k~eTqddVQ`K}`yUq?+{|?RY;|o8^*Alp z$l})iK2P1@{_!I?J`%e@Sz_1R9s?`#{_zaxLMhSY{4MJMVAz7c0DKo{H{W^p#`kaC z8~xzMt?$3HI@lgR#aqN-$Eqo9<${fw-E1L?;sX{~{CjXy+;3H>kbNQpIx1002sCU% zzb(dYeB}g<9|t$nPcV(Bd$I8>hb!w)P9u!xDbSNp|=C_te%c3q^OP-9oC}$;ACB-ht~O-PgYLGsIE)$ z*l9xZWbhPCG@C66qO%l;WR`{qylGTEyd|O$#6-jif;EyvuqNQT*RT##Z~`Y0^=Qc5 z_xSpgIZ>@dc1!w=7>2$G?qo4gm_BR-vFqEOwVs_kr`?pb> zaES~cQZb)^vBK|4bvfVr?(t+N-4ktjWxYc7jHf5VuQ)z{!3pQ@=xE=Cm77BFap1R| z>sQ9hZ-jF9HgkZW&6xQqqJ4?S1lGIh(l0^isy|gO^E{I8z=6$!CACr}8i|OrqERGQ z<}Gx)Stj7)@hlA4PTRZEIh#2

g6S$`uq%)DkVquxkO7UjB;l+n9PrMi(=~Ms0A24e*Du^X z;CW1>@PPn3QeDDxh}*5HKlvmZ_Lr7=sIBg;gzJuGCg{s8BVq)oZ(D3i1M9^YQu5;%dmfj4=7}4BmJr|74|4FVJq*e;6@( zMZ|M@;ZkVk5Ao#XCYZPUI7b{uPjBKuXM1^tzu@HMfxBYp>>E8nWypw~1r9309;|Ob z1ZBtW-edTdD$WI8>==Gs)kyqk!aP1dSd%G$8<>>qnGF>JT(u2x?S*gtg5%j8^rQVf zCj}}*!QpV(iYLZZ1pZa3FH*0;kq_&w^dk~}t7bUP{ahti596$ES4vy2M#JF-NV26n z`o+&h9}C3-EcA^AX&p8n6h|#XAh_XWoCF`L!Qx9Wx`N?%a}Q&D&8g#*P_%4c>U~J2 zoB$h4klhjXAE^%LGPG>$>`%x24~dJ*9uE-Q_qQMTZ=t98p9$PfcGqBd268@M0<1Cb z36thRu^UH~F)AKV*si4crmdOLz3HGtqd7k!515dJZxPq|Dt6Xyq1_P5()8kcPPJ@6 zjBpN7Vi49s*KpB#=8(@da5|9;&7TdGkLn}M7L3z(Pzvh%1Q{|%8w2=%(E=PcGccyd52r_y zBjoXbpUUaDyY3e>FZNcCH|PM_Kjf4}eylZxN(BXmHKqVT7H^{=fuvCoS_@(%k}tAE z3LWD(D)3b!%1L8WImR*)v3BuqT1);=o?mF~w*7)c#QU$u zFpuFQEoUUGc(DW#nS*^Okf0#huSPIHuR9vUKqK{#)RahH}9`I1vH3=Csa2`KZ)RYp?NGN@6sE35EX zr*|JM!8EoiO2Sp=$e4X|%5*>Q8q9mEdZR#K`iBeQLGxTWN=W$aGQ13L}rUqw9P6rht4>m#9UX> z7Arhz)@1gCWi{8FsaLY7=AW^_J)PE?6N_>TUq(BFByAD}rPCC{wh>DqUOJQ;Qcz`) zm0#5WB15-e7xvrHpq2ovImNctkr-l&sgOn?4&5a$nl1zr0YFSCwjU5!;BjUJup=GA*i#-Uh7H!ISY}!#s_x%Gt zff<#Y07j+dK)Lkc;alz9VqCH6iI&v1==fgtL3BTMeeV(UG&n%f7w2&T=ON^!&dVkf zv5xdmA1Lf#{SoYQ-Cbe=6b3QnHq-(5}pLDbS8K*STf9j<9>wSJrpDW*;J93s~9@^GbuBt968gn3{s>}#TF^MUR&xH*R18hh?2(6?d zgA+nZYzQPc&YT!7AvT@uKE|JS|4*~}=F+A4u1!fI!eNv6!--6@+ za69S$rm$l{z!* z3PZNjT&V2@=eyF-_R1a%RA>H2uv0g?+}6#AjCL;pKF<@0VW6K-c^iLpt#@aK%ElCW2srVCb+j2h z(nq5Q;JaeIy(buH0~W|5nPnIde9wl$_1%Y4I9-v+g{vaH8;lDgnjF{M(T)}&b8K*f z0NypfH4QvufSOGs7_TP*b07X+zzY2U{rvCV$*e9($e@e+ROQs%R&2rA@$LcQhxG_C zTV%*rKPk%Rd++knPbG2$SXgl*1+V}%c5Id<2lT9#AtX?#+|s>qqhrEep+lQ^;iI}Qz1@7!*sui~>C84MIaU}Mv%Q%BqV_8~PI#(E8 zT5VEw-a;gKx_`+Zymqy}m?!p9N^Iofn3jsoV_v`9UV@;>F*mrGC3g)frT9aurJCD6oFGF}m_p=Z+jKH#n0520*!{HqbIsp^ zfAO+*ikfRknkF_z8#$%yGaep#U%#j{C9|T~&j#qtT)NL`XHN&oDfjqvgU{UUrhmkb z>=%uJG&Z|PXgu>>RYJ%%`JyIHe9X=+qJ#riF!+bFq@2U2Gu{Pe_m(@OYEF=kAL!^B zzS{K8;pjBo-G`&mx_=wHxC%96`~zGk%!p~~+~2%1EmO)f zLxChsMZTLF!N9}QAeFYAoGtwwbxDOd>3GJ%p&}$yW4M;N zo*x604F>WFrBOoe5mxn z&^4dw?npM|IK`4+K8HVmzD($v4l4fUz7(XJYSBK+A+98km9qxpY!6lvoNlspzYmL< z4X<&8Yiqx!{Jn#xJE+cafK`uRFe7ow-6wu}-NC1r$qnwuVe7ogI3~X4 z?2?kA+r3*Is#JZOlYPSB@3{n`G;$Qp&%3NcKaF1_sEpLQ+1LBAFIj6ai)sr?k(Rak zta+HDqgGxqgREj?scBAJ2`$gb%f8sem2JogEX$EpS0rY0E$dWPM>GM6uMU8ER zRQw*|hxl5lQ+}kxrkZctRK*<4T1k5s1&gJO#BELeg9=-7puK%;SL%&0o$HZnYqW#> zQj3Lk%lh@HPYV`tUq1B4Vi}mqvvytvdjbr!;P_|Hv7-@jwrS0YDi!? z+h$Eu$8+|*0FkwrsmGDw$Prz~bk;E;iyh|0bzA=vk)3sFMR)!^%dn)O-GcC}wbd(~ zALV&hLwfG4ZJHX~j%4>cQ{}(YyBw<09-CuyCj6UC>T5|OKyLEy@-u9l|Tw8yvDqGllR3}Wq5!`Fmh$;Ai zK@|=0c{7*vAcsaqC_-Hx-%3G9?-n6!Mpj5V3QGhPdK+#X{ujl;Mex3KfkYErE^K(h zk6>DuJq6n|ha(7-d68*^`#!@1VvSQ|Xzaz6SAym33_M;E1h6uUrk2=k*{XITiFaKT zP8++ltoYW}WW$WqSYO)9fju61vG)$Ie1juoFk*vs*9(C`)qBjUQ{Xk-!J`2q*~Xv{ z>Ea@Q$_g)x3#D7Ajv!&W3qOVip~zP~O=ubz+T+%1wO(&|@;YrFwM4*U?Lthd|tcgb~*4)7^hf2#v^S=3sfS5GYVs!rHDpdl0az(J0%z8 zxPc$O4vSt&PDED~<*3HQFF&Ba=^a+-@a5-g12w0m@Cb6`N{*tw%mj~g$6WHdCE*kR zUubW>N~wFrXAGlbZlMti~Gkc&cO^X;yebld!Z5+%&~+}S5%!LW)y!Z zAu&=@J z`iE>DcQpHlHpr_tC%sY2LSjP9hzxrsogo)e%)#=`e#3AUe&~c?1HQs0Q$Mf|>aQIz zx3lr>>et}!Y%XY$jv1Mdv2EG9s_S$q7^<}UM)X2+GS#MxYA97f>50$|l*Es`h3WVJ z1)7d(Y=vONumS3r4(AL59kr~%`^V^( z`-sFS)id%3@-je{oB*}2s;{o{MpOdeGAFX*ndXXoyt^sA%ga2?(b9=V=kmFU+MEg_ zFewD4z&%(I0JTC;NeFwkyH<>kV=fkp>o4vjKaw}Gka*BhBo;P zd`r}VeIi1WpyF<3aC!L?bY~edyCxo#h~g*!1T{vRjlSHx|I!Lh^iNO1gY4Sq91HyKxK;o7;j4(9ABv9nE6WqE=kAnhxj6(Mux!Qq54c5c_nixXr z6*^0?iidsv5q=j$BI}K zgc$elwyH?x#yT0N0|8+eON_Ghgi4HVLW53(e1PwKw2px0_!<`2dJK`%P|^yr2VYwP zG$x>Iehr5yy={610i=(Mj5>1}T?!)I1 zx@&9X#=s3G0>$;3Bv$CX$X`ywtteF({HH-RHL`7?ncfh-BB#Ox0;rB)n$su9*f7uK z)X58wL?zr6)lsrQaBNCNSe`;SgRE3^**I@ybuD8~mFp4iu-(R!^MhWUP3`e%%r-ld zAr7$tWW*$@ILtDrKxsSaDqH3N*P}0fr_*&rz%^ljp9z5~$>o1ibH)Fl6Q`Xj=hn

R#O#XsUNGIJZ^#zslmX;iWVSOF*u||HeGk;bRYT+#xI)oXM zmh;!6Ft%GI{1OAzq>raIGb6iJ;)ID_!jQ?{j5~4FGB`}6135g@rhd9oE<*0dqb1ty zN-?;9^k6WuoSTtSX0_f2_w`=W_#^xU1VPM53B+9ZPZ|OoCVRM7fEx+@6jrE)#ak!V zHk$i*>?8=XB?R7`!)7;V>&JeHZ>V6zWLktqH+zZ3_nvW`X9;*RU|WbviVTUPq3-a< z4ppaU|E$!M6sOOMmRLI#Ud}V4B_A)*Qd+>zl#)(d<=KJVMn`G)NfWs(3Z$?k?0AzO z$`WV!myQxsS#O@as3|oXuOIH&kP?kn#xIR$He3fIqjW2nnPk=+#Mi~buC*TR#v9S9 zv}fF>VpR8MFb6C+aT-d{ZWenw$SR)t{4iEyc`)`6Dmo6^2$o}Iq}m%DZlt0tBaBw$ z#XS+n;_|) zUp4{9URwiZWzJ(Lm&o~OaXm2Wmf-T}c(+QOb>dvm6!`~f_a^@dNbN$G;HF$f2Uom& zjf6~^9uy6H=e256%|M!16&!z-1K!;$lxY6jRKl;PLSHAMzUw!Yt z{VPBH{eP|AN~Gyc{>gj)FPi+D^(Hy%@|J%*Ja-OF|BZUnCc@TUOc(e#xXc8QkcEdrE|kK*r~DF zObwcP+iT~Bzs`%@O{}P)v_KBeoUXBg8|MI!vUu|uO%c;trj)s5j-0%W0X-ULzz=Rf|7$M{`)t?1 zb+k(n8Xx%L3&YFo@aO8F)QmH4e)WanYi!=Y4w{=G?Gt(XZ@nqIl|?R5jJ2n)-;CwdoK+CJGTARI#`x~7S^|q{P$lN z{?BaP*v+za4E~2N4F4IMH|TIgNQ$xuKEeO_!tjsTqrtvVgp+x!t)2e)3&TJ0Rdjl_ zzJ{_jX#q-vZdp?J*}r|_#jg&3nPa@$7$Y1oiD{l<)L;4P@ZaXB%k@#|Za-K*M^^Plm=@JN!POO-}~C| zZ?jK>L1pYXKZ}3oYr}uQ_6>qg?OT@j55G42l^4;e!KR=rwZBa2`25uuhrh;-jTJFQ zh#BEYts-aM=faD_H`%8laS?<-p~m8!O7HU4i^Jbymj?CJx>@C zF(gecy|3pz?!P!(XOD&;PBx-9+<0-g%Z9&HCro>G%3J;T#o=G-XvGJ=XFAo0;wri+2UThc-D0$2O^2OmFvE{#2hmHk^Qt^Io{78JpE!zW)K{$n<5OipfG*9iXT>%;$xjT@}qgh*ZG_`knC zeDND--Z&S|x9h`y;~T?YV*3UKBuP@A;g`QLyucm})q}hg{=voymcB83ogEs49UU^2 z(lPYLH-_)9O9Mmfk^)!Wc;y?zKVaj=VQY)xc%Q%Zjp09KpO@=f8m3H(iR)eek8ceB zKX(0-wXQ$?(S@(VI=Q2-$24S`E&eyOXsQF*`XRB^ra{4J-=akWo7pIpwxz)uJCz2j zHEduoF~@9hhp<5~scjnFTh7*$+EG$!NNV$|HGISBlqQm7iCQ&|N!co}cUnb2V|OS3 z`gRJzul5a=or|9ifv=7YQQO@y|KfYm0JB@bx6d}6Q?RRdgPz(2y4p4vR-&hJgXb0C z8nkhYazUUL4GvQi0BY3D`1N@f!*8FY#^}|kLAebEuVxKAH5t3wHO^-`2pL0H%LaQ0 zzFa@Z4VDuPo7|y+)*9p1#HVAv>~j43ztV9L7k0!?k03DGKL-i*|H5D2{K{9(Bd6+2 z|64>o8ooJ$`@wj*JmXV$E#ldGn{^k_YWZyc!-zMIkp*&it#@nv5ZP?2drzVI;pbcM zsO}+;v-iEbw?2FYKb+}$uU}tWWU4POhg*moSHlN`U&sF*?VwT*N@(Ht#l<^FGx~5c zezF+LUR>0*j$LTx$Q&-NI@FW2RjM)`6;)i;H!Y#iwbHEi)V0I$*0r_jQOVx7@%Itx zOpd>Un-*`|vym*qmo-6u1lt!`f*b{(*YVmfoWNVXPo@W--~+PDEJ?JMQ`4J1#Rc$P zCf+nbvPwpTtSWW~)&Tc7Lfg={m?Nc2O>t8bMnn42JN367Jj$0W1uOJ{R-P_im?g;K++9;wcM#Vs!rW!e= z2*iM%_?rR6?h0tc+;l~;68>G|3>F5!GZP4IXh*EzKDr&^DW!Fg^~HNMa=#&~@_K~S|Nq)uA|N+2pZ3_d>1t1c{9bbcnZ@5xNVhjmzUnp2YpHXUn)9J@gtC1XLM1ijGJkt zWR;@hw6wS&Mu?|`a4ZkU%%cKqxSg0Gn=9o8ae;Aw){8|77Z{dg#a3@A%_8<@(F!JB z>Dk`c0u$L2C3bJCm^86wod>X#$CCpb9eW(Tca@)6xlLE@78j5<>qRMY+_QP0GyeQ8 z4#zuKt4_DW#vdV|vay329$pbNIv~DyxCp*U zLfj2FaX(h9xwwJj9WgIRz^*_}doRgL`cgF-fYMnFssd$X4?O@f-d^cV^p0263yz-& zPCMSb+v>56*D%&&00hkFjwzj5)|11@(b0Hsk^Bufnd+I0kS7O+6Z{Mmet2bYxrbVk zVC;?^6u%ep_m0G7#+yq~ju_8vfSai1t0#~yTH@vU=K6v2AQK8{tU(XK_B%K4AVZJ5 zk^c{wm%kxmCPhJzqdpJb3H*&kI}y|Im^CG@@!df307<9G9u{Fqs=amOQ63qZne&+N z%zwlR3=<(*@u5uqa*4@+C3g^ym|#{h857%hQv}tbk?Tx(Eo!gzPj5wkJDL_rYKU?q zS-*(?zDHq$OLBV}3q1E4lq$mtss)YpbRsZAK7P2kET+5zubqfDNLymU)|Kd0!EZ*k zb$GeYese84;g|f#VC?$oC|?D&GDv%4RKw;Yg7UTVEP@shp++4XtCKtE{gA(%~DD{zCw0lKlZ-OH?0G0%R^6T#p)sxqvWp|)4Sr?B38JEaO=MIM~vtfPHaXL1R z@SbXb;pfA&z>;<_!*cH)Qk|Lo?23+)3uuUMPJ(Y@(@g?H>DlXDK`CbZQ_TbC#2C8+ z?ntRGK~ULsss|#R65W)PW&^3NYwyDMk(9;JB5-D3k!`@^8%P6qnEk^EWN2)6&TfEn zOKCwD&Rb^@&9VD--N`R!lFwDoh;xUeT!$BF3FGr-X+9b7&rJHi<0z8&EsQtvjKpsuRQlx@1c`SpwFCuvzp;W^uz^*uF#w(37jgPgB zt6SdX!2+DxC{ZcZ6yvY^p;E=oTbAs>x#7itMP2Az-MCR+L;6ZxaD0Ji6{YF`5&xL(OFI?I=!<HzvF~MYhS!^ccu6KcncaKl5&#IN4_6?rNihm za75v5vFa1jy>{kKE-QW517kRVX$BT}uoyp?gXtsv`q82;_dvUS?9~!Mb9!YmnzPt< z{GH7ftw-`2`lxo5w*6aC-MOPlqd0KcZt!@#gG^J9jZg+4N30?QwFD}Y67=vFsDESJ zMaGVuJwj1DpYemI$o!n_-K{xC&wTe}Ik(K%HVuPVj@sZ_bMLKci9`eqgOQZd82NinINJ@T&%CUVBFVY+Sjz#rNZTo(U>p1U(aLlXr`Mu~h6q@BTF& z)N5;xFRbByN}B^T8}*$H94!dlImYc@ym*@qX}Iq$Ql(M?Js;SRex~QSFX9?!nx3;a zSCk&TClJSbD0;uY2OPcYe>HJ|m2MoTQ3<8xULNvge{F7J~%!^P-!|=NF&4C+a$oamXde~iaX79z+pH;o5K_8*@*A^FLnVY4N2wF zuP{Tgop*w?Nr&1bnAtp*RoWTm1)m17t@#-qVE?pCc!$5|v(1gNLI=VETnZLHQ&im4a~@Dnv2_rq{uUgVOY2MZ z*$%8&3t%Q}P~&=JOxD+m0! z7?8UrDWowVhQK$@p^alfF4PedbU|yEW2ssJWHX1w$<8Er;ZeL&Ym^uN5G(yT?ps@1)e}dwZA$oW6OTQ>vJ9>xbUF5(-yx$VIpiqF6>o!ba_hX zfAnHFJXop+XC>3nT!a=s%H+AOPU$DNYVfQ5ts1);HFJW)!gJ6u0$Bm5!rz9-mZg$2 zeY*~erK1f$;)di@hul732_#K^L^=y?f1;RnrLTre4Vro-Bylc)Zhm)OQBA%CaByw4 znhftHs1dH{$z&dlto~P4C=3ydG*;E@5+OoD1t<&*^XTa;U{j+SsJ;FV>6?O2P%%va z%@CJe@Qf8Kp;{$io?}H@FO5D1OrO5=Oh|MK9C2d2rvsPh0n8q=MkcD6QimYTmY)0& zX5)z$tBr9Z_Q>jEY`r7^X;IK_tZ!nIMZd&@S1SqzYW)}(i3b(0AzH+Ll4v2ODYfn2 zMyL5taXj$byYNL@yQW_hpFjRoV>B(Be7H7)I{)76olJ|oS%=w^HwhC%`g`Yx*3n%> zFFG}J-TbQ*i%R9qKNU)9{vkBWq@JPwhvS{LCK?`ZvQ--uokImLKEjt*YL0o&Oz%rS zp9d*4Rj~9KUu}V*W#wNgeF?wbhh6w7y-mLvC*10riBneW$*YLyN-;y4?h(C6mmZ-Z9`E9U90J;#*O6tSWkLS0X6ajWV5UZJ zH>8}iwY7XGM&l7xNKp`oD$x=U4T&WCgnD!&nMo&b{e$ur|GQVc5YdPrUxFZj&($=E za8Thz@X1~kBFff>}2g%azGic=GUoKmiMqm+Ib6{6~XM3+Yzsvs>q;JdJ0-s z*ReysJUD3;uFu0pe2*1gJJ1#5#+jl=wqL!#3lim!J`lV~Mps%^4f%cim?{-7iR?W` z1P+DUS-Oa7G1yj3k-iH!p@9HI%Ycfxkj#dA*LaiDa{lC#uFM_tY{OrcRCE}JmRn(g z$QcP0n99QBvHK^~o6gr+8Is;PN=Rc+`HyoP$5KdM**?3gxJA9MrBwzgBY1{_Qe&%W zjzf})pj|fla%usUTh5HOteyhlG%ki#)d~Y-KWJ8HHclf|7~IQ;Z|pg@xT0oL+CeYs z9By=HerzT^81=tAjl|1WdBXvMs&IfgQu{f|sb5JY%=l#ST?404^H0$;|1F>{dl5jj zb_J<*IIm!gcCk!54P?^5j`zX8Z0vf;>3YR!9xUz>_3t8RpFK}!c|d6z)t2_MXg9#@ zSfYJX&gv$c@bbqM;Rz};IE?2v@_szz{D8D#21t{MM;oxKYUmtw=X=na?Rew*6dmbJ z*k(;IIM_e%1f)x%FSqXAAM5IV94c_4Ek@SiSAV23l|f0__V`a)cutms&ME*fB_RnY z!P*m}I0{HOlVBmStO}ow9`I66k8X%6>GRJluXJT(wW4PY*X>~nU~UCJiM(KB;R!0ao<-#nJc{gqo;{FVpE@y&C@ zGezzJd2hMwvH*L(r34QoQPVHq{Jy)rT?Qwh@`VU=a3JnSvj4V`xnk#{9lafIdl zt>rjdZVGsgrNwIMYW3P$`@9e%cu$5*i$}JFW9Ek#I`rW#S_8YG6Vc0bf=-Xt$PE)) zL|*s~!pD5y2flA~^(THfH{qk>r&^VHczjn{aV=1&@N$5(l^OTs4ID&?$|T}=Q31*G zNbGP`8tMXET63zdp5N&_#FDCnajlYWYWU!G@WLpRYS=%7PCIJEGv4HFE&nOhe@mR> zc|l$H7G1ad$<&U z-*Fb4CiI9Gj%bAKFm`tQt1|`i1B;Q#6gW_ji|f~4f{cUa910^?Lc<@@sespU_5x2J z!5aDbWb-YVytlqE{FE;%+uUMtwLMsB>~QAOo9rEc{iP&l2BYdbY6((ucbEGKPMKwG zG(GHad}aL3_NH2b*h#Zf3(C`-;91j$$GY;CV|oxnZNg?V(r}t#kh_V~ubMY^6;qCt zt8b2*rq@E7-!u1X4dZn;d$nxeeT@j(E4}f;T>ZylLG_P~b(z1QF|zsJbYlSc={3GX zkorL-)#7n^BqZYeBH6UjbRbHtL>I^7r9WslZg|1VvAIthjgK!HcfgrcE}aJVG+DBZ zY|?g=Bpg>lsR2>tFKB!UMt~2z7vWAU{R8>TSg0J=$p5s21sopJeyk>yV^`kCFa>V% zCc*9mp6R$Ww6>-OrXA~5Lu#z~>U#H{qNM5|G8cVtVJ&#hI-CUh z#4||Sg^7cTv~emv=n?Z`I8!K_k$S0v-B!OjR#V=TZwK>RWUc$Zxt@*vUGNxYWw?eZ zh|sVy^W&8S2Fu;g5gV*k+iEUZw9r)JClkIkiBasFV^vbTaAgR-WIk#p0J|+=KTg65 zMoATv^JC^)f8AzGPC-k8VNtPX*k(fcnQS$2@kQCLw8&Xo=9p$%JHaTH29#>w=n2%r zR>(Gje*V}|&7*|(9<=57(}-IKhK<|rJW{68Q(2O#`(GMMIo=J5NfLX!HyN z8f3nntqV=hOJDf8UOaMmVG*HR?~_*ox@+;r{>Rs*pDw*LfSLunx{uW&pc#21cn5)~ zOxXu8z4vg5nwg7SA@P?b_mB#LS+1mcIj-jEh+YXLY;A^wN5Is5wum_|ou@-uV8ld!rxRxb^*aR^0@XGy@}4 zQ@-_9tjM2aQ~%-vWLxp?!A+&St}5e|ZgP*xRKunm%E-Db#%_G&1dSgDH`7m`Bqn0E zP1QhjK2u$#!92wSg4uwGC=tavq=Q->i{2A?fOpDxo3(P4bu<%_Ye_)F48q2^m^EO{ zFaBlLOpelUltK;S04_^xthQZtIQ`rd#l^g@i#(|KsGPrZ{mOXxjUdanbwMH&kC4tU zaTL1CkYc=pIBZf3;9eb!2X;3B1{;CWV<4e}r~^K$WRu*7Rf}}Cpp@)lAuL_s$4qSP zwrPk=bj6L_C+zK2AC&QXv3Jws)hNKkTOFExCS{Nxc2Z|8(n{UtA zoduaV*;he&rs9+)EyRn|ATm_#5#lAfO;m=6-)G(hODJ%ZNY^|+P-7<}kIw#6pwJKee>L~g$#mn?Aak`9ED`64a^x2u8ZWGnv9p^PL3Rspk4k-aaA??4NObNgq_( zh%e5`*(yE-SNA^ypyIU5y)lKr=W?3@I-^Px9z41{ZX|kFQ}B!bjrTjM#kQ`{Ppe|m zt?NVsVu^ET(P`JahKtrShincPlT*mTy&)Wf{^REy_ot=)km)>VG2WR@1G05peEehA z1iW;#s40p2eK?3vq=J0CZezrbG4-7>BV5F>))t}j&xd0^;0PgvvV@p4f(vVFF&&?) z#5GkbPoZm3rd4AX>-ofl!c`6o)pvjj8vMko_DO1GQa7YXT>)e ziB|;sLwzj{4HKK;|^BpJM^#d!Lknl6B##B z@jRk#bMWw>)){m&(19oy)j2Ra87;8DLyRJ5krS-eejyT#er`@J)Cj-|$1+ZGLJe60 zm+8C&WXt9G=86T>b*8-c3FboV2-N-H4L6y8(e&XoE=+-7o*qodtfCCzre91cSaGMe zU!y4Olh~58M);B`Co)>v2KAD2lUz_#>zRoAPJ@zVu+knVi%U1oHoEo|!XfUR!E=e`oK(Nz`!sz$($ zsI-oyR@a$fQv17{E2)8zkIs2gA#^oymak<{af-BNf@Z5FQw=ud=N;HDIBVg#$wre3 z#GTLhvX+osFf~WcTBj9^TT_7+G~h{ziEQ7rT+ z7=?md2zwAPkvh;W?rh<&N=CMCXxH4;Ix*qPRfY9V#HmSOV+t4|w88Q*5Zt5otT6X9r zq}YDaP57^~)lD|`@viIiVBf01B=XC&6%)p|J#vp;GW-v|qOD`ZR#6uNa<6b2=^Ey9 zs5LsDUM#m=r*Vu*q~2lqb?Hi=OkGVARiAPZ54nT$le+Q1>?e62{mQ6@pJovLg?c2UE`+^9U}8{mVHSsfUP6MOp=EfD{xiU?>bNlV#R-LDqN>*QI}J* zc|ClaKa_OW0=4zGZ~xwV{}@kCn-L(PN|Rn!MWk@vQ_??UbJe@QuU5&=Z1Ui*k+a#nUUW9;N0*d zwr`1*5Ayan95C$0@k-`T&JF(^cKc?F^%H>z%aZhY{@ruKe~%s7&{cG(P4w^k8@2h1 zKY<7@Ag9QdPxBw18~#mBlRqOG%~QskxBZX(mD>ENo@iTF6}`)Ues1_*arpcdqv%q+ z)%RbY8~*p*4YTL^{)cnJf5e9E^i1oePuC41Yy`NHt;v+cjy zBq@I`Zch#LTwH6T|K+QAF|LikI?i!t`;POg_MPWeUr*W_HJW2j)NbZpsKp6;FuRT6 zo^6g#dJ77#Mg18ClJRQO;L&t<JvjMfqTqZ57la=9wa%1?k?~e2PFe>XjZG?mt2WXyj}@ z>h*8lBZ#;2@KK17~5a?lnSw76g z?2N88vRu^ewCvrEVQrU zwA`~*r-wVZAteM%duZfIa2K(O{VPk?UVmfxjaRgxxMX-Dkhmm@=fHNa{S2Uet$%gt z+Ldp;zI^3d-!cLOytAuy(?na0g4MYGm&#wyE+~Bwoz9Ap6DvXBA5v#kW`QO?3w_PZkO$#A3(ksi(4C>@9V4+o5K~V*)hER#^C_HPHon3Y$ zf75ek{1K1LU>H(6{B)eXD%ZJ+a-EBn(H>kC+2@)sY9PN;pcFG}eBYRAv`78bB@Vc_ zaPi_h_Kp{d7We(Hz1Ih?!R55L02YG^!$(j^jt}t69%uleO%~EEq^r>6b;sERy*Br; zuhS#F6SVN1?|jF6im6wm)xx)A<;v-Lgeq;R;+TY8G%QjGsZ}Z=al~KxMbrLE{?gUx z_0elDA-&bQ2HCVy;>TB58mo6z|Nj;J|5vZ|u6)YQZw#(}>sxPLdHs#ozxCSHH(z=E zO)N(T#_){NGK*HVO$?nI#BG}@Q4Z-oiLya7Srt?ayoXd+)rhO^#Q4F`HjC-I&0=ST zsLn?$m>wBfUXPlt7i$2?fdo2CwT;wAWcO~4RJjz05OR-t7bAJ6*Fzh?If{@)<0bK; zEi!2y52impJnCa9_qQ$iUXhU8uF=HB4;P(X8(_AoRbWRFPWw}(-{(t$cTaw}(Kf)u z@$GZ}3B|d|5gLDQJ$Jw1`5m9MrDAb z;47SV*DEKxhL8`TbBYJKFau;S>Ph1+z&_sSlF7rq=_#NBb_Uw^p8iZ#uL|E_O8iIf z;{M@9Tr`5JkK)Nt8uyM+H;$zTd2a`L7JgJaxmd0Bdew{=j?b!{)@QcJCEX5D@wt>F zcXnDIvPhs-FjXij@pox{t1DO~qN@frA;Yp(_N-Dl$tj?>uoXR(8-#8hhymjv+X$GlM7h|CLGgoYH&u76`Yy9~YBO=@rMF_3ZrVPP`oxSYnaa23q zAjW5x8NaweVZ+y!QIlSHAVi}o@Y?4;#)7-C!oqZ{I&cp%MC3up# zF_(aWX5A1jvn7T^4&%f#gaq`p=CCGOtounJW|W8UhFrxQab|R=#hDRdo@x9v0c^;k zW|O)!Qi}F3wI>Z&y61aW-&;en=bvwBQx|ofbNt@Md;bA?{7ad!=|las_x?wG_?L@~ z^-urP@N3M1{pBvD&vQ?|ac+2>?f!IgX_4{#o0cf8?9g&*t zGZvul?SS*saYyDRQab;1N*`eYAxueB?LtQ9?=5{U8J#xYmkFIIdvCE!=rsI9N@K*( zc()2+I3#DLWXO54IpsWsDIkQZ-TtT+$;hqvJaa;ShQL~Pv3!uUwn8(LJ z5KHX6gE;Iy@_DCBw|w>5mCLUzU%3J!lp8@+>c-s_+^EHimSa@fO7tcja&b|MhnfWGTv#qIR*?#B<8KK3gj42*n&w zM#%w4D08FbY@GIy3u<>@{GnjW!pJi!{6o!6X}>~Qu>Ty_W!jndOcAokH(*S( z{w3*Kc|UBsME?fE-!pT7^Aq2xCpljmPXfnEYXR= zA4fKm(wz~>euM=S#P=2_asmTs;j=vg;%kVaKLz8kG zfLw(1jq0AT;)o#A74QmS$XTY^0k8;N>T4lL68$@N-qPNZs{n>#znPD`xqi3_+vUTF zgc@2nq3hXqJEthq>$g5O;I>OgZ0UpQ{l>?9Y(lj8#zxG(0mjz@{<;^PrZ7%7g zu2-~XysDZnu?2CEM9#^%0{IB1WUvGa>lS4!Z>Pu640QlHbR!9!D&y!jGA$RHXCz!T zkpKnKX6&Gt<0h zAo_Fh_i)xyhBWqwPm&2eRoxEXP;r226+an$@WJ}d!Q*w#*DBpwHsVf}uSbfAe!UH_ zP}IL+abY{4JPz?S&njsdbR|ptQi^``vr932eJMu0jZqyp^8L2eJRQ<0>}%%53_ac& z2-oSo0`(Cn00T(nxj4g{LmXH_=UJ`&KuI7^~|tubd)5(V4ER@E0-Y8C{r(oxZM0KHwKT zT6lROyCd@o9*(ywGLBVIuU*4H#aT1?>=o)}>_j*;!Gkm*%5~6d2_eSKfdVq(+(P zRd3Vp`&<$kO%PhxxHqz@(go9u!IzYV+IU;-rN6j;Y-$#kP8BPRqo8o0EonN=SXwaw zYG)?T+g^P&X@{nR+7_v(diKSqeg@q!!*LiQ1lPm89iEZiyY7H<4}Q1tI(yoCkn*4Ou}wz9(#XV-pg z65n+c1H*G-DwQ_^1m+UJtvl#-qud$50%n#?OlEtXT0S1atONQoTx(1B_a4}EHA?Q7 ztJdmSCTgXIj_F$4o^DcNo6JxY!`iG@NHC;>8=ISC19wX+dn zF|7*wd^1xoY?JXeB5FNfzi=CMTs7>%0*~l*ADVwRzoRPMTDaooKzyQFo4>xRFe&rh9dCey+qCA=CBb+ z-7s;_#zl5R26MXWXdBAf2EC*8W4|V@%5<)Za`MFm_clx1uWjl?qI;8+PR-veI0(CTZ_UTS5nB@SVF!f^0h2*c{pdLQ1j zDAG;e9kl+Vbw-xAdF5dI(KTcxDZ|G9O=%VA$i)Lw$Ikbdkc*@1Pqgzpym2Hi*xraG zOsGcj{zW?8n2A>>@)4&l(&I*(ZhP=r3i?kU(}yO%00!nYkmd(L%c*;eey^^KZZqZS z7{qg)8eAoNd>A*(U`n{6ahnhl=xoU*_Y&Bbm|VSV0-Cb~{H+&B43Rwl;BGNygU4<2 zD#)lu{k zu4XG-QT8~%1|{PDH_M^$*t|Y?^;MTCM$EKwS648G*0Cz!pY@Q&!`j9eSduwYkgF4$ z4y?HB36ykYsni<=EjkDHr+BDK+e0badf-|#V$i7ZnPLe#?-kq?r&*Z$cxvD(0Z}KO z3?toHqbE-fB%y5TyVTsdEw|}DM-gJaGF_=PnW_QbIRNJByT*s=42i)SEL z$VRoTz#ybXOe>A9Tn?0JG$o#@Y$+QK1i*uADhH3mE2z@?jtm(1l^((6PH}+BP!Rvr zQug-umiNXen2&cfe8~RB{xOQ9(<|>E=+0cl6WRB$1%+S#M~rZhY2r;3TxNnd>9Q69 z4V+@JerC4^O`{2Uw%c(GYDPN^ar}o%>r`3Lu*!tuEkFw#7A&`-xdW=@-s(~mOweA8O(@<$^83#08<1u#d@Vqf)pF)MH8qZYddf!F zqsc)J^tpLT&BQdI@2+obqpBO~6@f~Cca+8{d+^YQN}QNSi<%82yLBO5h+Flnf?X=q zOjR7a-=%b8-lSlwnJ+mI{_>RvJY@zew*`WxVr*320!h(>%3sTw#V9sNAdLJYP|T;cUnyM@{_VdRzJjz? zE$1xH|Lc#I}=A2t1_TGOr?*ek)`MvINYNuCltPo&h*cFOvE_^Bl9?CM0KH0 z;*7-;QGU7*Rkiw`aA~mCOc5_-lvIhU?1xIEP>5&*ZNTA|&;Dhl&o3)|qFi5Dm-O_N zKIhDot>v12-kGnp>8GmT8fmkX=AEgo&y(v)CPZax9{=~L9oi>U2xgW;RC%IN+QLNW z5GD7BjFH4Al-elylB$rd@4zD6d|Fi_Wm?sE+4be*kiSMZ?zJ_1@-M0-r&pK#lNT|y zfZy6%fD6Ed^Vc%j@J!2epS*J6&hgO!-h9m5LQFeB<^-bQtZ`T&ExlitD*Ms74E&>b z7M#Acwuu3GgONUoQBpNk@JD5nBUO$_v)C6nD%zZ!P$w|E{QN@Ud`^DHwld98$?+I@ zjBqN*yQ38uJf6WKGl|)}%=z1U3KZ_)3FR+#SO9US_tz)Wamu_{T=)UsMnhR+S$8Wc z?8X$zZCkb?VJ1fRKoG|pOvpopxFtTxfhG~~RHgs~aya^!x@7?)kf1Urftt>gnlDZT z+F2E6p|P`8Z9^-D0xs1Y&f3m|dr}tNBiR7>7q95U*^?*Is61`n(3}M=#cD}u?TIuf zto>P5+Fm%DQrinBfq7Q7wx0#wHW93l8UkbIdpI)_D0sQ690nN`QU!gv*#n*-n(X+sn0bPXQZ74gcAMaVY-cM1N8Lo-%4?dQ!#KL_I*8Mif6M_ z&1>;?_@2bn`KGbXwAs>Ot+Jm=23Zi2;87Uqq$3eAZimv*3BiSz0q6vY_ghU`gpn>A z9pR<;JksZD!AUAWsv4;BhG=Zkk_0CGDBXs65&W-UpHuHaRw|@n^K z|1MPt?!D(wl2-i20)%j}0>;LGMC5uS*kZa>rs8nQpHbQYF^l}x+C$f15%-`OmG-Qf zhAZb6Q5~tuk!1l=dK9~}6zDicq5>nJP$iGnnKzVYE0Gvf@OgH!gU$qxB15fAghRq>g5mUi2`IB9;E;D!@*~r^eDv0I33~6tOM0C;bDxzX zfs+Psj0n+@+iZ;pQ(J4olWjx8lMFXgAi^$?p0N?lkbTo#Ergq_Yewu*0`n9B z`-BaT)}JCQo$bdZg&zXl7T?0LwoNWV)YHx=do5Zmz)r{{sXOcGudaT}qYeP3idV3i zTZiC|iYI_40@^Z)tIhE>AsC25guEHlHwBH3Kf=F|wYC2Qo-L)9=q^ei04G%A@ubFY z-=^mu!ZQsBBOwbJ^K7S23_R|GAP%3vUIFdpetLx0GRoEr0}BC-BAZ0gpEYkQ_$;)1 zeopw8mtnIO(2>(r;8|3Pa+*0J9_*|TFN`8DM4A-PS_@|ruUwSJlljjS20)Y%w;%C@ z_o#6OLG&Iw9)ZQ#`vIfGgS^6F1*0xef=5pF;%}ITW(YU>ZQPying%hN#@q&O5FGJpgH3xCAYlV)BG^m z_J4js$)J~$2rlw}fnRYCLf^gurEVB`CZyIjv*q_{EK#^^X=58|g@J6mM6%1&sW+=-`j8*(Ol*;-eg<>0#TzEp9= z)s;A|pVPrr?!de!S9b0*o?BOS8uW0+#}+89=qf+8Uzp^AQxapG>iH83l2TicCm3{- zY%5e5@mm7MoX1H-|?} zNoV7-8N1T-+U_-HTsUYMv=f5|+e@v$)#ej^e+cv;DvK*W35CCb583*0c_G_lA>cd$ zm*_%on~c3++THn1yz3NpTO~3?!$@mPzYqr%r%FEqgWePk@S-BIR4&HBsus~|x8n9O z7h1JKvTEs=ZtH+D+Kq$KE{a`eOtR zkfUG*ffjg-J_(ueLor-J=n00<&o%Al!t$ARvz3y4g95F=C5lb>LJ{+Gqai2B{7jz) z6Zsf{I-aIr81Y*xI^&~gx;AS@)))_-W<<+!)s9-X_a}FL#H$yO-8lJt1W8Ifbf>uc zQ1qp7bROyom8XfkYAw)0Bk0$EhRI!}zy>tri>6-FIgc(%Yi{P;in)Zk4p-HQp}AA} z>+qWP;Sq`ih9dyb#ZR8gR5%o?+#SCbi~FxMaDI1xw9V&#d4a_%(;zGYD|{7?F|!uU z>w{MYuMe)m23cJAM9GMs^zNrbARlaNG|?bgzt?EBG@~h~_@03GVN;c?vs)*9N1igK%K4Ps!YRx*%EEM+5lZ?h&|2SNZ! z@}TMk)}zO=U%WXcuI`H$)P^fx6@1%*PetFhQJ9(L>7|%G-+~W5*g#o4?1PGg?I9UT z)&DXG;swCyHNnP}y&jI?U3z$ot0N90Cf}VrdhCx=^S;wh#)nynsi0_y$;iJ#g*Pmn z)tU@yGuU{s?5aH{nQYR^=NdR!Srd-Uy7C`4NMM)XtQRK2W6n!fkCYKxfs0yD>mPma z0k39b|2~dA#M$=SQPZPO5n_Og=H6)ggAYDMK|X@%^F(jnjjEbJae2kSwuFeDT^=v~ zp_}As6kH2OMMM_ z>>N#yvW=4}tp0ipI&$nNcc{Q6&-|Gu;oW1nJnBsr5q`j_Y)H^R2oAk(25GRu=oC2= zF@x``RzwY7?u5)~uYiEI!P0}>HfvE;2P4{6>{ps<^;mq61hyF0mbTV;gQ`Cnj0g5s z#oF2gMgP8y5?;Onl$lH*0NwM$fW~JFL|Y!CEtha@kBHKEi2fc}vXDZQS0^nOKv-2n z8?Rv&GJdjwM3cQoh8+1K!Ynj46@yR6NKt#z=bEtWC@%TqWB|m+xH10mW0$!VzG;qG%_ETR$7OxOmusR`H*lTh^i|`Ir7R3*Q*w)qk*=TlJv&BA?UpQx z7(h|s?dBwE0Zo#%$!djTj+dRmTaU(!*(2hb={}51xAjS(c|VyGfy~4$k7J=!2CYn!0~9zLwxEyWqO!Iz*CEgTA}+z0u0; zdvq;RN2qd)y_6|eK#hO(1Qp*(yM?20wfF4~rLWho)+-r_m_HV~w>4g$PEg;O`(V)P z6hGGruqFZ0VVfw6p;kH}(F4@3qbFnNB2cyZvF#ziiTG;Qajv-2(zeVoIvj1=Ke3qh z)#N5>z8#laHUc|ggh^1cwPflZip#3h7@=rnqd+5Fcs#Kox-weY`k@;+IZy%%!(umr zw;)QBdYNtl8d)yw72_0?(%F=1B+=2$Gg~GDzjE#C$ zhOe1d>%+POLz!Xkc^*V|;~b&CCJL!xsB$)>ENHne= z>6LVtW1fzpL2!CvT;ik2w-OnlC0`lFe@w^qfPr%>aB7_z(w#dk({urqmQh8NZNEBG z+ER?%(`x8-RV13!lb)}qw}9z+{bF@b>z_ z5$f$x%do^n>QTTz@o(c?qYdjjKX6iq%Q}Zxj z+DzJHthLR<0Ox{LCT{mJG`$7$_!#IM3dPAh6Q}kuWMHQ&UWJPxgF16E6b5?nkI&p% zhri%UYh7mX7uH%|N#^>Bmv{U^SnFZ*!C>G18QAId>ANj-=m8Kc#Ns>_dN3>qqNaUP z7UKRHnCLV!6OZaN(J4j0w9MV-|5;k*a~bARSbn$KH*C(o2u68nlS8;SO>!ijt*DON zx08vO`@fS~-C~n76D+injy{!*YGIJlCTA{`>~Y;ifI*(i?)mKTyvIrQpPM;KV1orn zW2fB;v|w9t=VH}SnatVCc0-01Jqx2DK!6+NAK8WR!b^}ac$OA9?MGn$@}dk<{0-KN zSIHJQ4coO?YVJURQ7hxLv`x)44a>CKFojK~y8+K=mCiCsVa~>e&2N+f(y9s?a6%?* zCMm#VqEa$QGvhEUKkaB`kG7km8UYBmmDA2_h^VyVXtv50*<7bJM7cMz`%Yj0ytkE3(>G2M) zRd0R{ZlZU%Jwl8WmRGV}8RiZqMt?}0O>P& z6AwzP#9n6Eyv9}r@toWkL5>*9@<$V3OkX0q;Cux`lE0}M(g080kPRij>Ku!x zn1NY^3@~BRn=IYfYSLAcitrff$ktH}H)|!qW&z|`ETm~boLM{%Y&BwZOk}U`yYzVb zwOYA3`(44W9HsV1H%M=PgSqVao83@Pwxa@w2h>pb3nk%>Q2*C2&}UcnTXgMIMt zP;_h4vanGU+Ioms8VAfAxuzq+1;l^=26dJGq%ee3#MDbsns_-V;=L_MfXZ}rDU2b` zyn2-}N-JEN#SL81<=rN{$JH1J0f_snS0CscVuTbJ6Y-#Sy{XObVnNi|JxW9*;t~UY zFonir79OeUPYgH&Pq8fpT-4eV42{4UfB|K(O@C>__bcR-Jd_bk9s;<-BuH*pDc?OA7lD_icO75s(6XWqoGQ zR}Km_@)~`uT7I8`zTU{v5RbdF~_6Pm0y_ zqC~Dk2P9uWMTopeE5=@JDFdfJYA40CPC4^LXw1d+*=4 z`&+%?joT}CzkjRt<~IVMUe7_*{uFigRN=en6Ip|*k!mjxu|+(RbxT>cYIA&m{0|nq zbyI1ACc@YUKtzL)G6;?b)ilqn|q@?h1V7*`|Vo48f zmIB!xhz|c!?rif{qFJvfeGaQk*C(r0X7jGC5wtGw;>nmgo<5Uw%4e!+NX`3@H$<6L zsT@mH%!(IvS5Uc;2|i%POk#!jRC{8&Zvq$@^=4U%Xt*$^y!4_m9s(La5#eHjW^E); za8{gZMwKKCZJJ^luKt7{Dc@8h(L`(`4uFV2xL2lW`4i3=xFcgt(tOTtL znN~TB(g5b_gNbv7ALar7^7&D5P&`MM-Ga}FEaCZ=<`CO?Fgqz zoAlWBA+QUnY@Y5D?6MS?oZNh&Gkp^h`3n}{8HekK4<{&8e>g!QQabBd_A<(0PED(9 zol`@lHDJ8|pS}0}tux#5ysB=E2HD+1)6?BBG=p@e(v6Rk_{4U8RFZpLO>UC9H&byc zDyQy`cIw(E_OX4E;~(u~Cr+n=Mo6P!P$7_}W)Ob?5<>6-fk3=Q0tty%NW5TZ7!VQy zA%VnuKHs(Wuje_>IdLkf?z+>-^xX1!p8f2-_TFo+-)n89qi`g2ud_NBt|?@7ZS&Cv z+q(M1=udU8)XIz2DV*v_$A?*~(k4MF6x5cHb0?Np?ZvD|X~)O*k+z(n>fiz2mxc~p z0oB|Aw;oF5O6h468V1#-I>ze!m(4vJZe)E5HW4d~BDZySmD?*Ft;RlvqzX(@oQ5p< zT5iE5V}3k>>^^1zE83VI~gdIS~Ry}cp;IZ z!f+(9N@JRhISbskn1rvm@gZcYQU*E1=^5{GUbjTD37u~AVui+~Pr8F)EGB*5uR%1C z%H^EyBaHTNymJ&mApJYOo2t%%wn>Y_#3q7c+Ucw*4HZ& zAOIcuvA+J`@R)nr>z5vdiyghgur|y`0No13L_L3tx={?--;>$IB}ws8bsWL)5|=?R z8zZwBt8JF(s`=YMo#iU3Rd`;9;%~+13<8zn_iTR%qUd7;#NLuymUMaoruV7qT*|QD zg`@?-zDm|=hdt6-Y8ACL(eRL9q@N&Zdywu(!RfayoQbDolt&zUw7*XtqS7MvDc%M^ zaK(&5$wqCdZ2@ac+9O>v6#cGl2GeYqUb9q~YP61*4Ii+4shKY%boSZ)A=a!Y4MI+L zdfYt|k!0+0N3{mZM45&FCIl$|7(92}?rpk?#TbZl`w;|+0l-mnb3<|=WMx&wT@%bc zwPrb0chf%e0Y%ndJc$(#!yj3Uuybh4A00YX(5fUO5NaPb2D#)zuulZ5xA~zbl=b)e z$~YxYrlrf^EPaa8WsSshBOVHjegwk^q5)wBunG`0(5;@E1V8Lb2B+jPLJ|skHF)Tj<@%T$)h62wrunq3hEI!cz!j%*y zE*#fALIMPPWVixbz1}2(R`+q@p72lD(rC!Cbty4AtqQYAwlzUVN6Xzq%{qrYmb`Zo zYEI`fTWFe@g$c0qy-_UYR%4Rq%Yq|FuhhlZgbwJMvy@R5MoV28At`0rjP6x}V+fTB zW%oAi!wvyLUNzJ1w6^(};ArcgMLh;67D-*z3R`P4oj%Y~h>|E+l5nwZ264{roy;vd zZfb0Ele}pld2TjP(*o!uRM%y-_LWTqWoZQN+IK$tdU>8~F&x`((u2s$5h%l>IUAFV zLtE-_SAq|hshv&flwdJSscffgU6r5Ww@D1n>mv*a!f@tUbr#1?U{uK!+FpZ;PES1u zl1*ay@jQz-i6c3B86S}P+}k+Tm7NfDvnt6rNj!rx=AXOgDCA;^dw8t=4n(h9a+b-i zr{JrTuE}}Q@DrJXK|r7^f3%xYtZlo#6FIQS))l2EErE8RQSyuH1Z^mtpFk?o&Qtzk zXVV#vL?6;t7k6H@#KtpCbFp&NuKh5A?B}*Jj1!V__z3|xI()9<3HVq!+IrTa^pXB{ zCY(O>s$bs6IpbJr91eHJIQln9fQ{P>lRfddg!{i7_ z5NRz{h(fJphH>B%!4mxbb}Gco_!2=yBm0%47R(+~FNnrvpNtLJUko!QTS?g9tv`;# zzU&Ra_Hqn~= zWz18Wz{<1%!D(S~qEpO7Ow$?GJ{MWyw(W8M!2cUtUOOgmb)zkb=2?ccw3h4Z;hFPM z)L~0Gx6VkO)Z`>;Vr`QAWduWlg29ApJHE^}Xrmias4ZUgbRuR73jx-4Tk zBJTJ&Wn+ziTZYWol)p~#tXZW>O;3%MV2M@)ufmqJGc9_`;r8!^lOn(g3=^@jaBxv8 zt(APOC^paU*Eh6MQp{P?+T0IzpG>74ko1d+KMh=h4TkTg(wAz`X?@yz?vvC{ zpC2jYU2pmJMvJ|9Evn`nLF2cq0seW(0hTOcXPwwsN* z>=QdthL~O7WVA`?2^i?apX9zVk|KTE>?d}4e896DK-s54`VY;aP@8)Weungf6y92s zHG>nAe$YU(vMzhI>x-r+#`lT&n8aM`ElcntQnw9+VITUdxyehDF_lcDE`~(ju+C%q zG~U?2&79xn-byGU6HjtOfeB^18e6KtP^w#zPgPCm1#8NZux(y%Z<|^q&;t9VVh8M| z?Cwqsxf_n+FUQ!_Tp3`e#3#BN2q|{j68#lPx^cK6F^L}i?5A?3R@o!p*bsaGt=lmR zqVOBqm$Gy24f~r!=cxEh8XsQ?rD(uOllLh7)6jv8FePY&qB6b9a3W4$AFD_D+!MU5 zt(|~S4yE>S5VmX3Tc5vv9KttvEpAek2D3~7Z43i2rTbRfa$=-LG;LWCkL19#rHaJ8 z70ZB8i(%c0s6{&XA)elz3Fo= z3IlE)_7JO#CrX7EO(l#ArdjO}#H6i0HOny*>goWnJ*rJ!xZ^+|MX0D>g-fWvbdHy- zNKbq3q!T+g-)VT?PHV^^w&S%F_mGR0G<2SABml7==LIDpXpz3w-Gz`y{?^AOeP%Av zEY5Y&s^n`_1aAfG31SrvIG(ueka_k$zr4> zvw(wI8iEcEv$bUs&`BK;WcmoxPA!fOEznS%?Y*T8fY3#3SX+`=_%uWjc!0o8F!HyLEA+Etup zap$Evo;`bZvAJ^{PxJJM0$6CIAr0gh@Do+wP+8REX0LakKMLPqMF~kCbXqrvVnPUn zefGEm9fT$gl)a*m9RXc|9=7b-Oq6glX`KPpTWd)^9?n8VHaCUF;3`x!FQ!gRbx|Nc z)E`leNt09iR3bdnS}UsN46TkPUbNmWH8|8`35Pm#Ks9YDfEt)M)FS)zNVCLqGzB-S zurj$(4sine65Yy;ja})v`P?dOHL75-s!y7%;>ij7&c7oeGx}9og`#Of(?s{wJVWZs zU{k=@qHD0#($RL6}Vd5rQX0*6XJX$~IG)G%5kp^z{l0Wk@I4v$Pu@zpK~ zYUW5zA=5V!N|Vwd`6c!NtBo(LP^-+iPtH?Zk>a((^PwoKGaN(R)QN>(V2%k7DAuYk zE!ZSRfHIE4M;Xn)?IclGNt#j`KfD>|^dW>6iZ1tQ40j|N&xzcJ(FWN0kZ<00G9g`# zMy9593kW?zJ|((xtWvwYp1$xSggMhuJnnsSx#O>lNk|;9)Kxk|G1X|F6t_bQECg8; zn*bf8vs&p%$2DfL#PNhfFC1|?ozD3u zFZp^Zy|i;`V7t%pXn*Y((~9D82&kAPyTP$J_z{BBp)zQoG>EEX%p=8R2J!P`@>cYdu#?uyyT`UAdZ2$M{h;8OIM|K=5<3M1Ci{iMTidg6Qn!b@YfN%D+_j^5 zzICu9KVC3$-wfONla*!H>o}P!;cpff5atLJ@GZCeeA6d4c6vxwmhvd#uZ#i<(8z7G zM&Wh>eFl|9fke9tZSU-D431I7ELlzNa!b!b^mK+9#Hu#-8hW!U+$}Wifz;3Dg1prm zcfS+aXzBpz#j4s!$B{*_5}CB3#Je;XCT#)f)hY3Te<_L-D$Z6Hfn`rewpa|)h1b`$ zeTtof&G(^F>+5j=txn*&DyLH59A(|qS5qz3o09^Q?ad(A2Xb-MMC!JbFwxjs_3KS( z!K6Gjkt%SrYW8r`y?&s_~2mhoDh%x z-aV&2Xvd-%O4W*|%_b{4pG7p$iD)BU+u`hSuCd!ImeZ?FRI&^+ttqSep;i;TGL^vT zNSD=^?Gh^e4mY5~LkSpO+Uw{)#!y9fmg02G1Uua6AMCOkXjEOIAUGVf&xgmJoZD;E zvF-bwAH}s2etH<4)Lfpv(JVnB;8}|ZP;>l6(D=i|^+{ErrGu*AS-WOlOQs_%>x~#{ z8TValI?_ZR_7T}6hivrP2PkdL-bGojh1o4Q+tt--LT7^tywgTg{h>E3Kci*9_0R;fB4(O z_utdMm*2F%_Bzr;(?J$?cl$>st5GZ(H-e$n@SDef)_L!}Pe1zfU;lgGeEpkBqgdN? zQ&f2KcbD7m^Xhktx-CfMo`va6me0Mv{I%Nr&Pbd7UTE@fzrXx{s0kya`j8vp-T(Fe z@{J$x?zbQc0qc!?gx8<^VENzF>%Ug!SasY{zehSA3l8Y!SX-QtACMoZkCBd!+-R_ z@_(j=)0riQH~+;4%l{{Dj!(I5|M-LV-fLJgdt6^CdpKr^>|F&KJvsjRx9wOQJRfun zQt0zHN8fz?d+F(JufM;x-6Q9xJNTyki);7ad+!Vu!MFNv8k>}ODNvA0UXIvW-rqbP z^k^{mcK^}ijbn7wL+%#r9un=dviBVC1&{A?W(W+r-ulV?yH79j;H^$|X=!>|+^^Gt zX_-iL{d%j@xxoKz5B4A74~GU*j`cGH@27nj<8++&^zv96k?MeBe8P=2UT{JtdnDl@kLov><_)+KlwY~ z^sq0G!MCx$e~3MSuMq-=EV@~edqjE$6NT9bhP~;X-ti$m%l-zYNs>k-UOwuz{^S@F zL2JnE5pE4)%9d@dd#Vo^zPqt;jHv@=92}oKLTS`>=q8ui+^q}-4|a4xNB1e}QI`VS zCZ|J4$$~jai=7OmTHI$n#HZo@;3@7d2_LdwxW$49U8E(pmu5Zo_A7A=sq)*suPV>& z{u|h`3rGHL*uxk-+`q1HhA)KB^mD1cpW5e1i`_s}wdTG=L+ zr2Gv>Z=`X0eEZ%P%eOzb4D9J?EZxccR*W0Xg5m93e)L4>t9-a3P_v0Fe zlh96_(v>u-&ve6)7=JpxNsJ?rhNr<(G-^Bec zMh%xKi;4!MU|DT;dStA^GzI1KngK!QMw>rGJq(G8=oc6aJX$k{o0{IweHIeoG5c7= zlT3bH$Tyr869QLQR99f9|B4lmBK0~GSB&%NXC9=1Kko&oQ6N#Mx4aAr3O{6fafoaZ zNx=l!FZNMeTpc~2$X^sLRDlsmWhH<<+MeF^N0^_9_fR>QBRLlIP*rhLMjGi-Fc z(b-p+0QOD%^2eCx%nD~*gF0Q1fI5MctP4RH9>C!AC9X4PRn7;Ht&yVjIDZHxhNI^+ zC&nK`Ut{Qv%?+cUF%bvBWar2LB)o3+;YP=Ss!ZJ=e$1g4-wAVbA=g67phQXDg_cXA z9^VPX;)zLO(4o%UF*BtHEJl10&ZhnoF9l3%5Cs9#Ch`|%R6Zi9j%7@> zBT1)0`v}FlN~Xu2=7kUXk6ToOJ)W3r6<*jzd2r{7^TAX!)Xd!oHQ_eEDwWR+pI$67 z6a7ZK0XiQABA1c;TvxF3UOJtj35$TJr)@Gs&7Cu7c{oOw+RVvdVR1U*@IfA%IDTxS zX&NkV5r!oFH9+vWEZdR{BO2&DywHW zL40DsW1ktC<_eiVmb_-qLaUq|=^877mRU*zIJ27!fvsRm!Od zD`X!q0D8?}J>Ocxx(o&+ZOR_6In*K&DsY9vQ`J4wh_39XeMi+X_n;I)+n+TVlwKxYjKVe%$T3?ir^-)01g|5DI2+$+b|Mx z=KUhA!>T1^c{M-#QvftgTp8EVJu7~xm{D#?a``sP>+XiCXqUy*M_>Uy;aIs3f$348 zeoy((gii9FBk$hpcClmLGI?Xn*&6o=l(7#pWT?f=yt&g#t5bJ~V19}Yckt~tEog+W zL5LaKZA07F>Rh7ZIFM_7({yatg#R|~*bBoTr%a;_no&&$rNmA}V9|YLM}WD~b>-!^ z?bdd0T(>*@*Xp*mcBZVgII;ab2t_o5k-}8PMLWzqO2e4^jy#Wd-F^Hf0a3EFeOumZWoR?<}gLLSWqWBEJwgV4~}Y@5x+Tk9C!-fEYQ+3PXbc zq>eJJU0JP*Hm8zpJV(*^o|Rs9!A#H84HA^8MOL;!U?E-#+)%8yg&J{iMw@ds;}U}o31VPa zft)o{jbsSW78weeu3Ab!IU!!rHKEG>8qUrB#`Dh6^8*4|mRd7EUYXHi@~@#)op}I$ zhIKUr?To~VG<4+AHK*^6Ixi^S=32v`?Rv1;gt9_fF;m22Y^#x0+qDnW__f$maFRrw zBYR3*>(9S~7M?j23)E_vVb6 ziC*_`gQTS34n$kD-_Z%E$?6~26LeaU1&mLTuq3iE+Vh)x_B8C#{$OdLH;3m(q7L3a zgD*VA8H9xKh}C@!7hhhl9CTp*s8hJ}B65CTeR=i$4knpM+H-EMy&)AO^=+@c!s&LJWp&g7zhx*Q@Ux@Yl(b6`5mJ0C<8mythMp0y-CaW>Ev zD|Gd(`ygO)k-Ss}x-r-$jO%D;mvDnaGG9#Vr)&;FbWH6-LhBP>g@FaT2ogWae&pC$ z6?pWVea?l-8ID=jxNIW;5B3Md=b1awGajTCnI$4ntM)dxV*w8qdy8T5$FqoK1bppT zn4hc~VH%7YxOju3MOp;YctBi_{%bN90^D#&7#bX_p3^8fu_;j@2%YadB5&vsG0qSJ z*-QJazj)^wndllR45)IsaZ#k)lqS-ey5nXjSI|%65}Dwx@Lpx7oakAY;GYOROz=&} z@M$1aY|MlGXwIlwOX_BjV8tJ`vA>34eewuW4^bi=%m@_bjbz%WzDc)E=y3+3@&W2) zG*dK|FO_Y`w90B9ORbAsW=5h;O#9)N$&KxpnKZ1X*?0=Np+{+IBEBG8+3@8^8Hl>1 z4k={vBN{<59l<#AURpEjW-Dt$*Z0ko?xs&y_mt-N=F>_>q^3cn-v<{`9rU=vlaa!m zlq0uSDTA*^QlVjuFqRx;Vh8xRd)ybn7m5U@{G3Y(KwK-4>tU1dmy8iF|C zolGt=n<}OiGj_(>CZztB2I)AIg=d&?*3dORu0Y^6s{0mB62zww3mX_71u>S$ja(nz zaT8LWs|Z9SD-DLW#?i@M^(8ZFS0G)XXT@S~%I^?Lw%OmQKI;)nH*f22J`8G@_Xj>| zN@R^9F0RMAH0y;U+>fFwhnQ9^;as+8S9e{;CNx}jk-Fj9IJJ4Z6nw!YW)d_-XtqTo zvsC28+RwB;i&5r{9a;NeLvm4ht|}_4cOyYt?UlWd04dXET*b=P;$5Qvh;bb!+tER> zZ4?RDL8OdW!1vU1#O+MrrqA$nixCFh-A9{U+FeiN??tMS^ey(O|% z0WMbmbI*!Z*NA-6JT)&3T$jrC3PUIm;L=clzIjbMzB-uwOpyrYzxI|pQjs)Jf7;u# zM2PEH!L!qESqN*oOx;*0YycfT=c=17p_RTV_5D&%XE`&=D8L9tG_aDEJ@nhQtHO4| z(l_o`-i-rNUjvbL094a5kjpKvoP2U7_NSdpxEy@`0>E7_Dt(RRBrt+ zh(aux9!MvNjaI&1$~|jqk7Tl6U~wZQ4VFfyb3I+!2bjftghpEI6RE*}un`nNQC-~ds;Dl-qS>1?$Qk)FmW$INfe-uIj z0YVCca5(w&P5KM*ZLH#1WiqU zTDQCUt^uMBn`$hOl1O-nCoq8%0iI&n2K%a$u)bbA+Ue_&COs|`e4olhtRoUuB@d&Sb=3Mcw;~_xF-Oot9fj*LN;Z6$=gPyD%Bs= zn@9v(YsfjP{D2tye55oS_PF@%A{`@10uH6ViaDs80>zG8kN$HqQqB#f^W zj!`j2-r_+@EDB-2hH@USno-TxBlM$paxKU!4lIcRW$;D!tTy(+%c_!ahc3i^&jmGS^loW*n;9YW<$V5s%i7R5B zhkrVf!ZaC?$)eG(Go!EL6 zmLE@*^T3l=FTGVItebEIrPY|LXy7I6(JGS_qH>=u0A@OGHfIxqE6x}|V^~NUBEMh1 zU7RAaFqJnFwm7Qy@VR)D?tZ54&C?M!vZ2vW@2C+7oHi>q8o_6^V8D7qeXslaTH$=Q zclvXK{aIqMdj~=yFqZD)CXVer^iXSOori&A$7<<48l7Q+AF~Q>4H7k32&4KrAwAOJ zj>{raG8tyQopc)G9CY2p-sV~Le+~eI2>ce2z)wy2aR5EHFsrJc!4@#7Q|th;{=dSz zSsaa&@FmAm(7khVoFEC*e?qwgw?3I*WTH3SL&v74iWIpZI-!vsA080%W-+DNUNz_G zT@~{g6aI-($;5f=n7HUw%Sd*iEB6!<#l~bJD-vQf6**P}a`Eo;iO803X9YRxnaBZj zUp^*ls;3SmdhTd8ps!!lW~{Ac#Zkd{x2NQFD8zTGBN+tWgDmpb&)?>h1*}2q(h{b0 zaG3*=hMo08>2G7cV39xX$v_V7hPqWnN@dU>8PH?nbV5Cc-V7Nij$+SQG}wR;DLgt>U3Y}|`>i=uTOQvAadP1Omhr|avEK1|Jeje-&8Ni1J7ba;gZ-4g2AMn#d=XSxL4~8-D}K zzF{fG-d-Pum7&YLI+=^eePCnLg@ju%eK&2#Yssj19A(@@n)QX5DWFaYq*YS0>b9Ws zD^Gj>*`D{5=9)nkJp-z=$_{t>nIW?o0#VGbwZ05pS-kv%jb0_ELCfV%7p+;Kit2k? z4PLQ-V(Ft0pdZk&Aa~zJ9cdc@4Px=9`9Xk##Hxidintz#|kOt^~q%vV}+Ovu?pw{J}81RLp`}z%#n~V)y<$E z?JXt1sr95bs^L0~_k# z7%RFor@c5oe{ojT$iGcdM}0(Tl3$amj?<~6<1pd&+}!jhoxJP6lW5vZXQvRVG~=u95ts}CLJu`QcgI0+ zrG07k`lXL9GyJ7%DnSQwGWw^TmIh3?@wYp3tb;IwLLCYJ;#x>T%}6D1?D&;1!uTTv zuo9LnD`835k1-2#t$lg+`jv&Nb5|~2J>L>i0@cJioRbT24mbK#=H#TSOebccm9N&kIJg1edNIyPML~Vh*PQIi>wkuTo%;{&EZ_NKE3w()f!hGaQ%so@ zyxfR8@l6R>qp(5m5P2)~-T2BJUlq?kh8gPOQir-)*WFX?QpjlN%m_PHGmE4O&m>;j zzp(5|a15{FMvPp`RD&S4v&{+L26d~}awWVKCWO+OWaifzou~v|DBVffeE&Nqqz;ZY zF>^vW)+n4dkn#1=(gLN0K|xBi9PV~DHn%v0)ekr$r~iO*|7)*3O8n>)BLy>$Sm9jB z1`9r?Ghb!os=a#}X0K3(%q<)A$XT4uVl<~sh+|q3m3C|Tsp&M4@g|>rCh@)=#D@uxSome)rAZMuqh61+w2}fUN>SL$(fDiTA9JVyo zHrXiG7QcVfx%U{BbnNl`Pfx}BPXat1S%a!+#sZg`6mUiDIjjR={sMYyf50)*Oq5C8 z=aMN^twIqD;WKKJ_QQ=DQjk+I3$EeRrO-BfNPM%^)SL`sRHjRuP8|hGO+>>;`>Ii- zdql=Mc8&N+h&n0m3U%ubh+byfc__@7U1+lnU^1H@aI}KAXsu)Sk5SOV)w%C`Z*$g+ zF8-V~Hmj5$lC(IWRb>uZJDDaB?bp{uxIqk^|Lo}=zv9Klv5Y=Y?ml;HeYv&Eq#Gh^ zv>0-ISmaH^W|}QY`%|C2F(F{2_c&`E?CRpiMp~PZEj8;^uq^28*FSbT#}K;F$D=ml zNEUU}xKkP_w`W_V5-_jBXMJ2RT?YA?+;z7P5BCopdamA7l|*W1Mr?{S$LEfvGSCk7 z&Gr~7$~>nZTCxf*2V!V^TyI0gct5>na2uIuSS5C$1r(5*J~4ml*tbeTo@A!=^(TVZ zw>O_TgOXivs}UoVP#GPwv!KrFD{KREx77MN^!|-dKvt-@IR)&Pa9a`L`f8@7G*hR3 z87{`=h8@0&6L3TQhl9)HqCk}x4Jh*JgPQ5kw{6niK?;Ve@=l3YSn}b!1YkKC-jtwaY%C5P7<(Kpt+BBh z=H^kM8J^TYJpGQ<-K~lUC84ot+6~Tw!JI-ywvk9AucL+t`&d352+D*J?avG$cGFYg z;8fkz9@%O89BaL&`d>bMY29M)VHkmTKS?*qLxH1$l5!FMa8l5mspd+v_fm*U!t$uO znT%50F38=27O_#66zElFsM76S9>~Wri3GX)0v$s7rFd0Xhsx*@lZ{lwOP}WKUSjK2 zV`>fihh(Qz+&Q*vE@8!}&Lmeg3s!tzR*%hCz;;FQ!6DSRdG-Pzdc|II@(HsAsxN$u z9Arwo#gD<%6R(u#h~07RV^kxZpKYwTnsi- z;S$^ShU?>QyV_T|Suf=@3-F9rJHo3Z6rQH@_DZ;HY!=^axQcH~=Xce4MX}5S6sKTC zS4t=n+hX-qPKdLbf6hlS9zw77Ge4g5qHUiTV?9)M>FLs*wjAbSe=Kv5HlaD=T_S zky>naIM*ZDU>4sP%Zvvw?3P1CI{`>A8+o{$h$CeXVY?8ms4FGIv=y*(r zUqC%3LxRQ1`uYzgZ$;Y_6busIMW>YlV()SC#oeH*wr{(IEzRaru_A0UBM$pCQs8=h z{Q)6zaCp~Zs)g45GBDNjlMP5K6)xhv*?#zNgUfqovqNF%JM#&gSluOQp0z(=V4cLn z?(@p>pUl}aO;Qn827%{}G)FY@v2^gDc2%a!^yww1Y1Hc#nVkwS#xwk?#G!^3^lK;( zp<7=+VQLm?RPsm$_ctYfEP1H(cuVl%Si&Ss8q*Yu_6%sLNi7-mwTl1R6?CHj~_2nD%C#Hc%GS`K`|^jr59{HQ4-^rzNFVaLoM{vOY?5dDMNx zwa7=hK+RCjs;LBju?VLa=$!5h3*?i@mK(;3YTTOHuyNckWW;Q}y>X+-vSv+f9Q*a= z{2^V>?QaoQ7Un+uP}4TKzJjjIK0@*KSKu|EXo@^q(Y(l*FYd%f0oQR&+CNPEW zdG_q>KjCsPX#BAC1$L{mXRpgtkB3+eH@oz2>fuA<{YqYbvHfywzI`$aKW`tL+nHHg zm_7Lws;XZN7s+fg@QcTD3oq5+A^-Slo9532%I$}P-qz7-?&SI0t+mIq4<83Y8B$EUh?3D_x13hepu(Vu>)Xg#^?P#K3Q3N{HwF)PxwY^*~5oe z@$;OR^aEsDA4Az`caUuG<*rDhW6WQj_JZz`wN@%zXIe(y_2IC(62vu{PDsc zBt(s#R{O7ds5f5n#zIdYrx9C=D2o^-YeuN=N1VmfUu>X-(Mi7!@a$O%llz}7FgPNx zQYq1Pjt{tA^(;6&Wmkt9an?P?IRYz&9;gvyadRI|Jv@TYPEB1OKItFyx2{`F0pcoy z`^FR%$$`)WQ<(LEhWPm7k0~H6apHU{2m`5DMQ=2us?8_3qFULmxI`dJeAvVimsY8A z%l}=ZoJDMxc#6HmAihw%tT3aciyw6s_&R=BaK|OCQmj25wSg=xc#|oS*F0B#ytsJ1 zwYb>%Xnub2;zx@YFI~NQ?W3!g0QGunVX-s6uz2y};^MVS{J$%gc+6dmS2~v!w{!LC z{6`lTuPiKFzAUz*PJQ9{ap|MZl`B`TT)w!l_|d|}E8GZ>bK8($`c^VtT0SzsCPrNh z#R>>#U+x7L-vSJpGK0Dpgm4hcOG5pQ@)FkihM0=bDy?exU0F!d@k-luOT3S3fQl>2 zllO-EfAV-$L!%2;A^RzXg_tq488oTM2`(j&xvkB@JQ7Hfb<&T~Ja3m|2t<9(HyP-Ogb}MS2 zm;{OlJ6curvalZ&XxTX`R*_5QZWReVx5gpZw~Dguae;9@bY* zrPEcxAFuBAA*XTcLxsSk*;)o%rTxLdmL}8`g~KZ441s7-AzRF^98n6H4n65)a8d15 zYyv%&ts@50l9>93yao!pAUY}WSR=c*4m-Wh`PMwfe04@!{zCWGE#v(G>)=i^p*+TG z{4DolkH4jVBidk#?nlfbp(~!fcT@U_^4RLkwvr&!MJ9Eq@zV#KuU@aYYKL; zkg>&RA0+nky^~+O@?@5T` zpft8`Ym<{iPqYrobsB$GvPTD!sI+=4_2=W^dW3WFL|8zDIf9>?Y6i%Ob zEzkIrLzvMHq&kD1+eeXPhn@>6N(Y6*t^KxomF-#ca9i}u9Zn9#DpMnR06?qHhG+Nq zkfOylW(8e$`gR6y+pTV`lNRNnm?MRLDf1g#Wj|i=ov_e=X#5xWkgF99As0|gUSdwx z|8DoBtv|W?fxlK#$~dG}w8L{XPohrtio+3ZPH99WQA9elr8E+z@k6#{OdHDHXyQba z-G!Q9F>1RUg6Ge=+R(5Y+<&mtvRGKaCzID-5E_VBgu zl8+5UgVtcRft92Ae%Q-?>}^-FvJ9&!M+6 zc460Skh1{{x*Eu}a>B$#Cv*(kt0&5Bsx&cjVUM$9VI4`d0197?&QQnhV`NozDa1F> z=@?@JHV=Es)}^OHAb%PcrTb{uK3QG(a_$5=@2`-P>;uiCx?1*;jqX$^52>#!qs4iq z)mLw}Qoe^Vx!YyB+b2ixNDkvkq)c`+MKiOBpx3%NC&n3_PNGpKYpAz&Pc+xFV4vx1 z^!kIuuXp-vaRgfUtj5OT(-KK_M;bh<6OPc*Iwxx7+VN&b$81*b28Oh=Xi~h=*8w0F2aY`4)22&CZ3G_HVCgGn!g&EHa9quIXbOG<`@@Eh4cy~ZIL zmnn*#T7rDMG%4-%O>mcMz+sOjvh*GuZ^JLQb=qt~=zP)s$iHxdf zR!*ZjIzZFh=ehb=U@-8Gl(e&urgH&4EXsPtfED2LQr0O|>eJRPbv##_62w+#VUBn; z5giev)rISiRU_L|hbOo4-A$|eZB`e>RFg2=_fRsev3P@4(n$y#|I*C>SygD@nV59w% zfC-8GBipE~JrSB(-<#8^Pg?Nt(zPv=u}v3@Bfv~Jie^b-@?toZ#t6po3s*@^29jWG z3-+5$d@dBRt)4X+WOLay2a1bB=TT}VFNNAD;0|=((arD`N}ZX)ZVrJ zme~ot_D=+P7Gl-Z(cGktgn8+R#PgpyUBC=v7d-Bp)CZ9!AR@C>op5#BO_PsU8pDyZ z4xpg08E9?`n!%QoTv%IKWFN$|k*PBVbvmG0>&*z|g+=+t zs_){kysLB3o3;orY*IS+S|_pQl_)2}dodNeiBQ^f5cIIEnN8hwPHbJsq*5$RzFd87 zoVqR?I0ctb#|9(;q#6YwT&04u9Gy5yclI~M9Nn0feVd5N$AhCrFQt8M&b{ZYxsO{i zH_G*RGrFK%0Kg&s0$%=dwoNOuG`t92NO>9irj-Fk?&n;+9~^l0t=hwDOi&5lz~~Ir zG86INGef)|DHj;SHrjg=_^L-Kyf#t-5E+35t8w$Gspo5`o5#a7VXi%1wX@{QUirwY zW6zm6s1%pXYb+C~Yj_-77d-?t9YmM2_Sr2$LJ|`s^4LGh#(+H2011G}|Dk_L99WPz zP!%d9aGYYV z-@kp&2lu-OW`2I-^Luyh{p31}#h2{XCI-l@!SQfsNpg(Q-BV4$M5b>&g;>rkp~aZR z8eOOHYh=aAs$%izkwT!e0D-j=iPxwu1bwu({O)PLS;2|It-c*NvMMZbiGl{fXk`|% zWF0$$p{z9rHl`}pD`yQqh>luY5jsOPY#a~WXxsSL{ai&UQjnb31s36piVS(C^-In@ zV{rZhG<^v7iVahCv4X6}Ub}x#dc%^$*E*hM;k7|@<@55KnG$4OqUotC(@7dTmHh$l zh*Y8klWrTY;j!(}nbv)!b46Qv7ru?$(`n>oChxOV~|7g%_&)Dgosl6YN zSVLJJS;$dL587De&sTkIrg2U^0n~fdt|K_bnSWB>3qSL~Tu~wXtm78AUI%BS&&Abm z*QZvHEiG4YVeAUhu(EEntgIXFD}eHT!n(?{ev0K=*ecrwVBZJ`YCV)VL z2nBm)D257&EGRAhbE%S+g&K|Z7Cz@39a{t-Q@!kf!!1({`~JdeL0ykJVa=Z&%1^ng zHr3dwHR>ouxGlR>>a`dHutG^Fe;Z>bR_}c|Md<|$dShw<9}3Ib97C!8!RvUnMx0gELU7Ek$0P|g^`MY}Em=*hT)4XHm zuPBi{fbI}TAhKl++&S}in7?$+VzEby0w{SbtL}`YFxWlJfl4+dRA>OTT~So`erx9V zU`GG#4v6<78B9EGw8Pf%fg0^8w!z{cRsO}|VzIAD3AH|CxhuQT3*HBZzcumxtt*QH z$lc&BT91kIdXHt(8zXxX=_%d+^O17?D`uw|O{&f1PGhv@Nd1DGA4`H&f3VqmvGS7a z+V4f0Y{leLOBiLHOnPjxB+>LQVJhpm47N|dk5zIpH5R$IA@#P^rs|2;=xAT*TwI); zZA!+CSQ>I!l@)k&^ulSx%ZS9EkV|W+6CsQ7;lr)N?#7D)auFdSN{*DD@>lni9{IBJ zI6h1nkwic)kZf5UhvZs^<694uMvntYzmeOrF^ky5XOfk_<0L#tmuH%Za$t>av;@7Aj}T__oV6#Z6`>NG;=hzz>e5iLAYgiyvLR9JBMN zYE5q5wT~_@UcGYd;#Exd259L$t2iIU1v7D{cD>z#P0(mDq0xlCIRDs{c_>3#WZt=z zC1)qffBW^_XU+cV{QR|R3zz1vURqrE=+e7%#$SVU#;A;vXM(EPP7$KXd?bIL9BUN^ zj!Y5Z0v;|47?T-lfkl$1Lg`=RNgOOW+YpuqydLp?@jRIbeib`DHVYNT^@| ze&R0K#}ox35=@2dD~WGy4>7}^Pd65h+*a5zPJHl57`0+IfMkwmWrzsNQb0ivu*ZW| zq10Pj)Su~doyZQJSy{>ynH6~&A?u{d)92K|T5oHM=_(pLfJMCUxdo5s*wNcHW%nwG znCAXqz=PD7km_>_7X5)NTwM#x2~;lMy%~#mQfP_ljA~$oJft|Wd;qjx^(0$szI&|Q zVPK2qE>R!Emc(L7CiO4Ghbk}>i;e(Da_13A95(dI+VT0;n&zDDb3o?M zMA~72FfeMR$Rsl;Nz_(~i(s)~R@MfSJK*)C4m>8c%s=m>rM(}Q_WpiD;oua7>Pv?yQPjH~j6XYpE&22pkU$G)X8y{{3~A{Bsg zvguWn{`SZFO|VVL%?^ED$9R@QEr0^(v5Pv=4eL6&n{kVbL8Pr5UrY+*>3ZG-H{OO! z;edmlLHTR4#36#X_eKj`>*N&68=?lSV0nuY7om)Kd+Wn0-r0Gdc`^F%jV)6wJiq` z>A`9(KIpZBh(fO+h)BNxD+Cd_eND-C;bIs9_SB*bnjsX*u5`Ki*~){t&u`zo@!u!5Tdi%CLEhYV zY3q5c#cIYR*-Ssdu#&iOh^jIpFe%?E%0(R_Hx648#N3NoV-WP@u5bZ?pH1dNW$?ikKC)=g-Y#7>U3*o6?KM zDpbiTR4PPcCY0OBIxgA&RvI@66b;WtzNxeP22rE(O%xUC z!o`^9jo;SCjNjIt3&(<-DV795Q+RqJH6@;89VYlsK1XWZLrTtx>-E^$;%4w3cN;(`CleIfD%4z7$A)JOP>9b5JDgdT6Zl z;_#;m_o$c7X0LakKic7iY<1EZLl|uQbdeix33xTPiT=WSSA-+b*?g{++3>0yR$?=I zfSg<+FkOu2Lq($9Uv_zUG08k=0AmH_*OHQ(gr|mQ<-iT{@KVFG@{=eI)kUZ=&znB2 zOH%RE+Ves}E-@?^Tz`7|?tK#X8%(WZeB=q^qIlYnRn_>)Le2dRhsys&a#I2pK2G{u z_+2?h;aTdZP}jn%sAi35X8ykZWl+v^7*hpiYZ*4`rjAKr@5} zqXJmX?$5GlTm|}jY`@|2f^`HR$gyg%T&oxp3#^`6Bx;bT;#j5^^f&fw z#zxef0<&T>54SIt?DUf;0Vum1p$c{#S!F=8UJ>#UnyT(%K8M#^H&t?-lN0H|!4sbb0yDaXz^qS1VKy z{_4^T57S;DL8$g(*hZIEB+Xd!c-i{|u_qQ2i@x}7lzmJIc6B;kv23egX+c2g_Qdi& z(U8bgY+(d`c-K@Ma4q2IIT>OT1wmuEd8MOK|On?Dn zZxuYZ6ieY*x$uBiX;cBK`evzh%V^<>9n-c|Kp>)sU>lWO2yOMZ?691{$|auh{pcGl zP=vQ~ajxcF$KlGQ&zYJorJZntU(>oQH9a(GtNOyFmxgE7wuy@+>uo9ASnFZ9!9UllG7nr=ueGl&#$!^p13M7i>6_ZtqC%x?W2Nk z9txQ(238)vva}EnTtICsurB4;%=kq?;c>!VuI@g`+f*K;S2&(TT&v54`Kzh#YNN;y z_V)MY_Ig~uMu=t$!r)pqGm4j6g4Nf~$(;RFIRAzB547x=48u0Gb2jhy!@v9_3w{YPQH2kXPx)n`}Bv) z|Kt0A@0+iGH-|9h;zHhJ`On^8{*Qh@o4=MkJo5U4m;cERmf!z?m%o=@mKYNn{gn@v z|5%Ow`DXn#v|9UM`9G!A@hbuU-#&Qny>SrRyE>%ya2$ksdHnV77*bX*#ro#xo3H=5 z^n9l`AVOyNP5T%B)z|O6C+&kfL>%+Cs+z8PxW;?G&o%FH$6qszEBr5Sh&iClg5@gLL$Y zK(Fl`xkr#+Thm_+559utZalG|w&@%9@4%F{D3y#>lz<43Oq&AL-#y@_BP(q`?U#dX z^s(%P$H)jr!{T|zg7gu6!~2c>-A9$zY9C)7J_T+4q7=f;o?;V^A)Ee*B9UX;t?tGV zrMSrb3_Wuo0E0|`y#sH}ojiv}`}@Qrg%-$8o5x&MYEWr| z>@GJ6YkP3x-h&X^_TxK0S-W%Z0R(xWhbM1ZzdyPA*$sQrnYU*iA@{|DJ9qCq_+^vD zhI)8w`&)KCxr7BdnN`iTeR=E3x_F`P`bEzdlMMC-z1B}J8`x^2`J-|K#{wlmkEsWM zm!Gxh9riaS86q}wmZ>mI1F89_@j>vK`Jiz9EPGAA04Xr}=TmA6NVJ4dA~k%<-;Rt& zj;b_JF+l&&#;aZ8`heP8x49QlH<;d0wPNO<5FPDCB;O|&`!Mr(8kyL3?wO!817Iv| zN??JC3M`)jp~$NNNae=nRrUAC!#;!Hq1NzgcGEz6lRSq_N(~$`!(O0uh^!z{+MG&#qwv|IYZ|hULs0cN|zi6WGqzdu3KxgJU0Mn zC;>??#j202oq<;vWTE}9e&;&%2z6aiK zF6MSCJ+>YbgOFgPVSOfiHgeZ`ND5C^t^;%UEUZ2c;;g(Hj`qN`&-L|iu{!W#BJn%k zHEG*{a$A`Gur;rk_<#dIVmT^&`FW2^1e8GnY7jUKQKeZxj-uI(M;2sRZRX}GTUaQL zHVA|uiNLH^o77C(7WHQx7wJ>WV|c(>TnL2&rGtYa@$sVRj)(%t-b8}&p zMk+T>KpB*h3e47!Yt;6 z(M5*k!Yoc&m@}=Pa}USB%s4GX;Eg9Hd>I zrgW_r%&z;0ilrwbEG5z$zr-FI!tDpKxlEYdtbt8Bz$f6VQ}xdtJ%)4ISf2HDf=|xS?I0*;a*VRo7T!;`E5KBnD^#2FGpf=}MIGA=(o$ zl@Y%69Qn3H%u`O0uZkIpnZ0_7YW1!6Q6GQnIqKtYF-d(^%raC{nK03G?H1wiR>5JM818`ePNPulC#L5 zJR}A~Hv_)*0ZFqQ3s<0L&flw)%svL^MG7k<3Yba~Wh5iX2-QA(ZggV#Xw`0P+SXB& zFRI@r;Kc(0;sntF~S%Bt?u9;#y&B`Ze}D8i-! zPDB!KO2%O?h`?eMbjHc11S7Mujb>$eRNpb@ zP*@B@`rIgsN*fiGbZP6X99J!(Mz_l!Ve6{6EN#M5ipr*~eHSNS@UdSVub=N9J{cm> zqw$NCqPaYk&Gb)ud#td3B1y)tbfb3R(f+Q!PvFQ$XZO@nCw^mq)MhU6X~d3-VS&!n zi9L0%W#RJ0`Ab(8;xbR7*Ck|NU7AbH%wd`bFC!#u(*sk%^1R}5 zMO-~KDRNz|=%`rmap-ARyMvlCSKR|c5!?HcGMzA&lk)Q@EQSJCHcNdMQ!3Jb>Koy^ zstHXH?aD!2D0Hl-Y`(6SE%aE4iHMMt=!P(K)I)alhGx-nV&uNJ8RS8}kWaXR+Nuyn z51z0a$z{D$b|>HcAa9!p=coWwPR6=0eBh~F7R)J)!e$&tn;6f_(Xcnzvcqw@0cw4x z)10krZ~Hvwp5LA5u&3YkiOx&@?o5B5&UD_F@8VRKz5BTiMGDQ#?6ytWim^$q4Y{vy zW5;j1F{$09tRQ-ez__Ut3c9||PwN8mzOjFZ$@2h%oXn9BI5m}R$z(5>Nw@-wi!k>2 zvNDxOMizM*(y8B5#i zZtTe40MM|U@+-GQ2O%l&FIo{S$;b*b?6mIn`aHpmWcRo4^?IA8h~b5BP|?_Q7dJBQ z`g#NcZ1I;t`0^hvL!d5eyQ2<>d-J5XVG?GlvFw-qQcBq!4=MqQ&vbp=RztvI^6y%O zPdxm6-Jctvm4{dUkr+i&w|9>Yg*%ozXzg-gL%m#cDj4bWtT61FB$?JsYhi*tBeFzp zU?$va8`JBA`$xbz(-Nv<4Kh*ykY>UQ zWuxrvGGO+tiS@Oyc;)cmK>Kb zbRa2HK6}DsxI}$uKic-c5c~kHztiV!e}Wr-6Kb)9Z%O$KeyVA&A+51rh!>z6?sN}y z6`OYJDWivgp7@sFM^nZ5c=f3Qc=)4tVwB38@RYBmzXM`_xYyl7OjcX_OwWDaO!IpM zfn2;Yzj$Tg>a|QE6$rQ)ZZ&hn^4@$AA^~GGXc$?4OCJt;TSp$tr=j)j$060PZ5?@N zq%WcD)aJ6-66H+O;le+Azsd((x~tjg-;Z9^mSSN(Nv(8PEcIaDN12+y&>es0^L>4^KfZ$@^@b8QjjC;fm=y)MNSS zjeEE5a))1&&)Kw^V?RrjC2W_16>M9jHFP?Ada^3b!SH+he>3=q6;L#r$1_cw=>vfU7c1zcIVJEJR zttfOw25@G0S4t`5%z$pDLyh+LN_XFOgQmvs&^Rq3s^}ifC!P&KblzrRe8LBlJTyP? za7DdHa7@l2$!+liqWKgC-S?`3eIZw6V&(%XoLn>%uMOXDz3jqE&?G9!(M%Y7mvn4_ zGDOAf5{T4N4TNw}D?kLXMxBK(W?Mf})T0Yyy*-6L+jgx%dA%+naXtP0&7oZ^NFY}D zDI#~cw#Th1Wmd{<>%axCZ1uK{rx1Go$P6l?>8f}*=UqANX1#u>sbf}wL73-XH5L)p z!XeZm1n~RjFZgifRULk4A-@U)Vl{$M#HS5EN7{~a0hi8E+tGy@@$Gpmaq)IrHPJzZMP3$SGJtGAh=`I0vH*AlXj5b_ejTo&Hw3=GP=$EzY6tm}?Pfwa^-J;iMv&TUN=` zM4kdyYp; z9j~*k&m_&s3&*?_X=97|vt;9Sy{t-sr`{q7o_Kadh{fx4Q73=v|5P4Rba&!+p*^uU zBI1`~7v76KJykD^r^dz&7E?#nr>E*D53Cu4Nj;!SdG8UH`BvLV&S7r@#R~lcQ5b8q zdu>#fnIZCiT<7lHXtgNLk$dTDs9l^@y)S;A6X_aTz$&@9^p*Mqg3q!?Khq%c+H`w$ z(J|}_se|_SQmU9}Rx6M{8b|s^ODxS5A^vBC_!y}ZeH5#cN1ijyRjPz87*Xgc@C*7h z91@L)t_$f43Y?bdi(zl;cwoB9{+1jWZiwLYNgkRr&Y4UTP^hG6(7VN4?R59(#%qfy zqQL2iwnU%B=FQBPQXZVr#I7GymPzSm-uZsXu~9 zvpB(EPXBDzSc*YImb7p)`MtP7wK0)c0{lsbXeAIMTzxv~e=|RPV&sB6a_cxkk~Q4} ztYO7pPi9+`vMn%*BDpL}WWgu=ZQjYowq;8a8(>e~K8GA7>|^(1=HArQQ$si^=$_1I ztSrOF7x6QL#HeK6wD!!4>%*6CIco<>bhHF1sad$xgZrZq8qA#kc3)>Zf4a)@=jR zw&!ejKsQ=gTtJOo69|ylbRpkIOgt5zyypPD4F=h;bQO%Y<;%b&mN-PF(yIQEF+XEn z`YCP_>26quNOx^{GIgdVa}SdSb~@?+mjQ<3IG{7xItz?E&^YVKY~qAAnp>j+JfTIE zS&gL9&NPaO4XY$}Yl9>NvrEw<^GU0a_>Rxtwckg_+$H51Yf6weXHYxkN!!nQ3a`LN zcngc_&Zpthi*x~1G>%Dml9de>qqfqJ**8fWmd%!ckf!qh zDNr2+?M`iw*CLs$Clsq`)>rwMdE?dns|ifkSGAx?s1ikGN|>7T!NN(h32Y@#bpCoh(X zZQ38>M#KJYpR3KxrW7RH_)XBRv|eV>ur*${CEq3grGGHM4U`7Onor8cfT-9WmEQ*z z`}PT&U{0gdDgxgGuciV*)FEZxetKnynl{7tHE7P&jZbad4aFH0zaHtwPy`2*Suq@0T%KpD+P;QQ*4M2w z5J9g?WUGy-w=TzpvlHGUxnp=Z(dn|Dgm0)(k>q*8hezB_MVV&=@QB!ncD>0e*nP^c z97^<{C`TaeFBqKg6tRsQ#5Jo*Kt!RL*@&UT?!>~|TBVa?=R&`%L#4M7)kQ9ltwQ!r zYfaQD;!1HRs&(r3qSC^PH)MyNZCfKWoqT0sCWs^rI$!A~M z&YriEhsRudBi!&jZRtP_(9F)BX4Ml?ROHkuK9v%yL0n5_QdrKGmuu;rSH+1i{bjuABQ9I?poL*;@M1s}IJA1y5UK!hzXh+qW%_6JP0d zkXAe;q=oCyfMAXfXbX?JkNSi%qbliXUPYVx7Q)NW70nPLfM zaK19&d6P!{e@`(wC!le7kp|MvY(p1Xim)hofdKRti`L>ICj_ZsT#V;IAHWJy&M}#Zl!J^K4Y#tj>5zlClDV zQ7Ae@>xG41BUsXY5kJQzV1Vm z<6QqnCou9gQw!6cxO%!|@w^FD6*j5;i-z_ehOwE$@Cb4_7KT@@yALM8d{0>;woAcQ zG%}ucWb8<`UE$WUJF*tcDBs1Hr+V*#1o2?%;fzdaGZj^UNGLCFfTh8bW$a@|O9@bY zEOj9UL^g;sCRQJx6hU!mKNp59TpHW&`r&5?=lN>fax-O&P!Gb7(L`8KiMvNA5Fk2T%cY=bnN zOv^@!Ww3Yv2Y!T>zM`koqB z{jOS&Y%MjvtF|W1KOEdsxL(zhFKR^}F=Lptto8M=-dFonXF0&?L0@(Mrte*7GA_<3 zEpg$l%#fM37i4Rh7|XquA+u#CKWJy#?xHQRTO67?P)142XfEx;0uF;LpRIslF=Y`C z(7XDe@$A#dV3jbv0-p7C5zAx`37g07g5uVI$PfseqW|jJlt9!LCXF((Jd?mF)vqRy z1kLH!r3R9(g28hd&+m8(f})BX@1iTQA-G5@72T7?;hC(cbAeVB|J>fnMhTHX8Jq#I zCjD?5Dt;LaB%5I5rr&{sQSrA@f@=qU9qF(6PtVw_BdYI0o1>tQ3B zo7GP&Ns>kh0P7ZIg746qokXBO$Ajz>CSvtkBfnhje@Uz(|7-Gs1$<}82jcN3VH$dD3Zn@Bc+#Tmiela`N+N0;Hi8oYHy6%uDP=zfnDajyG^XMYi zv*09OQHe!OM(%2(?giKPyqXk85^bbb0L&ck2R;a;QryOw9MAZcEFe3K=uuan%Cc)w zr(zDIg?T+Ti`B#|D6ec6QiY3}h)gS~pmszRP+tSnEP^;cgH;&cK%!b+^9WA_v>A;# z5~wg8Y{7iD|4bp|Q!A=bj?0$_%}oo>~`9ndaTI=ay|+c#L9)d=G~R{9LkP=@rD; z_^8LZ&>XmaMze?-jJ)o9mhvQPvkJba?QyHHZ07mm&9|JL0wiv1m$|EpnF|7_Ibcz` zgue5LCm%&}H;PN~Yk1t$sy^WBkG>2LA!l$!SRD({S1=I~;B>|N%5;Lj^>s|pbp05}{bRF2mXqryl2IviI!DH!?F^JD zegPIE=qbkcuB^_CQ9WOJg0Dw1s;2C&UUwq!#*S)ip|JwFziG)Eexj4;NGu9&8=V(< zJhcP*o<-D**1~gQZ+H%p@Cp&j>hl>D;KOzVs!bUPf&K9m@w&9`vE2JBB?fy3526$lj;^@g+id5CvDugb>b~U#)_>DKszb{$0It*O-V*; zJnsr*3;YyTXljOIyPfjN*)qKs6dvKS(kc^KvVa?B-u`uO6AyPxQ6uRQzc{T`T>#$# z|GP-UM-CCwW7kvR0e0doIg%f+dt$`6xJ3s?6SN`>i_MK89i&}YTal?x-^l>)WB?u3 zcQSyez;_}8eBQIzFmC7(vGZeU!ZOP)PVUhzI@Kd&OOX?VTX<+08bP;ZbOI)LrgdX5 zR8?c|TSBh3QG`MFjAIL#>+dPCUzF=PPmtBSgJ)gdssMyb06w0%pCU(gF-@+hEh-ov zk)!40S(1p6rXX)Dh_;EB+o)oX9!uVy(YQ*g76l89`R~NW++uEi0JzGONjeK(O5Ry? zEs?(%t&n&E_oP=Is^P+yK^XdWl21Dsa45_r+4U5q>EI|IUy&~0X&I=CC7%rfAfgXD0s!qa+u?-hz6GDW| z4lGeyQwS3hAN^{ZThWDmV z@H4a$SG71^NxG>wo~rVkt(MNtJ#q%=@`6hY2VLss_z6U=BsLqZ81Yg3rIIUKHd<^{Ife z8kQ%7x$Cw+su!73A5|Y;NWcLAu4;QlRmDq}=C52{EQ%_+Hk6ilHO#?W+7(bb2m1%@ z08Xr=6zHN$mY6JbD?+F*8jLcPF2deNd>1v7%bW~v;i6z@v~Z*^_kv$&C7`I3a;NTBl=1|T&gvtRX1 zlKj{^ntUBZWgVIjtTFD3uL8Oi6R?ffHkl*}!@!QA z6^|0inX0K86rwl!QeUJaw-oqdLQvj8D2qC}S~0$Iu#4}&nKTAHMisPZ5&AUvZtMO8t=3@hc20_!J=|#%kavB3X76|~n1N~j?| zjnF29X-qs9xi5A1?pPSzc)ep0H~KXWLqI$wb^BJ@83>5X!IL=f9iuG#CK#-HYsY&O zY~7LJ+Ve;(U;~Lkn*Cy+?W4JT>+5nk~&p9V_SKxTE791o^W)I#tbtDj5`E z6~t!S$P184B)7d@%&--r`sJQWWanlwTZ8h9+ zuDUn-gQq=iVj|?ris8iC@HfLN1O;^^QF>u+lj0l{8loyBNrco1!5XFlI`E!-%66I` z>saA0%u)CY)*n+RlbjV?kVB?R;i~p0pFFTjL4<r~FMN*Fwf#iIp1C(`Nz4l(Kv zu6*IO;b#uy8SOFE#__}K0U0?sj z+QRvV4+oq3(4Swd?IGpSp_3gWynMv#%b zGwiF{caSVuT!~@)M{gY}EBWGJS$2qVc?i{zJLN(;m;J3i1Jpx@v!VO3fN{)&Ostd6 z=i;@+i&qw|U5w=rClR@@;cjD^jIo@b2N^|-{`pZ*|ISTHqUHz1Yo$_SR(MDcHw+)y zwMfJwYbu)4U(MAyb(flM8PA{`4OY>FPzP4#Rf30Q9y!es*=MwpBEYnr{&-`Wo&%A0HLTmPd z@B109N`#fP9}5Km&}yVjj&!AUIW6z>)VS?FB_y_-rX8XulTyyr$|{D-unSc4;pDbe zfv?@2r7$K;O`ONWNR51J9;jC^sE~VZc#U?nPpd`Ui3q+&>V)U+aQ^^;iR@%`QxO>s z_n!?Jiwc}xR@DddzU7!KKvH!c4c`Z2bXTk3oU;4xxaApr!6&MVtBwoQ=<0(}lO zms7#O+QsYST$H50Q*qiAJ(=3@?Sr?s-b+fxNHtR4UjL5Ds0LbK}w)#MvM z0nZ?p`z^tdlWlrw6Rtw_YUWmWOls$6U);Mz4b`;=pWPK!a;N9q!hApl;Q<@9-7~x? z0PNk?q1G#K{wI?wt~`Ukzuez&uKxP3vtE*J!Vczf{= zug?GBwTprT3y^FKgjXO1PU6L>7@qOTZH#La=>t5?En1qui#-&LdgZ%UfG%v&(O|yK z%=#1hH0d-j`LLWZURz{xdg>FfFyLR2J|K&b&}OjD4eTl4(QWVPlm~S9Bp`vLDQFJZfl>3A`XA`n zeG`!@ORNC~`%8!iJN+dC1@K)ysUSri0jT=Sg7>lR31`C)q=wrNBiKMx2mD)F=J=aq z5USDV_t8#SxS-JQ^zA2-i>b~fZb-<}E{#FrNvP9=6JsGSkzs1EAGaRwL#}dumteR< z!l0l@TBq1o32ui{M4lfc@`rNKZ|vy{+zYSKlW8NqTctEv4$Lr>H4ivDX(v9f`4O^O z$j7!#PynsJ^uTN_*OEK#TNMJGpK%y?__S@;O?N7waS#|lW+9_nva_FW*~N)6@7{0! zLKIS=w*37|{mo^Kb7Z8Q1%qc>7g}u=bxwcdyY#v|zl>Pow2R)wQd&;5T8Evd9pNQ` zimKwn;o#aR!_@Iu<+k4wIE0UDV)*~NCTv<3!rO+r+zx6Qq2(^HJEohc2}Mq?T{SWY2I9l)Iw$Cjxu>pgiZ3+hvT zS0zNev8$0X8A7FX>Lc1C070Ic-ND8&ZfjInQ+O*(r=U5pw{+HAr_GwS5{v>F3!(@c z>*i?gWgjYxGOWN$$LgmP)o zeYuSDeOo#Z?PArM^xqAl9#TvdJIZ!bUs<_7!cf(lYbr(>wy>GJ}Q*5>h=5ITHE z!h_WyH>DvVK5f&t9xhqVP);$0%N|oz@WNCzhwt6bzG}XJ-iAx^}K41zaUjajcc+FBwyE#Jm^Aa*_px zo9j!Z5b3Qj%muVphAc}g>*ayD5DQS6*XY2fS8jFjjf3BCt|GbuYbJ;u*%$ObND1Cs z%r)Fz5fR{g>-qk%52(4xW{aT@^XP$DhBZ!X`pT)wS~fj(@^G}8v} zZC4B%D}JNj%<;iY`pP_s0k~tks&B7%f_qd%7PGrk9fHv}_n+Z8^>sy|K&kYegW$dBWDEw-7`HV@>a|%}wA!?Z;}-j6Akv@Mg|*0mYEwEq z#oQGH!xT+bkNtVN){@^xw$bYk{O&Rio@@BE&uzBjJ8*-afi$j%xGasG*k~mL;p&7s zv^GK(cH(QqoNxYN`>($Lp8mc3rv3GA;AM4DZR6;h$A8v&@4Zhy{Pc%^@0+iu4Owxb zZR~{SAAkCo=f6>uYY8uQKmEJB_-A+_HW?oN8=w9o9{yDxQkF41`}aQm_d`Q<9v=P& zpZ@1OoX$py@ch60^uOo%Z}YqwtQTJY51;V{~)wIy&4}P%xAF564 z$Tk%P*Q<$#M*r~-mj7Qh`fW?(vL+$nIW+kHez1J`0~-7dYtWGC71~|>V0ox^zva=$ zcGwho7+xQLu>AM+`jx?)|37>0_FLDL=lQwHRgI9-)#*-8x)IDYa7LQIM;9LP9Ntw; z_qZ&}R$H`eQ&rs=$s!NQL-CYJ9@aUeL|SH$JWYT!5=`I$@;?LvOo9Nx0P~n&kUHiG|?b0PEX{>Qgh{%^JWNk$p`%m4T7mE|At@(*$qoPYZd zezfw}di$4N3`vestuDQFM!Vs&mXw;l=i?u({Cn#8gEPKJPwUw|fAhqm}Tr|2I0Gx$`!mszwWviy_NIh>?AaK!WADyEH`XR#hlr9qnsJ@iqnGT%GFq{h zb?C%ioPkE{eHDG!;|rh-Yd02MxWUJx3432g5B9Kv7VPQ8@0T?{=U!Qxi{2+|eBM2> zMs@c`FOL4^56jg!zd3~d#fM6Y*WJe%_M7Hk-~an>y>%5A;aB=^@+zF>VDrm^lU)SO zI9y`|UslQ&Ty6OBy|3y&^!VNpf%?PSjr%y7oHSPVPqunP9^XgVituu~@!_ZUpUv># zm9BGnd2&)LDo#i~AqF*3TdiCC-_u=^c<+t~Xy2Tie1Ip(vp&x9lVQb^lMmtlzup^c zk#xoH#@Ce25PZzqY9%o@<>@A+b*QH%L)NJKOfGR~pYi^awjgP(M>A zHffNSBXX$lyVdI*m}9bU1hhyP!xXJ$SR3q(j*$ZU5KH!Z_;L?%nsD>Ger8*9_Y4h9 zmz(VzF@5d^ScX{682~)M1J^`ubTw8Am9R2ahlD;HS#}?<J z_{2J5x1%p`7^m?ZJ7dU%VcxXl$JthrF&UPlE5BRf*Iv;t7dAQOn5u|m09MoSr_S%s zmjEr^$Mer0^e7ta40tlxjWd{p=@}TDtnW1fR$|Xi{U%Hd6|G3j6{pNMM2f zD+uh)wJhG5tx$x?)`vdJea{34cjM3^Db^k8md=>ztSj5ZtSU)oZ2VBxK8|hLZTCHU ziFb4N8GB(Hj)uj%WebwJt;YWdj846uYjRPXfNVo7hTlLBM2|)y{FDww9fk*&I~8>5 zjzD%U{8_p5vC!fyK%H(iCyTK1nQZupb`iv->=Tygv(dDGkj9lXS@so|=~Z7lUOXgG zOuwgl|I&AXPb`tN0P`F(vbv4usL)DVy&Qo&10;A`sGiu^ZPO|For~W`y-*qt7!I>j zOov~>#8NOx;S!%MH^2stJ4w*1PU4!*Z78fMeP$ffmG*H}$_AsB+O=G@pJwRSG}kU? zw0SaF8^)D_#_j{|Tpl&03Ev*Vu9#3Qsw$+Y|8DgOpgbJ#3VIAF`6a*5W&stPYTVRs z5fSuohxPG)d*Dafx)lJOGYQ3R`J5{w{+E95<}5GLB4eQ6Tk|;U*gl& z(EBYn!cv)!j!tvj@9qYk`hafD$k*DM%yHSu!-u~d^!J_9$nFfUcoJTIifJ5 z99UO%V;Gxc>Z~+$;9%u$KzQb7#d!*s%vo+e_EG6g+Y;D;?f$0dWBAVSQ0*psh&DR3 z(pC1P-2>M&eFAp2u1BGjo6Z-Hu4ospkZ>)&kP7~iedrVVsDQyy7o+r|%fepL)*C-l zf{q(?xpBq6zM?~es3I=GKhm8Gvt)vf*EUxB6W3)+SJc#PkM0CR7ETUUVEv9Fh+hT5gEa+61d@MyA4+Xd-64*fJxp_HJUo zRq$La?U7)~fZloBnZI^-9YIDCz_zq?w6|xxw;~=vmc89ASK!J5j5cu>FHjzMQCRO# zLWxq2!ORjnLjR@&IP4!<0VU;BffFH}!>(e;{L=A@cj;V$bxwOKG;8CM4P&505u3Y5 zCIMu#vamBVK#W^A8zaggKp?H)Grx6GvpUP8FKpLZv;NoO=*3;qY7{UI1DFEF93R zifI?*vKi=1sGHCXwn~O*4F)Z`7KP5u**|JAd zQ)KF4)409bUHOsvZR13xHetQVKXs$TbIiBo(v-yDPKb=XAOdIZ-M3f}uE0pyNew*L z@HKVCxS8wc7T1{%U|XU+aY3K?Mre0~N2*6ZLS3!K{hkg!Yqy*zRw~P(sCy;eRz!|- zB_~t@qWRXRFY=~9V>nGB@JWocRjlYLOq{ZK^2>xHXMW_{5D01fmBcA)(jtCHK{pm( zvuD>@{Er`ms9$zY3nk9zh={{|5CT$*I3Hg|M=nZ&y|Fueq9p_R3Iz*j@Q&6SP_FkV zGK3YLJxUuZZ0H3OXnslhqi05SF$!CXjQaM$0(m+Kesv;W9L;;?0S$K537iqBd*L-a zUlR%APzBKz+tB8)Z|>;J?_i=1yo?ueHI(h4PhE=}uEgE`wk4?a57FE}F!a#zRm&Fk z3k3K2hhya9Rh9XD$i8P=az`YjC35?VxMfTZ+Ru*RvVz+osL zB+ktl!i5;Cl$3)b1~Gi#SUnC)DqlC6MlVwN3I6*+;uGDA?B>E#`f*iqa)mO+>kLGp zIUt@`g*to13gElQmg$P{1O?Y^bcnat#RNLl&APCDSTj`v<1wm{`q66*aJ>NAs~M$c zO-uMaR~!UBr(Rulnp{Ca(Du(sP)s-R69nZW69v zkt1?h(E-}iZHm>VY zWYi^ium*WFTWO5PHxunO_N~jhSB9w>sbn4#pQ&m}{th;;v;JFG183@Ei~p zBb=@jrq4IUeJvv`=hpH)R9`Ut^3ED9(7gPfaMx(8y20Ee&D?Wz`Wo zWkwN8o9}rLWUt>Pb%ZW&P)V?%`sp#Y?WW_)3??fI0k_(LNRAjapmv35?rI9!bCqaw zc8-E&6OZN;JyMkDm*fEqM~>SK>VYaN;`IawCY}o{2D0#yL(_CwhvbB@!iHvH;dBOu z&}%fVXpk#8dyfxBuZI5tD{=-N!0eUv1t5PVBLCHqC4Oyy zjTyOmm-NgIvN(T`w+5@Mvqe5Zt;?j+%8G+B#kTK#V{{V>NziwAel-})Y)lQrfU!s0 zAcwV_HcWBE?nB3pGr21X%LM+4?~}*EXint>`^gaY+tf!%d;OjS!Ra1Ks8{JMep0!}ZLN~K#!Y}YiLq*OC?RmD^`@lpb+nj01x9if;oOM&70 zQMu3P5Q@cmuti3bL3yS1sGTw(rMyl*gEL`aU-tRFKRczbM-|4sXA zuwa7vyRgJ~T|`+H9GR(B`3Ue&+dM*%1uevpIOyA-!ZaLhv``P;G9MA=A`%Vlw~WUf z-CCThHx8n@;J!R$CYTcjyX11W>47?POMCQQFW;9w0B8fbs_W#q@?irPj z`Nlme`miMKQ8|px@R7o#X>sL34EiYAJ5^TZF66dbj;@P|mI#8=<;}i|X_)p&;^A^r zsnMkD3;123eN;eo{U?tfZ*+$*_D}tnpmi`{U#Vld7*14v(dQ>o-`wI49yR}Z>iF7| z8(*v^FOy!9Hd9L3HR*C6_+E~m+@OIaPa{Lr@y%&V3MIWmY%oQGuPyOfZ1FW2<%G{% zV#X<}k~3Mqp8Y2;nw@K5IrJ-NrQey=WgJu{{Vc+Ivd+$cO>Ae2+a7i|U$jqObWT4Y z`&DoI@R9pZ^AVu?;t83us7wx-p_vi@ZN(@R+WwN(*HaUBHn%rLm^u6At9%0I_=G`Jns=)g2JWIeLCDh5&Gi( zDUDnL+UzK&Ev$*5k;#cL41BwWaY#bf@eJG{BsJEx>nrqEAsf+q!y*wN@klT2M_8`{6zsm1y^!N1{lrLB)wjrT)Rcpgd(wQr z)uEbzK%_rsl(WmqVrpWyEoDsFExTbT;b5n)Kc^aBHQW5}xoqXRr^uhU|}T^sL-Q(_&$^-)8n;k|3zDpX}NoQ~`e zwp%kWQWH(`2F}jSbrzQ9JJWcBv}cw`AIQt>;jC8ZbcjlXrc>5BAPbm-1@V#w4tq>I z3Xkd9?WkMweLnZ5srxq@_GZilaX9|s_r#-De_LV(F^Bn6NS_uh9qkQJ33n!=E;{Ef zEAp@726d8)aDgjStV|cF^NMa#+AG_4{rU&-_SD~}h2lOfo^zjK-;vO^A)+ab{pv~Q zMmtc$W*frjubM93oSeUO} z)ARF7GxKu`?KX}JyzG!+mNd{a)AKXr6H0EVlB(h-scYH%>iTuR#+pkiSkfxF&bqhm z0L3nf9;O=iJIO^Rqo`}^ud<^(?&==nMo*YJt`J*eh@COHhJYhcC|Fp}9=jfMmRFxB zTjf}u7&hEkZ{O`FO|ZZbiGT4k+3P+b<#?Wm>MSZaE*)Tr3QlOL$(3EvPpNesF;1h` zQrfk5w9b7Useoo6wX2?8fO`)i6X*A13!|&RPNW{j>9odR659wSvj6gU!^s^NBfB%C zQSxMWrc;9^ynvFTZjl+ke=Kq$aP>}-sloJl`%G~8imTB)2Ak|1UAyJ`Eb&E!f%~C zI`JF=Si{a@j#g64cmeF9gZp9dQ6iNe`c3((Lq6D-Q;K|{iuYb3)hpOT+ z;$)`?%RevB))Udqh`934Dw0C|*DsI8Vt?l%v$W+Hl$OHVBeDvD%QyBr#BXkLjsvNp zxemx}e!8>RX?NzPVW%YLOoQl5=4mf1F3c`1EuM$xBGXfY>C)i~geL|JoYzT_UU+sU z;;TcX&PvIf;o7==Z`zE5xQ?spUk}glpw3Z;^`p@FchA#*LP1i5?O6@HB{`KphP)>+i_KlzQ zHoGb(1i!h1iPtz%!5pn0Ij{+8JKRxn^-YWT@%~iF>g@ytcP>>1AVLv)6uJ448g~uk z7_j?8G}3N`rV4iXah*KwQk!eYq+3j)cw7<8L3sdK4ksrxN8)9D>MMC~xzHuK>PzR| zb9|I)AI#0kLVdKq+yBy+&BM*JtHZ9NT-v_Ce)P6DD1~DcEmb%rdSqgvJ$h=1-(0;v zTpP@*2h%A=bbRmKVl>8{w8Qu#t7q?-W%_t-Z5KCU<_E%w|K^rva**J<5JDVnt_C)3 zj~(BXgLLOW>rHZGJ*7tL5X&pki3B5T?wC}hPeW29O%aG1m~?w%X@dMN+OV9^=0maqF)|y!vrV1&ByB+4b=o8C<_YJknXKpJkt#}7sqgCjI>rr z-5vR6yQJ7tv(k(XlylFH^Q-LJy6%ndIv`5+|M0n7(%q>S#4oc1q4ct}TjO`S>QZV2 z??R2@5r}sD4AhgsD++iMhjnKnbsscDyw4xCr&|VvD>HenzlAF5Yn7 zx<+3GL^L@e+-c{GKP}G>zlk22AZ7>m*RROStz#sIB=p=6S~PaJrO8gp{M?3P{?cB^yhO&GS5 z#S8Q!!16e1NM!LiPAncY*L$ZnEfgu1w-5tFSrKdMA+D4@_~6lBlZv__Ef4a&w92nj z?-9?cmkD5wtPWDpd~_CP=4Y1{D5ba9MvdA*G17sI&dx5iJJZuks9G0i)K;bs?)LjJ zk-V0{LHmGJX|+UVA2j!lSeStp_Wo8!B#)b{r2STJMe2_ag0@vwlKcZ{RMZnw1~#Tx zvHR=tVgi3Y&8;j1-o^I%`l$Fwc**JWJk$m9!hz0Bg+7yJN%5DG0*1BWS4qOVV81l{ zQbsIEtCvPC^x=@oYey!Z%jyjBNN1hmgL>2EcYOEHO>$txVW3Xb{&07xVxjqm{R6`L z8%<90G(K4et;X!!LeRgSg)AOFHunc`hAB%M$ET-;Jw$UZcg17An1Y!gVGQhGtMO5* z;U;*qaoytTy>*t2xrf6erM!?(SGxP%rzYcFzv)V7+*;ZEaM*o5^^xLU+|mL7UMDh1 z&WcATV&b{ySWywEWSf~mn=rGuv^2eFmD|eC<`Pt5>C;Vy07JO)Eru=FO)(nPgv7@# z_bnofHTO9LYEcq}s!+`C9kExs>JdXtfugRf*onQY!4Q!_IRgcxT8>&w;Ms*ljrS5N z*aX2BwSTJAC!X$VG>G2gSVpE>wCDF|HQ)Bwt(b3ZRI@Wrm^rSNuEqQH;IlVcY z7A(z8>_8&p_-{cSA3rwc_7~mZDbIr88M0a&W8v7}N@SMaXcUM6r*){bIltJMU*!Ln zW|!uy?B?`Ldts){|4+~1H?p+U2B#JL(Q83!cH`NYg5`?%ZQ>W8x9|(D>r8~F_Yvoz z_7Fp5WsyF(CVlLU#xKO@?$d{t(n?6s9N40Hn^@_MG7n@eF2Vf}J}lgPd)=SD59K0v z+U(xkC^JAV$iymF7P_eLb=TRrMkp5KBOX#O`Mx*MeD+&C)#H}tx4?F;PuzG|aYoXq z?&sW{?6w_0dC{F}pE^#!Jvn``acca4O_&0m8&A5Y_=qAfE7d_E^2;P6n30XZp-6`dK_S z+EUEUw`XwYkjmw?3LvkEtaTlAlK5hO7P3naOd@G>vPm~5apA3ww%!yZ@7qc_z6iyc za!#m4Z06UC5izVxp=3&s4}Sg#K}RuDIcxrE<$;UUK24>8pI@L_GQ4NiK>B^v4zI6w zvCQKd@h`YLdNUk188%KoOaz`fErAC`HIUppDElHy9FYCG}osEbsMgc@kB9Y1;e zn1sTICrDRvEx&u(Jh`@YQb(@UT;^SCe){AX?Tu?%xsHXEvEp$TxVguVv8pxO(`fKg z7<&h^P5f=;+KDoQOeu%v#+z*s97_7x>j;A_BF{s>EG}4w=$t1MB(rpZiaZE#hK2` z{CvAJZ>FF2^jxPi(_WlgT5K;Y%*?ih4j&BVap_9kbQ@QI@mIb5D@BQ#)Q(%T!IfC$ zVw3XB1lCVwY4)_~^oi|T9KM%WV|#jLcDl1LYmPzfxbkVOoM1K9Xs)lMTPNg+l27=M zKUH1Y(XRY^l?oUKWmUvc#TdJM zezjp|uPTYPDi)c?HZBDk#{B=C$6tz;fhnDnjn0{lS_cQ)@YU13DFZhHR$js4#s<0D zRE9kW3^DhF&@r2da=*FT-P_peHcoDH6ONlF;+LVtXq9(2mig;wW0`dn-13=UOY19F zYxni;hJ7y2Ga&GQoE`YF?uH!gKQ$mIacM}$J?i!LEMFA>+8bb&=x%NvS-uKOvAWki zacRA_$t>9$lJ@qhtp_KZtz;EaONU8H%YDLRSce&`nxv}SzH;r_qvst-d0%0qn(L8Gtux?d zSuEN`)P1`y>b^$bD#c^YDKt+^wr}Wg8mo|*gU{$<8m0kx|3p3%@#B(DXTdvEk5;e( zm;8*u1m8((L#m?+34kd)YV7y$M|Bc`& zF1pycMG`bDOnc86(yPqQ&(AKj=jY~UW)>IBbLI_iQNuu7g10ap$ehZhhYnssS0_HW z*^qKQ&`!Ia&Aowz3NF91_l#7<=dmV58jaA)*&GU*_X?8|`B%P+{if;p#Oe zFci?n`)OEW5r8iRg>gu)AjQZ9U7&C_Qx0R6VzNwc2&68+P9fBqutZX@*)y_}Oqt%z zvWR5nXZ)*WFl3~RgUanB#kb}zg9%R^`420q7dm>S$-uHh+g?;A5J}DC0h?N z^>^kLXBRri{4?ce6;p}wTzCLCj-8!EV5h8-e+o3tGnEv3RO?jag;y&kC2u0XfEJZ? zT+8+c0|~MQU^v(i0wR7xJX-PH1?S&52FMiC6)mDOV6CR>B7U zZWkQ&%eW4Gnxd4zK^v6vNWSsxcAg>W`-y3ixIRmiRBLg)w5S%X5wBQaqu(O6$gdei z#WiwSoK3df;g8gLGo(N=PnzT4R})d0JUjP}LL*_c;A}Gvv%U0~cj???!20pNGlZC4 z-wZD<&Mu-MoSE({q4rdEq&BXWb8zuX^Dy^|olYAqVGI#83-WISS}ge6rt^b0tmoWK z*pvcIx?E3sARaZ~MslzRl}Evr7A=x~5-eK07uFS_^s4Xul))2o^|S}GPKu<>$X*?k zRaLRcOLJErGKk}@NDxwHt&}#@xvXEoV6{P&D!3wMMD~*_QAemp=uV5Nr0fzd_vU$T zO;jqbKPq1!T`uk^SMT83lNZN0+8@vasSpOnJIrS#0{wXDD6VoDTKJLW#)Du$F!vLUB6^8q`z$(V##BERW9hH`X_H}3l7P-JHs%Z9Zo6q zOWd^i(y-a5FAh?d`LOxrYQt_d3 zdM799_tJO@>&Wvh2kS1g1m+I?p@Z-HR2iChI#7`l2ciTyFjs1XNuqp&TqbaMMGN_~ z8j4oAvAd>J+f7I<1TUO0v>x??#u8^#Xj3^C^RcF+3|E@gyUpp;|`{0nC>BwAw zDF&6<#W@)C@Xy%u(lfMY-zgnRqTpQ+mT;H3IT?q2pg>dp$5WC6T$-TqB9_6@VFy~L znePH2$n6&eL{j<;dtIRhuY|Xb!#R@j>bUC<-%uLMx{_G{5g1=NrTHBZ2{LSdvoVe) z%}$>mQ+ozwLOw`1lX1kUj`{bl_}up*#y0#ge*XgDwr{ALS^IwrsauN66Cy`0o2A*A z>DfTzkO>xBi_>%SOGFyGfAZ_~?ho((Iz%nSqy<`M(Z}+IKq_*y4xvXB(A@V@5-4FP zqk?>4bTGFMp&#S($aqKDU1|#j;sbpnyF>z3pO7xan;9j8Z-ZJ zv}J#k1*_0oBlOm2e)6+xmyohP`B|=}t_@!v1=q1*rUg6jRbnJBnY4o#l!`l(6FiUy z&OV+;Wt8N_sTapLhEr{{7@OpPgj3|l>A{ns!)3>O)KuB7P^b$hq*2QWPlMspTl~Cb zzithC=Ge2@yA}L#w%i-%o7CDj__THo_jc{3-cyxb$;Wu|$Q(sJ$u0ef>qsoq=+gvh zX}JHyhL)hx80w>aCteVzXVryzc&K^arVOZ%5YrFY^v$HaS$BGDH-m{r@yZeu@zz|n z%HSJDm60WTk-LA)7R8ZO$CXSAI#{k4hRHUS_C*i+^gU{%?;)BvI4QFll{q@=>pulx zWaHWFxf0N9v1LHnlHVLs!g+QMXMQ-NQpv;+69=ub9Du9UVDV3WmK`=+x_s(Jc`p`f z058$75CoL|F4;4O`;AUNaYH=TxMfDe(gC4^fC*Snpx#lQ6<> zt=c2Nti-*v(Q)v9As@|bYj&2rGqdFBBPNu@eM;6>dIWc94q9jQs8hb&nIW0L*0Q+C ziRO}OsVJGv;&dBcbH;Mulpf87++F51@)|kMA_C3w@NQB#~=!GQv6H?hKw zjJ;EU+Cli?ZP{9Jc%=8-X5V^@ZT5q{6nG5^7;O|*N9t|kL#fG}ZQQ@`rg8Ve z>FPYT1(h1M4RVTQ(kSq)%_cLH2V2mY>bvSaOhrG`cu_p@5{V#lws7)F^n4aL;Bs1i zYfT?u^wL*JUP=-FB_$w7CdP?Cx-xGhpxf)%BMiSpp{o#c-bg_CxduPHk$_?j=`#fo zFJFc$>%p(3l5j?J1QZ`?eGE`dnsB%`WT-o=h3h^ywS!_M}!)+ z{Zykf^iq&yrsL+Zy>)epgG2?>Bj-c&3`#!dX&QuO?~*N1$&Za{Zdj1#e`w zSL#O^c%DLLOF6re=r%LmTEus1dUk1cu1!>gf-Onz)5dpdX^!}a#o6}stfjG2gzEWS z8<&{LaPte~!EaA5PBYHzTxW&>7;|ZHsZA>P&fF~Z?AjJw@*Nlt3K`*z23kVJ~|9c_GTngh)iS7AtcrkSv_L zKxf_t&g(giQw@XV#wzIwSES?c3XVq4sYBpNo++l@=7-_N&&=X58chPc*Vp|cdfI+5Phtt5J+`Dx@Em?8i0SegC_1<8`^-o>YE zb8B!|B2!ofU;xS4^i`Dn2Yqy1(eJF^8)cS^umZ2nmhDrJu6IuS{+S8< zw9l~)_(c|GL>;g~Y*}B|vd>W42bKItI{BIT82mz3J#>SmFqW8S1QXuci<9N!)0k_- zB8U|M%&El!Sb6W%?Pug7@t>sGNN^W9xt8}?yf#qeGx#O5RQx;VNp9f#FX+^6|QI=D721pkhurG;5^^XBd-*UksuQGO9k z*H5-shONPyA1<_v#W?ft!bzpzGd+d!*uYUF2#0WSVKNYQ-R<|byve{f4(fM*_4Ucw z#sO1X2htciaf6xO8goQ=nxJ0k!LKSS6Yq?G`cx-{=Wj44FullBxJ(!O2QAP;^O5hi zB_*~cD}ksULMg9Z`$GBi%=6T-BQPwmHle+wg{BUZ;$x`**BtE*o|CWxRlV}LxT(o) zm4I|>bi&`Njda!6i8aRKK{bzuwQx1!#CBM_cYW%Uj_Z{R+ z&+Olt6+D)kpO^xxVd* z&>)8U6hl-vbyXzZ@TjkgM@`tZIzIK%N?mZ{D~@w?J;FtIsqP!gb=3K-9K#y@I(XQ{ zYg3ohq9)v`OPpuStp0~sg`EGa^1P->J+aD%F&%Ebg3}K(twejq+Dau`;c!ouiw1Xv zvr9a9@LQ=L!@F|Ze}p*YdmW-XE!NX`H}lAbK3=Hikx~$)Rn>}gK2_n`V+P-^xTiOq zwNm!Q1b=WcZ#Zk^Bz(hJ*Hrj>{hYONlf?}dA}}8x<;^)(LDP%n&4F_*I?2$0a{3if z!I70iLDhU@Z2SfpVoCBR&yVi@(_X>B$Aok>?7ide(|Bb=ZmEhf^^+GP3Eq5d%x*D} zxImLn3ZB>fWn%KVoNK}X=g|PA&Lbo2)V43n7GoHR$$%%nIsK;jH-DStNR>*|-~94_ zYrXZ>$MYX={G)IF=I@kSB&HtUu=nwQLc_n6l%e)7{>jJxiWmQee^LGLzhC*`4`}dj zm50!=LRj29bp5RS_y;Q;HT;9TrmufH_k)#Pz5T<)vB#7R{{7$wEB{pQ|1^DHnas*R z`@zcprDl_^E`{dcJNSQou=4H?dGkk=iWR=Wdp}(HkJRAzLoW8@0VKH2K$)gpElLKYn}VpRn0|Mz(Lx8uud2k-pe%HPoD=!~=e-@N_STj!i| zYm%RDdsKU}?af(7+8R`jvOTRi!uEXp(Y4pvk+mmvN7Y`Gj;KAWKbrQcdL-@f*rVvi z2*=EAmK!5H%l61#RgRoJ9e331<=7);Z_hhg)~I}>?BSTBq<2Su^QYvl-u&|5WS2VK z;HMBDJo@I4ixJ-q2x8gme`TTV-!%XFSCenOb+xhlYX6bYEQ|*!NJng}47QGTdo-ZV z@~iwukMA9!F&o})-0u#_^S-)&vPGc()y93CdiO`Y+l>!Dz5i^62d{Rm%afBb+mi~b zzrVSAwAH(PyU}Xh;{TrRl6GKs)Z+Q%~n;Q0ZDGx4N;+7>Ez+IY*XmW|3bl<_{OuqN&y+(}8j04)hWE#_SCnwXK z;x6_6)4}dmZ(m9%rI6si-Qng=Q>HQO4b+Jn>@K%^Q{^tO`v<+Pez&ElHvPJl_uz+zWpn99_6~Nf&bCX* zFzi|Chj7FjJ*fok)d=7D?lT2MwQqG?j9xE&O;k7D<9%`>TXPru;cN>sd~T4`VM|{t z>}5!=GRu8v0e#&@9BzGm8x6v9Os{-0qB+~OJ0K{ovDe@4?;Y)FQ>4NQy)+(KNsF5p zRw;7x1-Vy>AwfLkkx*xRw7w3Q>DvcvSaSfI? zP0uxaXWQ=G;^N}c{PfHMxk{HP?@Rv88P+h)f-D1X*eCkA8zL4-+2O%~rIli{MO9W; zm!*e&9-zk!OWHRE9C$ve7Gk=^>a~+5SC}=?&R&?)L}_ zG%=*v5!&eKT*70G`XDy$6xwlC_`JWxF)aM_QNPP@x~n85{xmUne`T4<#$d3U&1AKQ zPIb_DICP2O52%HpK!MSS%Jy7|!$z-*Ej-?sdOP*;8a%R`cug>1S`QqVafylSzA%gJ z+E&cfH2N;=l$)g?f-6)AH1$U+A{drPaO0s2>ys1x{bvU|ea>Ce3KUp~#GHIN@HM%G zhe_iq77~IKcKV^MMM2NdBK@G;_=%#LRoau>^y<5Bbv`%9k*@6T_MBt9!#h<@qI?8a zgB?|6V$)^q@Fq*wlCDz8GzKarahr#|154=+y!$<}_|uI)BQ6?(jd2Uy?DcouUkDsc z9kE-D9nIcWqh}5xSf3bnlL>ZFskvwJx1oxJ;z^2!?%9c2ZZ|hs)QR42H@EaXtMbQ3 zi?Z|4ydsqF;&ywkwYYt1I3fN}C-H~6i9ghJ{(CF^eWiu%h!q&TZZE)j@@wb+{b_C z*)6DY|CHQgTAFc&=k)jI;X63q{$NcXziXk)XEE`{!g~%L0&;L7x4r#?8m2ygbj?7z z7C_qE?jQHIC_^>E6>f){$W;9==NP!AS|SRHWFz8Nse9up`{tG(hA8b?Bil7~g`*+K zY}eQGPMs|-IDlNk%3Oh`Q^SX!oO&BH!)3o`pi5{<`-LpO3ZcUh?-cMUF{_+n5Eg?$U3KW>Ahob zJtv#LLrP&(v}tl*9dmouq}svkxA~=gJ352(8q+#BI=mnyM%5*auRai_kk;;U6xuXc z#mtOilS@l}>o8h@WY-{AJD#LoDGv`Vm-~Bx;eVrvd0d_yse&G@`ek2?FF5$E;|nGt zV8XGhWl$oRVkL)E9neW`Fn$FGJX8h>G5 zhF9t=T$`F|&a@!$f%y=^H@Rx!Y*wkcbK~F|{L+DAm{?xH0PXPn#zB>ls_KT&02+(F^#AlcsXM)0w7T3JHT2#F@>vmOAa3`59OdFd81X#Ud=DgqxBk6ILPEp@)!>|)! zm2%=psd07cS{%IpM>edi<@HiaHI3iKgS(vb;^j_ihBJPmMqoI5bR>_wLAB??MeqGC zhJBgcjd@9AjM4&2$IC}9R~Bi3YDyPIGL?ze zOE(<%tt00ma9M3)^65*c7mKeG_0k8Q7MkI+1Qu{X!DanMOC>3pDrAy7msT+r;B>Nh z(buPOhZ8`br@OR5SY<_k@AKR0Epr9@8?B}DbZNkWQv}{fm;S7)33xU$4igP$Oc2J- z;MzF~%%U9#urZoxEkfL?r;YZ+F|8@W#-YAwV|cfY z)lR<%3obl-N*x3ivQXG^of(<`(&~_fvODLMK#F3lq=vGY29~w`~A_53PP{3Wm3kjjr!PIhif~%qhWt^ z*xzi9b`X%Z)(XZCi*)i2^YvE$S$_*xu%ykX)F=g3`CW2!M)I@)p%q47o2oL<7gN>g z(o`GGzx@1DpTxhhYSVs)93JhZ1#)=A`3tL$bKanBh~Ys_U%Kl|(j= zA5$>z#r`R{dp|_M;$?y#W^e``HBK8GHW|;>_KW?Z`w3Ftgzwcs+dWhIh}?9|=kR{% z*QXkbEg11%37Nbtx{8Aok4|5FeB;Zc$*FbFJ3f3tmM=L`_qMK?Cih`w@J{pN8$J)u z{&M^D$tPh*n-#DNF=9Qe~qvrF*R zow;^rz5{PwY4t_TvzxXmW$fYY;><#8ac*`NcZJS8y6{ksu%xNHxN|~v$Lf{FSE>yI zPnQY+o{yD6l3>*C?ru~684kNAIP=y~@@vXZGF_{htp6Y;$4`e19ujrqX2*!(#*CIV zyYwL02^c#@+Um?9U`NKn>+ccb!0T+jrWmey>f5H{)`FUiGJay@W@Q ziI?BL;%lvxs%TvDF};cGD=0tPv`2Zf$~wxgZ<(UC$}vM7#=xu8LwU}|5TIHo(xSJ& z>4Ff-{0Ex>GL^}@4xFOxxh`LVGRU;4QA8jQaM7KxBv zL9wt6V_}^?sNH0^-(}SM*9{tMBXMj^K{opPAQ#AIUj&bMm5ek3r<4r=l z-x<@WY`^y(ZGZgF`RMP)k30@lv}I5{`j-D<O^6`uK z-wB|&#PqHCITN=wmz=S_IVweK5WZ1_GH(-5Nyc3Qd;4Dv_KD>9uU@?NNRE8WH$feB zK^-}aE)d`0KA7?w=?v6FFrvwt92024?T|W&8*DrVgjD~<+c8nn@Y0G!HnvXoyNVp) zqo=qRLs6eLns+``w&CCPpb(3_b|pk%v!$8B(ufdMA!1XgUsvPw=qL=HBW(JSa!EdBd8>)!eo;vIB(nh0IqEv zG+|_niS7;igDq2LrW8Vo&uHNmSGg^|psC;s8L}0s76yHa#fb{}HQ7Vd2 z{4-zBR^5ju13K%u{Em7``cYITc=O^dI2bOIXjYAd0aZ0OUX!(5v{k#yczW4Xhr~Fq z5d^9S9qWBZalKypt1!rZ>O1@Q1Zg zQU0=4?kXH`48P&B0&QiV(CxHh?q#1)@!VCH z!eG>xZDAKR0}uuJ_zR`43k>_(I6RGdG#WvF)dtRO!2RHtbkm>r4v&UpU+~dAqbJwb z4)JcrpT|F0bx)9dv=Y$L0hmduWfhPe_8gmO!TqE4b$B1X4C=+B1NO`9BJWhUXCyeF z+T1;{pdA9Hqx(AgN926=j$xD_An*Fop%j$MwOzY+l0YP-5)AG_tKU=AO~);%h$eGa ztTqn*26@fXJFD6`;p(*-50h4h0BILv%DG#o5@xt?`OTB|Jk|vx2uy?dlZftV%o%5G z&Tom26}ji9%_#xwif(5r=KH6W(WyVmKtw~i)!E_J&ij2kUiV2u?FhI`@BS4k&>adB ztSNCXTgIT#Q-n}tOEGEylUyQ{B+v?gn}nwADN~1P)FumK9(JzS_jv8x9tfZT`8c?T zqy>Ug*9sADDJ-8_h7oF|=%Fy%7Y}c=Pnj{NU}x=N1&e$9FoG?<)tr{n^H3GoGfsxeV|_V`9yJAQrQp2L}3AIZAfyrk>={G+2# zq+fbvVMs*aA!ev6$RDq)D*4!25u76kXawf0Z8ODGikaZt$0>i!GZ`~mhv4koOiYu? z!_VBTjjr~!fc7xmQIw7DgzSk*z)LF{dIYZODyB{@r+Q$tNZ&qiw8@moyay+X9<--G zV?DnAso}An3n&yYGYa!)P6Wo#X}rxMhI8C-9UEXg znYS&$vwVxLsrMAP8$S~etmft}iLGT4{wHu8&glb?P**+?QkP- z(n=w&*WxiCwgCd#9pAawj?k|yXt)0*3;^qyoY;kZ)51na8-Y5rIBc5`$D-lVI{ozfevCt@+73h5(ZR^0wYx?>rYh-z+{v{jlm*d?Md3%M;Qt@Q=a zVAM5fpldUBOkU*Uj2)UfI+$Wnw%yWN-xIwYH&vUSsC+S0z&hz_p7(YwNmC)^S;DBe zEKWF9V-ahFO=BuqKj^vJf4XzXab>^2%z1jLjoxM#aFFz-U;u<~JZbz02H}K~98G{p z;Ge}Ivk%Q#3W-sALU+J&=J@70+jz1rHr$SZ_&I|*sh@ntpTKX3L9Sy;DxDvT@o_n_ zy3Ypvt&xf<7<(;dDRk$EqX@ZpB5cXr!gu)Jo;0})&Y>Uc7_Mi6B0j2qBRrwv07s4| z=31UK#PpGW=vnW~Dn1D^#-h)Cq|;9dn}rL?D!K)?0MR}nHM;v~ ztP_R9K1FX9mY;DhHQlX_kLWA+XW@L2C90dI_QT7S!EE7JJi1aIrM+ZwFj*K0Vt2Lk zO#2HB#&syJjSe#*wPwAadLedPH=F9D5J75sxErN9b9u1qU98LeZ#<_XhOXQ}<`8_x zxvE$@fha)yo}+$3qy;A!*fTDSOqT1Rh*0zeF_%$hANVZfHD?nDr>Aag=@_eJ-m7mDDwAyWpep?hyXYb^4umP+*=l@_ zbqWCt>_*lNcria(ErT7h?8fy&^MwE+e2uA1wG(BqGK7e|^cSF7=`UnU3W%jSeY5?= zdJFsEb{8s!EYL1a%j3tExK@A~BL{}T804PQhR}DQ+(u56s7&ORopeRI+}@?b9Iv%C zgi&AVOOj4WekO7+iX4+}{S-di6LV2e%RL}iHmpMG<6a}{vF`=P}U zrB4QDn1a7xAa#XHMRwJGKI#pp3iifn$Bd7WnK9#8e#+hz{XIIodF-?=o<{@56+TCo zz@J4wU-$t|(Q~Rd_ny|gq!Z)7eCvDn*?J1daCta4%hQ|~PGjFo2FmafxS??jlPOLR zhC@4G;#sPT0mKA8PIf#kQ+9wx;$2Lrt+KhEmuD$KRl@gbcDAM@gD#4ahS+MShnt-6 zc~fQROLc3k!Se+7VGXoxnM7h7vTBZ_nx6X$XaKqMnLQ zgNNe-uXS@+01cI0t1i@(dfMrziW{@a>NbDxu6=rgOQ-+4zok+34R^Gzn5gH-HVt6S*oe)*NYs(0@rQe1uoZN zA8XwcTWi4_#iz668nfOKc3CqM-(RS>=v$HlM2Y^%DJQe8Q;v^p8({oD7b`4+;@QHm z)v4YMe%`}E5?$l*!QMItAuy%u>+z)%vUJ5W2$>w1f)uyz{?om#lWW9_n84|8W0lL) z^o+4F(F)$miwMwNW2l%Ps%3rN-88936j?m4(uO-z9#ayC)r;k*lzd?UaLlh->!Q+6yv#{!B)rY!Bme5emkk zKO@c|wB*F)mDddPy@_I+S>qcgX2mcE8KZJu)FaAOtN6niHK&CzBX<+KTe2}BOT;BG zJU=~pL~c8c4Ae-%%8aQ+?EEW&(hco;ZKxZP`A%?Kkk%SD}jKn zE_clQ@!k3*1;v9V0em2t)^v1kz3F5E@o;RQosGHVI{W1p7FGe7^y1EH&m3i?dyY|4 zf}--ZPE5?V8h<4{XwXz@9=;o|W_4<6f83ohmu|O@hV&OjR<~280i{#l!O7GX;x*Jn zothh}U8fPYZUTf3y&TL%5%l8Rr)&&&h8A=O0n?$~C1>LB?Y)xQlm>2!UI>J|mBdEd zAzj8e26Ie~iv&VD-(=t)l63v-nPKiZda71#%e>x$ET3#z19dKad(;(ybvQujj&V|B zn)+7@9zWe+eoQe%-4c~U^c=IwNy*h(B2n2DQ6z@Tx}4zl`YYj6Z{*%H!rbMn&( zRuY=XmV+wCW1z*$Y{Xgk(vcd*H8_B{skysB%6sRJQdTNm^3bp}dOi!o)@>a-lLIW< zw;k*h5ln10n=%^gcV)ctcfwOozZS9qH;xV(-KVM@f;EhN%h3AM-o9#IDAz09J`4vT zfxK8Tf6;AI#m4EtAnp&%@CZ|~BgA+}#GH*|GMc)>GOZIlEL2P>3fB3%<#=VUTXN12 zmyV}$OiOSIEnLscL84OH0=J`8=i_^`vF82{_ABp0{$t9l<)Wnge<(*b2aRtl{=X9| ziEE1=>2bU6e_{aDYG_7w05z=r54i+lK$aJk+jDb^t@$N#dCf1(5ZKkmUp%A|_(gZO zzs279%+hiPD0m2XbL8km&Wci&Hncy&f6Sz;X40fKq$PPDoGv&*A>bay!n*PCN`WF| zZX^;F>f+k#8waai8kSVz&=;|m7K_W4;Vr;zEqBzAhTv>a| zSvuM)3VF|$brTGq-&E5!8+4^@0JcATP#4I-m<;$V5< zkxJi<9j?^Qjaj%gU3|Rao3Ud_dPxTuDRS&$r_a%iwGjk+%+ZT2vJss1>awHQSLcpo ztu&gh<nHk#dDqC4ffY ziIqz#T{Epud=BQ^YN&CSv7ae<@~VNPd3bWrTYl%0cW|p^^2@%jxR4;zVrKM4&CtZw z20|&K%kpm-s64TjL7631Uib%`{pj;%jhh-Eu0hbO>$W;csfR8!$mnp3F|?L6YF5qjqOWR|7YafW~Ha#;TPa{G*UY=1iKqMdzo zl9q9Z3!a>C1-8xsb8L6k0N$FqW|!EbnDm}u#&dYbWfKd18kz~O6qZ^|z+cIN=`(z$ zD^GD~MLTZl;A}uaUbni4H4eHr_+4SvJGWVD^QG$6F}@597a_}S z=S>P+w^`Z5)QFG565W1U$SVDIRV`2b79AFCivvaxreKY~E*w+Wq2}o%$Am&V`eO@# zve|f|KIOR5vn1xAVGO+sSk9no`XfQs9gFBJv5jkjZJBvlsJ&?-@mvJx8#+&@9?cHl zvW;<$KIkqaP)?Jk_11ITCgpWKwQ(}Vwf7PzA8jG6lSyA4xaR78TEgg;z21T5qB4q4 zaom^p0R(OoR@lR$B= z{4dT7(KP5fu7AW~#F+L=5Ei*eD3fDG>z@ts?~NCD7S_=C-bW&em3G2efd zF|Kx*4!@YZI-&a!5Q1ZF8S=JX#BY+uE{#L_(r)X)!FJQ_pd=69KE0@iUzAV03>~cO zGZywJ29le~ImVEeqtBCyBP=G*!J`M->U^6MIml1ynl8wB04wJR@op&5cIN5#G4qGK z_vKuVuF$z&;XD@|GkkTL_**1HJYSHE^qI1YSYXat@f|RENEuVsbG5P3{Sv(nDi}QG z9GVf`Q4Cr5&;&?tbJnZf#)F^Vms`5FHu)%wTIGJ;xreiRHp|erslxYTFQ$U3_+h=n zHAe(vG|TlPqArZ9{}#Q1(zJBYnx9hSf+t*S7!do4|DN@gWfiILZ|{V4+6)r|e7Y{D zU~c*8Qc7C~<~U)B!uVl^T9+C`?j|fNX<+LPqhEY~t>!e{pEvxuqq}9CagxGFlq!$D zg^iK$NfGoMjGbthc_CA#t|!yeN9fFnH1IaYMzBOiR@KEx+aVNNQ+W?hBOP++NoF5s zt~BO1We6R{^ZnJD53Qe<<9|y=LhH%l-Nr-lT|OgXq$AEWs1uNGQNiBoxITm4A#qQY zSXo0gwQoGj0_^aFb-~TRI`G6UA85Mc#c;Y)ez+T9xX;}1@ppm7ZE$1>KZfWq%NWB| z+xl*DEji~<3x}vbQTa)sH}-#E>ZxOI46*&OkgG;tSqma!dek>AFn-|LSabiaZ%&^! zrn>j_-);x2!0~HO-|kHR)EzrN=|?l-UD`8t%J`4(fM+wZzFuvtn!B|5o7Ny}TR4ig zjlmEz5-y5Ja_&3~d$4gQBDecJB4J0};R%S-V!M_b{^k%yf{{wdOV7>s1N9qGk_xPH z{J&w_l0PSO4N}8SC;Wo(X>~rD;~R^MVP_QS&T>IOjt9tk#lWLnTM;X1yR{^yJPt7! z?kn)@*sf9eRl5G@60Pl?d0%%5z`H$AY!+k+UtU?&IbX2SL@D9&Y7R9Xi<$`z@n~@L zbVn<)?PF-SE#;1b)V96bMQkb$AaW|73<7O^h6p+LSRc+mM6)ondt>Y9V7Kp_=&_5y z>R>2d3%zHf7wmg52nBxvSG~<|Tgq(S0G_wMaP<;g8l_6w296B7%w6p7kwnVxDfMuI z7zaNZhRb=~{KKi_ORflaUR5*xm7ZYs{_EdP$|o$l*h+MXiij$F9n*VnJ}A%ej|7jqaN}fNhF=5P z6_U3``aD&yxetn0PE#>BG^Gtk!ZRaDC(b$SZAFc9 z8|iwv@#6N@sbCcTO6U6G_V(#JEw&Fr-Gs&95XaZXP-(IW(%e2GDT|^=Pz&k$S>UWV z5B|A#&Ow0H=B8eMEYXPs(AYQnE@2cN;lAs()13m(E}0BYOSl&p^<)moP3DFq6A0&E z6*B#iYxNOP62++zTc&}np(insu!P`r&;1#bWHjdZlGtVgA1VhBZk%!gm~ynS(I+>S z^rbp@(x!4c)zqDh0A0m$MHtHgj=Ly_2mTfPhJ1@x`up3aoHH;*(cX*0i7@#WauYJz zb|!}a;DRG_Gn_byT>GQqowndOT-+~=>=hfhG;DjbZ(W1B`8`?CFWONVsVVzD7d)bUn!!M>8r! zBfA`?1QH%Ckhge<6VS!6yV$-sE@w3}0lLf4G?XT8sj%Gf#vNsU_7mz?^kpYoHjDx% z7GJ$j1i9S7?aH!up6J+l^IOFn?d_l2Lp!fwy6Hi)>!P#c&!4vF#LrFuldm)!F#jiK zwctrv5NH=LfHT)d>%!070hko7 z?f}>&!TZU6g+-{%IftD!1^(LU)8BbtD2}z@<_X8Y)w3CBb8!L8JSGYTPeoo?4OvJY(2+pwf5^^d891))fJyE$;7gI%b=Yd0tQ|f&)@L@fK`Pg1xK90vLAPN|oN^=|srngWL?l;1wgTDI zPuyJu_s->=)5tk8su=?Pkmo`^?-FfP;W%Ab{2uCbkn16Agpj5AVMY0MpacUz$O$0M zpIVoe09EHf9j;4aL?nAxtJjjlmiv|%cb4iR+|Br!v_<-9-cvYAF}cjj=X&7sxXdNs ze{KQDv)g#qACTKgDgBJ|755ynF4)W>mmoMh;q}6zYZaEBU$mi|=z7jzNTyLN9oyY` zf*qje=8Rif0!D{1N?7^RL=Rybn{MJL*}@ChZBz8C`EV)99R8STI%eN+$6lA52^_S* zI+;(M`Qu_oPLL)FaWJM=ISOs-QUeHS?+OH&yyujsvP6uycFqsNgY;lOf)J77Mg#-# zI9^LyPR1$ShoOFPK2Rf4M}|1`HFpUTF5fh^=6p$g? zP-E`|FXYWN7en*COL{6}Vz@yT-%%38l+;v)Rk^fJ6k@ViwkvLBSG*R$3m?7lA&OZf ziVhaBUyN_sY#3|(S4YO!S)+#}&tiLCRfbSh4}LSkjD4ibV^iCVPDvOV(KDp66yjJu!3cr≻*`E07^J=L5MoGjepob z_>%uLDGELj3*SaSC3qc^DTdy>?gb+T* z>P=+55Io|JtF?4F3z?48vF1%5aV$t96NQF^3rdZGvr7?1LS_qy6}$S$o3v{><8RWgg(Nu+p}Lp}0mdPKG+T-*u z$XFwHVV`Qm_Yqw8Vf*WnrWJ{1Tog2NPl*?(>)NYrUp|FcUB;l|5@so1?xVt!?$hxd zijV~$o>1Ycxze zO~$Y>(>Bs=-M{>_UGH}b3Zhg3O8?uFqa^T^`=fIpDG(~v?Z^S;!0ekB1ioM zodhjEEM+iiCU0EE5yEyA8L81>B#~j2Qg{S+Qk+4-)h|4xY7N-4F6&H!OOre+h?Mf) z2em3~Ez$ykCr7;xhC?Mg{$8i6$swOC=`yKfDoW!qTUu(zuG%&MqN0fL`Z}dRc4hW6 zVT&E64acbzJY9B6R3?2hg&3K(Gsl5==oP=J$7MMg#M<~`AK`}N%Izg`6G?4}_!pC*y)SX@rcw&iG?Ueww-tCNW++A|q|t57hr zCfagSU)L!w60Iv+h8fUw;4MnhQ#W>~20Vs^O^%3UFcE4cRs@u5D@hQtyT~-~9!l#W zL96cE=RGo|P%y8Dz~R&R8Rz<5t8up#V05$bmqYY|4_sP~2QEvVPp;`F?K3{!izz@q z)g>o18^yvW)S!ERK!FB#wIv{T8+wSMYd|iK>wnp5tloQXrSaau!EOsT;lrKljrMGF z4wFxNdVXQ5J-s;N_sO{J78YE;DSUlbsY^WC;O-YwSV4AvYB}ex-)!6)KJV|}TG{+? z*nK|rkt{e~^!Av?v;^yY53eHP+P%t}qr3MO$ zToaiI{T(PjmFF^b(gkxM6k|M6ZPhr8{VGQCKLZuF+z3r&LYSFfSnSL!E-Wt1w&xZB z{8F2oUDKV;(rjm8adCErs;}f%Xm#eNXXY1Y7w481I_(9QMIrxIr~IPn5l|rXNDiCO zcF?a2_#2ZR;b!AX+B#$ssAfZGq0RE$M<=tCzFBlBz16=A{ffB=k!v*_X2h`4WB#_j zOKCvgK%b&<@62ot*;iSp_f3d>7%gjMqZO?0g@-CW89PqV#0Br? ztlx!4DlzM0hby&nV-}HX7ayBcUnBZY>%Zw=DU?| zujsq%b_AQ1!B+c`MT7&m(#trZA^`jhzhXNxikdXy9U0OX`R@rH3#>6a8Wr2jjcQKAbq`CRzhDl45*n?5FMD_T-0w1ONbmwn#r-u`rNov?F zl>_Xm^aLRUUBaj@u!OAo01*)GFqAwpxNAq8hmkV1A;WHdiR+uO)^bgXW+pGoni|5A z#F;QV;iqck>Lnr_EzZ&P;S?>K`j7YI9wXw@1hJlbhrzY@^v@epJNlLd7Z2ZU9PrF+ z&z0~qZ}KC#lnLoxe#a4D2WWFuYk{s86wovKpc#jKRB+;EjoDAt_*}&!j%~rOau~o9 z^-zjz>{*Qp?)L0f1&2LuJROtVNzmnhV!k>u<_+YWim=TjY^X)10{Zl{CJQ7OI#W+b zvTa>6&&{G0J8~0ULh*pbI7y(X9V7_c{#Pdf!?bPo*=`8D%^3~8G*?Jma=<4AXu&^d zJ@A%^@`!VzaRNBg&>zK1={D@rvEkQ+jCAdQP@!~XAie@=t$9(#toDb4X0|+{#VYet zhi+-~7yc2nY>U1C0J5(lzP7KcgDD0_TDU5ncc( zI=LuBSiB4V^=nta_DikZJN}SS>H>?Gt46l=a8q7x=>aLH=R@k_tBs?5Q#U#dN97Dj z#bLH_=QCs#1V#Cn#V6oyK@{935HUh^JLB0gIn1zIl&ba3MNZ`ToogZS-^=X|oY7^D zrrVvw>8`XY!3L4rySNmmG*JSK(KSp?exthTf0S!8NWADvo;Oz-KcwXOPcnssuW5eu zhb#XdFRi9|T?hZ|+f*|zf2oH@<4cKCX8ezhugLXhlo)UP`>(ykc%iTRoh>gu`2eHY zvp$-+q`vs%L%5x<_Xb;Q1%xh8TwFX-@xi3`1#;Z1N+F`D>yydRa{N#f61`qgF3vfh ztOehbukGEa*HgIuZ7Jwv<&t-Jm@b{UQkzpfIKN#ig(yP_q#6(qo4F*xd4D}R_?k;h zcgDxvCRXY8`r#36`%1Hn#?aW93-$Ns;k&g_uRmDR$M4D^VDi0B@1fQ4s?`WgQ?O2& zZp_!z-s~UX4!?ImG%qYTmB5qdt-v#c2DsnuAO0%T2Z#OOTQt`D2b1AhygZ6OTMMdj ze06HdcvtF(J72b9&w#&T*-Du)Grm7#K;jRw7&;``P`a2c%d@!*X5YXB=;AzmxolxB z?|D`fw=O1N4wOoGZ|-AmHp2Tcshy=6Y06!7eZAbd*|#v*pi-vLE8%l7K~3~B6j!2i z=)9jo;()XKIZ`<*n95n|N3Wpt9o?*6vgDm7A|~M$MQm0i@VZy#XK`V70-FI6PF{2k z_?+2U^dyK|4PY?GvNzZXNQ=BnzxS$g=D`}jeq=55cJYETzY7?(uS7@e%@XL(|2L7}JC@kNa5>A_A+ z(O8kv6h!_Fj2Mczl9fFcUTB`_X?F6!wD#gugqp z{0$v)m767xA<<7sZVbg)Ibaszn^`x3F07x=|Nqt6i^q>Gz0avH1;A`3fD=ucJ2wul zJwDj!Hu zoD3x*!2}LEJdSims58kN-e~%i7!5WuY|J@^wFLWnvMB2t%dX@QFIomdHQj1sxSDP) zKx>pGd=XXCM00Mwg~@7ZZf>cwFgr7|xP;BBwY0P_KRwr8nrSc0&(F@zr8cYg3*AwX z%G=ysL&9w?0D?$*XQTkB&99v`3QFeC4_Xp+l-;qhJ>{*&bd}t~u^nX^(b81nZ5{h{ z(V}JwxxTJ^it;S5yN4vz6RnDwZS5CXM)aLA4Hmu0*`uY|6^gO1n@>n<^sC`vxw+e2X1Ien+;5fAuQA1Ri@g+G=q!zggRitmgXqHT zZ<0$qP??#uv9N-cOQ03=k)f^d5OaTxwsgFWI0$zoo;%DboAfm#ef(#zZN9$`-Nre8k69F3Gag>yZ~GsQ(eK6D^jC^ zG)&*!tbUV@i}ajQ!Jq*^H1HDUeDhaCqnqu76)hLs<6~DudwWD8Msm@LHLbJ zagpjO$W-Il}EL=3_)^ZN@2!75wUO&m6RIlj1# z8@1gi;QYP>ncp1_(KCaAqbR%sf0Gy@my8C+=Jhc|4!6z23Dt5&omP8pzCA;Alg{G8 zG_F73(BQZ8h6fVIF^;J#_>k{04^&W`3dP3Va7@agGFhl6*eN?8R0O>?jFcOqMV9OG z5#{7sA6AJo0h%LfDrIamN1xhA^$M39eseFtAckw%_%6b1c zlstBRiT-sXx{lWe><1hQR>%Ye32l|J6rwjkg^S7RRiu_)jv!kqW=&phz&O5tIp zVjn-=CTr4*gVPtNOHLVU0#@M3^^$f(51f94zi9OBG%9yvz1J8~jFQD`QcC)qpk_(* zEJX3b-Uoz3&OT6Ws!VY`oS|(&3`v8EOS+efxiKfg#KpBO0XOGNMbNdtZM0hpI0w(n zb=vL4>817pdYCtyg%myIt0NtRg0!WFu#2M~iQjX%y=2L1%IhoTX3;&ZxPVk}7}_w` zf@jWeg@(i*#Z*a>h~zqUDXWs*FQstH`5@n!%iUOpX%z3Jq$+nTV*hP;pz2^}az(F9 zXYpO>CIXgAZFg^!6U6Z}ws!|z1%PX?e&;c&-6AcNRo>iq=FZuM5jfoLKzlz^eo;3ZXy6J4s={+cn_#Ts}B(eO>1>_0ZUk65|^On6d-R z`@czAlX%%oj*EBDE|>WZY!I@>;qV9GJeI?pU^)vfn8o?NRLvbuTXOfwi>Wr=Eb?XN zG^L7=$B&1Usy~#tB8A9Ub%+{d-Yu_0x8V`aD_3p2UbhlgvqyfJEi;k_=S#UC0>*dW zeK+Wx1Ii(Mg?G*9aiS)LVkN=W%~WIJ@r~~!Xivs^sw^%p&CD$>b=2@>2B`7AoK+~+ zL~|C6%|dI&nSy2)@Q3Nl=s;wSJVfd%l^>2gi_MM53Riq`#sQBEc4xuQzXm=t=7d0a z4o;fQdCOuveznBl0MUhcBIIkJ*;$%v&3EM8vpBubCT9I+qqEeSo$buc&djxEIwL$tFO1$=W56P_5zy+z%yvtv> z+mCt_tMS|sr-#JvC8zGfoy$+4P|gY6#LUrG8=rje!5wzB@zHyq+`0cj z2KIS~v~WoWdx5gvuYRmZ6Gnd-fdv4vnV)0$hDCI{Hk?A*e_G^wdB-&>93gS$VoZX!3#x8|0n zJ4@ubnw@XY&&-L@hfrkB*U`4UpC;zg zBCzznZYhZE`1VrJo~z3BMo5r4TBS1;&N)^{_!&Y7`EL-z5Vn+HMvSEw$Q%=5Qiwn3 zo-OgIXo}O{5?9l7MUk?mE%mHqISK;FGJm*cBT^Pn?x}$i%U4B&1KK^<>Ds7$Zs)YV zy&L{;HDvCR$-r8fG{swT?-Y{>g+bk9DK)HHKQYl)tG4@-bEYH)Dpy;4Cp(4y#VR~5 zkB0=0H0 z!U-nyAYCD8gwO>AEfyiVp!kPl<|M5A>Jz;p#mF1W)Ik)B8&^gn07gx#bu?D@PpC06 zwW@l}NIa!l8b#dzvk|zQ1Baw9@Q6(J(Lm?w!ukkcg)|qLl)jyz4z8m*KoJhTBQYd9 ztBJ*LHH%k2r>6t;lpXS_YSy*t<5itaXkI(8M1aDk${ki?dIQ!BK4+G@t0gnZI&VKQh)m^q!J0X4V^i5KN zi*(%SZFi4$m5jPwfXL@+7KqB1zIObdm1xrUGD?5SB@p;_QTk<+bn)PPOR9wzbC1HEl=V0@j!Y|9fWx3jYJC~%b)PT&oB#AG!RJ~gapEOH_y6r;rnA3wDu?R4j7x_0Q-Vs%SDcywotjAfNjc6}B6 ztc7%SvJ25Nr&f0GAe;R`40`tvh}l`*B)(QazcMfs(fY66S;IvXnk4p zmVC@U!vE6ZQhRZ6rqiAw1vpOSgz+zSX4}~N5Y-nK78b;{OX$9E*EO1ec{8Xs=Q}pQ z;@tF1dug$=IK8;IFoUWgu?`jtqh+B4RmL2TIaRBqCL`V{YZ0jx-6tt+U3c^gm+iY& z^2Ri-8*aeAc{dM9uJ;S~fVoE5J1fF)u_TT!>maV2f}2BfyldymISEgwm&X&3 z1EJ@G%`eFYX9_%Kl#9T^*hwvnLE3+%N(pg(kL@CSFM! z!3Iom_k`Jzkxo2U$ha;JwMmi@RY>a}zC&gUvb4eu(?2QFU;tGD5sdS^dm=+)l@?Ya z_w(gPImB4^AQCE&Ket6`{^dm~TcmN&AuHrddVyz0k))EI^RnLJ$s9LPp6Bv~W`2>l zdv_GwlxqMd5hXq8`kkERUiHEW32K?*qMtXS55RvT`V^wi1rjlo zq=8ao!8lgikt@eIzhR5NXZ2vd3%1zN#d4yC@%%Bo@Iog|-LME5j;R|WZY&8!Fc42U zWW`gTH|r%Ci9l6rcp1+TWCR;7xPs)704=Hc#aU*0sc=S025hQBiw1%tu}nWT*{8v0 zqUYiWevQnAhA;9?TXJ96cXlu8VNLlbJBOF%Pu7#LXaCIM3>2=g_M}Bc8>^+s?b;NN^L9od4zF6>Lrt*h=qb#Y7mNSg86$2ka5N ziZWQQua{tFg}-(YESO4q78AbbqcnNa8(w8SsJRO5sxVIius6I)!K)M)1^{gg1~?le zkt}u{FMIob+OVQKRwn}#R=zbS<8Do(&?tv1ubcEa#np!Uh4O8@W|_fsp8|3K87dW8 zw|uLp)wk}hRe=p{Ao&=_ajF?De7~6^3>e1Puoq)^wg&8lH*QSXfPq;U@VbGvzwey;{2#%f zL}g`Glc-9O|9}7cIQQIh&-=_d1+A?}_ij0moO@EUX!=~5`HTqiRk-R2a*JV~mewkZ zYfC5(w|oN%GjDW{Qb6vvC^4@Z4Vbp?q#!=Gi-{kbf{lz^C-S*cb~;BFb3 zz_qo-+RE};<2xrd|V7o4MSY)BhP2AF{uOx*2jgvF_!!rdP~?_M7P#ck@(+vC8Z% zHHPXU;cFsLmG?%f!ne~D1`{|(6`}8y%E73%N~|RG4X;JnO4Av&faej;or`+V`j!aE z7N!WEE#YJ_cdESUH2%}*MZQ+sHH>P~U@4Ly6AsCsv|U!T8CFIWDP40yM^AocRNJ@V zem?*fAjE+>VW@ebSl8tGr6{_g+3JiM`1ZK*mG#3>X{XB2DNNc?Ku(n{J)}h{!RL6P zPC+3D*qFQz@yVyaz@H?3>=mA&_~SIUE(t%Yjl_gw4sa$oIBCqfOy?w>>9c4F-ajZ_ z8a|5~!jxxw$gcI-cW157)DeqorNW)$XWU0Aw&Q0_ANwrWU{o@&P5@3oP^f?b8q@M* zJu(=ayvYJnCvED@gfct5nL0^X5yN&qWR-~IxHUS0&C^;gm?fPOWqMs1k$l4*1gscg z&aj0{Q1NG@Thw!>j_5sB{~eVE$kE>&w^D=zhqcjpj$#>fe8pRX;K0-(RF23NYe_`b z0Y1<^l0@nbx-==%mz}s|=X?p19rO;`qcV;?ZA$91!`LU3GawLSgEPEZOmJjT9^Q#A zQzTc;V+tl7r@hfhaJ+1N3M+UcKYs{FFu*^BtQpa8^UQ1nU9?J$kC&CW48uYquJ09%ft3=c*?5Lu@!N?I zEQ!*AT1CztuD3ytq07(4C$M$m=wO587uNIQ1?*d%qqvm0 zqYiBNmdlQq6B=g4hGcCI^Y^Flh*^hMUp)}|7hqa4y<5|hC;j%+Wk&{vI_=|MU?Y^6 z=D~BQ7qg=J-d=cSr0Ifw7hMPXBKP}1QOs6w-`4M)h1fhzS#E|!rW>2E@^}m$C@34^ ztA@-dK)^ke2IYN}6G785e}8`UlzJobrDkp5r>Fz6i!b}q!_}npygVo$l~J+eiODXR zQ}shgmkXhKO=d4vS!#p#tWjgmIt{J&N z#m5)qs<500l{Zlm0`H$xJJ&ELDk!p65z7xSM9HWms&Er>X&&+li!3fy78YtyfvhgT zS!r?c#uB+FXPNQwDFuZ^u7^=ADi?(qkK29vA|qi}5PT@EM5m;vv$&B>aGldzaFz-) zWs8c|_Hn+oMz|o$g5V%qjzM%x$O4o}nq}MC*}xkz)UOy2MbEgbh~voXH~zx+9(`ye zPw!#EYb&Y_-a_mFGi5R;abP@!XAIw)qXE+HjuVX;JpUglzcW)zVuC*6Bi)m29rxeOWfdK`TZ_g5AfV z_4!+t>n>!^Xe&O<3#Ktd_d@mzvnhUuWKY~P-$K0u%3f0QfTEYwJs=3qLuNEmT82&a z;^Aomp1nQZP{I=@e9@@dj+7IAmy%!RqECx{G(um#;S+Gu;)JjePA z-!&lOwE2%e`CriH_k%VD#^(M1 zx;6hk8vJ3lLD0)q`Teag+3XL3Wirb@?U?j_2VDl)$eCLRZNRN`oY$J!WMro z7(QjYG%dgR!PW;qM9V)8T3XDr0-DF{AU{}7?llIeo2_Xf@c3SP zzttVK){~DO+(&;LBGmyAHrWTaU8e?d}l2Ak!<|W?*G~PV*sE`mfm1BoR@g zIY=zi2E#h9!?R_BF__O_w}fT8(MJmy*`+lq@^GTaZNXW-I_M4eM+i~SoEfj=-LTcd zoO|oc3wIZz!~d5iP?eRwA5;xOM%>y-X}YQL)wTkT$*AODO#oHrkACN9X_!ByZZdot@&irE~~ zl6nV$vaR4QJ6m5NBaWEItq(`+S0OtNgd!Hhr=tf4mXkyT5N#JI=uZuN zXuHSCMBwDj@!~oW11GY7N>cK$8 z3LbI57`2aEzN2D|40_s)(!fNzqMWY8XzzD3SjAm#v2GAMk=6Psd@{WQN6x4SC=oBO zpp)ryvv4-KeU2JqcIfafSj;`(ViE)K9@^&lz0<`k`0~zIeN?0fA(1ooVQFyf;dH4( z_V!}DVZ=?^kj^J^oNZh_8;L>Q@07EQ=lHk>Mk?*zJQy}zM-E8r2L@FTh#U<`Saj(| zWyNKh_jyTlI;sr6M7~AWP-Sz? z@mP2ck@KG{p}*cY7MRc~Xiu{vmje!ae0Y@Hd&KubA(Nl}42KD7JKtKE2u#g5^X{$( zJw*|*yOaHT$(FdE1W<-&9akOjAscWLkHKs>ypFhamMW3A`C%PzF)`C-)T)3#YL-$n zXSk#uLS?1QG+;cAo`V|3M|JM;0d_1XI%u0qI$3=93ELg zW$4WFhq-~Qz?gz0gbdRiTK6V&su^USA;?ThM!~(Zfn;{PJ&Jh07!JYJzx{pVS|(DpkjQzTzhQ?}9E9`>VG~v0_Q4uc zJZ^LjAu*1QjuQ7ob#odl(LE5h!h| zv45m-mPDXzjAVSqy~pNuAMj<~rBHkjd{(y+t}W>9Xl3qDSW z&$q(INdgOcM3)dU7p7o11gAru5gb(=$1vb%^pc%i3&(L*%1mt{umoB<OlV@`*|3E9mlF&=hcuzM zj;LY9C!hA4%(A6%l2|20548L#TT1w#0UPRzx@6)O)`O^v0lzK+?J2N5H{iZI=o$_f zYnJRYlgLr-UCub%Q!vni&uY=OF|d1qMvSpsDorO^%%z6`D@980c^)D7Df29i|HW>8@aRO!j`t2juE|mXrs!Vv9*N0yy|I^~!dP0(UXZs;k-1r41 z!WsNZfw2Y6Tkp8NUyr4qKv$g>gaXAR*jMQez192hJw<;9onB*9y43En6c@ymyvG!n zq#%?QfO;tGB0Nq!58!l!n5d>bp&a!PWLpO^k`(Qzd_j7yL&YN24hWt2!*CWU7Q)T= zA%!P9Pa|0E(v?HxT_;;noEFbY-cS!A=Z2SXHp6am(^0Mx(=u_QVr&q?2_W;b4pm>LtG+Oc)XSX;ZsHwc-}mF zTQM>Oe7+gQ7*Eb5HR7bIe+(rpIhjKWjN1=Cd>e^z7d}~k1_k;dB{tN%7X)w6v^Nmr z9(^u*QcS?*V&Ranpg76;678*LhCeP0c*=3VxbTO`0m_pn=i?9at;s{+Q%}ha`91KH z878I0N^M0o8<1r3%pVV-lg$VtPGBf84+Z3qz7s^=-d0j90{pU4-mT~fzm{xw!O8ca z85p5zG#T<;_>!Rz82Il%95B2&1O_h{B)j`<8sg?>XBJmWRY-5EE9L6KqM;h!B5$6h z&r>kxRrvWVFRrXs!Jfl%v#^E=H;W5k&R6hop;}v5TsimL5f_~Jcb^mIRc83!iL7s( zdZ@a;cmrN4#R@A^C!C$Aj3YkFYMRaKNa37jwrDEG)W}OyyPdXEf^!LP)>MWz$92$^ z#Et5tA@?Nm3<}tyP_5qk67I&H^+Qs&vntk4cPn{QeyHDp3UJssXhBCIkiLX`YuMDQ zySt#!PTz((pGAvaYn;1k_jiYtS#q3At(v2Yoy^KOZ7Qjh zNtBhFl`A)|)Q!pwtNeu{&j`U|<31u$<{_cYXv~ETn3&F$1EO1oQcc4ftRdah;_}+s z@{N`1jpZ8kb_+|Dg{5V%1`D<2rNw1b$$Lu=kBD?!c<3H}_gRDAriZT2yM(*U@FzH7 zZ>g7yT`DYp@%BC<`FsQQEiOvwE%}ExaZEjvZbg(sHWC3m#2d2?k65oT`kL1F=2#pX z10%_WAzZb>AoUmSt8icaoi>F3PH;;!Th~@Sx0I{+$*O(Sy8PH_f1sxp1yJ|%m!;a= zYZ!@5L1%B8rsY^V68rNJ4A9URWrC`@zR* zZW98)yi4ze4fySBz(+$6>PWVmheZ-;SEFYs(oY`$bqUeWqiGg_WU_zwfKrd z!L*pQF6WC5G|4h^!Egv&V`QE>dnSWPxeUDa6Ta05;P7G>Z@}|QV1Q_LCJcCB^Lt7{ zuSqu3Xw8A9@!a)T7ugC%N9%jm?eF`TTtI@W>GJ|H6Uke^;Auc>3n!aTSqU^kCzd3c z$ux$N;WO5Txic8_7+kQ)??NJW&Mu{#8%va$sOmE$DOg&~QByi^&fF{o!|`$b<;lk2 zYV~!HtKe-i6%;xmuAVFF84fj6RqsXi}YbJ8D|rZDC=D zC_{}vBLoqKerJ=|q3BRvxRAYd2Ber^dVub{>j;?h&$Sey#s!Pw^muv4a-!1iW+i<% zBge6u-Q>=}0ZI(A)}fC-;o-l9ib7BdGSgr;F?kVYXCz?dfhKhW<-UbPhVAZ{0b4te zxRLpAce3Z%Hk{O8BkUpf;Z93ae9X_zEG?9l=z6xWT3)SA<9l|#>{v{2i#V~8GHO|d z>_W@un6nf|^&RA3q~I2~0b6)0X6H^Rtdr&}U`u`rc1Yv==P{XG@Ffd2`oUmhWxsh) z+NBzYb!KI{WJq>dd$kJQ0lBYj1iu_8bVDUiRb9&%ppRb<@x3qdZ z5nmxQ*+Mc?D1&-^OrptXv3BfqD5gLbBa5`MW zD|6!H0pR;E`pjXSslSv6eLSpA>gDP~vZAN~Zwa5tBpLmW zc_RFuBWVHv)(^&x;fqoWpp)300TB*Q{F<>aiENOi7HuwUQKwBW!#F~p7M#`~`Iec& zBPsPPn3f%2fAOf46GOX%y$+MSkoSVa!sbiW*6zH8I_nwAPmsfq4W-X zg$7-t{S-7MQfU9^RGlUn;G?LmF94%J-*_!K1TQT~y#HN``kGk!lYjKd2{KUsD97#6 zG_K~O=y}~PrNsf zU-hf7E_bQZd*K>m8jT@z(inQw({(S*RiLjpW#$f?*@?TEf{I|O9UR*TTKDjPljQ5? zwAZP_mYJw|0t->4Qjx6V*eE|Cf~o+RlctmxXd!Z#R~%;bdUhLaQl7)o@Y?RQ3DhHE zg8c?Tvsu*xYN3b_+dP4A->w-GRxxj9byyZm4FI3TN{2(6yT0` z5TZRg@+VHtAmlgE>Sasc#W_0j6T5RqAR1beDWpN<&!MTbxv>C4>27&guD(u=OU=2% z(r&qlnAI)(JDhuc4HrQwrRS6VW^Z(Ql6RpRCg0PRb6|v)1;oTWK6a1AcM;VskgjYW zo`-rr;cywfU}>qcQk^T8`R@&0PDIp$)_`HEsXRD=E>mU@X*;haRIpHiX|$IpR|1w& zl$Q*X#WBB$gnTfqqlOqb6%?$Q!LN6C+AtL=KJlDsYxEnKdgk-gm&xLqXfKy z{jt6uIGk=Mo8T6~*$Y@BPU~{=3mDA1Na)yY;S0kOjQimAG@%D5I6j==EH_y8hE8@B z{8jSS^vnsGgO)gBP@jV(#w>@p1j=D`ciOjkhd)3+LfzzXDiQxNRjB>S*R4TsDAxRG z$46BJ`bI(@T3MjeCA08gI6T8-Xq);KB^q6qaS52VYl8Cl@vqpqjDd3I{R%F}(qj(L zc}n-%$Gy4!hS^})A^fD zV@PhLAi4F1kfb6Q6W&s2!ou)Yz?0s%#w`UP{wY_V;wd3kO;<%w&JZXmJZ0#2q0Pl!n6G_2uF&85t2I>ueb~j#j*X=PU>UR}0d6SxxW!fTfGZ;h8DqV|oBNv);kAVu# zh#`k#fm1)5M@&dUbp^~P73@u{;5kL%|uD->s%6q%i00zV%&E&3JbyXx%0E?;R27`gc&faPm2Q$+E(c**b9f;G|KzcSBS>VE9hz!%+h+QK@1wMtLyV z^E|)@h&Wcl$qx0h8HpKL0oZ&Z`j^+mld?2&;;ckWp{U{#i(t`K8nf%?0S}z#=&ZE6 z0H7!|5Jm5QXG8JQ8%C>3w6UQXYmE&}G%oSkEq~>%=vAg5<`EL^eA)YN4D; z>Zt90#iS`+1Jp7N1lk-9sh+UAB%Wv7LRwyj%!57TJ`Yp-4~ci5mDJ&nMn;^B5mBOk z)ZkIsh1O(fejnoZL;HKiUqM=7*=#U*r9Wwk&$o_xJ$MavTVKJf zls2-{){N8;L)d=lU`cmVT_5yA0u9N~?KFwL_(m3u5BYHs7Q7s?%d_FI z#gd6AoW#bEVM#SDl&+&SZ-dP_3)lYxT;21al3R|M#Y@x-CR-9H5a=Zf>~m! zQL+tdUe4y7>DVI5-^Gv>I~BRJ>h7Wx=@OJvf`xlSTwn>pyba0#&s@o&RGPuZuuOT}yyC!2%J@X7#rJ`|L86q#+$lOzLyrX$K8qE4ll+FuY> zEaTCD7Mnbx%!L?l{@h(plf`JyPocDac5Xk6EywS5y8koo^i*^=XP1@mDw`$S7~DtJ zs~a>8&@;+lvJ&dl-E6^)2b8x@XPvi7Js0bN-3>cz8t*=@>^*9Y2QVZek@lOYd$q2E z0aYZ|)9DU+gCTvjV6LP0QJh{5VU>4|21kuSQ~8pu-mr~EaM@d3n&`3@-oSw(>ErL0 z3thk}1dG@LD`=rf@2<2vQpzt3>2ka?)9wiL1K`B>&)XWv0RI~uC-4Oeoy?>V`T3L^ zds~IwZ#mbR`f8a?88)G`h7w?+Z_Z97#@}10StTfZEx9SdfoD%I+;6f*moHumL3m_cim>RRnHat zM||A9$U0`G|9K6wlhqL#pV!z31%ZGGF#Yq0^QMPxBImpkThhq~NK11w5udlKRo=xz zSY89zSAcsprtP>vts5|IKc{ZxF{U9vQS+>intpqYgu*U z2)AG2J+TBbR&jVe^wt3b0cJ5G_eIGjqDBSUzgW*$)KlE5pexTGpOZGSK;tO5V&@Qo zCU#%KHBiujBWTue7kMC|m)I{ut5Y)jYH#0L7_&LYYWbWV@CUYJ&uK#ORq*5YRZU| z|AcU$k6<;Jmj@7fFA3eipkK3iQ$#rCzXryOWNb)6z`SWN-tT3^E{#h2lUTX}&dw9NyQmXVHbYggy#vo8KLVOFaZ+( z^b%=nLqbW6c&w!ixv4gFeHyb(tY!w61?6ue+cK~kaoj_kFnF^<)y}e+ikZp3pw76K`h@uN7z1uy3Mm;Ij7OInF@_-lc0_k095yjph z;-_fsz4ZCX8->H=)RTLIh&VqB34;qzCy=LaOS((A!Ls1*oGc+{^d^^)!n2?gSCWSW z7&QrDUju0bc?j_zn+K%qavM#!3>se=_b-9UpxiQip@)9PVbaG4ozG{~X75F}VBF&| z*Xof3Bu`@hqDU{up8+1Vbo*_Z?w*%YfU1y9mFAF^_Vyytf}fBn%?tcW zp_6H1j|1oh~z zQ_4lk$?JR;JaMs9={}{62)`n}TXdyp-)S5_Yc{S*j}*XJzMQ`Atfy1ZZ5SlFZ+4fE>BpRw#XZDB5FIL|F&8V8dS9p!iW=F@tm4ZkbfPPwu&20HL02JDGg&*t8>~n_M1t#a zTiE8pX{Fm0Of0&=3OkEi<#ZKmuKW=OEunjeV;7*Nhy2KJe2K0|y~X9gjs{Sd!_%_W zjIho1fy3VEu*$=j(QNdZQ2rY14+0+;mxhbL80>KMmC}$vj92>6)mRqED6hf=39&b6 zCoG#3j239jf@wHSmuzob;vKrQ`9y9tD8wSXoR6nPof}Sg=n>#mXr|+Mr<_Vn-*TAw zSWkz){WRwoqUZn2bRJHQiTHIkoYBO2t19rOqwB4o&k~aZpc+3IN=K5VOOU2+p^Ht7 z9~f|hq5xZbZWJ<5*nMR^GZhu$F7T~-1W6y{lXGP@3TFoh>`ori+i`}`j>-`w57%== zWOb5w7^Q;2hyEvoVUgn#>aZ$$whvC+~Z29Z{^ z$2Ykuh|&Slw)LO}fQuaDrDyO5Gg3Q1YxJ>s{Y_9WDD2W7d7|$?l0@h>6%^q&FrLi83n zaqjvFO2D|R5ZmLGFjJ}o@EJImT;+%AHYhS)2>!pzg1=SZol+j~e1v{wjaDe@PZs~H z@cCF-g%rNB2swPYwzv#LER^)8>Nb+XHmuCgflwv}df)H2zly488&KUJNrIJ{3$M~$X6!StYC#HF1Qd{>2?L(#o}hs)Z$h- zUB&7HNT7-zk%WkBGf)A)sXXsIk>8>daiN(JADS{Vxxj){DyMY`SEI$!PbRf7&Wnap zUPjYEUImL6lOh)z901q@)T>rbZKh-R?ocGBgdb>|C>qYBN(aU*@E2inJ=QhgJD8n& z%&IeK{xnTwKXz$YbQxSRx&k3Gav>LK#ga0}yBY9Gvkr%Q*hsolfq zr{O#WTk-z5LrouW2$p?onT0%g*rtNaN{wVA9EXYr zL@FLo&~&GF@|?Q8H=9=DOtX5{8Z|hnG&)&W0p)xS)DIChSr%n9?AFLwoG(>xYHrdF z@~U1_AVp3mR<#N!L$Qjaq#j7jn44!XE}9%xYK^{Z5>1Us)-n&>@d(DuwIvrN3QZa# zI$)`bN8Tay9Zzp+4vEmDs z8|zbEg7Ik;+0*zh>)Ftm~tg+A$O-{`IOY2U8eSY@}%88zzK!K)UJ1p1^F>7uI%>lZn@M&gcS_516uW-etwl# zg?Xv3%Deuh{cVyVyIp5Mt@CZ?;h-H`jxNmD@^^aPW^%!2(%iI8e_g7=^38tWRo?}O zu3yi|~D2EkgN3lt-h^viT6?A2;#iBmU z>!Oci-bU6$qLHE`$@fR&{84E%*s>a+I5h6EM{IqDKxK;5uF{6Lj z0J*~6$-g*AF+{=4#t&i!SglGX5`8$fg~i~52iHEFRyxcgwn5G)7=nE`Ns3o4Qf87= zN}~bWbQ2k$rlaG=S9LoX{Ekx#zw=g^Ic~L$HtAxnOeqH$U>~Jhkk9+DB)&85d+_~a zy!jIf2*OkZ#zy{4Lt1L1U_A#(iC{XHkreo?<&yBd^WVfW`jnF}IZcMiNs$)M&fLv^ z+;3~j#%Msw5~*o{f=5l*qkbtp%u2$?Ag3REPVCsslz>La`xgsv0+7JWDSuBfGUY0! zU!4)K$FrKBFM)WIl-$(;3Czq|-g=NO=n*n|Af2-&sz;`KwQFV=B48h-4NchTtw@4V z*sV85|H%3&d>kBG(tH(1Ai~lFs3GYB7L5~)|T^kUdnYztb3vf&12oki$N7%@# zqGA`E)AXjY)%Yf&w#ashGljF183y}940VDjH;+GA!PWE-H^=^_yTox}2ME2TgFt|k z79){c)ybpjkJa*-wp2En&Grb=SzSEi!x)S}N>BSmD}gs2&iWxEZJd~@kA`5zV=+6d z{^1><>HNhbLjPkCOzoVKjJN(&a%w#0TS=+nIA&!qEu{lwv~nyo0DZ&_Ao77ph2d~T zOX!5)JNTh$tfsCjq;C{kP}>6EhfkCCXxQo;Op=!aRf_j&z56ZN5CdGW5*(29_Vk|3 z9)E)Gw-~|*Xk{Vg#hp8kfBBSxq;@bxpz@^7o;(>L#lXwm+pkTpF&5dWMZ)R!6b9cn z7fop*&J#`ZCkB{X!BiS}$0CZQsYf|NDI9c^eIfI-hQfcxH_#SFG#6TmaihZ(|VZ4m(# zV4(PGEys-+;K6MZ#}d~*X)!WUEIEcj-w&@b~^Qm*R1Yxs*- zSE)upYq_$xvaqzgx(cUCI?mSC;EcMmTC3Go`THVUQU*JZQ8PCXJWK6l^jAz^ajCXk zSzB6JTwYzORTpk>2H!KU&fuUF`I&}ItSpmbcCu%ts2lgbpbx`8%9Spal9Ydp=>wIS zmU~RSiNbTK_xDu6aZ>6enhFWVd9ib2#4iq^{>cj&hbHu?GyEOZ-7Hcn=7qvxVgU_v zh(-a&%}JW%>(*1s&4q)LYvWKg3>8wY(>{Z+QgcQJo$J*^I>K_!;EZ-W?u^>~4q~~! zYm8nzGX-oI#dyK)4N~Tj089NXefMt&yZ2}Bgx%9#Q&h+R_k!I+foz1Z93$c`GDF1R z`u?$dH$1zybS8GM6f$go#?l>k9{<_X&uep%KxP8JM`rOM+lGwY!{Y8<)}(PUyLaQ= zvwJapo|5TXsH`q7LhtTl2B3RK$}Le|lxjDYmR43ONa?bOQd+geDkFIop$V^4ndJp3 zU2d#N$WO!pp6^7aV+w1_i2VnHm!6dc8XCRi*;&H0RcnGc7s9Z}O$BnA z`+-i<&(Tzcu?q{T=a}}cb*Sw!UqyKzaz9OLHl@+jZZCGxZ^&+@2Y)O5;vIMgA&?B( zPl`%TV?hi;zf?#>N(@u+tN~@=;24TX0dS--gbEf)l5~F|l-V!R79~id@wJq=9XyBY zm5oHjTYSH_hllt`sweZ&vtPlV2P&38tCH#y0-YHZT3;-xi#Qq-U$kNQ7!fWk&O-<( zSeR0RUPaM%4=a8ub-pRh*%_tU+1a^PSoyfyX<^J%pXeZ%TqP;p%T7#!?%;=G9hb^- z#O!ntOIx90{dd%7$)DR?E$7x-sA41jIX`=37Kgp+Fr$>!sfMVBDMtuQ^bL?Vn!qn5 z`A_(@uS27XMGp##cKSrpH3EzF_NcW0yE}`}wBfLB(VKunQX%@XL?hlc4{4DFAKmx@ zX_6WyOA=1RA#$vkoarjh^X+JiI;so~AJP$zhs2rOB-R#c$3_%erB9A)J}o z&Af?C@?!V3f2nyl@ZUm^L!SgETc)HYXU)2OTegAbGx3mLbcNFX6(q!h{f&8!ZTmSz5JW zx-OMzX`s!aD*qx4Ek-LLM=O6S@?ZW3eJ$6P*6>qVTU(J|B!8&FU~kWK=ePfyVy+nC|bBp))zXSvbA{SA5a9Q0=eQnQe$*)yaMZbBl$6{!0ja zd+=u9bZ{eXM1M`#44G?1H*H~o9xjtjFCjJjo$!Zq@*fH8!rYsR*mUtTU6FQM3ky57 zG}}H?Dw{n__WineA!W-=Z;cU^YGsR-iZ0rVj7TEshH}G(SAod}yZPqsMW}X^1C5N537*RQ_tHvbm(U90BW#8oOHTrkOvg@%dIwe zA-+eK(Z)+?>?rH*?!1r?c7w*1e*d847h{PXA!~m}hFbJwYrbIa+af*6EFvlJ)B$zk z;nt*vH^8~&NZ$_o+yRKyjF{t`q~P>l#8<{!02Ax))^TNHaFu(N;O$tjOau{dEt-hM zU%Iu)_C|DyC&2EoY~)NZc+|4A!@cmEK};!1K533+2ySXC_!D%G*CKDHRu_FGA2|ew zK2HnI4m@!OxrR`qP>LN>QP*3bp0R(@nrh6CX$IH&n0@p5o6@iUt~20c3O3TnWF)@+ z$$yQE#ebC7LIS}|v;Su6G7}g7aawVe>2T{Gy}$KO+4QpOvY4$f`HuhD`&<7HKbdo% zoTg?rAO64ZZ~goOd^n$;)~Q2&_`%k{!k3a_xd1%><_E~KJP9z;U@}Cc$#jsAre}eG zd~l|f^NaE1bk9f!{bRvCrh|UbI0P$N2Xh7S7nz`c{G)fC2|60`A_;Vm1o{zN5+y%# z1R|T7S#sF<^w1Rf;T-v#X-081CBKlJEdN4wau%F}_;_k^ndV8i!FGlJ}8O+WQSHxCq<{~;@$wBrQfRwYDm{p!3~i^eOt;$Fcz<_YE(6QT{^O9kfh3<=Gho!Ac5UT&i@B zhAvJNz^J|w)s;AIoG@jZMz@MqT@#>>;0uhS&`4O~R1${zCdlS3ScNvCDED8RmrEd5{bY5`;iP&qo*|9s=Te521`usrlYzMD3SjyPSK_E||Q(DfnZa)WS!5 z^5m+d)SRCI)HphYOjs!hyP#`8E|@6U4-f)V_fY)P4HkfBDcE~PzM7pFCJ^28@B^_b zP=DB&Ai5Y?BH)1qEg%=V#Ua4K;+Z)EK7`7 zFX336nm^kfxCu{4sEnGOSQ0DK3J}I+{Fozr= zjJiWv6wCeStpqkml}^U#IDSpR=G|U2V~pT4xq_$yeRGWN^&)#cEt| zPj9qAP*HM0e)4>SKY*O0`J5-0s$2j-Z1XCJ6aW9$l@z##09WK6&!;6DW)K z>!T+UF5KRzzW)5>5COH#dYf8gIEUjJe%am_ndhZ;c{Hal?I7q?Lx-O{QAh5ZokN_} z(b2I?e;qk9BzL}Q&=`~;EAEtP;fRSiEo<*XmF?sL7&So4 z0I#Tn65?y&&JBIuwdC;{HL*4PXBGcnSwLKp>LMTF-^X|aH*5HcqYXxD1(Rg7WyiF&H#XN{`_=umCPXnp{hgH57=#Kg;?L#^zsa;zk5=%82ktg7TOD zBi>TSNS9!#Q7ddjK(uM94n3oB13|i{UI5{T;4K&;snZFOdyWySV5Xp&!kI{XG(zc8 z*vwtY;Rq&JHE#%iS|$wO8=bX#J$w_oHgvkc+q(!b(IKADd(^II?%b)JR=?BO$L$H_ zA5=lXZb`_PT%bwG2=FwY_DPLFq4fjC!A85V0V+F0LUO4>UkBB#^P;g_bfh?h`pNUx zK;!_}r}W}mru#5ZJ>`3CmHsw{*(qH_jZ-}lt~XJ`2ae%EN>9OT2A|8xqteaB+y-E{ zN_V)NJ7gna>@57@!?r@LE+dh9uaA(%{V!gigd~~wL2rC`WSJKX$h&XE8+6d<9=5_R zgjOK@)uhyoYHcIi)vyf-C8!Y_^f~hkNtZRZ&_?p%=129r_qK070!`pxFsHlGkaQ&i z4_0VYxn89yH#A9st42%t0bS@7ivF+)m#WwA{^JoToDA6xMg$QZ>LBXUg#yOWcHuLC zQjy?so4%$Y3hUca8>-lm4>CnNHwE-3d-!-bB+Zk&!f+TMc@xnBEDTp9bH=Jz>uZjfksSntoTBnHj5Y>L+64uZTKva7kI{PW#O2=M0J(3y z?;aUBmeh8t)byCC>o(gR*q?9y$<_bwJ^6Y4&9DFc=r%SA)c^34|NJk$8RoqGKcSQx z7AoDKkNewBA2)0tLksuCzkKgK-kLC}qdIzL+-$9{Lt?v*{~dM^w2uNZcs@J34H5Nu zyY(VZhlHLcX^z?;-!SArc_ef^M~^c+K?e0>oU%s{OZ$WNG2LF8jZwq6sPQ-g&5~F9 z9muBjE>c4D24B3gZ;6}XYt##SB|?~K4^;X)e0dJ&R6kfoIG9^4frw}p=6ZX&61!GKn*oiePq_;c#V}X{ zQMt{+4yRXRDPViuKv&g<%1G*h5dcE$3(Je?ZW!PMYx2EG3)7&EMF(22n-4Z|c^@Ey z6&CN1LdAvIS+VsNl^m1mVwNwJB4er?8-3YCrK;n8Zvdjh-;>L#Mx^&23`Mi%9qt)c zJVKp0ZHujGiSESw4JP4acJ^{yP>lPh_3TWm`E(0$U^=Nog$7~4pqQP`u9P>q#aH(g z`BM74_+!@8GsE1+@9>ZtwGawAOn(H3!oF!*zJS2cs#|=jWBZ6e$k>_sDy2H~m!Ga! zQhegf;#=$tiZ>3AQHV_n%ej@upmA;OOgg;=|1&Mu$bZa0$`Fr#(`tw!?%2X_c>wFX2Aty0xM-Gh;E3rgyb+d~8tpswKX=d;qb z3FFlM7fLnlM;nQhSi=b`oXYOz)~EMwKHA*AuNC3^2`!nejJN=J=?HvVt)_8L29_Vf zb7x4~nB)y5p%z~~AULt2wg1I%EGo#TNk&B#~qJJ&z0c`dP2ni9WyG9ztqC8O4Y^!SbBN7<`UwH__L-$bN&n5UOtp z-Ndgb5-qUB0tVx5hanYw%J^bYzIZ5Eus_gj*IkUqfy zjNWMOrgP5tl-|!a=e*1i2cXB)pFHY~;2|UIJb4Gu*bV^R1o7Y)M%_npahmqd9!Sgn z0Fjma05|qe_B%X2a)Uzx*i`D#{@Pe9+*X1NUQV!Ww*=eZmE49&MRH&Qm%%2>nKx~M zPUK3H2{&8&ZK-tsyn)*Zk{;Fpvk#TST$TCMNFY3`C|vqr=l(}>O7RwB^QEN{MpgrE z(T|5;-`{?8XFb{F9SZw}8v|mJHC~PTl$ZkQaupKbpkdVoKOuEzPwD{BV=1m-rw3wb zWG(DK??rSXp}~OoMF@aXg;7b3IkPi{2m_4vKH4x7kM5<7U@qYu<%k&-gwdv0T15tl z1~FA=1yzYK7n*xO?Zu1+7Yo7~Bp;@)nZEkpklQMah+gpoOydnIuVRuj#urKWa`I`PY?|vurVE_r1S(^BS2E5?cfM-vkI|IgSb>#*0-PY6 z>B;+wfSw7PWZr+I)6L$!F`e^}!JgP}_gkHIS4@ke zeVhvYe6tIW9&zz^_jE;f8kaGOpF#+ofk4yGZguv8*vLLo=-z@~QU+cEF3Aoj(1NB@ zTCwz|z58%4xTERZyoivpzo(NA@B_dDt6I^q460g`)d}uMInJP4Ub?|E=>j|(3-o5u zKSKKu)p>dij}?#&F2J){=GHoe^ngGFJ)D8?7|OyiGh}BX)k#V=CoMQDl9mM?iG%il zDjAY%JX&W&$@*R>hF6FzdxR>aaGW)Y;LuJ1^A2tEe;l><;M{YL-J-$o+V)X%>E1QO z!GgjS_zEmltc^d7hY|$vqfiou?WGNRk7L92a9x-vIx{PazqcG&&_$^+WK^68A(pC; z9#|)U$^Bp;9DVX%;90?SaF@tSA<_;G0&bPysD&N*o#IT-_iDejeSi1S&HIlaw}GzR zcV=g~11&$nE!Jy}Bp#bBxxmSM7F~7G6$*_RlTSh=+-=gn!jyQAyA_r1IuH>>KTi|0 z8Uv|NaaX!9H&5p@c_Q?j$dGrHYHQPpCEk#Ors@Y3<4}!NFVOp&k2Y`K+x#;lGGhHo zOhhvz2j2)S&0cHRz2a0wd8`uHNy~)5{RRP+l;m2?y0B6ux&N}ZBlCrL67YI8yjZ4x z<69lfj&wxXzN5x-;=U0FRUo5=R7@vq!t4%%HcknMCkWDh53&G-Oi*g>rZh>zoA)eV z;$${uGtf_ke?WtV2odap5&Y=3i&uxOQQZwwy5go&*Jf96i|WT4{FkggWfao~s0ryk z_g|k>C{B{d@Ue_0t??yP8t@g;M>DO#0Ll@%4j){3Bm}_9#HM36BN1I?p)X~+(#vb* zm~~#sOHNF?e{F}ZB){y9)o_Kk62;p{9;n2tT0+9cO#K-|W2ZahV@V)KAQF@OwZ*f< zebDzNsSq}-a)nR{oQ~gqeFlP4F5}JSt4Mv*qL`#;E18{97U4~kXL2*3fwr<4T$W-zvL>r-~hnF*3m%h8~1UrcKPHpJScT>KhFss z=UdT0)gqcZNAp88Gl~y6`VI^YYN{_Q)P0nS<&1c7G>AbFC5k1;G^(hS>06#x5ujK= zn}$^q9(s;8UQ1t7UHt2##yJJJOH<0w0v1+J5cEr2p-k~;LovP zKc^7`=B?n9C$7vVP7ukJRf6~SuA`vh`Ye!AF4#zk-}^qXky*U_tt$>$A0CmQsw))g zGYOzz2*Kfl(vhU`#2{v}NbiXATyRRUXedQTk-GH0R9BYg7=(tw;h6q|RC*S4^O!gN z)5mc8Z9aWGIDX1Yod&l!uPgQ2dwV1#dyu`9>2ca8Qu}}ngljSNQtYt>qsp)cVTDRJ zc{*skU{)lxvB*alUPnV*KfTq|6Ul#!(Ms|uBZbwg4Qc~b)`Q7`Yz&T&Jt?a(S4r>% zR6B+h(Nr9?SB5K6&JWC?rFq&zx{1u?MQ_|`sz(0>y_(>UY*~AH*h#8YyOQB`@<-(U z#3|W6PQdGeTUEE$5HbRo5GHgEC*+_UAQOC1cjjJ8kDGbwW@k#h^pCW;N-hcAKbqA=uUEbb9d*{2Q&&M5Og2W zKsi%aWn)mg%UD@0<3eUj2fuUw&W?0*XY1zu+q((=lWgzYzO$nObHLm_ha#JX6%sE{ zH~Z&C^0I5h7PVk1yfU2RYqMA}L&bVa^^Oz##_@wMEVP>a(NS4-N?J=E{zk|XqB%vN ztA60vP-I&W- zb!r{;JM}mQr>d(3{Zi=}utdRa1x_(*R&aV#yRiH5=7X&}R$H+Hca4$l`kdhIc&yU_ z9YdL@iXvOV?T`a%*E?=i3%56hx9jW_kZ1XdLVdG2Gq<*PAMIXC9&A3ib8qwh9sGLd z(Jht9$jlp_KN}B{z|l^{9B*sE@=U`-Y_u>RAh}dnZ^rU+s zl%8J3hvQ+zn^|y1X|jismS~$)APDXOw%rc;D+jv*Q1RWS4ts1wk#@c zbsy^O^6vad3|C@ZNFFh$N}qwsD5sOT|J=m~jf!|7!hTG9xmybEQ{JzJSLe+j)>eMU zWCUc2D!w_(=}B|2M&$A>djuU&wvn-nW|)g#R4NWQ{C`;c2saL zQ0V%<3_+cE+hc{mT@_d?Db|@yaqDy82BjuwK^#{3OVhA7CfwL_LuKWLuux5eX4-K> zHKC7TM8vzxcvW$e$RvAd)ocP~4crEPOT^C!AiA>s;EG8RTJASw5~yb=ER2m8JDHt9 zml$^+y+Gy53KfM(1~~%-B7|S{Y}zD9#VgdXb+QtHM3(u(a?Lrz_iyT7HSt_nZdPS; zpwVq`xkePn?x&rYA`#k7O=Lym68H?&+|Y~d7J@IY<=mAOaE2FZ0(k?U5VxT@_@bm!%J)=FDZc=7eniC-?X3uj?@}$r8p*u7lrI-Sd8;w_ zLP;VNE~Ym$$>|sL`q5zAlCP*sAfX|_CDA11XE=u{4`{^{QcQiF&Z^`|vx=f|c#_eH zB_(ig2%DfP2d;_7CzP+LEu-0jcMtzG1fDz*M>j3_v<+TBSAQFZW_fMZZBVemybH@t zYe2^{wGfb_z;E^8V4t&RZz%(;wyUeyZmh35K9!t+zx_O5K=iKDZk+`-;!dcGiPRJF z3A{KvP+OAIXm{b+4VQH#+17E2J13wH_*BPvdn(qs4Y!d)o$6KO`s+*8zATlH^78opCCd5gC=2j$jv4t6O%_L z^$6!fTqiPwST5*|b*VOwt{S3ZRJS~H67UUKo)XUsR2De;ZHASwTVpElE*|+PrGwk^FwL4bxr8Qi8~}P`{3RpIH6fkC?)di66v3?1ToRP_}Giz+756 zfyX&!Kn0SX3$@aNZ3Q;0E*=vb%9)askPM6K(-CMA=P(1GRN4)#wiOL_1Eng7qH(^E z#_Hsd51v!KJIwejbc~pLrM8x!U4e`w(AsZ6sSRggnVjyNJSw1QK?{78b|~Q%`xqD< zpR`_w@=g{`k_b%`!=!}V;EekKtB$RceIx6=vn9wUSK9u_XoV;gAc)KQ>f{-fh`|Kt z-H)s{oAn4Zx_|WetVOS3;|sz{lh~*F0W@pFBX|uR_Igc?H`R69+EWk$F%g84%Kiw| zj~kTCVG=(ZtB8$ZXNZRYo2V-Be#o-;qHgV1Ly?Y15r{`d)(1jI&_v_|^~gGNxHsy| zk&}WmPfE9Vf*HfbkOZshG)IDWP~n9Tucv-+D7S#2t}OeSYCwpX>q0J#Nqy(T`K$vd zSRP2ox=cpoJn_Vj&`L0yxG+FOo1uphnCs6@c$Ud1$+AR-`2zM_qjksID@`y=Eu6!|I8DD8oj_^1cvi!W= zNN^rVm=l8ca#Fh46b%bg$RLlH9^Y zdP`oeoh{lw`IE+TyA9CnI@RTATrDqhv!i}*A1hQH+k#vGJlNQm>_%KpLYM+VPBO43 z9HjRyNKUu+0=5*|pMS-~zM4{v5iB$|Bi7G=$8tI@$ic3*kUU$~(SBLCJ7~^QcQ=vbuc_`SH~F66r15)}dz zHy!nd*RELl14V9*EzyU=I_c2$N?fCi6|ew=CtV~&R(?ChZK~HvI$XMZcn;d>ad)Z5 zwX?N6IjRK!{UOpK8-WCQu|Z$exZ*e?D1mGNjLq?_#7Zv=q~qSp`qnYb*xg5TYGLFU zg-64D$wwyVHc^rNgFK7mVi1oa70ub?BS z#h^HeM%lb~p@)7$J#-fJp@N3%0~G(_;?wBhr0ssIalNGU-fEGF?FCWH`0shkcL{f> z8oWfni6ZtztD*M?krARPu0N~l;1hF;@e%}U_fB&!zzRTCgSb9S-N!=+_ z8)Kg%5UzC$-d5ef>{I%e*t_-`oOL9Ua(kQCR7S63zX?@4Rv-&`DsczPh;C}lb^yWv z$c3GfO#zWej*x7HwkH)|1GUlvYaJbrlr3`;1kkNIqYj6+7!W#r@7a{z7G6~8iGg;T zpX_-pbbImMCZfz_p${;mW6i80nly70GL>~hNSsmk{R1lSb*}~4h=^__+ zSE`lVyDbS!oEg)231!KG@X`_ikw#8QosrI`0S8Wm5JT(YqG2poT=l|qp9dSONoME^lMxx@6L6@`k@9} z=e9%>no!4Je44HBz}PCa!erwLWnZBQr34r3y{K2fUHRJ~^5{T!&Z-08!DGVQAsQNo zx1iN|bJS!lDu5Lu4RGqiU0qIqFM<>td4?Nb$0de)Fm3m-IN_k8BU<&fe66U*4h*WP zB+KB(9ywaLb2HHqv_%5Toh{Cn!n1fR!_Xwo!%kGTs!1VV#=K^x0S;CsJbA|U##EiA zo$9o@&3yf(qza;P({~Q%Tqw$s5uHE?U8Z1Jg6_yRl>0u?2vz5qt*RH#)k38*B~^lISAtWRb<0(wlHyf|NTvQ=!}JcPj-~|{B?U?L&dV>mI=xrp zqx;yJtishk?l3)HW>kw;dd8zc36*J2P#|85kRvK?)sTV?()uH(Dbz`d#?l&N9>Y+0~+F7){%o6V$wSn$`AziUu3}Y1FO4CSZFCtZPI|WD1m_RtS>(0QHF=fcMh?hSw zQ)6bov28tgqS^XT@~b%?+W~VhJ%2PkRPL^fhZ2$zBSFZ2djh3&@(f489EpvyABpT% zh3C!lBVI#^4O*be*f3XE6`jtKHn@W~g6gYO=j?)*>Hg%g8v`@&@oAOH#mfeH}kRQ0x=YP-Oqp?ENK zIO`BC*@j>Sfao|8DvG7rQ0`yd2hsgc1%})y*%NAr7{#B{;w@CeYkY7Ef;&X}9kIto z9A-?PXowMHcNK*^N$y-=vL(ZMxrxo+!V^hbPLfNF=5ypfgdX@31+ZgDnq)iXg+NZ; zm@FEaM2B*kq|`F?ISAr;!OqQl*I*X929v$UH*If2H}I9sy@h=;c4`UxqmC53uTI_f zp}T>TV$x+W3jdVPypM&*i+g)c^}Dyn#9nDp>n%5Dm6&|UR!Cb>1L%P88=y5Ohi7(p{h zjLRW>j^%J%CNmO>u;yPG$GuiPOP@hRtm=`nO~|`C>U?HvLc%<~aMLVbt(iK*l-eR0 z$KDI9bvkjGhIT0JW?DqMNT?H_C^rxi#*J^4jGHx!a}Xj1Aunr1RhG&Ynknv5tnSib z9T6J7n5VnZ)jb6C;S)?<<=3qN>~sf&FyQ=x9wuViEAKoAw%%HD&j;|KBWnI;o(=Yf zV?kGHAy%sGAvQ!vB`_?6nLtvwP5YEZz0d=G93z?^ANE+kINKEGP=G%KfpT_N zcgooh9TQ#`V)`bFI#XX*RcaRlHqOzTGjg9+YYAsxFZfUJv`o$5JHlCFzrTNsV>5kEJTw!g6miqekP&I`>@AyfbeP@c_s`P>2WN3p1aa1J0awAzE^4&uI$Vs zi-Icr%4&{IOR}Ntqfr-mw+TtoAw0lxHeX5J&ONP!MZR#@L<7R0d#Vw0w)!bx1cb(IB-u`;`T~V( zj2K)$^Jr%G>P#jD`?pbVVs5G1V(EI{%InQ|rPYN0eygmaip)^wJgPCN@W zGsEiUXG0z_(hlG+j(OHBH7u+_)0f0Wv`SV73nHK6K5+kDf z*LD2HfjZm|*ZbqX&|zUcbwp@OA|_JhWjtjj8EJxwp2>m{_MKCRNi}92Ll7L7Sv0(w zpS3}G25syz$vu5WsIoSvLC-hbrd279a!@GW){vy&GG_poyD5ddcdo&5$(1A%8h z98w&VtW)%W{?hQ-egUN$bhVmMk@~kb5;oe_SLh*ypUcsVtapo4IwCe|iKB4RNWI8J zm`9^gf4F}A`eA!?G=2u1+41#zD5!a|+dV4NqgP} zU&!PcZM5%7$Q(UO^aAwP!(`f9aAAVnnU!T|aQsC9`7KyXp-$nfL^_^?;|%L#GYcUp?cZY?3D)A)7Pc+x z?&DmQ31#Qwqoxk)8gI?h!a*3X_>i@NEyU1V?c{+8Er9Lkm=T~FypO+Z>1b_c{4?P6 zY8BN}S=^0M1KhX^8QYzv*M4nhKAY1tt$fU|>; z-#Hf>xZi`Y>o>K6lb8dfUNAwaDps=uf3A3_iN2Yk2Q0KX+ek6VeB^y(EwZLl+{oab zJ+?ChQhN4Lij-vxBHM<*ZXM-C1J2bNSsV<*lgFG*C;{pbpLn;sC4=!+U zTLr`*B9HDHFCH?y-mTJH?{EoGhfmjjGAyUJ!6fA@W*Z2bu?sM1@&pP#%G*;e_x7e^ z(*mPSVeF+cYnDR_H$ehF5kIFXdgy$KU9#bun#0GiZ`Ki8xEeX_VL$O^I@izBqs*t~ zZSvAIXQMvR9m9FCBe$6#3CAB)_KOy(1JcRSNCCVRjrb(22I_VK_e?}^@=&907hR`%kLQsS0$MWIOO)MeIfEI6h$-8M4RCh$%(Kb&iWMJ z;#8r~>^=k48qZPISqiv@dm(%3)<>5igovVSf-tYh6r#0DB-;>uI*>pBx-MKIa)DS+ ze27xQGK3xL6M9#f6bJVn8TB~8c-X_#wKG&Yc&&kU)3Z@#zGn?%z~;ofDdR6RrCbFU z8H#7Bo)J0E#>X&5$(k4m>)<0#sG$@+CUlB&$708&Ysvi*_Ib-yvhi9*TwCON#z@)4 zs|M)ddRNBkL_2M^4-RlSqf%zjBZgsXyWRH7tlHN&LC&e}a2v2U7?M(%sE<#690~^8 zE&R|D>Vj|?pdMhI$6>lWX#&CsV?2gJy6_3rc%V#DHEB^tW~^d%5Iwq-WDsf1nesP) z&MZ7jw(gLDraSnQBFsLM9`p6Ej)%ecr*1&5v49cYfX?QDo=Nrxs=Cq!gnw&PK69zRTqZ4oEOfo9+_MDGz0&pwsiZ;$_-zWL^P8U}9RCHH>oI*Uc zM)2A2LbD_iPUawa;z26JiMbYp3uKO`qXyEsAQ)JrA3(T$*hX?y?O6E-5F_=>bLDC#1AT)j!WZI* z%RA>o^Q717DX1yBSqSB>T{qEFtAblksX=&(cp~*4^8_ZnBks5|jvm*iY+Gn_R%4sn z!@L<7aG7%P*X6vc8t@y5yF;3H&uC-u-QiAZCNxI{+{aK8(b~_gY z<>?RCZuAJA-e%iZAYQW&T(;>raj0nab9Oz!3A{Ej(oXN-c2cva z5as6+@1>|NlSqa+QZ<-Z+)V7HPo88tFRlku5Qce?OK_&_esDcv@2A%C6lY#Lf5i@& zp-8Jk%(A)RQW)e6npTICL%F{fx~G}!QO3N#=h+LLJ}vUsB?rJlwds@xS?NJYvuWLTwxrT?a5QN@Lun-rU-5QsvF$tCF;Uva-cktIB^aOC)?-x$&3>Pln$ z6;eZXTEpx7*7bcgxl;Mn5F#WH0Y5J|N#L#-29vY}clABUs+8c_2!U-=IkHm@w_$&= zFI<0I&PIAMW@t*FA}15A;2sQ3}3FFT}g^%j>n(mDQE%^~I$d ziz~~kdK*Yl3!wf8!Xz-f(;H}SleW#^yWKT@Dqj+UPZkyzAFnMQ>wKMl0Op5mtEy>b zmQg<*9-@nbOHaBlUF+8$avfS@L-1ZV`5)$>9lm{;MbOvDPk)xv*qx%BPxReuJuK{1 z_E8u#Jam=~eH@>q*Oez-WZ1#aBmk!IJ_G=G^n*)}aI0H<$UOw!hE8NeB1s;Lmlmb` zEHXVmfKDBD0{9b+(6LfH-YsWy2c`xQu@pa!SMpssuljJ&MrOqs`~8l!ttdfxy(<&H4Dz3 zx>xyg99GzWDHudgCdwq{(|e$i)a^P2HQWVaDB_^OTK1ncI%5rth)2Za!^=HS7AftD z0CHkt$08}j-3xLnNM|aA%)vT`qA+7k%X`Q8nK2^`39^f-vVEpSkYeF9H&iU8ELf<} z#f1EgdW?#k>oW^tpHZ8vAjQc?*jB$PSxkNjrXUj)JxQHwsr*5zWfN49JBWY`8MeSD ziKeFnd%&XzRtf|F%(-gVBTp6-*NhyIbOh%%lJ!Dj#}yzDR535NKW5On&~9c3Ag89( zQ3Us)sLY+yip)qgK$b8XZp<(OxFv9tJ#WAp*EBd&0CaMdbC(|>kvZL2p8%O;t`DqO zodDv%@yQzTZ2q6X^NF--DDF>yZ{!WEbTZ`(73Dq=@==fu1@f*QIZ1|M9iaq()(eVz ztC!=pcZ7nc5x2mmf==(^25}(rUQ4+^aRg@LM-R>m>NF=PjX@o`ScT0sD8Ljt);AuI?HH%=Yy|Gqwn8#;}A+^oF{$26?%?EeaN=$ z&RU$*)13l8P9nP!q7|S>v;>}3p=H@KXVJ%I(;^c~kmsHkvk&)C5RDMjs?Bzj%-{k< z_0+SA1IFlsVEGG%x_u0EI36Ro2&ySN7pDM|Of>K<&|2OBhNOm;^9Rzm4-RAC(MJy} z3)>jf$b1G|l5bM@;ZX?py~>)ZOgo|3$B-+-jcG8{WsB%)r@XycmxD@V+TJb3AiLtJ zpf4x{mJyj>-p0isfO549(Gv8tw+`$U)9)Rp2aW;orZR)@dlh@ap#C{tUk6tdkfY;mN9+;jE^v&3IyE%G7?Ok)47L_@i^4)Iit*+3ahSzVd z5VjM6Re#WiC4O|G)~qzLrtoy@F7Fc)+$2*j0*N1MYDCI+PClIxgB)@j6XQCIW|P|q z7zw0{jCeZRmBP&6tYa#LWEBnJG?-Zhkr)&T2fZ3DsfVY z$5nUhm;;}`PiN{~gNXob8)g2+(7~y3*F+iDmZwJc1eslQ#9S{dfmE6?Q@*NbhtEWP zX~EJv+fYF*kl-W|DsS>iS6~Y8R`i?AX7J;Ms)<)NSu{?MB#OUV_4tGYl59P7K#S2B zxMYz~MFnHfjS__RT(!QW+ z>L^XzC`kHlqbT`1RmCYqZ*WAxWekqt>cZ;NMaeP+5k-^n6g3XqZadf5r+|dWls3a8 zu=p~J`A}kuQw=y2xcHe&l8?enlE5&qVUko}pE^NHi5+Mu@?G`|f*=4y#5bC;F=s9q zcGQM08T)502D)p*nP4cKUZGA$HOV;RI6B5-P{uj`fHguh+x3KiH9sS;_o~)UC2j?X zkOGFq>(~}%6j4!FEYOR^`e(!G+^r=Uy<@trzE2W!J0-~^eqDe&lAsnxH%pE+)} zQl`{Mwi)!vX)u{|6~dCv;EZP#1k;fRzfT|)nfX1nPOjjg1jaezSQ6l3o8z)7iY>^j zIeR&A&Jq3>KHlBj`t;t-N1NOClif$3-o2}L;$YmZLn;`xQLPsF0@|oKUNWZ%$BN!z z@=SkMb_uBjkn|OnwN|TXylk<)Ll!oNsd3;c4}j+HjJvoHeK!b#(f+Kbpf@4HGmw!Z z6h0I4jTvrl&jzi)yLzWJ8V|ZsXjX7@_s$mkYQUb>IOOF7>j}OyTpUvU40@op49U=e zc>|Xo^%|a==6^odu3Qo4p1GM22QBxS_3%c$yuG9+1q1nTgi@v zMY!+!$H~|Am(_BqS~i``U9Y`Po;;ydbGV0v3|q(MD^S|m8I@jdiZS1U77$YUg`OpP zPz*Rc(8RYOA--XWXJ?MNOvZvD*h6}m$XICS0avUKUf~jX1R5mUUv9y8-NBvU)T{^9Fqy&m>0D3^J=Jw#{&(gpE^3#LM%9Q+*nq4%`hPTcOB}f8i15rZsr+0$+TM%yu^7oiIccIAl>El8; zK>vh$iz=Z3Sd|v4-@%ZF+lew4=&PV4xCV&?Ymdk<^Z`9|JNmMDToOKg!=uPGau{q2 zBRkGwKpBYt(ImLzg}aK#DxAV*t09!0dU4DJ7-M20P;`R5f$tHL;gP4Lj1w;g9R2n) z@Nl#p&9P2G3tr4TL_%r=ami{)j0O5*X9$fp*hO7tgF~=uAbkZBLZ|qjbwG!3+hHrX zVdzRKL`SfW7>(^flTOHzy;T0vMfIImNXmc z1<-@->m{34j>BnkSS)wg8aI1ooeJ!{3{V5x0cJ$D5fhTJvA+odQwBYdTb|T-@(zx= zStQ_kz|mC558y?J9HIoJyB&l}yqp-#gWYl-F?=P+QW=ZIvLs3hmF$F6quh+MB**uT zp%LL-2ZlR4s$4;u#}{Kq2caVII8DV^IU5i&14^Y!zSW_X#&%~G zL4>cUr;TaV=$O1(q!&e35ti@C3ET&4b{al}>$luldPwQ_?I?zAN%{}2qjem&#R+Tn z4p3r_Q!&1}ZWtEh)f;E_o7dlzem&~}{LQcavhv=0pDcg!kN@JEU(b5HH_!j0PyQ92 z{}9K&Z=U?mTYu+$Jo;O*aDBG*qxZMw`S6eGx}{b(&x8hYUky#e>ib)_*zk|x2-U?( zVb1h2w8o6trgz`p`tRBF@8>qP43lmBKfb^9S8V-bFg^C@`kafl)nC8Ab@c!4J^#)JnIe=Sx4>`ikxU*jACqalWu`2gT3*zTkx&e9WV+lY|SgqgD3eAmC|GfMzU@eQs>MLdI-CG zK``Sc0_RSb|M}z&#fAac1Fx7eK+z$1Ve#u=;_fpJ$Xyt;U}qbGn}#(E96%#EL}VFU zM(A4F86U&r6LI?UvV-!8;Y0Byr1Um}<;997lcXWtd}fE%-i$V?y-}qXE-MORbSHDp zCH)3I^@#+eQ<)6VbA&-U*vT$F!2N%v_NumUMWi5R)WITZuA`*Je2_X>GkeeTNL$** z08#}fYRTfBEK_f}@l$y%iie-=?X5#Qf&3)$F;}LYDQL_mw>Nip*pP9oY$D$q1(OGf z?!(U!89NxauDiRLV{UG*4`1P~ZL$|bpsm{s_%yzu-Uju*qzyJ|ztv{CD|M=Ix*W(^ z6cc3~o7)fW753`#evz5Ubf4GjI?%!L*>ZJYm?S8ki5(lXp9@yf_NrP&bS_gO2JGz( zAlR8>q!S0Mq!)dtJgGL@U_d2Hf8#S5&8soo0=FNo_Z`rrk)000D?1H@@A3Qrqitd? z!Vgo(Te5-K_QSg$t=oM_b%|3Dg?Og^7)X>g-^wSlMhn8y~`CeF)}Bwtjni zz3-P{v$R+}G;d`)k@C$6bW#>6=a|exuzEMxAdA)Z z+Rq){cA@Bz-8$DXP}}c)rt2xNJJWZ7-?Bb8PXjj8wN9aUri*+mm)=MfCS$oBF9*?) zh$d&X0e#_iu3N1DwzYVF$udDz0XMR%+~B| zIm9!!!^HWB6!oHvTMT(w7~o(771?#rEsEZpsbA*=X5#+9N`y(%WWhjwjV@Mf3y&iW z3&h~<-GG8x-J>%<!mxY>jzGFm_fAK}`IT8%X_T3__Wy-raGX zd*g9V|386S48&rlppQfiPeHyFZDqHX>#ya&B&L2kdj7fRssp$#K^-qxiKO@gCwc(d26JGGDky@ zsiBq7c0>CW7Z+l{$G3RBhdHOQqvCo4_4m#$iyDFdzrFL>jpI1ta0H*Y zKyJANL4d*Pu&YR7q#S8)0Ld~fCZb4-G;DwnxTLs}7nVqcyNno!2J#Nc)8&{a$@i=3 z?&uLh;Ll10==C0LZxGS2s!gvZY4vHV&|XhV*PhK=EQ6%D zSgMdhjLM4Fy>R_%_IGcn^A%&GqsipGu8IA)Su4>A3+C9S?4rM)*3f+Ue1({0j&KH6 z96eN(AWKs9&a?{Q*0DK@Yfq-Lec8)3h;h?Q2^0SpP8Z~qaLc^{*O&s#ep!1rB(%&< z&Q2AX@jgAVz1%x?uioBMZ{?B-b6t8VJ=yk2Fr$MX>T3TrGS zD(AP+4gBYD=jZd0EqnN;&N)Gdjb^r$OrByUXxp>~4`UmCR@=zGiZuM7h9+{Ei{T&_ zPG5GTNsea}rbJ2Lz0chQyFcz~UH?ZUJbDcD|;{avoO!2v{3Vxf@Nq*%Xnk+uc@yTzKUpV#bj>&4L3IU;I!jb2^b3c>#cXw zBa-D&keSmMjrHGu{)>C{e)1r~wg?KQ^iGpF-c zXL4AbfXh55wqgqdkriiEeDmov^wOLsN*CaNW`Xf|aCk7Az8Yw9=3--uUs_iWw!VwM zHg@8#t@LZ-8TS$h85}ci7>K7|$L2ff*RFo0=6KAkv9Xg5VLwC`3<<7H@rPN^7Grrb zH<#gfTxYB)mho6~`O5dlEDcZI921_>!B%314YQcOIVQj4s3}X#Y>06cb48L^r6#q6 z3^jtKOkF!lhBW=@bLCk%tHL1R9hNc1@TwgtVGxNU z(XUZqveF|n6!^jD7}oJvXtIu=-bj7WN7Dd2>*}8sAZs8ctoWxpck-jbieka2$md=H zqmp*hB!KN(RYen?)q`sD;jb|fmw?~cXq5nX;*IS8i+^g_yZyxv8jJ?d00DZA?Jav)*Y_Fdu$L`=;{F~nSW8o z{Hx`j{<0v`A2jpJARbzWMG>hF#Y;j=nc>{{9M&6X*>xIX-1TRoWSrc-ETkb>I6^O< z;~jho!Mtxon)6+Z z_OSf6RXM(Y_>cSkjVmw|kEJlaR8)b+j0;icX6?;k!-^I)Z1IybLJGz&<8okCw^^cC zSv~cvwl%=s635M%0DHug44|;tjvXL}Ae)_?Wni^L6YR-3m28g$y$(LOtQpO19twx< z2#Em198nMF@NOum{eX13$=k_0869$pP2Zy~S+=Dl7G`f|PqR=D-g2&)o)izFTc#yo z2XaMN_5ru4?ZW3oTjj-Wnmp5V`^-iGS7@38V*g8V=h5K zc>=Efc_tv&Cb)$ste>LlUB3H~;iBg**>EIut8~LZHbqTAlBTY$UeQR0SFXr#g!FTa7 z&lX1^hVqRi4p|3Xz@oYan`qwCfL|^ov<%S`ZA1C*^*l_Ko(>d{V$0thR9+zT&xpN zBEw!;Hn6s-q4jLHG)-XgUKL=B9$2CpAD4$<5=1kfmk^|_k6lN@CE&8juL!$(a$JIh zwO3pbQkijD8Fg62ro2$5X$hj1tL1V~hW7mKLyPt^D_0CiOOl!wU*%b(_aB;}SA)IR zC#jpA?{)v8n2tWuZ0+cm{>#G5(fE8+#9#H6kaYA>{cyD5T_d(H8(UbKV9Cxh<4QuH z^~3@jDSM$3o4_~kk1R6L(9;iUrs=(+zp>R1q5!V;+4hEzB|F%#Za+(SvAo*k{Q79C zCKBkjzRQp?uXdrcsiK>fRXmtthHCxW64_QKs$B100%N;bCcGIRcWxMK-9QrqchVrW zSozEdE20Cs5;rqj7c;L$;W*Zs?WZ9>*+_UX0K3p$Qij^iK+wI|OxR=!-VnNWix70+ zNcb=dyU<;YsL5)GCO!zaN(nLpu?yoR>Dg*0f=)Qn02i2xxyHF9x@0thV*N!zu)uP> z27;RX2%3#j{4pZC$aXbGEifg)`nc3DGAC~qZIX}LS66@-Y>BK3Y|D(Sd;O zLy_B@^kPTDPB_Ahd~ca}Jd|_YJonxYe3++7BbEWH;D3x<8!|JStGzkBV@`V$`cvx# zk&TOZuBzVwJyMlq2EAqVi%b6H;klB3+)ey5zG*w8=;9Z{@LVRO2U}0W6UrM$BI#M{ zP#SNX;@tLnI&JEg90Cu?hcuC}McQKVxO@Y;l*aD?`#gy6s~8v?Hf!(_Z0@ZH8PQU5 z^Oxm?u#1`x2k;tI{2hWQ4%3P&Xo#Vbx^T zJa9Br06pW6oZLR*7!U!WGO1v()ei`5tea&flOn|gZD#DKwgVW=gyl`S$5_j&wdFm* z<)$|h2KX*KoVwcW;(0vqK01vue|RpY~qqn9jK#|Wb-XdW4tc=tnB@`at#!{ zTlCk+-LrWi)yv7ywKV^zh1e=$NG9@dn(rvg-iy+=WYYX>Lg+YMto|>HZL*kiC8XyK zKfg$F(p8sKz8-vZ!Td#1dGT?&_wXg+Hjq|aCZ5@Qyz@Zs%hJ0n7bhszA1wdwp!mxUH8cc)2r8Af*@f!4 zQ3;kQRHgp7CN0=EPI4$E2ZLg@2vAwqL0bcv>G)rD9Y}1Fo-}=(Hn=QPz;VM~S@rCy z^&KKLDk@nwt$x28U{;1-la=QG8AjJpNd?qog@_KNl9(qIZ?FPEV*8l9V|(5K3n77) zksny~B){j4)IESYMdK+1>Yyb?jmOF{QP!6QICWo%QOKW%hatL~7G=g^F=P)D32ne6 zpV@XJiIYm&pUjkoXKA^p_Dvn)b$|$vavO#fqq+=X@&N~woi)Ie5mRwvB-vxtWzxn^ zs`9E}e(aS@R*j)T3uTzv2nZi%11*&I!I9d2rD8)Z>Au{MjbEX!^LUB4O z0+YZTI!}tXuN*Ch@+h1lhd57PiKYaXB@nSmB^S_H5=5VoXd<)tXIP5HY+g6<#3%b~ znoU-<|0bG(F=t3UrHC*2uqqGfAmNx2goSG*ATcATJ@6Vm8aCDM3GPd`kt7q1?4wBh zJ6c3}-OcJaD9V{7BoEbUMI9dvo(%5URo10Z_FK=yomSeXbmisr&zeOZ7(n}4Z6iP% zAJSW8mUJsK8tp>4i}>39B^Z=oC~HBxkDN>Cb~1;I{|iFoSL9C#JmBP0e3EW%dq130 z@S92`l>v=(W{fi~y<;Qw!$ZQ7Jj*d(&2EVzjhB5?63J24RM$}ksL~`ACALKsX@_4@ zS6_3Ce^L~MpK4#UNGN@PL!AdC(Q7F2w@+u4EA=Pckg6PINBVE20_z*cVJ*FO1%g|$}%`0MwZzf!@5-?$xJb?1hn0bktO{Jq-zZi(MMG%apz ruBqv77tZsc;po=p-)Lxs2AT@L_CUg*eAPLFB?vP|dihwO(1zZH2z_qu> z@(31CA5km_qF5;wK$NQ3K#D&8YzY5z?wy^PO?Hz^DDTVX!%XJfbI(2Zd(Szy&g|1~ z^xgkhSMx%jRetNu*_8BnZcg`?>S!r>>HkbO5Hj(lYM;%%8Gd8OO&T+{aAJeg zXVQcr!$veX&7(&Q8Q$PDjT$kj!Rb4E#8o3E$yW#6Pi+D6-$5e>?diOz;iiU6+dkWV z<*!5em)Q;%+Kw!-eN$-rw$OI8(DvQ(2HOv|leSZkbb7Jvm&LYUJKO%Z*!G)T9~=`L za8rZr&-?(}U-18L`SIY9G1n`iZnE8MtG6w*EwbH~X}euM8yp|77?_t9+U~L~m(xOG z>pgSYvTW_0zV@1$I%`csZNr2Ho0hF^rZaT5z1CJYv#6@Byu7Hcy1c>Gj2JU=c@Pp& z<|wU`H-vN}Y4Z0WU9ZX@mt9tPXM?SiEmKNU{_bq+;`-a^Q|l-zS{>HD|Jwzlp!Aq>j;_r!jn~DIks*g-r$n&jHz&x$uD$>?V#Y|45+TDEwWbG z%N?_I)wSAYffn!UiW_Xp1IjPq!$FNc5tHG%EFyJ;OUDXZrCLO2MMS|Er zY-^>iX`F#I6(!ZRbL$+nU{#o9W+b-K?U57Ux;OGF-v(%QsX^`%m6CyfqBUG=YcDB( zI|Hp%V00yQwKhj}gRLWQRz$`3aixavRNyGL*VwFrK?re*q*6!Kf@=G0TWy0a9rC^z z)qym~hohpee3BQd@cMHxb@s9biPP08aeAo(YTVFSg)o3qX9K$xsd8R)0@UT&=)`yz z;InNuR|RbUvP}n`<@_sJsk7x@>jE_kJW&6j( z4{=pDjF((yttqXxSJm1bm5RRZ>7|a!+G_jEx>`U?)TcpS6_XjSaM?!LMoTWo8)Lf? z>~wcbN>A0~Y_%2TMYZ@()g?t$V9n@3 zF1gX7u#%eEE=6@!WhJ%NG9^~HID$Dx4K&`&lIj`=!%+WZXqyaqa9j#pXT*(#>+^Bw zxgW%Jfa}k3@mIKVhl$)(<@VYldu5q*KKPG&8d_XYjiau*)C!FYQsYxWMp1kxxZW9` z+DOtYd%3l!rf$|O`+N-rrzoY|UO7jXCLfGP{m#aBNOmu=#^#t;R8wWMSI*}p4oZjv zzNrZv;d*mIGF%@_NQdj@1k~g(zmmiO@b{oZ&Y9RTeG8hOOKb$MB##EwR;Xk(m_J5> z#}Z>9(`$*7;2M&Y2-hx2SjhOKPQ6`uLol0EGQSAgb(S5YmMeuv9!Tk-OOl^YO6aRH z%(m9nLbF18MO8^@EmWqD;-F!!q;f~8us%q;Cpnh%k>iq+!B=`GV+5X_JP;@kB=;tL zUivh-fS8JG#d7=99^~4WCZ|44Oyg}6vn>q$-t?U)3AXLalh*C`!Q^i3Tx_3@59;QB?! z%i$W>sViLjbm}}~tZkev6JoD33frC+>De^3^hV~Xv{dNaTAq7mNsYC#q{7+&u{=Y5 zs}owwzD{Vse|ECKH6asm8I+j~*YeEHYR5UmHWW~MJQJJqgG@x~r_4@pjp*D9uA@35 z#m4`BsB;?py{U5sT#t56higEW{^Y8cMt1p#z(Yh97SKDZGhB?n*w}2u(yhbasv!YbgfV@{*a>@}i28`DNBB z2z2O#wwzSRyEq3u`Z@mhCplw$yPJ6Tk<_ga66bWYt9WJu{%P{zZkUPW7DA?Rxn1CT zLvBK*tMF1=nOcF6dGDr=d&q^P{4a&`kBS-qLtJ;avj^tE0G(Z8ml(3U2LckeLL z=5K3fgMpOOA9@CC?3#w<4Vg|qdu2^64lSH9B~|urHCDT$+q{z5l`uM(XS3JZD;u1F zYC`o~d0|h8O?zYI2|W_zl|7z=wO7=Y^8nJV#$Hhb($jjy$rHLK_KC#g z3RHD=O+^umWb7qS0Y9X|{{|;lil^fRM*1T9v+eODhC1WfWBp0I{6?=1QBE#N=*oep zEVar{cTXmXY}_%L7}Ma4XsStreC}*KbtbahJv0&Yj$+~aXp}s@M|6rPF5FGM+G?w{ zVMX0cTc?+f_nJb`dEERn^q@%r9O3A@P+h=`qXRhPU#EvssHAU(zo^M z4v51^9kJBUefL)WqQD7fE~7r_hCeN}JWE zuw5TZAE-~^DeI(f)ThY*T_e4xKE>G9NITW1&iS#@F7>Ia{I5D^P?=R8(XTf-ET5Vd zC7&81*etJZT{8V9l=++s!T6=$T!40_+;>*E95!qK=bkb(P2OtLS0ABAYj&xq zhx0(;LV4TR6nWO{bUm!l6rb~^_G?j6nQpaI|gjUTsT>0Sr|YNho43!^A_7U zI7I&9>TnbER5Ag(5at{REds$s<>3_w#nAO6DrK%^>O z4m8Dw;Vq+efiuNXO5ZDZh6a`yx<%kMj?SU(>N0 z@YT)a9kG-Pe~Se>sVDpiD_p(c1~b_{^67iy>XGIQ7+z9aVwnUZ%$f#iAW)=yxYW%o zkp{sX%g=*5w7IaQ{olzgSl-tYc&jib%KW*|X@*&b6~?_>=rk@=>ccks zk!S&tpQXT2RtHNJdJb!w@xgIWGx$sg1zeEG&sHY;t8KQc(o(9g|BdHUf2kaD7fKcU z%4@!Wi)*gtf}`ypv$^;4GSVU_ulpmwSZeWnPW*g+)bW zeT%3Fj<%zM0l$@~q+{iyi;HpHyL>@Wsjb9bSybsLv+4noXKYM$bDy0T7LiX{L_~13 z9TDvKT8T&sA`)6$jPp!fDzR4AxM6Yl-FP=Fj$c?Teryp7!O?asuS6`-4rdkQK3zUR@=NbyY~tq+&iTu2cdZHEWPL#>1-5fKOy@Zg+Z4~{%{evF%) zq@NcOO@K&i5eUK2b|7##=oJX557s@spsu{uo;^bTYj;N&RGrw}rCvn-fo-jyY^z*&eLJn&FSs+L;^r$+Mp7TZ8@w7m^*_}xkz zB820c8fI^9Br>Tt}?Z<<~<78iSn)@U4l3f*Jhe#ZsCB~mvM zytPGO1V`I}!6k}T0+WQ*4=yftt#i6}WCw1Fbu*F2F8~xeBpzuI3Bl2JByh2@l}O0P zZ;scTBe*`vt>$lC*qXoIV$B6d+iQ*stF5iMWnrvV^T7+<1LD35Tk}0F)?9G3z2>-x z?6u~iQwko78xfWQ`Nn@jp;Ibe6jje>Bfqw_u1cSTD|lXuZrUgL6&J(m8Xpp1fWoB% zbVpp&^B9TDe&;h%YBD|`T%0JAz3WH9Jx<64SKFHdS20_O36Ihd#l^GimG)X|5u6vX zU+<{Y51A025cgz{NLkv1R2pdNxf@Sbpz^+MAvoF&6E4xV5~gI1LUD1WbzTi@=ao6C z^$@XhLBzddAJ8T+ykc=hi&zMbwqt<{hONYcn~ZO9akX$Gofpw+&rWpp1x2HsG`U4M z1V`K9z*SSPa0vI!mt1`--+t%7D5e?UAy_VfHqCrd4h#`bN zpi$V-^)&OlrLD?&cG7yKCD1+m*n55?%ws?kY;A82T(E8>B=U^K$-%A_MpP?8-qkab z-QAw}yNxa$zOX<%pa9`LS_zJ}V}MKbt;E2B^@hbXxAOz~fF*BSlIVuU#tVzah8EEf z9BoGfw<}tS29HVK5>6NH=YIL!lb@_R!g8P{*sNz~nE45kWe|C2e%V}0o{IK&Z z9yd{&DISItJ;lI6DR2CFmWNxl&6LM-Ylv$PwTb-~ooCs2(59KPc}G1Fb~|YKg4L^B z`;-w#DPLfj45z`WYhe!rj*<%KE6z`yI%hz+qjI)>Pa5^>4r+*v=6c*S=3Ds^?w|6* zKN9X1@~wOcH^}%AF9|n=_*TAzn<0EFU&5^beymHvRd2qPFX6H;-^!P85tg6il5iQ4 zZ{9+c{4x0BH?V2pVX3YLc|ZA zNH`tfC$#ujnI8g>a9qkyW=S|4{NpFE zB#cA+^p%8>fS96I^RDJoC)u~ zSZj;ml>|Hw(A%|P3{Yyj{G78LvJ}B&wZeU?9ogjShRb`qp9~Or;Oz`JkPT+kG!K-( z4-o8cNF9J#r2%;1L4PGE-s=5$dGjNQa@hOfvSqWmo*y4rj`ik(oJIt3g_IKrOH~nf za1qi%xOv282_!iE09oAfDDYOz)*pe;j$!PUd#!#T=2g^WBVOLX%UgJP+h0DqdST3a z@VBDx8YJVYhqKSh@mccIEVv#QAM@2(I4%Sg{>eS4f6*hk~|yc zQ7*!}VXoCzZHV5T+hUA6XhGT3{k!=Oo^U}jGE>78V79LWqdWcADWlOM?=_Jcj*v@OK##-1OD75s} zAeoXrTHwJnt+#7KuwbMei5ZH$nA3kOynlC{-8xShF*%IX1rh1jxDzWkA^}uT1FwdL z-G~UgUWOLDX9-00xScO-^2(Emq$eXWB&rARWMm_HB3Rk7?{#idzz)tUtOPq14)~pOLCGRs#YXKV|66kGLDn(t2IZjV?%F zyBYM+0$bx_i#ys{GtYtTV=m4uu-%R2bITNoEwu!PPa2I~KiMjm+!xi@G(Tvo%9?4u zC)D)TB9|_*{b8go3MAp{QyN3^n-MX3`_v%$#fS(m;q9b=^`eHiqyPg$9hVV3)}b+C z@kYdWMl8mN2ruzXAl6Ek(5s=vH(|>yiD*8)yD8><2Fjh`j<=1n}l)nByuc0cH& z#y9xe^LgYMnIZ;VZKTokHT4|tCUbFa@oo+3!{ePuY^h~~SN4JY)8V5fNTOp1`b?UZGb*3wgqzTN2TH$h*o&RT`@SA&BETjPT1RHItl(ki3&6`VvmfjlV z(#1I0NL|of5fRTpZiNw1`i9hCS!P6pmms%PKzmV#bsLQ6siNj7%Drqvl4sD?8xi3p z$_da~=@@!7v?wP`x+M|KN4XhBs?t~uh;sbBK5tHSk)zxR&_|1Mjb97=wXHSt9OX`N zac)uWESArsoJee`B{+Oal-nKGG|K(lR*f}x{z+)*twAnbluHUSIFe(4i03F5Z$y;d zL^W7qjEL|ObW0+d zk8*R@q^&CP3srrsLr(nY@~jnswvF`yE`PDPR6#zWu7 zjfm1WrUuI+Mnrgteh&(0FX|ZY10#C6P)lzN*n38#cn0hpBO<&+J^@%O9Ye2%7WsrZ zwK6;TyHhXiNuy# zf)@f&j(p?sh{?IOHihQNXSfKj2e2+(fXgugJ^<3>gh^K;0`#q?fstuMgqN_EAzJ;S zhP4Ss^aQLt9xxeeM2Kg+t}-IROH>nhwbBvvYG_eS*l&G1@?4u@qJAe#TFY8qHhb$g>L5}yv7sB?LcRD{layt z4s^;H_qUg4>|GJF4$6^U#LLTgc?B=82D5|x$ikSn;GxN}&4GAq^Sv)4#j#C)G1hzx zInVFdrl@dB#>c^u@Nko-BgMCzj~dXW@=vQYYkZpRUFc(*S5BySFNk*5shZt<=0H<%no8c7eZ=lE96#ks||8`bzG5?g8sUWhcBt-ONdHlE1Z z+p4V=-DU|5y*0+Ai*ENCsSBc!qVV4ykSI7j+m#& z_L>nXo&kHshzKu{O#s$PXV9ymMK)o|Es1D8vXvUCN@F!(dl=la)^7|EyOkcE^0uSfq{g+W}ZWw9~b8q;&!SbP9(O}61)&4 z#7$h)WJS*0R)sZ3CPGPX?Q!YCTTdf(;hs8imFH1ht`SN4X4Fv0HX_1HchRQ2OM0g2tF9~EXYKS{zL{ArJoQ17!jlgLUW}^E~1tD`se+jrjO(eXYURl1Z7Hjco~Y9;o)L?|4LLv{KncE zcri+RF>Ekw@2`p@QT6;cyz-ULGIc}N^V{DS6>rH9IcT`QU$1?+M*Dh6*!iddhR8ot z->f03`}^?iKlNR}3-a|6U;K)n{;;suuiaN;Ehn@EZO z-#GZJN8c!KYujkPVHb*eYoJTl`95HzE($1~mrw3BBFS^aSYih66SOBedmBMkKP+=~}}mfHAyM4AyHdb`yCNiibAOVmr`GPs?q{kpDOZ_|fB z8-Jv3v=KcOydpe(r*4E1L7p)iYD9#W$R{vsrBmqD&?29(<(5P=ANfwU)um7khp?}f0gDoBdw%I*mHqmOc+o73a( zPT?o?gCh+LDfG4U9Pk3TIPt3?>TjsyPgJZTmyyfxAO5^N|A@Tgce!hxD{{5eT)cD< z3CTO2KH2Hl*1Bj;Zx;G{Yqm=l274Q+3wkv`;^C8>J&lObH?Iast`QMl;$XIb^`geX zYmDfrAXd`!lbutIi1CcrBqJic1VMpVD_ugbh86^cEw?11`5;J)RHd;R5Cr+J#Ch{3 z9t1Do>N5Nqj96Wsua2=~Bl`2s(P8mC##&)Sk{$`ola_H2muh+WeYQ59d}MhQ3Y9kE zNg_pPSvIQ?&BgJy_hw#v3xf$OkV^=2<<#jUU7b>1X*0wBwYL+R0Xvs1;h+bbO zTY5fffMxRE5Ny^mwP|Vn1zv8xtx5M>H;0S&4cSK;RRHF|@Q=F&s$InK@J;@slgIyKIT#FpBG7osdJKlG%>rRBP| zDy{i-wNTVs>s-1}_k@wU;6O=!=*cFlE{_=zqHjeFkcW+k@Dk`A5TIVv*~a@u^i=Tj zxajh(5ka0Y+hRn7mslq-Yo$}@)zD&{u;rFSG#~36Myk?S4TyF8CxE?q6OVNl?Ha3Zm#mf(db>nU42t*4xAYh!5c{5Kcjb;@(; z;#;;6`1$I<7EkLbU5tp)x1t6~CnF-fM7VU(`WH3AjW?pFf|!T(ltLq7JR_EGM1+_4 zCJ<|-OX$_m;+wGLmP9lk-~MQ;ODSVH{-fT_#w8poKC*8tqN;?eVb6yTjN~1Q1^Vz$~ zB%=9Hx5!9U8mj?Axli$zkG**lAIe?4Q1`#aq0YC)UQuLsxc%C?&Gls#xAwVo(QdGjx}fjMcYW{qU5o)n zB{#JPN449j?8BbyS$Hn}zCHqfNdFpgAMPRF>IG ztu>aC$}$VfIZ6Fk@lfJ#Mzdv>lQg=gXpLD$U_fKdW`~E8*v1xHYDA2_QMIn4n2Ydk zu}dKCIL(gA@&yfY!$fVPU)$$*|Awy)#n#yx+O&oJG>jarzXx=YR>8&U45%)dS6Wh4 zYj;#ONDrcpdh>>=6p9!7h`{q!UJE1E?KE5GS5-Gi8F1E4kzKzC%ja{4n+?lz$xy?z z0Jaros#1Ny4X&Gl7Hwzmgox?b$N3u@u9saJSQ=z|7cb&|#m$0LmD z$;BKMj%`K|lhWVhi4O6eYRV3cHY;#=l zpHx@tsJ54syG_fb0c!L7;-x~-TzP4@xQ!Gy{#)=Y+rQ~I_D*^c<53DHDh8_sq~lzK z_kiTqg`W3V_5;Sokek@nek3Y9HV)iB9xsV_NseQ)t|UvsJHUgY7Re04q6_o(Hxg zj7afpf7WYG#$#)#bsx|ex>Cs zt&m)CmHv(Fh>3MoRpkqY*-Gq{h1S}6j_NsXl3ic$ba+9EJyi&=i8OL~JyM>x9uyt1 zCvf^&hLx8zI;p1;^;Pm}@gclG$rW+1xwBdQSd!Fu3{>W&79xK$wa`LNi4hTAdW0FG zg}jX@jT?rri-?I<4BM886ALU87u3{RE2g-ge{?qGaLtGwGg2)9aMJjugUpAGh|!yg z2Jiz$M0i>3y9fZY#0eym^u(J*8JNFoL{ov;)(K5ts@h^ijAzU?84+;_F*`AlB(zfp zc?=#Cd+;&yk46+0(Ag%D_{RSHoe?pfq5H;&h-UrSYj_gT#TA|OYH0Ii(T%huLX_`q zqB__}RT`@S1I_nZ?9(sYI;pI_RdBW1r?-zcFf@|q{Qjvf&;y`FpCm4#mECzB z$T*Mg9QUGTkz@!eaC6P}hZv~?fRM!|&Tcxk9%Mv{XC(R?5#c4K^c84c$c~PUvypUw z3~otE9JU(KltXq3GB=JTGmS{`3|Wy85nf`+1&7Srps^m7YWP4>46&AorpkeuIn5O% zwKiD7(GMSk`ysJkab|Va_|C-*uGv2y!TE5a$8n?V6_SDQwWG#!MLn!5At(PnlUThe zbW^hr`$-~+x~>HtlSJ1dD$-IU-z9Fo@98t(9_cMEE3q2yL0BL0774O_VG z(minVXaqG`6Pp?V5H8cFh=p;4oqYpI0L{Ye2xhEOjtD#YkK5J^zC?&wKt8jY!f%p}EvJE~1sAT5Oo}8r4F6XYkOH8hfd0-_@;G zXq+ZG_Byqe9mLlRaBvMHgrVZrXl=#?SOlYWB%-k^RjaaEA&Sdyva;+jBEm}$Di^3< z(9!RiI+8qwZ)}GSFR3lDOsuW0E3K`oR=2kAGorW#utHGQ8E}=gq|7qO zUICUTR(M8=FOayU2;V+zq#7Ei&n_ULjcxLP5mBB&{mO`lwt?EFZ4N{=Tr9`)BLTy$ z6(yCE%iLpU6NWP7NQ+ORkwFNaF@ydlg7v?F#5Bg38WH6g<8vJ2R(3e&zl_rTMmKkc zN5!2x8mWqAdC%O~)SWvR5#<>bixCl$UWT^KpUh=6*^fW3?RZAc(pdKPO~jw}^x+T6 zoZw0$3cJA<$gaAX1U0s-QAXtH>#q%Eh8q###d`&YEe%k4`R;42+89?DcuOKg`R+2b zro2dz8O{}5XRU-S`~?;^=PYf<4%E9&6&0OTPZeEn1V^oDixxKZjCn>xd2ZEOBO)&0 zIAO*jzSsyi*J9(tMl^Nd7RAUdO?NLIFe1t`Zuc4yQK6U7YBOwWU&hkT(WoGG^9Rc2 z6eY53F`~E&#t3%*txdbDO-4lNA<%-#8(hRC>#kPZ=GI-oqtab{W27n?D*m@Ob;?6V zM0rMKzY!5$LhU|*?1h{IfwIoDVGam#)wTA@*_K(=jta{#mV5_^hZU_pcaTgml=n+& z(}?J;J4naI{g&B?D9>OLBO<&+xQhTLJ9{VTteXkJV;2EmS0f5*ws_~_rb}CyMnrjr zFT;q4O9FHt}-IZGkjx=h-lW8TN?84^4&)~+Nepy z*_K57e==$cm|&e{t+rOef$ReJDVHuqnQPS>K~rnn0%z0t?2Sf5d2ZVUMnrgNTQL-E zsbQLJTd~I2l8ENpw!p~LT#p8t7_9p4YH`(fl5RUoUF2-*5C_gv@zZmwSCMG(=1r}- zc=oE1R$-g}<@tc(e~n1d1EP&>UgRP!+1RFHImv-;7;YVvq23-NbwDJtS^E_vqj4Yn zxe+m*q1a_agqKcayMXgT4ro}nm82J72DdB)v%igKDlj{>l5}m1*&jy4c*g8EBO<&+ zmy3WIDC_Km#}^8%^J-waTjr>?jH_m+8b~0!MkYZlS0?_xe4)G(JJ>*ykQywy=G0^Z z149Asdosyt3~rJUF`mJVHzJ~3FGHKYT^w*(uGy5!f>*g#4)9U2&0$8A7Vtf@iu7m< zU!D;$`l@T8ZJ-em&Dv&5-4-w3+o(oF*p@_0^&mrQ#TSgYnI4ULmdjwsxEp%Dd?M`- zx5IcdNn6G3h`4<$ZeNMpC*t;nxP2>bd+7CjLAz-0&wn;f6nR z2N^!B7mxVkJ3z%>qJSHIsvU0lv0~uCFT=tUel`(q_(d_e;fHtNh99MX8@{LwocPu( zJmCvT@Px0wzzttG$oJuA6!ZP~_HKR{@9*<{>YO30=w8yFgD@RFg#Ie_!W;4O243F6 z%iD0Va(s{@tR0Xd@DhcW7`(*6#VR2L$gwUMNH5~$WxTwCmsjCp<#k4mCO^ODVdAQ*YEzR0V*9gQTcJCgM8Z6X~}Kzft+P9U+)88*ufFSoL%?;~OLSo!6^ zi59Vfqo6$@9NH7&qCFu%+7kkVPiRmpI8xdZLZ&?-cG^>1z1t(Ah>3{m3J$0Cgt%%? z2(b2qNNZ1sG(MrVt>C}vr#<1%`)Nv!tO+2Tc@(2$i-M`dcTf$$hgk)PMR`4*%&R7S5SNajk zkk-Rr>Ony~+FdC97f6NDE6MDUhe^+AukxqY_!So*3#EUBD{Bh zlFY^X6Hk(9ct7_fDaCu)Q^bz<9Z!+*LdxZA?#y;6Z1~fpG!~=z^oGn#>1(WWhYCko zUAeWtg`J*C6WNzflWffD{~uC|_nZGi7U7*dLl)ru#%IW#LSzrtz1|efQq~Yj5PGu1 zD}eCtHKZIl!`G4uyf0i!D)D}5Em;`MYoA{0D1tYZYuVjvNh*8rSuzOIzkZff<9*z7 zWHH|NJxA^i#4bnCl@)$O24I5oBQmlb7ZeNa#Zo>dIjr5sBnZ=DKPE%){=&xsk$_Lg zWPC39giOTyE1!^S@gBLIT*c|z$qc-2-cCm1z1C9c>-8ll7N|Fs!231-5Qg_({}JJ<@+_Gx za%ZrTXd1uzZ%}^q2?2s%xcz#a-GYHo(G2u{M9dnEj&VeNhT{fN)lrWA+St@Ue-FLq`F4u zfL&hz+g$qsSgCZBL}a+Jrgaqc&1G}%ny`1)LsMqI3XDPL;8aSx7fE|8Hv2`=ojrBExNL0ZURFovDSiJATKqUZ(FUIGMWya;K<-$A}3+eln! zx%E10xvt2SFE!175|TEfZlh|T0m&~X!!65gw#Mb zu#_h2SSntHHK~NxfMq%c65e6ywq)=Ho`!z6wq?B+wr*7+zKG+Jcp#aM#tLPoP=}B_ zh=qUPpU7TKp)&-bKdVXw)9aZ^{}qS}Kd!7?@fT8QH_U%1mGardwHC_f2p?L6LS56S zBM{e#T)Cc1qkM93G>!6c{DAh9kKDpnwojhvQk4PY$xP1!VuprV{-+nMLK$p;+S8Idr-(rkt9R>#VFe zhvuX%Kt67v;V02fgSVq0j)f@^TpFj=Nl#!urdp)zxC%9|(wIxxFc$x-IKX z?INK+OFI-0&4T;VOm;;d+8g1R+eg53ybrw-pX>TkK8!rjm(~U1VxtR@8CTHJF8Mj{ z1;wx}SI}t@xH1Hb0w3xav-{EBg0Tl1zZFb-VLz&j--ohYX9F_XAN}Yw!O@4+rv@gm zn*MaGAdF(CQv$Qt|N7ISKwQ*xl@9F@&Grs}apIx@v@;QpZ@<2K}5EnjOtl&7q zk>LwS!26&isDDG!=oXLE*S-rlC7g%p|gPP{4pq<<&2>O^561KT3l$lpR zeOc;N)Pk9YTt)Noe)m<84Qc0|sZGuV1O$|;z z(c2-7ujxtnYVA$1#kJ`ReTw?xKq&^r^*spJ1`{ zj*UN{aV+Mxv6ycXEarOzi}@D8V!lJLn6I)f=7=ojfGp;CEa7l0=4dSDU@YcXEUx3# zwdIMr!U4p$LQP4m!#LW-534C1NM@79(LTX7X_sA=$!jhhNoMzsqy6=yqtK5`gGPF^ zj0Ui?<7j7n;txvV@ft|{>nV~LiOY=*l1}6?g{8O%SYU~-nwz?Rae69ydlJM5C@v~QujxOqUN{LB z4rWcF-Ss71mckZZ1I`V(+>|$^urrhBU_GmE3L8C{4$+ff{W5h0ILiZ1k*;pV1*Nc` zCc9%Dn!?uGfwy1^?WdO!k-{3L&~AwWR$K{{Vp8Bz3oW;#7QQ0q%*J)l>`)g9oFzVm zB}}E0y6SQzK`v*zl3G|+o>^CGZCI5Z2_N-?e?rPYlyU{LOb#}?i%LxqMsR8>9i=G7 zi)gRV^KQrXp9+n5(^^xEo+Cry*zqKAe6oi0cVWQuXY$lSeTJ?nY{=s@g)N|`xj?t5P@m9;%llr8vz1PrbdQ!g>Hcke_xzwAlrAhk4fhlay zT-qT*0Epp08X{n4LDe)(VdeDUDXd>L&C!!aDK%eGO;hyrD;0WJ4eg?*7bx^=YiOpP zK2D*(Ukx*>M?N7TE(CeO6O~l(z^?jSQxtmNTAHq>PfKC;S~^Hi`d12jxt8|OlZsN< zueGYb@q%WiuwHd^pq|T`!gf9cqnLI3iC>h<^e|pZb_J%*b*h1LdU*I^Tuogm94xGHz(+)dFY%(Dg#0(tN%~y>NnwxPOvmX-YZbo_x&wxt zygBmfX@s8Rd2rK(bhw_hK84L)2cf+GB6qA`R_MzYslLip*^t5xzX(C+*d7wa&MczA zdSM&&i4PniL2hmErXq6hEi{!i+@g9Lm;1JsI7~0{9ff{o8%D)Y--t*B7#wFv+Z6AS zZl#wixj6m96!z?`bcCMtiQ)sxr-Gn$^8g}Pv58`XZlh6pww(%FQZcaQJtfw&U?1l; z)zf$ZpDAqI7x^kM2#R1~{xrZrZ4bx8smrQ4#|cHh+e<^ex=Qb{b^_8!e&_I3j{-bbc6}K!^I}tA9 zvQ)PIVTfmdy2Y(fQ>y6MQ}3cK3*{MnIUV}YPhfpC_bynFe0z*vyRaIU2Xm%&sq81G z+U;^u5ES$v9msY#X&@`l^YeE%fzVWR@Xo?YVGkuzUyX=Vc4nE{J8*H)sUm`(D~Bej zx|?R}`QsWTwr6?EsedCK6M<DT2C6R{}SdKZ=sPIB=cN6r=j!$Lwhv+q_I#ed5!uZ#>!dh!{ zlr@Mkuh@jjc3Vn!LvkwS5sR}*mTbPBo9329Y)I)_;2Pms%4SptcWz}fO3y!C@k9t8 ze4k0|LAkq6vBCoZB#DimPA&TSmMV#EL0;REat}7M6lNY&_%?uR>&nNyNV^g__y!2< zOeMP6c)23R6*BoQm1|_oo6ezdK!8cY9jcCQ`K!TZ9*4NZrQ=3bl-Q`!15>A$02>+Z z66PzZyi?&~VAIMqfaV(9pwI8xrE&}FH!B>CkW+W5+!0x%a6|XQx2odYYIK{DT8~|A z?qja4BiOP^cjLR$bD6M*Oy<(CRJqU~el>f3x7PgcUTYa7co-QWUNDCIb?)8+WU zE>?RtRb+*wk;=H69y)TSLFB=-+5t%dOMd06fcS zH{8)pa|3*1Dl5c=gB|l-ZQ|O@a_eBA~hY?T0^RVQ}!>zz0is0hs)u}koa5Rve}VyQ0Ch*KqpA8_XLv5xG65HKP7(CZIvS^}lHlQK z$!y^*#C~3mS5zXlV7KGF_{^X=!3xd{Jk%~*JQn(^D=tX*klAF_` z6sdqaoV0jRosRRwSS1mFaIJ%IdV&RKe6GbiPD)l-^IoEnO1Ze0E2SyrT3=F4mebP} z{%2oOqZg-l;`C(pQG2Q`F!F>hN`{ADhHaEVFRK%5o|vski(toIra?*-d15ZtHkl24 z6^1^ptwDF;J(c`0wGCh!JAhe_%b;rDH1NMpGgiN<&Hy+$Ul9Yo z*+I`JGyKVG4OCAZh}Pg3aJHmd7SoPR2>Oa?of1>1U?QUiSSnXXYX?c1o@ z7tb^utn+PvZQ$$f?OzQ1udAbL&RVL7CHwpZ5Fmf#zeu3iQ=1*F-EHJy50jS`$L zDOq_~8u12=S5)JP70_}og9-_`G$h6)4tGkWxk4PQ?w{QP3lNWVr%`Iu;)Q8?wr(B$V6K~IC%n-_^zNI!QPh6;E;*Q8U9(_w) zs^J{BDjc7_rLH$}`W+S)zDb3Wla?qZ&*j{*NwpK6=v3tVcaz#AoW5M4b0>JH7wzDR zY&`WICH2a;)wvj_ui_2tT0r8YdllBBZ@U-pK%)XeSygY%%X!v^^$;EEP1SKXPkoGs zIyl(4Ssmwb`V(A-ELPYTd~nbfH8$|Xr=j_`P}f>EC#_Kw0iWf~7s`JAGbq@->7Rqs z(Oc+HeXFlivQ2zPjo7%oEWNB)J8U6#kob&;X0oG1p~#xYaDZ;j%q3lS*eR z`$I?EwLc9}_27J)6d}X5s_QMBzC~%``}&2oeMAAQYMUDFIQ^(11q?fYy|GQ57V^X<fr-bd9Vy{g^`MqX1rX*!!^76E=kU zy1a(-ozPce`TNwhn9LJTLqL6BU3=xE|0!~#KTz9^(|@Pc78zP6xeto93$oHyL@=_#4sA~(wL{3Ar;4O(r|#I_(OFKjwkvlS$W)h z;6ruChbIOoiM%=X4Ax1B! z{&rw18m(K4<&2r2^A^Bp=Tc~MH^y)mmYlDvQW~t4xwa%ZJx8JM{6q~foZelb_t>tk z9C3Otg?|5bb-j?&`zUnN4jQjiWD8cLzfzH$9qOhlrw>y2As~e+{QT$ZhbsIJ?@(QX z(?>u(vFBX316Hg~>`;eQJaM!l3`W?l<#JBXSLo12>7(J_Gmnw<4;zYpkXIqNdjK!w!6R zQ%lZhuV&_(8MvvZr9P^q@^uE>w9ryb>1tj+2f{gSR*U>T$ z&{EaOhL)PIrSd^NP8zh-8CohIucaxe^#ZQfv}ARxre)r$rSdKqhhAE0BA~25t@fx| zYI`k}cVgIeYN?mkYsqR~rX}ZTsXUTm-=w8Fv{W8?FraFw_h_kV6w*>3Q&Q`}K)5?% z{Lqr$&@!t|sinT7rE&*A7t~VsX{o9ksHx&;iqljLJ3DCAoy1uk@y?y8rnU^J&cLc_ z$7~1xWkWo@g9mmte@>IAr6W7|In5f8))Cwww5Yt~`UT=7ayh(20IndN23vRf&9+ur ztKoOtoIdbVlh*kScu+#hfIK{1>WF`J>c}R2K{M(*z(Z!EL}!rjFpKx>-5}eY4Rv0UWt>*86NUgUfq+=ny}}^;yVXT0pk4 z?)zZ%XZ~K=9sXW<0N(ie=u6t!k8ko1Nnw9~NiS!%{SYz>_Q83MSNDUI`}WZhfocqJ zCbIRP!zSZD`{1m|e~tp@?fXHZ<11KTJbo0|pZkgq_EUla`}HfDPred`Ui&r8g}-^B z2lvw)KP5J>r~|Yg`2?BL;7uuNfxm%if}gTX!hSkH`;sq&kiiFG2Q2kxC}-(Gn(3!R z2=>}RIIcP72x!yo8#p=}dIDzvfAcNv41aUxo=0hSKP9ZN zIY;S0a!4?}3!1^-oGJ1<0PZ8!>pME!PYE)t{yW-*P5Tlm^4@oFdE!f`NWk~Bm!A@5 z*og0G9@#I1J^nqMCCEAiET_MRx+<}TrT+kR{Zg<1_&)6BA7G|A`bXf~`U6e!Q=$(0 z{s)>#-VuCRKhh-lo9pHHk@hC@nCreP%C||M)T5!%qoK?5ksR5ZNNc^*#=`Y!T(( zcATdBDG`dja2!nVpkO+4oOXb}xsoG)hGTI`pkniWroCCjH&E1vKST46|Auzz;14Gs z6)VD{iB5c0j0k_x8v;N&d#pc+59ue4NQ&QM-N#B!(BH^rHuWSOOFm#vp9Hu2hJAUG zE`%G{+$8q=DcaNb8x$GK7LA2P*K?<6AtV-_re$z@=`^i`Tl-(Yyf6QqMw9ng{_pe_ zxB;N`a4Y3q0_{zb2c+tR;4)J}HtFM!NK;H{c|xG98w8~1;@84;iw?|fCPNEK>AS-jw3-Gzk-aDD&dsisQ*=^{7+DRM}j)2 zg*<<$gueyHS(R{35NIdJqKnE#h13hmEh@{cf^Y{C_|N>^DF{nd!d-%J zw@O$p2=}N2SrAsM1SSagtAq#OuX@1wVU_ZTV0m06{96#7LIVGdmZt?_jY?Q62+ym8 z7X;x&mGF`vyrL2|2*O4r)N`q?3(8w6%O*kCq7vQ_g!fd!HbMAMC43|Z+f~92LHJZ9 zd?pCHRl=T5;C}$XK9%y7U^$=?4hq5%mGF%qe5Vq=7lfaXfPKAmOb||}gp-2si%R%a z5dIHt-9?_?1?4Z5P1%xo(^j@N!F1z>+Y?RK znArcenc_F(T1+vf4Kq8K-Y~P*vrO<_=htC)<$n$v-icL>HpR1Z4JKa}bif>z;FYm6+jYPk#m2&Ab#IejpnaC5 z##%lr2VU%8WQ3^`+dt6M+swZzGh~=4jeR{3E-77u!q~&ZOaZK8cT)t*UD(c_Egxi> zDIU#(O}Cnq{2f_no~b?iXP_xYCj@9yD12S!lM$v2wk*$-$F}F0Qjh{_r?B85rb70w zAtoDzFU{=CGbQ1jrvPs%>oC;REvVdK86-4?w7H{A$?T?~rm3pXov3RvUIq^{*)cya z3&=z90je^TO&xB^@F2&PHIO|$6vVzT(iF-zjWjK1V@H|hv-d}t7P9#1rl4R;+CWRW zwK9{##Y#t;t$vAlJd7RxexL(R%1XGeo{wo?~6CH4t)|yjPWSv`7)F3^Q2_F+%k^htj zhDxi-@Spq*z!2^x0lze)ho2LTQPN(#QhEEz1Y!juwO<*>s!d3b}0Gw&w_-x20lVd^EAe;@^?kvSKcJ2FRwDM%#z zN(#B8ZEOrv>floeiwYVTuw8cBBOZ*tM0W?&+LiFfFJ7 z24|2SFIYE&P@I27K@D41X^Qp5X%I|T!=5B@etg2CU_%bGP=_f|qze?p-$`uKWSRoW z6%JFZ8MCt)m8KjY{Hu;_4uv@Rxx;ivzjmvFE+d!WKX%O;QyP6Flijq&l#cg*EB6o9 zn7ZThnKhV@}`wWc1tj`_lvIf z;dr0-oM{-|-+0c{kEcIpN`;Re#6557084EH#I5*w=t{P-Wl$E}o`2rd9&WpyH|6@` zJkgoO%CCimG5os@7TVx_ti*U&D0GI_z*o-ZR4pjasdALtOBXa`UVUqx=z(UvV;<(W zVd6(-i+RJHJIv4cFn^~he8XE`n3o2#@9!~(uq&6Emu%SkjX8<3K}*d+?6-T&$JuY+ znQvkz#`wgUKq5O`08x42_vQd|JA8coA=CR9vevPx1arHfBEAGUkasfd^k3%4Q1N#_ zJO0lCTYF}oboStnX83+ou#Yd>`=dFFZ5nS%3bYg#W47YroB%fYg!zsQ>ra|H5cc&c z^Id+93VUs>wTwAVn=9D3j(+Xf>AC*!HJYb=ePHd^T4oh*jj(>dnEM1xuCc1J*!CyP zF+H;^@Yz%7pDN*7Fcx@K06vpZz5p&(h_PyBR58!`EYqAPtP%{f4XPt?F? znet+M{MeO$2L*4~@;`GlWjn%s;I+JTa{z-bHyl1kW%dh3^#dSB2g}rw8mxU3d+L+G zQ1;7T@Y#y9f0~2MW5!wF)j5ELP528y{jrCCAbai~^LQ3`)|{ffZpV6@HRrP0v*sx* zP)r~%rR_*f1VO59CQ6WPocIt;UueQRkqgAr8 z#Al?h_ICn%iTGr=5q5_7nAu;%C(T7or9NX^e?#^JmK_dw-A8>gHVicTd`NU@No-sM zFbwhaf!Er{nf&%% z(enI+9c|K&Yfw35g_Pf|3u zuB5WoUb{fa|7QLs$RDM!R9giTMCVF)JCzH0H-8&&#Ie(#koe((^hy2>AcZQK+`E|k z&+?B!Vu+epQ>%7A`9J6XAB3OfNj}jcfc=$!7I+ibL)%GW0GC~G87Y7-6D9aWi@+2^ z3bNRa1fN*(m_rH**~tVSi|7s}kOKJN9d;@U6MgU#8$Lk+Jh-nV1+NiSnCO!(o?j;g zAM@wb$m*i;qGko#Nx?zP-C5-RAkimGh&@aSe!_%okpKn}5v1ffP6~b_%#!3YAeR^P zJ1I!OUc^__SLr`;Ik67+cGQF;%$ej9=Zh;|N{!?A@|Oyg8hMYf{YgHte51k{KaPb> z4URK4NJm&qvQIynw4MjU|JU7@$460Y|NeTqdwRNOYLbwB?<7DHvXHO{1j3@MhGr2^ z6hjh7Akl0jK{f@^tDu0W7dV1|;0`E@3ymO~8(ufS^!YVTz^0rOTRRr-tzY9=ZbB1QvWW|i30U2db?14gLZaNU$B>URX>wx zW_LuDOQ-!Sv6P-VPhBCIG`@%0kJj~2%joFW?gc3sW?o*N$=#isMH@%)s8*FCF~iWQ zYj3qU0_>6^H8qjvA(DkzZ`Ra1lCcAXVzjgf?3yE^ ze-^2}*j6;o#RT9f0L!Bvi`3p6Y>+1iL21#RB%>HD1XBcqp|}6-9!MYcR%g*`6tb1Almc2+r#m0qJleBgiEOR%SnR%M9>j#0lsC@0M*3(UU5%`@){;xQ8l^6 z4Bd%t=9@!CkWTUg;~};=z1VE2t`b2YCuBMqnHcR>Xg)ZJ>D}0Vd#hm6$rG z3aYo%3|EFpo$plBTDzfTJFxWmD7BntqdRH*?|>^<9GNqj(oyF-MRQ=X#mwM>W!rB) z?R9i`lp4(o?ij7M=YNln2KxX}=-4ys^6Bt=L}fT$%QT*sdXXA!A+J8atj#vWaf-S` z>v?AADksn4AI(l{oy{dUYyj8kldPDCCX;ANy=)EZUV*8~9 z>P$s7QJYB>Z>ure-&Utdpqgn%KySY+QPU;UPQ68aRhDn#+zwgNiHDJJ?>%Z+2s-6nwOil=p!cdN z3I}y?|GFLm+Qav%sfZ#ax>N8VgrM^tP~&OT18PtD_eLz))eoo_@cy27K#j@}wAS`K zkd@76xUxB)@5LafAZlQWpr{AXn$ibVGXelj4b$r@5uq0XO$(qzOD8_4vhV-`eq`k3 z18qC{plY}(o2l@GJJK1b1d7|B#&J}Y{6)yhG9Do!1kanE#8WbZEyD47QpKd2+L{(b z&IMXASa)nt+ZjMn+YqWNoqt!?guWA!s%so1^}(8&#jzQ5js_KPRKIb?5D2@9E*G2i zyc3NLwfS7YC=(KTnYh2C)BH{9`Jvf3wn^>4KSb|SA5t@eUE@<>Pkl(8B?Ypt50#m> zS6IcY0(A*sXMmWAqjygc8gkg21xxDb!;oep_E4Jwm`1?WQ#gMqz~Mx76nTj z->Q1(U!O=}v~{Z*-C7Lk9nbjk(8kVggSu{0JBf5LqO-QC*`c=X-li6`{m?1*iBSDJv|+_ za({vR8MQ|p&zJe}$J8O)Z$gjkFZZeBYQqRtysgfqh%d3TUasqL4o9fKpS~v{lcs*5 z>h`zKsMiH*!g;)8xE@9igd5DB^pbkLiyD4XucXC?)xlB@y>VF0b>|gk^L_RBN9r&d z{i?bRxDK6GW9ZP|^l1D(_K6x}U+|i`#)ZZoe?xWu0apsP!T#)sS{JI`&U_!-1y#-Z zNG+Fg>~}r_xBE*(Hac^2D~>zUVS8HQ{a%Mf(Zo$kn!gGx#vi^b95BQVtR zAPJ5NrmCct_Nwj<4p4nb6M*7r{!B!BS?Ue~%`BPCfnw?MSuVc=d9~0jB|GSNa0KSa zzt@*6Y^?@ie%*oen@j$V^bQVurq3PaRKL9BUK**n(}XBmvZ3TregyZq1KJ|HWG_wh zpk5vl!KwEZq3TI+@HoK`ged-vWpJ@H$;tS9j?3%Ft3Jsp<{2HG3?2x<5tqkH)|FK1 zac4SGa2;3M@TSDlA&*-Tu@9V_g_3ngYmVWdT_ssN9JHga!JVr`%*`CMJ0OT$U^YMPxJ1#I>At!9Av| zc~)~vRb2qYkga|kgf&9~t*8~5*a8B%=gZbZJlESWqps=9f?H%OQsG&35VX(CiczdN z3f??Mt+uxwD;yIP>R1QzQKDPV+?L+MR0>M9#SfUu3l%bUx-H@yxMylFk@ok(6HB zFd5T@9hdI(x)Ys-r7!=&osPrOOSC%7J;>E~u+3pb`{8m5~SO;zS}PBQtlew+L?txWcW(d+fvcG{TeZcp@xJ?di4J|_zMj5s z50gpx3E4+wYqcu-mX82S@7{&r*gxI|OOLTmWAy6BZj&C(#hDf`D)~Qg?+j0O-Uf4+ z6V3p%|2({{Y*NDA+C+Nmdq|jz?$*3i(L?QJcm2v8Ceb}zv>3YdYj-I>2>*>n^_CU- z`ChGYi}C01eHx;o->((hbG~)&=0enp1#+A{>U;Mj z7nT3wR%zV^Z6rPVqkAZz*LQYD>ZUW~dL~Vi5IeN#j3Kbc3K|w-mWFl!)sv~ow;2@Sj@)}`4yjj>TBU- zWcGxJAqcyw)^2=E!>SOIyDk@>II4}sIX*dFi={_A8ZKKW zAQ!+<)IUKBr*R2dJtD|zlc^vPz@h=`M#(zu-GSxkP1cO0T&&XC=~et7fd2&#r06%k z>@LaLKR8#LmuUduW~g{Pc|xbs~~i(#am$Rv=v0Q@ad*e(I@J zQduwULdq}FX1D4cz_Ebnr|A+u zc8h;l#>xG)JQw~B@2?fnsAWv256{;|v}<&<$XrDcgbYF0V+Ux`IgyOKK8gGw_>(z!jvy8e*{x*1A*kI+$j6tya3z!E0a+HphcM z{B4Lfos)2se2LxRQF*^alm3ALJh_4;(2^GvoxZ;TL{#uNY@4q?F2{K*nwn~^0!K#= zC~UiY70r7R2JAgAK@sx8URayAY?r;XXFKTd)DHLqO150#fHeOTpV!)Qhv=r#@^T#E zgaX$LYI*4mTfUBHhny36uH2J52;H;n#_hN=A??rSBl=i5n;DH6jAzV z+GFsX+_x7@`h(qaqEq)TpRjBiyhomqgYp%%Gb(0rjZHy*wmA$!Ub9(U1G=yhG;Ii!kp%+0hxG*6M3enobRcts`@vJVwBZ2=BM=gO#h1D)!5XNg=}q3^tAB z<(bVujdOYBbST>BHvm!>8}oziYca^ewq7-}rK+jEq86=bY^c9UYTrHk>PEK$JZ`*q;mW%`P<&}%D2)N?|?-4 z^8kG?o^t|gOc-1A2?eEQCo{|0q`BrR-?1CiR#iX;Qd0*_Sd&?hZRUWFj$WW7QECHo z`|(*Qv=?HL(zP$igQ@fDpzg0;2Q%MyNM>QqLM}23#Edmk!7DOCmA@oswE+x2Dz{5% z4nSg5_1`y#3XZu`E^t7y|FCUs8Uw|e=@5xih;ISBU)28xca(7ruO-7AP+3V49wpM% z(m?y)l4CpMn_1TM<`%y1RR+|=8BjnsR`BtLg$@$r|dCulcQl?#K2>y>9=>}m@qyG!Cqs0=+=MAeJK1@ zxr5Oe>A3xj>?JNb0LnSL_-Pt!+OK`v?cxdjCm>iEjR-0dqYEE4Tmj1DWlF3`>rK@w4q~ZU!TQoe0ceA`)3}xW( z7ce7~muJ)b)o2j}igaq9r-U;z3oIdMA{S*S7Rf65{v^Ki>d?C8gf5|8Z{`D6LrO`QPeIw}DDTsx#l5>7OYm z1_V1=w?c`};ltGW&veXkjw$KvEUGvRCck5lGCnvGN0vh_uDw<F>?_#=HgNr_AqM?!8v0P-nq+vv2Ne(VI<;z*4W zW(4&EIXK)MMZEO*)3PtzfhrB<(X?$)IfX|kMpBy!&xV4=!BDc?fhyL_Q%1|!0_o)% zCAl4hKCuFV@8g&`4o)m@2wedkMGoD1E%qu`E;KE#G$#=no2W(Y*g3iK^4ppln^(r2dSehRjuB|92@W;&&89oOHZgdJ6h;4Ve2E zBqSO3m)9!0U9h2Tyk7a0I%X+pcIpkv9EtvQqmn`C3zWSyXrU6T2Z$DQ>078&$dKpB zT%e4wcP~`Na<$0r+d&s_AbdhY_52^ni8(^NZn(@h-gde*+LkIR92+a3eOFSu1n7kG;4q0buOrKp?xK|u%asvGaBSrDG7kNQhmbq_x5)(3llU z*ARRHJ-!${*tr7UrJ_<4Ngxk)IP#N{7OXIVE+nNW1Oc|Z1Po#aDY0#;N}$enz;mkq z9c|i^Kv&~4IH@AOUe(%~9;=idfj&2^Qo08lc^{G;97k6vgGJ}?BTXEUsN_y1GSr%~JHeQ5 zxKkO!HC_o+wHgPDeybJtIn`b_tWgT7;dAKaiq}IQc6_wkEfrDWMkRj5Mi6*t*~qvZ zK;aveI4Dxy-JoQPoVJOb*P<~y?!ycOphQCaI#Hr+61yM6-xd>J3?WRe#(Y|GztTY6 zH!9I+0=81DL;L9sN(#3V*wD0pDA_MQtW1#H+#mp28?aT0wa?$8B+E2on;Vx{BA~6? z`H0ese)<8<0i%{Gsy+Hq#gHj+sAf7Q-Pt9pVAB00z2rk! z2{T9>SDdZqoDdBbi z-8x#!a;ly#S#z9j@aWBWdp1zP^zbuXi-sR zcp0#{I&_oaVaa;L$)OTB#yOQeCRw{_-Y|?Af{r`yg*rXh&u=4OuosWl(!{J-xQ`GC z<1%ds1v{heE-Q|Z(=7;<<3Xa{t; z%et3?7GJ6byiV_TS&zH;Sm2sbFxs<&#CBQFaU^LtCL{Qg7}e)p)*C!6g9>F=`+iQt z-*Qn=9r`%AF(YuK3q4N? zm*txJnwHRTUoTsSWx9F0lHd&18?yC*Ob>^?Ka#EQWV&UilGsJm`IBt@%Il0f6KktZ zH_+DqQY`rG9NDP^rbSb%Xc*P0c)t=D?^wmk;b!(YdUvN17xcr;Q>eE>x_Gc`3ZB$zLkPyNQX;ER9#JN?yU2`<3?2xKB~6>p5s9j}$8&MvQba zZcwb-c?RC14Tg{nUN%{#SZiqMlS*fY?(R~o9dzJHrI%B1r((Uw3r35eu@1;b3YK&J zZY9NOMwn_1P|=L}Pbt|>%3#%+$Wt~yrKAoJV_2?Q%aO7ej`?k7#+fy%P!^fO$N2XX zdxXL+#wtK?dOzZjnB%lGH@^elmJ7j3euV1AX;}_{vt-=-iCv^0zZ9i;=yYUm9uGs^ z5qf#NX5x>?357*>u(nwWfGE0D%XHGyso$kAbMYYOPJ%=3!KQFBSH<0YS~OPc93xtI zc4v>!`hAf4zuc+twiIF3@aMDrN}vi{he6a{O<)O(H}cD#Qh1Z+KBeU1k3g{JDJ4wA zYMBl<3Pes$Q2A|>D2mwZic)dOBsq(_3RKzpv)WWwbVX%d1IQot=At5VOjVURptiYz zq%T;Ez4U;V-NChN;zD+cp& z4Bh*aHV77)71Qv$=4Y*)-SKDbha^54W}GL1|Lqg!DUjZvx;Rf4*X1|c80;thtR6nj zQ7(H)vgfdis-}5vq}VjiT6*_aEx{h1?%CwBhj;WGE$<-C;x$}fe`S7~0|gug_>GyG zfUxHt&5IdU0^ca3 z%HV}EnVV*+%Ai?lsVHlh9++h-S+eGGm`J*9j3*Kilf<%~AGiqzq@j|N19`_Jt1D;s zVdx4BNnD-WrcSG;%etCpv!<%rib++qj-Pv=>^zrsh-XIe$3mmR1F5gMte<%*ykqBk z5(frSe|0%b-(ObSP>;9kTM+T3r5XWTMGNy}>oVc=#Qn(29IbjFt5mjbpvCul%nSj! zP_`cAkjB*JI_`?o+#GbA+9X>?>EQjIoGv`X#W^}8lF#mlNOU?7zf1(jI1@F`pH78a z;JH`#fG5dyVkD>93j2!(JU{;#HF2t4MDZEEG-9WWNc-7Mp308&{`Y#M-S1UTMtld@ z1O^ToJYd}Lv1LPtLEBeY&?aTf*g?4XWER@XKlj`&)4;Diov7h!j~Q;}K{1tWb~dwM zH^c`$_O%Chs<<3E;-n`jcS1csb(W%RePceXLKy0-+J;=Sx+bSE*Mt*VV|IQEt_Z>B zCEFf&(sRAmdAUDuFOV}9yfTN7PLpPpRRKR@d^xdp1Ys7IJdbft;_tgAw9B6on4Y1M zHJnpif=D-<)RKc%ITiol3Ec9WDp}8Q7(B9g(vuwA(f%P>65R$M=~>$PgC|YlF+^bg z@+2bR)DNEXqzGCU=b2>R{G;dJE~T(nuk+~I)1Kl#VU-T6nEQ(-OqF`tx487teku;v z{q|d<^r@14NjrTB-hZ8_`{4rgX?uN{LaVZMFTI+r&+_J)S60m`9+MAO1RC2(Up?=P zF@%qG)=ZGDP}TFF)ivDM=os{7f?{i1D)@w9CPG$()?@*X*%BBqc{9r}x_r`Ro>2+U z&P8T*4Nw;Zit_}4KHCVPZpA!vLSZRK%#C&tdHTR)T-FwIUsqF~H8UGo&C~13YFjFS z6rA&Lo*rworqIkh{Rx;OKqNEEU?>jM&wo|dget~+uX?Oq+FAcqwkx~py(FFE6BW^e z-So8Rww-RxD$LZQU1*lKyWSzeX#twXe^i3}@*5kcWEFA>9^GA!`W*@k0aO7%kwEu$ z*N0>T>T|H8KHi@IHr_F=dW1UM6+KVbZz`QJ2+%*DJ6=98cf4rp+@Uq+n!DCy6h&2e zroe!?s|?QFnU(PDT(dHU1LpupU`2xSgZ|S)@6|5U_sNx0fEGSA^jS|msXhOd7l7>C zC0pzoBAahAm8IE62A20*J@sXAQ?R(fB4Pc(0-l*`!kRa>3642*xYiqG-_%QgP13RO zoyn*2-ugwfx3?ZA(kfCrxVhW&0Iy@y1p zef0_U^?l)nO`H1Z1MJ`W=|2te2y0?(E$-%~>+yE>LS1r=5d5LH^|aWY>Z@inLpNRt z7uD*j=}nmHn&4*hoMbH*yGhl|MqCZ5stmk9B{=&km-PwHgy&eAD>}HFeD1OaaDI=6 zV$=1QAnzC~TdQf$&3cDq9z|$z)Vb??ZN(xz$}J!qq}nnOb!a+;{RpXH_#!>lb*P@o zQ&~R0(iUw$xJduNps{!8{f7;Pu?JUc`IcT@K9m1w4j58}vkJ8J(7kh89#ZS`Kw?!> zVKZ~`xLV#Z^C6w49fVuf)@s9NN3GPSOY}DnWV)fN^(7kJexII2&)=t?@)>%0Ib3oo zW}zm!@B#gZc78(x1hsnV`k+2s$0SXu0QYX9Q=jNDWNy&6`4K$=x9O@X1;uC3w6FAJ zXdUz@x^Sc3ldj*WkDymK>YciSWF}n2cZ8bCnR%Q+h1dv|O`AOAgjiPq-Iz^!Bu(9< z=i4hb=|8B%cIr!4jPNph<|FzTnf~V1+EKUNda^xoyS^04jlKHkD*b(zo?y$*>xXnI zeHFy?>8tvq@RWRAAFR{$$Miz2u4ZaATo`EQM|w3W-++n=j_X4e`|U6EUnTo*Kj<4$ z=ZPSdAmg%zDdJXGU|&fu=?z*i@UVLex0Laikb?I5mRx~!ZwT$}f&XI-jKI;AXbHOB?gNB zV5MLI(67lxoFh+cfs9pbSMW>i`D`!`p7)=ne?-1J%CZvW|(hH@Tty zs)pLDsxW}{!OZtvRyJQ{{+gy481(82xG8{1IYkXCSGET7>EI zuK#tiwV!7t)BHSF$~;G0d`7l@#h z%9*4il3IzzDZ|OdAEXzN6vv;Ik8>{*VaX^p-bjfS>1Pqg0s1-FNOX%VhZJxKIzYWs zj3g(~nfD+bGr@@Gp)6C3xS^uV?rv!MXECiK)OEF$Z+axGt@Ys2`FcX z6P=H94ebFcFpUD&+Ehmbe%dsA{;+^IXz)n}dvF({MdGe=Pj)qy+LOB(-4umKBcQK3 z8o8AJEo`B)dKuq!%`k^IR8*Rk6%d^GEei9(F(XHCON{X2ZD>Te7kJCSwW*~#n|riO zDKhNNy^R&RI0uvzh?_EuKXH#$>^uh%Sclh_d`h1VG%~zmy?$Bp69|E}4aAf2d4mkg zHSkua`9}vC4@KLLPBzBP=BGvDn30(%N>r8H4%))~%BDKF``0!!3#y{w$BY!`i1xDO z;>*=v+c5PkAP_#ZsC{^DIQBTWXu>%lC__w8dEFk z>MBB&0{$7v@{4uvl!$Xoq{ujH0!7-nCr)Jje!fI< zj5Ccy-CYrhPS4JoB?qyX9WbKTY1(^6w89f9^|%r53{4E>KIMvYemlb+7Z@gX)^NX0 zr{6OYMV#H~AnJ$$SFGLrePgr17uAPf8toB8*Z9il?8+^0*4^r_jC-U%KE%b@u4@Z(n=;{@)30A8J7qS^JI!Q%URn`S{^JKa5ZlMuPrUro9*U76a&E03p6{` zn}I)TQ@vgB=hakip=;5VPCKTU-mm_w9fWr5qY=M(47*>3w;mUHKJ&JxQ|-N$UD3hY zq}ZqCc=x;PDS6(VxK*%RO|ZKbc$dr6Z@%{f`*?Tn7#DrRg|)^)pVw|zgPZ7GC8| zvA?^@`$Bttd0w<5b*xzJjdKLDEbBGSIa%GThDLA|;p88b1KyOZEp+-$Z&D18lleQC zqm;ke+tbx?zC#iJSnXZ+R}}HE-QzCredp1>NL->h^gM>~w>J^7=G*7J;S~R-mr=`G z-VQYUO|O^6zli}8pR3;VrrJB-^nNS(`26r#}t<0 z%i!PLQhaG$1@Af`;oW-l(e3mxzyL3GSkfsA1yk%m)37-bwYvJD8nzXb$2;+8^gj1Pl5X^)`LEu9M@PX?Vf({V9Xs3v-bT z)!N{T`7l+?@}&xcM#(CtE)qh1^4^scfeeMSm=larV>wP{?gc)$YFKeuGPC|CkI^R9v z`tr-VISYY~ZuQ0SKKy5^)2G;N4jC11!vw!V72ACA3J<+X<~Cm<5>{>Vb#v{%#Ay@a zf7ktq8Z*}3^O)~ugW7#(bfSGnd|hbGL0=T5?DHksZ|(KPbzSkPZ!#VE#y7%V_l>WE zE<+)0KXckwCwse2qi$$X>la^6!dj> zwux4r#}-m;C+4>cd$1>6t!QnaJtYx+=wYPxIAU3WQJvhPxs@4~f_0mE@K?CAGKDvcV>!sxn@aGYHCj1NJA1~9xCeHl|_ZkpRQ zmgUOOBhklW*@YRo;gu|j8e3S{Xg&$0F$=ma!k;dD_J{n z&7pJxu0`-k2@M9BIr1d zKD&hZY28Gox5H4LHO#bcBFlBav@-B3Z9Hq|G7P(K8M_IK*gjCs7RYpT8%uJ*3b21P zmc_))jH!ZJ>6Ya{|9T}`LAPzhWwO6lF{0^P5OL|r6f7Ge&oM{7Do(ml-Lw z!diz~1T!rQUQb2LMa+vqcQvrC*{H;sjI8=U0LQ?q9;!fooWuXwN34)VOJwA zP>yN*{qR`RSf($q0QsmCPz9gs)zjGfvAi*XOJlrAg2}(Hk#^(vZQw78ll9(o#dLvs@j@*9)pZVH-f31G4~oJ&1Riw z=xjEKmd*yVA9OW~lyeG8=~Myk2#mT8%V6`>EU{f_K97m#gnoG z`qixH%))Z%go0KCxS_;*dHiZNgtD(;7r0Ba5n`u^uAR@~L-lz}Co~6_IL)6AqULq` zk%|`as|XP4u-gO=O+8h7|%yVG*#18-v5=qEFwW0D|p&Jr{$t^+rex!0MsC z^H@8&d>-qsA;^?DawLd!A&ZGdO>LHz2<~JSueh0YK=7=DWxys@3`Z%NeWJ{TduY$W z(^Fu+b3QX2!1ILHC!LxH0U(Fcu4C;Th{o$!nlPMza2n6O9654VP9be=07(e6k2GK& zzPpjdIzzPvI2&ohjUa;wH?Uaz{tDf4^7zf*uhs_JBYOJ94WL&4jhLVh76zJKQRzx@ zNU`E}?Ax#02rA>-ym36ok=ed2v+>_dZ~ctF5H+<$AoBDFGrEm7OP?rQ}J%H&ht%O8rvMMqu;g zE(iryCoUxepE!(B=i6BKj!s3x>hoH_!kTgWuDYR?2dfQL$v1|4nr2I}5qxI|?F!Z4 z9%5Kx9X1@40kAN5R-lZGOp3UP6}!;w^|!NL*^cqHS#YQ`f{B!7J8ikB3Y*FFDzOIQ zXzEQYA{tF^a#Gul;_kn*{xXKZj$Ot&BSeB2xgh7G^8Q*!XJ0wkgnLF~Y9O>dx0{92 z`72o$x@sl36?nytl?WOOZeUQ{DwfA(vh&r8Mj?JJ-MWf((1wlSJl4Q%MmC;O_kqBA z-^t?L0j@LgPBzFjYz)o4lf}^PJ6TUZ=L;Dou9-Gf@vyJKYfd`ltY+C#2CZKU+GtqK zd<$88qPiS<7=xJ2|0)}BWjE#85tT)*FA()1mmT%bmr z^Bs^VzumziS=YKuJ|zJ{J-GurP1qCcbBvEfv?i^cmh5HN;c znVZ~D+t7p{j8A~-1>#-1@aqWgI4Vn|geP&z`Ti|jlkbgRAntuzkbmWqkX!F~k`1L- z5hIr%DQGKpGe5sJUyxrwYnxaPx^y?Bo9lN2aC8kW+F(_dP`f>B81G~09#-bUs0*=V z-t)LZ$;UimFY8K!_Ogp<^=>q{S>S8 zWd!3rd|21yI%VT$p;3^O2KK}P5D!}*XO zuy#5rST1cOG|p{qJOEM=?BL|n*v5Z2fL$u|X>hc4aDpkwZ5@7E|2$@O|MQUIuoHl7 zJ5Cgm@ghrC#R_ufKqMY|k^SZk^2xD?rPTXn zmV`(&B0}WDFJqf`f&ou%kBjG46 z(&v}#LAt`d868!4$$rbtZ2;C9jOOb4wl2P*kP!i`|5(|o z;V>x_K9!{e-6U#d>sp=)$6vgxJW^N<7Rc69NE1#FXACZX?&{286)AxM6~BWcDLx#e zc+c_Pqb%EXUXNDIrrqus3rB4Kts|Fl0H;=^h2C4z8Q*ZS)YB##?pX~a31BKZV@6!gvE*HcehP`hn+94V3lKv znknLANH@JdX2}BS+E{Sxz0b%|wDw~b%XpXg_&ecjj(p4p3aA}V%AM(oPguJc4$ykT z#B7)WEhS>LJbZ%1dcb;%nt4kP?Zq15jkNurvd3KshLN9dp3~pohQEKdWDooj>j|rl zuWM@liq+bmeZ^$O_I%59sUMG2ggtC}ZA&v8dU;en+!78Zh$!Xo7lgRagIG*RA8^&w z^im@juNFQL_GU<-{$XXiUh+AMF|U3C4xW9%N3IQ z|8@;$*DHAMIXi@7#hKB=zgpE8pS{C48QLdL2^s))Y^gnPWz*1iObJJ@^Vu6%k~^|`D6aOusD9D_2=?(o9!|< z`J(-;RPz_ZMsE$qCiiS2i|GPL(0y=WP7Y)>vNaM;yM>V4Z^0N|zt-XY%i;R&pw( zWGRs7&`c@KlKi<&EiXy_K?0@S%jI9{DyW8W0oEfhlHf1SCu)l46jff6o{t%W4`!C2 zE^#QzraIL>ky12Nu-4;8#3Hx9N1IRR2M6%a?)16aA4XF(gr34@7VXgdLqc%jRP6D0 z4SianUmg+zP@wy-agBuJsQZUfz2UzgVnR9>CBf!&?gySZ_#&$C`b}*@`rwO@NU4%P z8G)AlUiXCbVZ+l)X|LDc$-x@y^AF>{vh1Zk{|JeWF@Hh)1!FEYvECb}!#@M~X7KY2 zuH#%)WaGJxIN5$S+CNjvUcOs+KmON$aoL4AKmn=>2qmLRzTta09ajBOERgoS6%Lt% fzD)KfJFZTVk~IXTcYmDpDt(shH}S`t;!pZtxyG#a diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index e3186aad2f94af2787c9755f216463ad63167a13..22dc04dd3f1b0bacd8b51d88297ccddb621f23d6 100644 GIT binary patch delta 3638 zcmbtXeNa@_73W>{z1<}cSiqI9WdT7JSe8X#`KDUF1QbaFNE2aMKH_qb4_Q!AU|nqz zBP)~SY#I~B#8#S4i_)0QG-9od?WCP#>Nt*Rn%Fq0{i7YnkTx@RTAM%YJ@4(VJj6d* znc?ic=bYcUzkAO8dN0kAFMmwekRKXhqF0GNHWgAi{?-`Z%l??nsv~m z(ZOAFEnG}7z*0yE%w+5NM7x%{;Ooq&mkm6aALHRlwt-88ucOvLnCT$*4$PR+;qnFv ztj?3b9XYAIo&it$fp6v*;8v~{Zsd5m8}O3Z2-ow^0L`s{_X~9JL2fE2ELymiI|qxF z$6#TD9{y}O1N-xe;9{W;uH+>HU!;v}#y*XNKC!P9r>hK&2O&VarAqE1g%O1tI@5 z>EPkr{Pl3Fiwb#S8~9sX0Qg*eNb+zW8tvYwlUo0d}Uc_yR4T$oB;;i0LZ z5RMh*@@XtnhtYs3{!?KlmnNn+zUUnHE__^+#r<5wz7xQ{FJVs?m-6cwcEOKTl;ptG zGA-1VIJqz2!;&QKrii=|K;D*+9XTOzvNVoQXXwxT=s%XOgHz>Nh$!nJAp%^DP7E8f zucs=3WlKvH0{o!N%w>qw{#KSw)B;45TgbWxJoV@q1JmU(T&C!~SYAhp1lXOh7UC=7 zIU^KS*wjr@*hc1DVN`FCdUb;LlZs7*SOstFrq_cxEBvB0JGvc>>2wGFWHcxlnK}Xf zS(O*w!8C!Y?h&A{+C}yWaK5^pI7M18Lj*X+D--EH<~r78*SJZN!Sk%gx8>}+Sulp! zR%0YD$`HY*p0CMPAP_E9C9Pl)#(<+DA_kK*g4~c7`{C@tB3r1b-JEv@H39D7%Y4SV z=w@d0^S2AQBn@<{0GDb@)EA|I7sT}Fed$?T9$rjFB#Y7^c(-jn#Bm=%*|u+yYyN2{ z3H=C4>UB)dk{BgVVl*SN=sjM4i6dVjKo3h#tb-F@X;Z3J9B5_vT!x6CNe2=c%xMufK6U6pM2Iz zrl8#ZQ}uBv)c2LR9af~vBu6ZH6>aIkWDbY>f74}_hwKo*`}868qD11o)ktiTBbK~J zcH{+<4<3a?r9337S!HJzr@k(+_;fWEEpo_`_usa8f&BGRShUGQG8S2VpL6POBo=p9 zV=*L$EP0>muj7eQ^#}!V$U`EF-A6fff=XOrajI38#bG&Q$*Xe2Du^M#qWXW|MbF7Y zF0h>s9ku2t`6&kI1z+tw8@ip*qu)jGvoVsX`M=IcowJ<%Iq&_7@KZ&Wfa6g0Fley43p$YTd zP^Z{DPM|GOyc^`(AC0ex#$-&?t5PV>a%woiMmE3WaBCu!u)P^RnYH$sj~$(34gaM< zufY?ODdf`!sQp2r_7_I&+kRSeY~-sCqlL!HqA~8_wBTZu9)35aiFz5y1j>t3a>4DX zb;vcsIk%=}8Aa({qYWzf&}kwqD!A+HbG9>wb`Q0(pZa_3k9M+_o8Qtm*zfSrF4lR0 zb~AZ|_K59XCL4n2Gh$~alXz1ms@b|rW}=t&F%?Z?&HHPwku4IA5!0Zy%VuATZ|qq1 z-i~kg=;;6h*z7viO=ABk?c$B%Tbp5OES>oF5lg3~A*j(qy-TB3v2ZwD6}#4AV8XRg z^T7Iq%Pu3?A;34Tr^pt;yZz8CN1jo8?;OtOnA)59>{M{^JbQxD!zeyMv4DbOJAi(M ztpsc-P!yohqo_hrBzS*wL`UG%(a1FMi=%tgL!VTz+^zP;_s}W${HV_P6LiqvN5Ed& z&cWUh>t1``Xy2fRevAg+vv#m|bnnnezlYvKWr+0F#cvG{&19VXZh=u-P#Gb)-T$WX z(1WOtlJq^j1Gd4Q5UXQoY^0k7numdDy#;6N4)r~zhj#UKk9)+qyUECIk2rTXaj<28 zb9XDchlZKGN`PNaXLL?soe!YcgTjGgBdZ84$11zkgSLU*(edG42Yyje^llVA8%3|i ZF?%fP#Q^wJlLFvNL<~S(-UfFK_g}7hFJ%A# delta 2905 zcmbW3dr(wW7{IxAxyvq(3>Oy`*p}A_$eZO20t+PZlt@!aau%i5<0dNLt9UN5B1GZ0 zjTMQYBvE2x>kLg+YLJpzjgwI(zI*QX{GIQf$KL2+ z+uB*KmV2l1%>$fAFx&}iWg@^39t>B4d*Ls8dnk!eL4Sx6!W}r+6A=KSP&tf5)Ivw7 z1Lz}_FcjJgk!nBK5vGK4bpTuplfwbEnK43XR4{xRu7v$jD)=Kj6S5QMKyq|4r_#wu z9n?i9LAzQGKSg)5pV`8um;h+Pbkunul6TIJjpMw~c^^8v!Jb%e#tTMev*338K6cm^ zx)NqXTT~xZB*w!V(MmXx=nr2-%fT*b7bAh5q}k9F(+8X9MnGdMa?YItgRyduB!AAR z;b?LY9E|ISd-gM7XYx!qp5g=_#4BMmB@Bk+jHSgeyC3)Luy}4r zSHSNYIqXf(V)`u_Nrne}o#qH(881qIr7Rq03Ao};tTYOHbZ9)$KK&Tgetvr6}I=NV=5OYA~VFGt@noJTn7nNR+i|T;RvUI{@kZ{uOmiJSK0<4 zffEwkrkUNSZ4@IdNcdoMA`2*}^PW=&izj2xnB-GgLXKmU6H^<)mw2B?G$2zs0r?kxRS>S|}nG|P@I|HoPuDvZ#ZM~nSM zj4!mU&X`8G!iCv}Iq1~ZOXK+ZF;mso2qX07$`ZAR$(UySbYV99TH&vhFw!MFz@n)D z779c3=BuxMB4$db39wk04FTNBE-=!~Jix}O0Lp|RdUNL5EDo3b^u9p3FdGHfu#J(n z^8oKn1z-?{=*@RGDr}h^3h?az-!P5BY$3RcAtx_fCOn*gdcpas1CD2rjGUw57dv>j zy4B+nj_E%9jv`MS!aFeF7$V7FL5;7=AhrFw*ZCu`xhB))*i>iZwVLE`-hij2;7sG5 zd@wGk&5&{uOBs=bZXB2KlhKAMtyy5CcCokMR&b|gJY992*3*`_Ls6ZQafgj{K8zn| z4Y3j*KCueg)_cJ%7gr_}&KV*gz24bz{LWb8N^}%gZ&C^!nS09HbLPDY=d+ z(v8D^S6)8ec?`0>jnk5e$PGI<-6)fcue=sISIZw3%K(ohP^5=k2FOws5ZMcSBpH_aS;;(6$h#4pkjcEe$Me7l0W$RX%NH0~|k1NYol$yvHs(G5%lvijg zN|&wIuES0}vW5L^3fnoD9d4y~#FB+LYH{Qp*Ocj3F5hG#wN%HhTWcbetc5MdKuXqP zyS!`-+6OpLZV&VrqdmM&#a$}?rs6Pd@s|?NZkI(;d%ne%Z_(#h>J<1-iVqpWe0&JK Oz%c}cjd}0(dCWi6!FXi= diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo index 40be140..786d07b 100644 --- a/docs/_build/html/.buildinfo +++ b/docs/_build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: dcb8f591e3f2a6b0305969518a9bbbfa +config: 4e5bdc43b90f67f553e8e6fd3e958334 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js index cf359c0..a7f754b 100644 --- a/docs/_build/html/_static/documentation_options.js +++ b/docs/_build/html/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.1', + VERSION: '1.0', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index 8bc1fed..524bd3c 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -3,7 +3,7 @@ - Index — stockpyl 0.1 documentation + Index — stockpyl 1.0 documentation @@ -119,6 +119,14 @@

A